Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.

Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the author.

SKK
***

(最終更新日: $Date: 2000-11-08 01:50:14 $)

これは SKK マニュアル 第 1.5 版です。 SKK のバージョン 10.62 に対応しています。

はじめに
****

SKK version 10 は高速で効率的な日本語入力環境を提供するシステムです。 GNU General Public License に従ったフリー・ソフトウェアとして配布されます。

SKK 10 が動作を保証する Emacsen のバージョンは下記の通りです。

  - Emacs 19.28 以降をベースとした Mule 2.3 (Mule for Windows 1.21, 1.22 を含む)

  - Emacs 20.2 以降 (Meadow 1.00 以降 を含む)

  - Mule 機能付きでコンパイルされた XEmacs 20.4 以降

SKK は、Simple Kana to Kanji conversion program にちなんで名付けられました。

主な特徴は、次の通りです。

  * ローマ字入力による、文法的知識を用いない高速変換可能な日本語入力/変換。

  * 辞書に登録されていない単語の登録が簡単。

  * 個人辞書への単語の自動登録による変換の高ヒット。

  * マイナーモードとして実装されているので、メジャーモードにほとんど影響を与えない。つまり、Emacs との親和性が高い。

  * SKK 本体(Emacs Lisp) と辞書のみで動作(サーバは必須ではない)。辞書サーバがダウンしていても使用できる。

  * 辞書サーバを使うことで、Emacs の SKK 使用メモリを削減可能。

  * ディスク容量に応じて選べる辞書。

  * SKK と同様の操作で行える日本語インクリメンタルサーチ。

  * Emacs Lisp で書かれたプログラムを変換候補にできる。

  * 個人の設定により、ローマ字入力の代わりに T-Code、TUT-code による入力も可能。

インストール
******

APEL のインストール
============

SKK 10 は種々の Emacsen での動作を可能とするため APEL (A Portable Emacs Library) を使用します。SKK 10 は APEL 9.22 での動作を確認していますが、 APEL は Emacs/XEmacs のバージョンアップに合わせて日進月歩なので、できるだけ新しいバージョンをインストールすることをお勧めします。

     ftp://ftp.jpl.org/pub/elisp/apel/

もしくは

     ftp://ftp.m17n.org/pub/mule/apel/

より入手できます。

SKK のインストールをする前に APEL をインストールして下さい。

     See APEL.

SKK のインストール
===========

APEL をインストールしたら、 SKK をインストールしましょう。ここでは、 UNIX 上で make コマンドが用意されている場合を想定しています (Windows 環境では、make.bat を使用することにより、同様の操作でインストールできます。 READMEs/README.win ファイルを参照して下さい。cygwin 環境をインストールされている方は make コマンドが使用できるので、ここの説明がそのまま当てはまります。)。

まず、tar と gzip コマンドを使用して、 SKK を書庫 (skk-VERSION.tar.gz) から取り出します。

     % gzip -cd skk-VERSION.tar.gz | tar xvf -

SKK のトップディレクトリ(ChangeLog や Makefile のあるディレクトリ)をカレントディレクトリにします。

     % make what-where

と実行すると、どのディレクトリにインストールされるか確認できます。ここで、SKK のインストール先ディレクトリが表示されない場合は、APEL の PATH を SKK-CFG に記入します。SKK-CFG に設定方法が書いてあります。また、インストール先ディレクトリを変更したい場合も、SKK-CFG ファイルを編集することにより指定できます。

つぎにスーパーユーザになって、

     % make install

とすると、実際にインストールされます。特定の Emacs を指定する場合は、

     % make install EMACS=mule

とすると指定できます。

XEmacs でパッケージとしてインストールする場合は、

     % make what-where-package

を実行すると、パッケージのインストール先が表示されます。

     % make install-packege

を実行すると実際にインストールします。

辞書の入手
=====

SKK を使用するには、辞書が必要です。辞書は、 SKK 本体(elisp) には付属しません。別途、入手します。 CVS (see CVSによるSKKの取得)もしくは、 WWW (http://openlab.ring.gr.jp/skk/dic.html) から入手できます。

用意されている辞書は、従来からの

  - SKK-JISYO.S : S 辞書(主に単漢字が登録。最小限必要な語を収録)

  - SKK-JISYO.M : M 辞書(普通に使う分には足りる程度)

  - SKK-JISYO.L : L 辞書(あらゆる単語を収録)

に加えて、

  - zipcode           : 郵便番号辞書

  - SKK-JISYO.JIS2    : JIS Level 2 辞書

  - SKK-JISYO.public+ : public+ 辞書

  - SKK-JISYO.JIS3_4  : JIS Level 3, 4 辞書

  - SKK-JISYO.edict   : edict 辞書(英和辞書)

  - SKK-JISYO.wrong   : 間違い辞書(S, M, L 辞書に既に登録されていたが、間違いであったので削除された単語を収録)

が用意されています (辞書の著作権について、GPL 2 とは異なるものがあります。辞書ディレクトリの READMEs/committers.txt を参照して下さい)。

はじめの設定
******

SKK を使い始める前に、あなたの ~/.emacs に設定を書かなければなりません。ここではその方法を説明します。

最も基本的な設定
========

以下のように .emacs に書きます。

     (require 'skk-autoloads)
     (global-set-key "\C-x\C-j" 'skk-mode)
     (global-set-key "\C-xj" 'skk-auto-fill-mode)
     (global-set-key "\C-xt" 'skk-tutorial)

ただしXEmacs でパッケージインストールをした場合は、

     (require 'skk-autoloads)

の記述は不要です。

サーバを使わない場合は、更に辞書ファイルを指定する必要があります。

     (setq skk-large-jisyo "/your/path/to/SKK-JISYO.L")

この場合 skk-large-jisyo はEmacsのバッファに取り込んで使用するので、これによりメモリが圧迫されすぎる場合は、上記のSKK-JISYO.L を SKK-JISYO.S または SKK-JISYO.M に変更します。

インクリメント検索の設定
============

以下のように .emacs に書きます。

     (add-hook 'isearch-mode-hook
               (function (lambda ()
                           (and (boundp 'skk-mode) skk-mode
                                (skk-isearch-mode-setup)))))

     (add-hook 'isearch-mode-end-hook
     	  (function
     	   (lambda ()
     	     (and (boundp 'skk-mode) skk-mode (skk-isearch-mode-cleanup))
     	     (and (boundp 'skk-mode-invoked) skk-mode-invoked
     		  (skk-set-cursor-properly)))))

上記の設定では、SKKが起動されているときのみ、付属のインクリメンタルサーチを使用します。常に付属のインクリメンタルサーチを使用したかったら上記の isearch-mode-hook、 isearch-mode-end-hook の設定を下記の設定に変更します。

     (add-hook 'isearch-mode-hook 'skk-isearch-mode-setup)
     (add-hook 'isearch-mode-end-hook
          	  (function (lambda ()
     		      (skk-isearch-mode-cleanup)
     		      (and skk-mode-invoked (skk-set-cursor-properly)))))

入力モードに応じカーソル色を変化させる機能を使わないのであれば isearch-mode-end-hook の値はそれぞれ下記のようになります。

     (add-hook 'isearch-mode-end-hook
     	  (function
     	   (lambda ()
     	     (and (boundp 'skk-mode) skk-mode (skk-isearch-mode-cleanup)))))

     (add-hook 'isearch-mode-end-hook 'skk-isearch-mode-cleanup)

See 入力モードを示すカーソル色に関する設定.

古い設定のチェック
=========

skk-obsolete-check-all-files

     このコマンドは、各個人の設定ファイルの古い設定を調べて、可能な限り新しい設定に書換えます。 SKK 9 と比較して、変数名、関数名が大幅に変更されたので、

          skk-obsolete.el

     をロードし、

          M-x skk-obsolete-check-all-files

     を実行することを強くお勧めします。

辞書サーバを使いたいときの設定
===============

辞書サーバを使いたいときは、.emacsや.skk で以下のように設定します。
 (辞書サーバを使ってみたい場合は)

     see dbskkd-cdb.

を参照してください。

     (setq skk-server-host "hogehoge")
     (setq skk-server-prog "/your/path/to/skkserv")
     (setq skk-server-jisyo "/your/path/to/SKK-JISYO.L")

skk-server-host
     辞書サーバを走らせるホスト名、または IP アドレス。

skk-server-prog
     辞書サーバプログラム(フルパスで指定する)。

skk-server-jisyo
     サーバに渡す辞書(フルパスで指定する)。

この設定は、環境変数を利用して下記のようにすることもできます。

Bシェルの場合 (sh, bash, ksh, zsh など)

          export SKKSERVER=hogehoge
          export SKKSERV=/your/path/to/skkserv
          export SKK_JISYO=/your/path/to/SKK-JISYO.L

Cシェルの場合 (csh, tcsh など)

          setenv SKKSERVER hogehoge
          setenv SKKSERV /your/path/to/skkserv
          setenv SKK_JISYO /your/path/to/SKK-JISYO.L

基本的な使い方
*******

本章では、SKKの基本的な使用方法を説明します。これを読めば、とりあえず SKK を使ってみるには充分です。

SKK を使った入力方法に慣れるには、付属のsee チュートリアルプログラムが最適なので、お試しください。

なお、次章の「便利な応用機能とユーザーオプション」は、興味のある個所のみをピックアップしてお読みになるのがいいでしょう。

起動と終了
=====

SKK モードに入るには C-x C-j、もしくは C-x j とタイプします。マイナーモードの表示には、下記のように かな が追加されます。
 (次の設定をしているときはモードラインの左端に追加されます。)

     (setq skk-status-indicator 'left)

     MULE/7bit----- Buffer-name (Major-mode かな)---

また、カーソルの色が変化します (カラーディスプレイを使用し、カラー表示をサポートしている Window System 下で対応する Emacs を使用している場合。

See 入力モードを示すカーソル色に関する設定.)。

C-x C-j、もしくは C-x j を再度タイプすることで、SKK モードに入る前のモードに戻り、カーソル色も元に戻ります。 (但し、「アスキーモード」を利用すれば SKK モードから抜ける必要はほとんどありません。

See アスキーモード.)

SKKオートフィルモード
------------

C-x j とタイプすれば、SKK モードに入ると同時にオートフィルモード (see Auto Fill (GNU Emacs Manual).) をオンにします。

既にオートフィルモードがオンになっているバッファで C-x jをタイプすると、オートフィルモードは逆にオフになるので注意してください。

バッファの状態にかかわらず強制的にオートフィルモード付で SKK モードに入りたい場合は、M-1 C-x j や C-u C-x j などとタイプし、このコマンドに正の引数を渡します
 (「引数」については、)

     see Arguments (GNU Emacs Manual).

を参照のこと。。

オートフィルモードをオフにし、かつ SKK モードも終了したい場合には M-- C-x j や C-u -1 C-x j などとタイプし、このコマンドに負の引数を渡します。

辞書の保存
-----

C-x C-c で Emacs を終了しようとすると ~/.skk-jisyo に個人辞書の内容を自動的に保存します。

     See 個人辞書.

~/.skk-jisyo.BAK に保存を行なう前の辞書が退避されます。

~/.skk-jisyo や ~/.skk-jisyo.BAK のファイル名を変更したければそれぞれ skk-jisyo や skk-backup-jisyo の値を変更して下さい。

skk-kill-emacs-without-saving-jisyo

     個人辞書を保存せず Emacs を終了させたい場合には、

          M-x skk-kill-emacs-without-saving-jisyo

     とタイプします。

個人辞書の保存動作について更に詳しくは、

     See 個人辞書の保存動作.

を参照してください。

入力モード
=====

SKK モードは、文字種類による 4 種類の「入力モード」と、辞書を用いた変換の状態により 3 つの「変換モード」を持ちます。

入力モードは、文字種別により

  「かなモード」

  「カナモード」

  「全英モード」

  「アスキーモード」

の4種類に分類されます。

入力モードの説明
--------

「かなモード」

       ASCII の小文字をひらがなに変換するモード。

       マイナーモードの表示: かな

       カーソル色: 赤系

「カナモード」

       ASCII 小文字をカタカナに変換するモード。

       マイナーモードの表示: カナ

       カーソル色: 緑系

「全英モード」

       ASCII 小文字、大文字を全角アルファベットに変換するモード。

       マイナーモードの表示: 全英

       カーソル色: 黄系

「アスキーモード」

       文字変換を行なわないモード。入力されたキーは C-j を除いて通常のEmacsのコマンドとして解釈される。

       マイナーモードの表示: SKK

       カーソル色: 背景によりアイボリーかグレイ。

入力モードに伴なうカーソル色の変更方法については、

See 入力モードを示すカーソル色に関する設定.

を参照してください。

入力モードを切り替えるキー
-------------

q
     「かなモード」、「カナモード」間をトグルする。

l
     「かなモード」または「カナモード」から「アスキーモード」へ。

L
     「かなモード」または「カナモード」から「全英モード」へ。

C-j
     「アスキーモード」または「全英モード」から「かなモード」へ。

実際にはカナモードや全英モードで長時間入力を続けることはほとんどないので、かなモードのままでカナ文字や全英文字を入力する便法が用意されています。

     See 入力モードの一時変更.

変換モード
=====

変換モードは、次の 3 種類のいずれかです。

「■モード(確定入力モード)」

     あるキー入力に対応する文字列を、辞書を用いた文字変換を行なわずに直接バッファへ入力するモード。入力モードに応じてローマ字からひらがな、ローマ字からカタカナ、あるいはアスキー文字から全角アルファベットへの文字変換を行なう。

「▽モード」

     辞書変換の対象となる文字列、「見出し語」を入力するモード。

「▼モード」

     見出し語について、辞書変換を行うモード。

また、▽モードの変種としてSKK abbrev modeがあり、▼モードのサブモードとして、「辞書登録モード」があります。

■モード
----

確定入力モードを「■モード」と呼びます。■モードでは、あるキー入力に対応した特定の文字列への変換を行なうだけで、辞書変換は行いません。ASCII 文字列から、入力モードに応じて、ひらがな、カタカナ、あるいは全角アルファベットへの文字変換を行ないます。変換を行なうカレントバッファにこのモード特有のマークは表示されません。

かなモード、カナモードで、かつ ■モードである場合、ディフォルトの入力方法はいわゆるローマ字入力です。訓令式、ヘボン式のどちらによっても入力することができます。主な注意点を以下に説明します。

  * んは n n または n ' で入力する。直後に n、 y 以外の子音が続くときは n だけで入力できる。

  * 促音は、c h o t t o => ちょっと、m o p p a r a => もっぱらのように次の子音を重ねて入力する。

  * 促音や拗音(ひらがなの小文字)を単独で入力するときは、x a => ぁ、x y a => ゃなどのように x を用いる。

  * 長音には、-を用いる。-=>ー。

▽モード
----

「▽モード」では、辞書変換の対象となる文字列を入力します。かなモード、もしくはカナモード (see かなモード、カナモード.) で、かつ、■モードであるときに、キー入力を大文字で開始することで、▽モードに入ります。例えば、

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

のようにタイプすることで、▽モードに入り、続けて辞書変換の対象となる文字列、「見出し語」を入力してゆくことができます。▽マークは、▽モードであるという表示ですが、見出し語開始点を示す表示でもあります。

後から▽モードに入る方法
............

K の文字を大文字で入力し忘れた場合は、辞書変換の対象としたい文字列の先頭までポイント (see ポイント (GNU Emacs Manual).)を戻し Qをタイプすることで▽モードに入ることができます。例えば、下記のように操作します (-!- の地点にカーソルがあります)。

     k a n j i

     ------ Buffer: foo ------
     かんじ-!-
     ------ Buffer: foo ------

     C-u 3 C-b, Q

     ------ Buffer: foo ------
     ▽-!-かんじ
     ------ Buffer: foo ------

     C-e

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

7がつ24にち のように大文字から始めることができない文字列についても、 ▽モードにしたい場合は Q をタイプし、▽モードにしてから 7がつ24にち の文字列を入力します。なお、▽モードでは、文字列の間に空白を含めることはできません (これは、辞書の見出し語に空白を含めることができない制限からきています。)。

▽モードを抜ける方法
..........

誤って▽モードに入ってしまったときは C-j とタイプし、■モードに戻るか C-g とタイプし▽モードで辞書変換と対象となっている文字列を消去するかの 2 通りの処理の方法があります。具体例を下記に示します。

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

     C-j

     ------ Buffer: foo ------
     かんじ
     ------ Buffer: foo ------

あるいは、

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

     C-g

     ------ Buffer: foo ------

     ------ Buffer: foo ------

▼モード
----

「▼モード」 では、▽モードで入力した見出し語を、辞書に従い変換する作業を行ないます。▽モードで見出し語を入力した後 SPC をタイプすることで▼モードに入ります。▽ マークから SPC をタイプしたときのポイントまでの文字列が見出し語として確定され、 ▽ マークは ▼ マークで置き換えられ、この文字列が辞書の中で検索されます。

送り仮名が無い場合
.........

仮に、辞書に

     かんじ /漢字/幹事/

というエントリ (本マニュアルでは、見出し語と候補群を合わせた一行を「エントリ」と呼びます。詳細は、送りありエントリと送りなしエントリを参照してください。)を含むとして、例を示します。

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼漢字-!-
     ------ Buffer: foo ------

この例では、▽モードにおける ▽ マークからポイントまでの間の文字列かんじ を辞書変換の対象文字列として確定し、それについて辞書内での検索を行なっています。実際の変換動作では、候補部分がハイライト表示されます (ハイライト表示はFSF EmacsのOverlays、XEmacs のextentの機能を使用しています。)。

漢字 が求める語である場合は C-j をタイプすれば、この変換が確定します。ハイライト表示も ▼ マークも消えます。

また C-j をタイプせずに、新たな確定入力を続けて行なうか、または新たな変換を開始すると、直前の変換は自動的に確定されます。これを 「暗黙の確定」 と呼んでいます。副作用として確定を伴なうキーは、印字可能な文字全てと RET です。ただし、

     See 暗黙の確定のタイミング.

を参照してください。

次候補・前候補
.......

求めるものがすぐに出なければ、更に続けて SPC をタイプすることで、次候補を検索します。

     ------ Buffer: foo ------
     ▼漢字
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼幹事
     ------ Buffer: foo ------

候補が 5 つ以上あるときは 5 番目以降の候補は 7 つずつまとめてエコーエリアに表示されます。例えば、辞書が

     きょ /距/巨/居/裾/嘘/拒/拠/虚/挙/許/渠/据/去/

というエントリを含むときに K y o の後に SPC を 5 回続けて打てば、

     -------------------- Echo Area --------------------
     A:嘘  S:拒  D:拠  F:虚  J:挙  K:許  L:渠  [残り 2]
     -------------------- Echo Area --------------------

がエコーエリア (エコーエリアとミニバッファは視覚的には同一の場所にありますが、エコーエリアが単にユーザーへのメッセージを表示するのみであるのに対し、ミニバッファは独立のバッファとして機能する点が違います。)に表示されます。ここで仮に許 を選択したければ、 k を入力します。

A, S, D, F, J, K, L の各文字は、押し易さを考慮してキーボードのホームポジションから横方向に一直線に配置されているキーが選ばれています。また、候補の選択のために押すキーは、大文字、小文字のいずれでも構いません。候補の選択に用いるキーの変更については、

     See 候補の選択に用いるキー.

を参照してください。

SPC を連打してしまい、誤って求める候補を通過してしまったときは x により前候補/前候補群に戻ることができます (x は小文字で入力する必要があります)。

候補を次々と探しても求めるものがなければ、自動的に辞書登録モードになります (辞書登録モードは▼モードのサブモードです) 。辞書登録モードにて説明します。

送り仮名が有る場合
.........

次に送り仮名のある単語について説明します。

動く を変換により求めたいときは U g o K u のように、まず ▽ モード に入るために U を大文字で入力し、次に送り仮名の開始を SKK に教えるために K を大文字で入力します。送り仮名の K をタイプした時点で SPC をタイプすることなく、▼モード に入り辞書変換が行なわれます。

送り仮名の入力時、ローマ字プレフィックスが挿入された瞬間に、プレフィックスの直前に * を一瞬挿入し、送り仮名の開始時点を明示します。プレフィックスに続くキー入力で、かな文字が完成した時点で*は消えます。

キー入力を分解して追いながらもう少し詳しく説明します。

     U g o

     ------ Buffer: foo ------
     ▽うご
     ------ Buffer: foo ------

     K

     ------ Buffer: foo ------
     ▽うご*k
     ------ Buffer: foo ------

     u

     ------ Buffer: foo ------
     ▼動く
     ------ Buffer: foo ------

SKK ではこのように、送り仮名の開始地点をユーザーが明示的に入力するので、システム側で送り仮名を分解する必要がありません。これにより、高速でヒット効率が高い変換が可能になります。

     See 送り仮名の自動処理.

但しサ変動詞の変換では、サ変動詞の語幹となる名詞を 「送りなし変換」 (詳細は、送り仮名が無い場合を参照してください。) として変換し、その後 する を■モードで入力した方が効率が良くなります。

     See サ変動詞の入力.

辞書登録モード
-------

SKK には独立の辞書登録モードはありません。その代わり、辞書にない単語についての変換を行なった場合に、自動的に辞書登録モードに入ります。例えば辞書に

     へんかんちゅう /変換中/

のエントリがない場合に、変換中 を入力しようとして、H e n k a n ty u u SPC とタイプすると、下記のように、カレントバッファは ▼モード のまま へんかんちゅう に対して変換ができない状態で休止し、同時にミニバッファに へんかんちゅう というプロンプトが表示されます。

     ------ Buffer: foo ------
     ▼へんかんちゅう
     ------ Buffer: foo ------

     ------ Minibuffer -------
     へんかんちゅう-!-
     ------ Minibuffer -------

送り仮名が無い場合の辞書登録
..............

辞書登録モードでは、入力はミニバッファに対して行われます。仮に辞書に

     へんかん /変換/
     ちゅう /中/

のようなエントリがあるとして、ミニバッファで変換中の文字列を変換と中とに分けて作ります。

     H e n k a n SPCT y u u SPC

     ------ Minibuffer -------
     へんかんちゅう 変換▼中
     ------ Minibuffer -------

ここで RET をタイプすれば 変換中 が個人辞書に登録され、辞書登録モードは終了します (ここでも暗黙の確定が行なわれるので C-j をタイプする必要はありません。ただし、▼モードでのRET を参照してください。)。同時に、変換を行なっているカレントバッファには、変換中 が挿入され確定されます。

     See 個人辞書.

辞書登録モードを抜けたいときは C-g をタイプするか、または何も登録せず RET をタイプすると▽モードに戻ります。

送り仮名が有る場合の辞書登録
..............

送り仮名のある単語の登録では、ミニバッファで作る候補に送り仮名そのものを登録しないように注意しなければいけません。仮に辞書に

     うごk /動/

というエントリがないとして、例を挙げて説明します。

     U g o K u

     ------ Buffer: foo ------
     ▼うごく
     ------ Buffer: foo ------

     ------ Minibuffer -------
     うご*く-!-
     ------ Minibuffer -------

ミニバッファで辞書登録すべき文字列は、動 だけで、送り仮名のく は含めてはいけません。 動く を登録してしまうと、次に U g o K u とタイプしたときに出力される候補が 動くく になってしまいます。

     D o u SPC

     ------ Minibuffer -------
     うご*く 動-!-
     ------ Minibuffer -------

     RET

     ------ Buffer: foo ------
     動く
     ------ Buffer: foo ------

サ変動詞の辞書登録に関する注意,
................

サ変動詞 (名詞の後に する を付けた形で構成される動詞) については、する を送り仮名とした送りあり変換 (送り仮名を伴なう変換。詳しくは、送り仮名が有る場合を参照してください。)をしないで、運動 と する と分けて入力した方が効率が良くなります (名詞とそのサ変動詞とを別々に辞書に持つと空間的な効率が悪いので、基本的に、辞書がサ変動詞を送りありとして意識した作りとしていません。そのため、する を送り仮名とした送りあり変換では、辞書に候補がなく辞書登録モードに入ってしまう可能性が高いので、名詞として分解して入力することをお勧めします。一方で、このように名詞に分解して入力することで、サ変動詞になり得ない名詞が候補として出てくることもあるので (例えば 孝行する という変換を行ないたい場合に 高校 が出てくるなど)、候補の絞り込みという点では必ずしも効率が良くありません。将来のバージョンにおいてこの点を改善する方向で検討しています。詳しくは、拡張アイディア を参照してください。)。

例えば 運動する は U n d o u SPC s u r u とタイプすることにより入力できます。名詞から作られる形容詞等も同様です。

再帰的辞書登録
.......

ミニバッファを再帰的に使い辞書登録を再帰的に行なうことができます。

仮に辞書に

     さいきてき /再帰的/
     さいき /再帰/

のようなエントリがなく、かつ

     さい /再/
     き /帰/
     てき /的/

のようなエントリがあるとします。

ここで S a i k i t e k i SPC とタイプすると、文字列 さいきてき に対する候補を見つけられないので、ミニバッファに さいきてき というプロンプトを表示して辞書登録モードに入ります。

さいきてき に対する辞書エントリを作るため S a i k i SPC とタイプすると、更にこの候補も見つけられないので、ミニバッファにさいき というプロンプトを表示して、再帰的に さいき の辞書登録モードに入るます。

S a i SPCK i SPCとタイプすると、ミニバッファは、

     ------ Minibuffer -------
     さいき 再▼帰
     ------ Minibuffer -------

となります。ここで RET をタイプすると、個人辞書には

     さいき /再帰/

というエントリが登録され、ミニバッファは さいきてき の辞書登録モードに戻り、プロンプトは さいきてき となります。

今度は 再帰 が変換可能なので S a i k i SPCT e k i SPC とタイプすると、

     ------ Minibuffer -------
     さいきてき 再帰▼的
     ------ Minibuffer -------

となります。ここで RET をタイプすることで、さいきてき の辞書登録モードから抜け、個人辞書に

     さいきてき /再帰的/

というエントリが登録されます。カレントバッファのポイントには、再帰的が挿入されます。

改行文字を含む辞書登録
...........

改行文字を含む文字列を辞書に登録するには、辞書登録モードで改行文字を C-q C-j により入力します。例えば、

     〒980
     仙台市青葉区片平2-1-1
     東北大学電気通信研究所

を辞書に登録するには、辞書登録モードで、

     〒980,
     C-q C-j,
     仙台市青葉区片平2-1-1,
     C-q C-j,
     東北大学電気通信研究所,
     RET

と入力します。

インクリメンタル・サーチ
============

SKK では、専用のインクリメンタル・サーチプログラムを Emacs 添付の isearch.el のラッパーとして実装しているため、日本語の文字列についてのインクリメンタル・サーチをアスキー文字と同様の操作で行なうことができます。

skk-isearchの操作性
---------------

大部分の動作は、オリジナルのインクリメンタル・サーチのもののままですから、オリジナルのインクリメンタル・サーチのコマンド (M-y の isearch-yank-kill や M-p の isearch-ring-retreat, M-n の isearch-ring-advance など)やユーザー変数でのカスタマイズ (search-highlight など)もそのまま利用できます。

オリジナルのインクリメンタル・サーチについては、

     See Incremental Search (GNU Emacs Manual).

を参照してください。

インクリメンタル・サーチ中の入力方法は、通常のバッファにおける各入力モード、変換モードでの入力方法と同一です。

C-s や C-r、あるいは M-C-s や M-C-r でインクリメンタル・サーチを起動すると、インクリメンタル・サーチを起動したバッファの入力モードと同一の入力モードで、キーとなる文字の入力が可能となります。

skk-isearchと入力モード
-----------------

入力モードに合わせて、インクリメンタル・サーチのプロンプトが表示されます。プロンプトの種類は、以下の5つです。

I-search: [aa]
     アスキーモード

I-search: [か]
     かなモード

I-search: [カ]
     カナモード

I-search: [英]
     全英モード

I-search: [--]
     インクリメンタル・サーチモードで C-x C-j などをタイプしてSKKを終了した場合は、このプロンプトが表示される。

チュートリアル
=======

SKK には、チュートリアルが附属しています。チュートリアルでは、 SKK の基本的な操作方法を学習できます。M-x skk-tutorial で実行します。チュートリアルは、日本語(Japanese)と英語(English)が用意されています。英語を選択する場合は、C-u M-x skk-tutorial [RET] English [RET] を実行します。

チュートリアルファイルが、標準の場所にない場合は、 .emacs で

       (setq skk-tut-file "a:/user/local/share/skk/SKK.tut")

と書くことにより、指定したチュートリアルファイルを使用させることができます。英語のチュートリアルファイルは、 skk-tut-file に .E が付いたファイル名です。この場合であれば、 a:/user/local/share/skk/SKK.tut.E になります。

便利な応用機能
*******

予備知識
====

本章では、応用機能とユーザーオプションについて述べています。それらを理解するために必要な事柄について、本節で詳しく説明します。

ファイル構成
------

SKK バージョン 10 では、応用機能を提供するプログラムのほとんどを skk.el とは別のファイルに収めています。これらは、必要に応じオートロードするように設計されています。各応用機能の概略と該当のファイル名について説明します。

skk-auto.el

     送り仮名の自動処理を行なうプログラムを集めたファイル。

     See 送り仮名の自動処理.

skk-autoloads.el

     オートロードの設定を記述したファイル。XEmacs で SKK をパッケージとしてインストールした場合は使用しない。

skk-comp.el

     見出し語の補完を行なうプログラムを集めたファイル。

     See 見出し語の補完.

skk-cursor.el

     カーソルの色を制御するプログラムを集めたファイル。

skk-develop.el

     バクレポートのメールバッファを用意するプログラムファイル。

skk-foreword.el

     他のファイルで共通して使用するマクロなどを中心にまとめたファイル。各ファイルの冒頭部分に、あまりユーザーに興味がないものが並んでいたのでは、ユーザーフレンドリーではないので、このファイルに集中させる仕様となっている。

skk-gadget.el

     プログラム実行変換を行なうプログラムを集めたファイル。

     See プログラム実行変換.

skk-isearch.el

     SKK を併用したインクリメンタリサーチ機能を提供するファイル。

     See I-search関連.

skk-kakasi.el

     KAKASI インターフェイスプログラムを集めたファイル。

     See 領域一括変換. See KAKASI.

skk-kcode.el

     漢字コードまたはメニューによる文字入力を行なうプログラムを集めたファイル。

     See 漢字コードまたはメニューによる文字入力.

skk-leim.el

     LEIM 関連プログラムファイル。

skk-look.el

     look インターフェイスプログラムを集めたファイル。

skk-lookup.el

     Lookup で検索できる辞書を使って単語の候補を出力するプログラム。

skk-num.el

     数値変換を行なうプログラムを集めたファイル。

     See 数値変換.

skk-obsolete.el

     .emacs や .skk などのユーザー設定ファイル中の古い設定 (変数、関数名など)の修正支援プログラム。

skk-server.el

     SKK サーバインターフェイスプログラムを集めたファイル。

     See サーバ関連.

skk-tut.el

     SKK チュートリアルプログラム。

skk-vars.el

     古い SKK 10 をダンプした XEmacs (XEmacs 20.4 以前) で SKK 10 を動かすためのダミーファイル。

skk-viper.el

     VIPER インターフェイスプログラムを集めたファイル。

なお、Elibより queue-m.el ファイルを収録しています。

ユーザーオプションの設定方法
--------------

SKK のカスタマイズは、~/.emacs あるいは ~/.skk に記述します。また、各ファイルの提供するフックも利用します。上記のファイルやフックを利用した設定がいつ有効になるのか、という点についてここで説明します (以前のバージョンでは、どのようなカスタマイズが行なわれている場合でもチュートリアル使用時に標準設定に戻す目的で、変数の宣言に defconst を使用していたので、全てのカスタマイズは ~/.skk で行なう必要がありましたが、SKK 10 では、defcustom を使用した宣言を行なっているので、この制限はなくなりました。)。

.emacs

     Emacsを起動したときに一度だけ読みこまれます。

     See .emacs (GNU Emacs Manual).

.skk

     SKK を起動した最初の一度だけ読みこまれます。ファイル名の既定値は、OS の種類により異なりますが、実際は Emacsの関数 convert-standard-filename により加工されます。 ~/.skk のファイル名は変数 skk-init-file で変更することができます。また、SKK にはこのファイルを自動的にバイトコンパイルする機能があります。詳細は、

          See skk-init-fileのコンパイル.

     を参照してください。

skk-mode-hook

     C-x C-j と入力して SKK モードに入る度に呼ばれます。主にバッファローカルの設定などを行ないます。

skk-auto-fill-mode-hook

     C-x j と入力してオートフィルモード付きで SKK モードに入る度に呼ばれます。主にバッファローカルの設定などを行ないます。

skk-load-hook

     skk.el の読みこみを完了した時点で呼ばれます。.skk は SKK モードを起動しなければ読みこまれないのに対し、このフックは、 skk.el を読みこんたら SKK モードを起動しなくとも呼ばれます。

skk-auto-load-hook
skk-comp-load-hook
skk-gadget-load-hook
skk-kakasi-load-hook
skk-kcode-load-hook
skk-num-load-hook
skk-server-load-hook
skk-viper-load-hook

     skk-auto.el, skk-comp.el, skk-gadget.el, skk-kakasi.el, skk-kcode.el, skk-num.el, skk-server.el, skk-viper.el の各ファイルの読みこみが完了した直後に呼ばれるフック。

load-hook が提供されていないプログラムであっても、ロード後に何らかの設定を行ないたい場合は、関数 eval-after-load を使用します。例えば、

     (eval-after-load "skk-look"
       '(
         ...
         ))

のように記述します。

辞書の形式
-----

ここでは SKK 用辞書の形式について詳しく説明します。

辞書の種別
.....

辞書の種別は大きく分けて「共有辞書」と「個人辞書」の 2 つがあります。

共有辞書

     付属の SKK-JISYO.S (「S 辞書」), SKK-JISYO.M (「M 辞書」), SKK-JISYO.L (「L 辞書」) などがあります。通常、個人辞書よりもサイズが大きく、省資源の面からユーザー間で共有して参照されます。ユーザーの変換により内容が書き替えられることはありません。

個人辞書

     変数 skk-jisyo で指定されるファイル。SKKを一番最初に使い始めたときにホームディレクトリに自動的に作られます。その後の使用により日々刻々とエントリが追加され、更新されていきます。

skk-initial-search-jisyo, skk-kakutei-jisyo

     これらは共有辞書、個人辞書という区分のいずれにも属しません。これらは個人毎に持つものを使用するか、ユーザー間で共有しているものを使用します。その性格から、辞書内容の更新は行なわれず、参照のみ行なわれます。また使用目的から、通常は小さい辞書を使用します。

個人辞書、skk-initial-search-jisyo, skk-kakutei-jisyo は Emacs のバッファに読み込んで検索を行ないます。共有辞書は設定により Emacs のバッファに読み込んで使用するか、またはサーバ経由で使用します。

送りありエントリと送りなしエントリ
.................

以下は個人辞書の一例です。

     ;; okuri-ari entries.
     たとe /例/[え/例/]/
     もt /持/[つ/持/]/[って/持/]/[た/持/]/[て/持/]/[ち/持/]/[と/持/]/
     たすk /助/[け/助/]/
     うごk /動/[く/動/]/[か/動/]/[け/動/]/[き/動/]/[こ/動/]/
     ふくm /含/[め/含/]/[む/含/]/[ま/含/]/[み/含/]/[も/含/]/
     ...
     ;; okuri-nasi entries.
     てん /点/・/天/
     ひつよう /必要/
     さくじょ /削除/
     へんこう /変更/
     じゅんじょ /順序/
     ぐん /群/郡/
     こうほ /候補/
     いち /位置/一/壱/
     ...

てん /点/・/天/ を例にして説明します。これは てん が見出し語であり、その候補が、点、・、天 です。候補はそれぞれ、/ によって区切られています。SKK では、見出し語と候補群を合わせた てん /点/・ /天/ の一行を「エントリ」と呼びます。

辞書は単純なテキストファイルで、必ず下記の 2 つの行を持っています。

     ;; okuri-ari entries.
     ;; okuri-nasi entries.

この 2 つの行は、それぞれ送り仮名あり、送り仮名なしのエントリの開始地点を示すマークです。 ;; okuri-ari entries. までの行で ; を行頭に持つ行はコメント行として無視されます。;; okuri-ari entries. 以降にコメント行を含むことはできません。

;; okuri-ari entries. と ;; okuri-nasi entries. の間に囲まれた上半分の部分が送り仮名ありのエントリです。これを「送りありエントリ」と呼びます。 ;; okuri-nasi entries.以下の下半分部分が送り仮名なしのエントリです。これを「送りなしエントリ」と呼びます。

送りありエントリを検索する変換を「送りあり変換」、送りなしエントリを検索する変換を「送りなし変換」と呼びます。SKK では送り仮名の有無が変換方法の 1 つの種別となっています。送り仮名がある変換では送りありエントリのみが検索され、送り仮名がない変換では送りなしエントリのみが検索されます。

1 つの見出し語についてのエントリは 1 行内に書かれます。2 行以上にまたがることはできません。改行を含む候補については、(concat "改\n行") のように、評価すると改行を該当個所に挿入するような Lisp プログラム (see プログラム実行変換) に候補を変換して辞書に収めています。

送りありエントリは、基本的には もt /持/ のようになっています。送り仮名部分は、送り仮名をローマ字表現したときの 1 文字目 (あるかな文字をローマ字表現したときの 1 文字目を「ローマ字プレフィックス」と呼びます。)で表現されています。この 1 エントリで 持た、持ち、持つ、持て、持と の 5 つの候補に対応します。その 5 つの候補の送り仮名をローマ字プレフィックスで表現すれば、いずれも t になります。

送りありエントリのブロック形式
...............

個人辞書の送りありエントリには [ と ] に囲まれたブロックがあります。これは、そのブロックの先頭にある平仮名を送り仮名に取る候補群です。

     たとe /例/[え/例/]/
     ...
     ふくm /含/[め/含/]/[む/含/]/[ま/含/]/[み/含/]/[も/含/]/

この例で見ると、見出し語 たとe の場合は え を送り仮名とする 1 つのブロックから構成されています。見出し語 ふくm の場合は、ま、み、む、め、も を送り仮名とする 5 ブロックに分けられています。

この送り仮名毎のブロック部分は、skk-henkan-okuri-strictly あるいは skk-auto-okuri-process のいずれかの変数が non-nilである場合に使用されます。その場合、検索において、見出し語の一致に加えて、更に送り仮名もマッチするかどうかをテストします。例えば、

     おおk /大/多/[く/多/]/[き/大/]/

というエントリがあるとします。同じ見出し語 おおk であっても、送り仮名が き であれば、候補は 大 のみで 多は無視されます。

 (See skk-henkan-okuri-strictly.

See skk-auto-okuri-process.)

現在のところ、SKK 付属の共有辞書では、[と]を使用した送り仮名毎のブロックの形式に対応していません。個人辞書のみがこの形式で書き込まれていきます。skk-henkan-okuri-strictly が nil であっても送り仮名のブロック形式で書き込まれます。 (ただし skk-process-okuri-early の値が non-nil であれば、送り仮名を決定する前に変換を開始することになるので、送り仮名を明示的に入力していても個人辞書にはブロック形式は作られません。)

エントリの配列
.......

共有辞書では、送りありエントリは ;; okuri-ari entries. から順に下方向に、見出し語をキーとして降順に配置されています。送りなしエントリは、;; okuri-nasi entries. から順に下方向に、見出し語をキーとして昇順に配置されています。

降順、昇順に配置されているのは、辞書サイズが大きいことに配慮して二分検索を行なうためです。 (ソートする際には、見出し語を unsigned-char と見なしています。この順序は Emacs が 関数 string< で文字列を比較するときの順序であり、UNIXの sort コマンドでの標準の順序とは異なります。 Emacsのコマンド sort-linesを用いればファイルをこの順序でソートすることができます。Emacsのコマンド sort-columns は内部的に UNIXコマンドの sort を使っているので、辞書のソートには使えません。)

一方、個人辞書は上の例でも見たように、それぞれ ;; okuri-ari entries., ;; okuri-nasi entries. を基点として、一番最後に変換を行なったものがそれぞれの最小ポイント (正確に言えば、送りあり変換では skk-okuri-ari-min+ 1 の位置、送りなし変換では skk-okuri-nasi-min+ 1 の位置。)に挿入され辞書が更新されます。個人辞書は通常は共有辞書程はサイズが大きくないので、検索時にはそれぞれの基点から直線的に検索が行なわれます。

個人辞書で見つけられなかった候補については共有辞書から検索されます。そこで見つかり確定された場合は、その候補が個人辞書に取り込まれますが、その際送りありエントリまたは送りなしエントリの最小ポイントに挿入されます。これは、次に同じ見出し語の検索が行なわれた場合に同候補を最初に出力するようにするためです。

辞書に関する設定
--------

skk-search-prog-list という変数があります。これは、ユーザーオプションとして設定するのはやや面倒な変数ですが、これを設定することによって、辞書ファイルの指定、検索方法、検索される辞書の順序などを指定することができます。

ここではまず、skk-search-prog-list の設定に使われる関数と変数を紹介します。次に、skk-search-prog-list の具体例を示しながら、その設定方法を解説します。

辞書検索のための関数
..........

skk-search-kakutei-jisyo-file

     形式: (skk-search-kakutei-jisyo-file FILE LIMIT &optional NOMSG)

     「確定変換」を行なう検索プログラム。検索対象の辞書ファイルは Emacs のバッファに読み込まれます。検索対象のファイルから候補を見つけると、内部変数 skk-kakutei-flag を立てて、いきなり確定します。このためユーザーが確定する必要はありません。

     第 1 引数は検索対象辞書。

     第 2 引数は領域の大きさを指定します。一つの見出し語に対する変換動作に対し、検索対象の領域の大きさが第 2 引数に指定された大きさより小さくなるまでは二分検索が行なわれ、最後に直線的検索が 1 回行なわれます。第 2 引数に 0 を指定すると常に直線的検索のみが行なわれます。

     第 3 引数が 非 nil であるとき、辞書をバッファに読み込むときにミニバッファに読み込んでいる旨のメッセージを出力します。

skk-search-jisyo-file

     形式: (skk-search-jisyo-file FILE LIMIT &optional NOMSG)

     通常の検索を行なうプログラム。個人辞書の検索や、共有辞書でサーバを使わない検索を行なう場合はこのプログラムを使用します。辞書ファイルは Emacs のバッファに読み込まれます。

     第 1 引数、第 2 引数、第 3 引数の意味はいずれも skk-search-kakutei-jisyo-file の場合と同様です。

skk-okuri-search

     形式: (skk-okuri-search)

     自動送り処理を行なうプログラム。変数 skk-auto-okuri-process の値が 非 nil のときだけ機能します。

     個人辞書の送りありエントリを検索対象としているので、個人辞書のバッファを流用します。そのため、専用の辞書バッファは作りません。

skk-search-server

     形式: (skk-search-server FILE LIMIT &optional NOMSG)

     サーバ経由で検索するプログラム。サーバが使用不能になると辞書ファイルを Emacs のバッファに読み込んで検索を行ないます。

     第 1 引数、第 2 引数、第 3 引数はいずれも skk-search-kakutei-jisyo-fileのそれと同じですが、第 2 引数及び第 3 引数は、辞書ファイルを Emacs のバッファに読み込んだときのみ利用されます。

辞書ファイルを指定する変数
.............

skk-kakutei-jisyo

     確定変換用の辞書。 (See 確定変換.)

     この辞書は、標準の配布パッケージには含まれていないので、使用するのであればユーザー側で用意する必要があります。
      (確定変換用辞書の見出し語の配列については、サイズが大きければ共
     有辞書と同じ配列にして二分検索を行ない、サイズが小さければ適当な配置で直
     線的検索を行なうことをお勧めします。)

          see 共有辞書の配置.

     を参照してください。

skk-initial-search-jisyo

     ふつう個人辞書の前に検索を行なう辞書。

     変数 skk-jisyo に指定された辞書の前に検索が行なわれます。 (このため、この辞書を適当に切り替えることにより最初に出てくる候補を操作することができます。例えば、複数の専門用語毎の辞書を用意しておいて skk-initial-search-jisyo の値を切り替えることにより、専門分野毎の専門用語を切り替えて入力することができます。)

     この辞書は、標準の配布パッケージには含まれていないので、使用するのであればユーザー側で用意する必要があります。

skk-jisyo

     個人辞書。SKK を一番最初に起動したときにファイルがなければ自動的に作られます。

     skk-search-prog-list の既定値では、個人辞書より先に検索するのは、確定辞書と skk-initial-search-jisyo のみです。これはこのままにすることをお勧めします。

     個人辞書の見出し語は、常に一番最近に変換された語が最小ポイントに挿入されます。 (その配列はバラバラなので、二分検索はできません。)

skk-large-jisyo

     共有辞書。ユーザーの用途と資源に合わせて、S 辞書、M 辞書、L 辞書の中から選びます。

     ふつう、関数 skk-search-jisyo-file の第 1 引数として指定します。

skk-aux-large-jisyo

     共有辞書。ユーザーの用途と資源に合わせて、S 辞書、M 辞書、L 辞書の中から選びます。

     ふつう、関数 skk-search-server の第 1 引数として指定します。

skk-backup-jisyo

     個人辞書の予備 (バックアップ) 辞書。

     これは、skk-search-prog-list に入れてはいけません。あくまで個人辞書の予備辞書として指定してください。

辞書検索の設定の具体例
...........

skk-search-prog-list の具体例を挙げると以下の様になります。

     ((skk-search-kakutei-jisyo-file skk-kakutei-jisyo 10000 t)
      (skk-search-jisyo-file skk-initial-search-jisyo 10000 t)
      (skk-search-jisyo-file skk-jisyo 0 t)
      (skk-okuri-search)
      (skk-search-jisyo-file skk-large-jisyo 10000)
      (skk-search-server skk-aux-large-jisyo 10000))

上記の例では、

 1. skk-kakutei-jisyo, skk-initial-search-jisyo, skk-jisyoの順に検索を行ない、

 2. 次に個人辞書を使って送り仮名の自動処理を行ない、

 3. その後、skk-large-jisyo の検索を行ない、

 4. 最後にskk-aux-large-jisyo にサーバ経由でアクセスしています。

もし確定辞書で候補が見つかったらそのまま自動的に確定されます。1 回 SPC を押す動作に対し、プログラム側では新たな候補を見つけるまで上記の動作を進めます。例えば、

 1. 確定辞書では候補は見つけられなかったが skk-initial-search-jisyo に候補がある場合、そこで一旦止まりユーザーにその候補を表示します。

 2. 更に SPC が押されると、次は個人辞書を検索します。そこで候補が見つかり、しかもその候補がskk-initial-search-jisyo で見つけた候補とは異なるものであったときは、そこでまた一旦止まりその候補をユーザーに表示します。

     以降、共有辞書についても同様の繰り返しを行ないます。

skk-search-prog-list の設定方法としては、例えば skk-large-jisyo に S 辞書か M 辞書を指定し、S 辞書、M 辞書はEmacs のバッファに読み込んで検索して、skk-aux-large-jisyoに L 辞書を指定し、L 辞書にはサーバ経由でアクセスする、という選択肢もあります。

また、サーバ経由のアクセスも決して遅くはないので、

     (skk-search-jisyo-file skk-large-jisyo 10000)

を削除するという選択肢もあります。
 (ちなみに辞書ファイルを指定する変数の値が nil であれば、そのファ
イルを引数とした検索プログラムが skk-search-prog-list に指定されて
いても、その検索は行なわれません。例えば、skk-search-prog-list に
上記変更をする代わりに)

     (setq skk-large-jisyo nil)

という設定をしてもふつう結果は同じです。
 (skk-auto.el を読みこむと、)

     (skk-okuri-search)

というリストが skk-search-prog-list に自動的に追加されます。実際には、skk-auto.el は必要に応じてオートロードされるので明示的に読みこむ必要はありません。オートロードされるのは、具体的には skk-auto-okuri-process を非 nil に設定したとき、 あるいは

     (skk-okuri-search)

というリストを skk-search-prog-list に明示的に指定したときなどです。

 (skk-server.elを読みこむと、)

     (skk-search-server skk-aux-large-jisyo 10000)

というリストが skk-search-prog-list に自動的に追加されます。実際には、skk-server.el は必要に応じてオートロードされるので明示的に読みこむ必要はありません。オートロードされるのは、具体的には skk-server-host または skk-servers-listを非 nil に設定したとき、あるいは

     (skk-search-server skk-aux-large-jisyo 10000)

というリストを skk-search-prog-list に明示的に指定したときなどです。

入力モードの一時変更
==========

SKK には、カタカナの入力にはカナモードを、全角アルファベットの入力には全英モードを用いる (see カナモード、全英モード.)普通のやり方のほかに、一時的にカナ文字、全英文字を入力して、また、かなモードに戻る方法があります。

また、アスキー文字を見出し語として使用するために、かなモードから一時的にアスキー文字を入力する機能が提供されています。それは▽モードの変種であり、 SKK abbrev mode と呼ばれています。この機能を使用することにより、

is=>インクリメンタル・サーチ

のような変換を行なうことができます。

ここではこれらの方法について説明します。

ひらがな/カタカナの一時的入力
---------------

まず、かなモードもしくはカナモードに入ります。Q キーで一旦▽モードにして (/キーで SKK abbrev mode に入ってしまうと q キー入力が q 文字の入力として扱われるのでこの場合は使いません。)なにか文字列を入力し、その文字列の末尾で q をタイプすると、 ▽ マークから q を入力した位置までの文字列が、変換され確定されます。変換は、▽ とポイント間の文字列の種類 (正確には ▽ の次の位置にある文字列によって文字種の判別を行なっているので、途中で文字種類の違う文字が混在していても無視されます。) をキーとして、以下の規則に基づいて行なわれます。

  * カタカナはひらがなへ

  * ひらがなはカタカナへ

  * 全英文字はアスキー文字へ

  * アスキー文字は全英文字へ

このような変換を、トグル変換と呼びます。以下はトグル変換の例です。

     K a t a k a n a

     ------ Buffer: foo ------
     ▽かたかな-!-
     ------ Buffer: foo ------

     q

     ------ Buffer: foo ------
     カタカナ-!-
     ------ Buffer: foo ------

このトグル変換を上手く利用することにより、かなモードのまま一時的にカタカナを入力したり、またその逆を行うことができます。こうすると、例えばひらがな/カタカナ混じり文を書くときに、その都度 q キーを押して入力モードを切り換える必要がありません。 (全英文字とアスキー文字のトグルでの変換を行なうこともできます。ただし、全英モードやアスキーモードでは Q やその他の大文字により▽ モードに入ることができないので、かな ⇔ カナ のときと同様にドグル変換できるわけではありません。かなモード/カナモードにおいて、既に入力された全英文字、アスキー文字に対してトグル変換をするような設計になっています。)

トグル変換は、領域を対象としたコマンドによって行なうこともできます。

     See 領域一括変換.

全英文字の一時的入力
----------

まず、かなモードに入ります。次に、/ を入力すると、SKK abbrev モードに入ります。続いて、全角アルファベットとして入力したい文字列を挿入し、その文字列の末尾で C-q (C-q は skk-abbrev-mode-map にて特別な動作をするように定義されています。 See アスキー文字を見出し語とした変換.)を入力することで、▽マークから C-q を入力した位置までの文字列が全角アルファベットに変換され確定されます。

     / f i l e

     ------ Buffer: foo ------
     ▽file-!-
     ------ Buffer: foo ------

     q

     ------ Buffer: foo ------
     ｆｉｌｅ-!-
     ------ Buffer: foo ------

なお、この変換を行なうために、

     file /ｆｉｌｅ/

のような辞書エントリを持つ必要はありません。なぜなら、辞書を参照せず、アスキー文字を 1 文字づつ全英文字に変換しているからです。

■モードにおける文字入力
============

かなモード/カナモードにおける入力
-----------------

■モードにおける文字変換
............

skk-rom-kana-base-rule-list

skk-rom-kana-rule-list

SKK の■モードにおける文字変換は、上記 2 変数を用いて行なわれます。

これらは、1 種の規則であり、「入出力の状態がいかに移り変わるべきか」を決定します。その内容は、

     (入力される文字列 出力後に自動的に入力に追加される文字列 出力)

という形のリストを列挙したものです。

入力される文字列 とは変換される前の ASCII 文字の文字列をいいます。

出力 は次の入力状態に移るときにバッファに挿入される文字列の組み合わせであり、 ("ア" . "あ") のようなコンスセルです。

2 変数のうち、skk-rom-kana-rule-list は使用者が独自の規則を定義するために用意されていて、skk-rom-kana-base-rule-list の規則より優先されます。

skk-rom-kana-base-rule-listの具体例
...............................

skk-rom-kana-base-rule-list には

     ("a" nil ("ア" . "あ"))
     ("ki" nil ("キ" . "き"))
     ("tt" "t" ("ッ" . "っ"))
     ("nn" nil ("ン" . "ん"))
     ("n'" nil ("ン" . "ん"))

のような規則があります。これによると

     a ==>あ
     ki ==>き
     tt ==>っt
     nn ==>ん
     n' ==>ん

のようになります。

skk-rom-kana-rule-listの利用例
..........................

skk-rom-kana-base-rule-list の規則に従うと

     hannou ==>はんおう
     han'ou ==>はんおう
     hannnou ==>はんのう

のようになります。ここで

     (setq rom-kana-rule-list
           (append rom-kana-rule-list
                   '(("nn" "n" ("ン" . "ん"))

のような設定にすることで

     hannou ==>はんのう

のようにローマ字かな変換が行われるようになります。

もうひとつ利用例を挙げます。

     tp ==>東北大学
     skk ==>skk
     skK ==>SKK

といった変換は、

     ("tp" nil ("東北大学" . "東北大学"))
     ("sk" "sk" ("" . ""))
     ("skk" nil ("skk" . "skk"))
     ("skK" nil ("SKK" . "SKK"))

のような規則を追加することで実現されます。自分の名前を入力することはよくあるので、適当な省略形を用いて、このリストに追加しておく、といった利用をお勧めします。

更に skk-rom-kana-rule-list を用いれば T-code や TUT-code による日本語入力を実現することもできます。例えば TUT-code による入力についてはソースアーカイブの experimental/tut-code ディレクトリに収録されているソースコードを参照してください。

■モードに関連するその他の変数
...............

skk-kana-input-search-function

     ルールリストの中に記せない変換ルールを処理する関数。これは

          ohs ==>おおs

     のような変換を実現するために用意されています。これにより

          ohsaka ==>おおさか
          ohta ==>おおた

     のように変換されますが、一方

          ohhonn ==>おっほん
          ohhira ==>おっひら

     となる場合もあります。これは skk-rom-kana-rule-list の既定値に

          ("hh" "h" ("ッ" . "っ"))

     が入っているためです。これを削除すれば

          ohhonn ==>おおほん
          ohhira ==>おおひら

     となります。

数字や記号文字の入力
..........

かなモード/カナモードにおける次のキーは、かつては skk-self-insert 関数にバインドされていました。現在は他のキーと同様に skk-insert 関数にバインドされています。

     !  #  %  &  '  *  +

     -  0  1  2  3  4  5

     6  7  8  9  :  ;  <

     =  >  ?  "  (  )  [

     ]  {  }  ^  _  `  |

     ~

これらの数字や記号文字のキーに対応し挿入される文字は、変数 skk-input-vector の値により決定されていましたが、このバージョンの SKK ではこの変数は廃止されました。カスタマイズするためには、代わりに変数 skk-rom-kana-rule-list を利用します。例えば、SKK 9.6 以前において、

     (aset skk-input-vector ?! nil)
     (aset skk-input-vector ?, nil)
     (aset skk-input-vector ?. nil)
     (aset skk-input-vector ?: nil)
     (aset skk-input-vector ?; nil)
     (aset skk-input-vector ?? nil)

このような設定をしていた場合、本バージョンの SKK で同様の入力をするためには、

     (setq skk-rom-kana-rule-list
           (nconc skk-rom-kana-rule-list
                  '(("!" nil "!")
                    ("," nil ",")
                    ("." nil ".")
                    (":" nil ":")
                    (";" nil ";")
                    ("?" nil "?"))))

のような設定に変更する必要があります。

skk-insert は、Emacs のオリジナル関数 self-insert-command をエミュレートしています。具体的には、引数を渡すことによって同じ文字を複数、一度に挿入することが可能です (かつては、▽あなどを入力する場合には引数渡しができなかったのですが、本バージョンでばこれもできるように拡張されています。)。

     C-u 2 !

     ------ Buffer: foo ------
     ！！
     ------ Buffer: foo ------

全英モードにおける入力
-----------

全英モードにおける印字可能な全てのキーはコマンド skk-jisx0208-latin-insert に割り付けられています。また、変数 skk-jisx0208-latin-vector の値により挿入される文字が決定されます。 skk-jisx0208-latin-vector の既定値は以下のようになっています。

     [nil  nil  nil  nil  nil  nil  nil  nil
      nil  nil  nil  nil  nil  nil  nil  nil
      nil  nil  nil  nil  nil  nil  nil  nil
      nil  nil  nil  nil  nil  nil  nil  nil
      "　"  "！" "”" "＃" "＄" "％" "＆" "’"
      "（" "）" "＊" "＋" "，" "−" "．" "／"
      "０" "１" "２" "３" "４" "５" "６" "７"
      "８" "９" "：" "；" "＜" "＝" "＞" "？"
      "＠" "Ａ" "Ｂ" "Ｃ" "Ｄ" "Ｅ" "Ｆ" "Ｇ"
      "Ｈ" "Ｉ" "Ｊ" "Ｋ" "Ｌ" "Ｍ" "Ｎ" "Ｏ"
      "Ｐ" "Ｑ" "Ｒ" "Ｓ" "Ｔ" "Ｕ" "Ｖ" "Ｗ"
      "Ｘ" "Ｙ" "Ｚ" "［" "＼" "］" "＾" "＿"
      "‘" "ａ" "ｂ" "ｃ" "ｄ" "ｅ" "ｆ" "ｇ"
      "ｈ" "ｉ" "ｊ" "ｋ" "ｌ" "ｍ" "ｎ" "ｏ"
      "ｐ" "ｑ" "ｒ" "ｓ" "ｔ" "ｕ" "ｖ" "ｗ"
      "ｘ" "ｙ" "ｚ" "｛" "｜" "｝" "〜" nil]

挿入される文字の変更方法を知りたい場合は、

     See 数字や記号文字の入力.

を参照してください。

skk-jisx0208-latin-insert も Emacs オリジナルの関数 self-insert-command をエミュレートしています。つまり、引数を渡すことにより同じ文字を複数、一度に挿入することができます。 skk-insertにおける動作と同じですから、

     See 数字や記号文字の入力.

における例を参考にしてください。

1回の取り消し操作(undo)の対象
------------------

Emacs では本来、連続する 20 文字の挿入が一回の取り消し操作 (アンドゥ) の対象となっています。そこで SKK のかな・カナ・全英モードにおける入力も、これと同様の動作をするように設計されています。 (buffer-undo-listにEmacsが挿入したアンドゥの境目の目印を取り除く方法でエミュレートしています。)。正確に言えば、 skk-kana-input, skk-self-insert, skk-set-henkan-point, skk-jisx0208-latin-insert (SKK abbrev モードでは、アスキー文字入力が Emacs オリジナルの self-insert-command により行なわれているので、エミュレーションのための内部変数であるskk-self-insert-non-undo-countをインクリメントすることができず、アンドゥをエミュレートできません。しかも、カンマやピリオドを挿入した時点で、コマンド skk-abbrev-comma や skk-abbrev-period を使うことになるので、オリジナルのアンドゥの機能も損なってしまいます。ただし、現実問題として、元来 SKK abbrev モードは省略形としての見出し語を挿入するためのモードですから、長い見出し語を挿入することはあまりないと考えられます。)の各関数にバインドされたキー入力については、連続して入力された 20 文字を 1 つのアンドゥの対象としています (`20' は Emacs のソースファイルの一部である keyboard.c に定められたマジックナンバーと一致します。)。

ただし、これらの SKK のコマンドと Emacs 本来の self-insert-command を織り混ぜてキー入力した場合 (かなモードでの入力中、アスキーモードに移行してタイプした場合などがこれにあたります。)は、このエミュレーションは正常に動作しませんが、これは現在の仕様です。

     a i u e o k a k i k u k e k o s a s i s u s e s o t a t i t u t e t o

     ------------------------- Buffer: foo -------------------------
     あいうえおかきくけこさしすせそたちつてと ;連続する20文字。
     ------------------------- Buffer: foo -------------------------

     C-_

     ------------------------- Buffer: foo -------------------------
                            ;20文字全てがアンドゥの対象となる。
     ------------------------- Buffer: foo -------------------------

     a i u e o k a k i k u k e k o s a s i s u s e s o t a t i t u t e t o n a

     -------------------------- Buffer: foo --------------------------
     あいうえおかきくけこさしすせそたちつてとな ;連続する21文字。
     -------------------------- Buffer: foo --------------------------

     C-_

     -------------------------- Buffer: foo --------------------------
     あいうえおかきくけこさしすせそたちつてと ;最後の1文字のみがアンドゥの対象となる。
     -------------------------- Buffer: foo --------------------------

対になる文字列の一括入力
------------

ふつう、`「' を入力したら、`」' を後で入力する必要があります。`「' の入力時点で、対になる文字を自動挿入してくれると打鍵数を減らすことができますし、同時に入力忘れの防止にもなるでしょう。

そのために変数 skk-auto-insert-paren が用意されています。この値を非 nil にすると、上記の自動挿入を行ないます、

     ------ Buffer: foo ------
     彼はこう言った-!-
     ------ Buffer: foo ------

     [

     ------ Buffer: foo ------
     彼はこう言った「-!-」
     ------ Buffer: foo ------

上記のように `「' の入力時点で対となる`」'を自動挿入し、`「'と`」'の間にポイントを再配置するので、その位置からかぎかっこに囲まれた文字列を即始めることができます。

自動挿入すべきペアの文字列は、変数 skk-auto-paren-string-alist で指定します。既定値は下記のようになっています。

     (("「" . "」") ("『" . "』") ("(" . ")") ("（" . "）") ("{" . "}")
      ("｛" . "｝") ("〈" . "〉") ("《" . "》") ("[" . "]") ("［" . "］")
      ("〔" . "〕") ("【" . "】") ("\"" . "\"") ("“" . "”") ("`" . "'"))

これは、ひと言でまとめると、「開き括弧と閉じ括弧とのコンスセルを集めたリスト」です。各コンスセルの car にある文字列を挿入したときに、 cdr にある文字列が自動挿入されます。
 (このリストの各要素の car の文字列は、必ず変数
skk-rom-kana-rule-list の規則によって入力されなければなりません。
例えば、( に対する ) の自動挿入をするには)

     (setq skk-rom-kana-rule-list
           (nconc skk-rom-kana-rule-list
                 '(("(" nil "("))))))

のような設定をする必要があります。 (既に SKK モードになっているバッファで変数 skk-auto-paren-string-alist を変更した場合は、C-x C-j もしくは C-x j を 2 度タイプして skk-mode もしくは skk-auto-fill-mode を起動し直す必要があります。)

キーとなる文字の挿入が行なわれても、その挿入後のポイントに自動挿入すべき文字が既に存在している場合には、自動挿入は行なわれないように設計されています。

     ------ Buffer: foo ------
     -!-」
     ------ Buffer: foo ------

     [

     ------ Buffer: foo ------
     「-!-」
     ------ Buffer: foo ------

対になる文字を複数挿入したい場合は、引数を渡して文字を指定します。

     C-u 2 [

     ------ Buffer: foo ------
     「「-!-」」
     ------ Buffer: foo ------

yatex-mode など、既に同種の機能が付いているモードがあります。そのようなモードにおいてもこの自動挿入の機能が邪魔になることはないでしょうが、そのモードにおいてのみこの機能をオフにしたい場合は、該当のモードに入ったときにコールされるフック変数を利用して設定を行なうことができます。

     (add-hook 'yatex-mode-hook
               (function
                (lambda ()
                  (if skk-auto-insert-paren
                      (set (make-local-variable 'skk-auto-insert-paren) nil)))))

特定のモードにおいて、自動挿入すべき文字を変更したい場合にも同様にフック変数を用いて操作できます。

     (add-hook 'tex-mode-hook
               (function
                (lambda ()
                  (if skk-auto-insert-paren
                      (progn
                        (make-local-variable 'skk-auto-paren-string-alist)
                        (setq skk-auto-paren-string-alist
                              (cons '("$" . "$") skk-auto-paren-string-alist)))))))

同様に、特定のペアを削除したい場合は、例えば下記のように設定します
 (何故関数 copy-sequence を使用するのかについては、)

     see 数字や記号文字の入力.

を参照してください。。

     (add-hook 'tex-mode-hook
               (function
                (lambda ()
                  (if skk-auto-insert-paren
                      (progn
                        (make-local-variable 'skk-auto-paren-string-alist)
                        (setq skk-auto-paren-string-alist
                              (delete
                               '("$" . "$")
                               (copy-sequence skk-auto-paren-string-alist))))))))

ポイントを戻して▽モードへ
=============

▽モードに入り忘れた場合の▽マークの付け方については、前述しました (see ▽マークの付け忘れ.)。ここでは、これを簡略化し、一回の操作で行なう方法について説明します。

M-Q (ここで Q は大文字で入力する必要があります。)とタイプすると現在位置の直前の文字列について走査し、同種の文字 (ひらがな、カタカナ、全角アルファベット、アルファベットの 4 種類のいずれか。)が続く限り 後方にポイントを戻して▽モードに入り、またポイントを元の地点に戻します。 (後方にポイントを戻す途中で行頭に到達した場合は、更に上の行について、行末の文字列から同様の走査を行ない、必要があれば更にポイントを戻します。こうした「行を超えての走査」をやめるためには、変数 skk-allow-spaces-newlines-and-tabs の値を nil に設定します。)

     k a n j i

     ------ Buffer: foo ------
     かんじ-!-
     ------ Buffer: foo ------

     M-Q

     ------ Buffer: foo ------
     ▽かんじ-!-
     ------ Buffer: foo ------

変換開始位置を決定するとき、スペース文字、タブ文字、長音を表わす ーは無条件に無視されます。ただし、ひらがなの場合は を が、カタカナの場合はヲが見つかった時点で変換開始位置の走査を止め、▽モードに入ります。変換開始ポイントをを、ヲの直前で止めるのは、たいていその直後から単語が始まるからです。

以上は M-Q を引数を与えないで実行した場合です。一方で、C-u 5 M-Q のように引数を渡して実行すると、変換開始位置から現在位置までの文字数を指定することができます。この場合は文字種別を問わず、与えられた文字数だけ無条件にポイントを戻します。

確定変換とその取り消し
===========

確定変換を行なう関数 skk-search-kakutei-jisyo-fileと 確定辞書を指定するための変数 skk-kakutei-jisyo については先に説明しました。 (辞書検索のための関数)ここではその動作についてより詳しく説明します。

例えば、

     せつめい /説明/

というエントリが確定辞書にあったとします。このとき、

     S e t u m e i

     ------ Buffer: foo ------
     ▽せつめい
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     説明
     ------ Buffer: foo ------

のように確定動作をすることなしに(暗黙の確定もなく) いきなり確定します。仮に確定辞書に

     じしょ /辞書/

というエントリを挿入してしまったが、自署に変換したい場合は、確定直後に x をタイプすることにより確定変換を取り消して▽モードに戻ることができます。この場合は、次に SPC をタイプしたときは、確定辞書の検索を行なわないません。そのため個人辞書、あるいは共有辞書に

     じしょ /自署/

のエントリがあれば 自署 への変換を行なうことができます。

     Z i s y o SPC

     ------ Buffer: foo ------
     辞書
     ------ Buffer: foo ------

     x

     ------ Buffer: foo ------
     ▽じしょ
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼自署
     ------ Buffer: foo ------

確定アンドゥ
======

一番最後に行なった変換についての確定を取り消して、再変換を行なうことができます。これを「確定アンドゥ」と呼びます。これは確定変換の取り消しとは異なる概念です。

例えば、辞書エントリが

     こうこう /高校/孝行/航行/

のようになっているとします。

     K o u k o u SPC

     ------ Buffer: foo ------
     ▼高校
     ------ Buffer: foo ------

     s u r u

     ------ Buffer: foo ------
     高校する-!-
     ------ Buffer: foo ------

     M-x skk-undo-kakutei

     ------ Buffer: foo ------
     ▼孝行-!-する
     ------ Buffer: foo ------

この例では、高校 の確定について取り消しています。すると、辞書の第一候補である 高校 をとばして、次候補である 孝行 が現れます。ここで更に SPC を押せば次候補である 航行 が現れ、更にもう一度 SPC を押せば辞書登録モードに入ります。

この例に見られるように、確定アンドゥは、確定した直後でなくとも有効です。より正確には、次の新たな確定 (C-j をタイプして明示的に確定した場合は勿論、暗黙の確定を行なった場合も同様です。)を行なうまでは確定に関する情報が保持されているので、確定アンドゥすることができます。

また、変換、確定に関連しない文字列は、確定アンドゥを行なっても削除されないように設計されています。上記の例では、する がそのままカレントバッファに残っています。

見出し語関連
======

見出し語の補完
-------

▽モードで TAB を押すと、見出し語 (▽モードにおける入力文字列) に対する補完が行われます。今、TABを押す直前に▽モードで入力された文字列をσと呼ぶことにします。このとき、個人辞書 (共有辞書は検索されません。それは、共有辞書では一般的に先頭の文字を共通にする見出し語が多すぎて、望みの補完が行なえる確率が低いからです。) の送りなしエントリの中で、先頭がσと一致し長さがσよりも長い見出し語を捜して、そのような語がもしあれば、σの代わりにその語が表示されます。

見出し語の補完を上手に利用すると、打鍵数を減らすことができます。

個人辞書では最近更新されたエントリほど上位に来るようになっています (辞書ファイルを指定する変数)。したがって、▼モードで変換を行なった語の見出し語について、時間的に新しいものから先に補完が行なわれます。例えば、斉藤、佐藤 の順で変換した後、さ をキーにして見出し語の補完を行なうと、最初に さとう が、その次にさいとう が補完されます。補完が意図したものでなかったときには TAB の直後に . (ピリオド) をタイプすると 2 番目の見出し語が表示されます。以降、同様に . を続けてタイプすると、見出し語の候補が順次表示されます。意図した見出し語を通りすぎたときは , (コンマ) で前の候補に戻ります。

     S a t o u SPC C-j

     ------ Buffer: foo ------
     佐藤
     ------ Buffer: foo ------

     S a

     ------ Buffer: foo ------
     ▽さ
     ------ Buffer: foo ------

     TAB

     ------ Buffer: foo ------
     ▽さとう
     ------ Buffer: foo ------

     .

     ------ Buffer: foo ------
     ▽さいとう (さとう の次に補完される見出し語は、個人辞書の
     内容に依存します。)
     ------ Buffer: foo ------

     ,

     ------ Buffer: foo ------
     ▽さとう
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼佐藤
     ------ Buffer: foo ------

     C-j

     ------ Buffer: foo ------
     佐藤
     ------ Buffer: foo ------

なお、個人辞書の検索は、見出し語を得るために行なわれるので、一旦 SPC を入力して▼モードに入れば普通の変換動作に入ります。

skk-dabbrev-like-completion

     この変数の値を 非 nil にすると、見出し語補完の動作が変化します。具体的には、. で 2 番目以降の補完を行なったときに、最初に補完された語について補完が行われます。つまり上記の例では さ に対し、最初に補完された語は、さとう なので、以後の補完は、さとう を含む語 ( 例えば、さとうせんせいなど) について行なわれます。

見出し語を補完しながら▼モードへ
----------------

前節で見出し語の補完について述べました。本節では、見出し語の補完動作を行なった後、SPC を入力し、▼モードに入るまでの動作を一回の操作で行なう方法について説明します。

やり方は簡単。TAB・SPCと打鍵していたところを、 M-SPC に換えると、補完した上で変換を開始します。

この方法によると、補完される見出し語があらかじめ分かっている状況では、キー入力を一回分省略できるので、長い見出し語の専門用語を連続して入力する場合などに威力を発揮します。

     K a s i t a n n p o s e k i n i n n

     ------ Buffer: foo ------
     ▽かしたんぽせきにん
     ------ Buffer: foo ------

     SPC, RET

     ------ Buffer: foo ------
     瑕疵担保責任
     ------ Buffer: foo ------

     K a

     ------ Buffer: foo ------
     ▽か
     ------ Buffer: foo ------

     M-SPC

     ------ Buffer: foo ------
     ▼瑕疵担保責任
     ------ Buffer: foo ------

空白・改行・タブを含んだ見出し語の変換
-------------------

以下のようにオートフィルモードで折り返された文字列に対し、折り返された状態のまま変換を行なう方法があります。

     ---------------- Buffer: foo ------------------
     仮名漢字変換プログラムをさ
     くせいしました。-!-
     ---------------- Buffer: foo ------------------

     C-u 10 C-b Q

     ---------------- Buffer: foo ------------------
     仮名漢字変換プログラムを▽-!-さ
     くせいしました。
     ---------------- Buffer: foo ------------------

     C-u 5 C-f

     ---------------- Buffer: foo ------------------
     仮名漢字変換プログラムを▽さ
     くせい-!-しました。
     ---------------- Buffer: foo ------------------

     SPC

     ---------------- Buffer: foo ------------------
     仮名漢字変換プログラムを▼作成-!-しました。
     ---------------- Buffer: foo ------------------

ここでは改行を越えて見出し語を探し、変換する例を示しました。同様に、空白、タブ文字を中間に含む文字列に対しても変換を行なうことができます。

skk-allow-spaces-newlines-and-tabs

     この変数を nil に設定すると、本節で説明したような 2 行以上にまたがる文字列に対する変換を禁止します。

カタカナの見出し語
---------

q によりかなモード、カナモードを度々切り替えて入力を続けていると、カナモードで誤って▼モードに入ってしまうことがあります。そのため、カナモードで▼モードに入った場合、まず見出し語をひらがなに変換してから、辞書の検索に入るよう設計されています。

この場合、送りあり変換での送り仮名も平仮名になります。もし、送り仮名をカタカナにしたい場合には、カナモードでの変換の送り仮名の処理を参照してください。

また、もしカタカナの文字列をそのまま見出し語として変換を行ないたい場合には、SPC で変換に入る代わりに C-u SPC と入力します。

送り仮名関連
======

送り仮名の厳密なマッチ
-----------

今、個人辞書に

     おおk /大/多/[く/多/]/[き/大/]/

という送りありエントリがあると仮定します。

ここで O o K i i SPC と入力した場合、普通は 大きい と多きい という 2 通りの候補が出力されますが、このうち 多きいは現代の日本語として正しくありません。このような場合に、出力される候補を正しい表現のみに絞りこむ方法について、説明します。

skk-henkan-okuri-strictly

     この変数の値を 非 nil に設定すると、見出し語がマッチするかどうかのチェックの上に、送り仮名がマッチするかどうかのチェックが行なわれます。結果として送り仮名がマッチしない候補は出力されません。上記の例では、送り仮名き がマッチする 大きい は出力されますが、多きいは出力されません。 (この機能は、変数 skk-process-okuri-early の値を非 nil に設定した状態と共存できません。この理由を知りたい場合は送りあり変換の変換開始のタイミングを参照してください。ただしメニューバーを使用してこのユーザーオプションをオンにすると、自動的に skk-process-okuri-early の値を nil にするよう設計されています。)

     個人辞書の送りありエントリが充実していれば、標準の設定よりも候補が絞り込まれるので変換効率がアップしますが、さもなければ、すぐに辞書登録モードに入ってしまうため逆に不便になります。

変数 skk-henkan-okuri-strictly の値を 非 nil にすると、辞書登録モードに入っても送り仮名のマッチが厳密に行なわれます。これは辞書登録の際希望する候補を得るためには障害となります。そのような障害を避けるためには、下記のようにフック変数を設定します。これにより、辞書登録時だけは、一時的に送り仮名の厳密なマッチをしないようになります。 (実は変数 skk-henkan-okuri-strictly の値は辞書バッファで参照されるので、ミニバッファのバッファローカル値を変更してもうまくいきません。将来のバージョンでは、これを改良し、辞書バッファでの動作に影響するユーザー変数をバッファローカル化できるようにする予定です。

See 拡張アイディア.)

     (add-hook 'minibuffer-setup-hook
               (function
                (lambda ()
                  (if (and (boundp 'skk-henkan-okuri-strictly)
                           skk-henkan-okuri-strictly
                           (not (eq last-command 'skk-purge-jisyo)))
                      (progn
                        (setq skk-henkan-okuri-strictly nil)
                        (put 'skk-henkan-okuri-strictly 'temporary-nil t))))))

     (add-hook 'minibuffer-exit-hook
               (function
                (lambda ()
                  (if (and (get 'skk-henkan-okuri-strictly 'temporary-nil)
                           (<= (minibuffer-depth) 1))
                      (progn
                        (put 'skk-henkan-okuri-strictly 'temporary-nil nil)
                        (setq skk-henkan-okuri-strictly t))))))

送り仮名の自動処理
---------

どのように変換されるか
...........

skk-auto-okuri-process

     この変数の値を 非 nil に設定すると、送り仮名の自動処理が行なわれます。

例えば、T a t i a g e r u SPC と入力した場合を考えます。

たちあげる という見出し語に対し、送り仮名を明示していないので、まず送りなし変換として扱い辞書を検索します。このときは、通常の変換同様、個人辞書及び指定された共有辞書他を検索します。その後、送りありの検索に移ります。ここでは個人辞書のみを検索の対象とします。見出し語を最後尾から1文字づつ切り詰め、「切り詰めの結果残った文字列」と、「切り捨てられた先頭の文字のローマ字プレフィックス」を連結した文字列を送りあり変換の見出し語として、検索します。

この例において検索される見出し語の変化を追うと、

     たちあげる=>たちあげr=>たちあg
     =>たちa=>たt

のようになります。仮に個人辞書エントリが、

     たちあg /立ち上/[げ/立ち上/]/[が/立ち上/]/
     たt /建/断/経/立/[つ/建/断/経/立/]/[ち/建/断/経/立/]/[て/経/立/建/]/

の 2 つのエントリを含むとすると、見出し語を後方から順に切り詰める過程でたちあg と たt の 2 つの見出し語の検索時にこれらの辞書エントリがマッチします。

次に、マッチしたエントリの各候補に対し、切り捨てられた先頭の文字を送り仮名として取るかどうかをチェックします。この判断には、辞書の送り仮名ブロック部分 (送りありエントリのブロック形式.)を利用します。

たちあg の場合の送り仮名チェックの対象は、切り捨てられた最初の文字の げ です。辞書に

     [げ/立ち上/]

の部分があることから、送り仮名として取るべきと判断します。また、た t の場合の送り仮名チェックの対象は、ち です。辞書に

     [ち/建/断/経/立/]

の部分があることから、送り仮名として取るべきと判断します。

こうして、送り仮名がマッチする候補が 立ち上、建、断、経、立 の 5 つに絞られます。これらは文字列の長さ順に昇順にソートされ (長さ順にソートするのは、変換された部分がより長い候補を先順位として出力するためです。)、それぞれの候補と該当の見出し語から切り捨てられた文字列と連結したもの (該当の見出し語から切り捨てられた文字列 を送り仮名とみなして処理しています。)を、送り仮名の自動処理の最終候補として返します。上記の例では、立ち上げる、建ちあげる、断ちあげる、経ちあげる、立ちあげる の 5 つが最終候補になります。

ここで、自動送り機能の長所を考えてみると、

  * 送り仮名の最初のローマ字表現を大文字で始める必要がない。

  * 送り仮名を正確に思い出せない場合に送り仮名を指定しなくとも変換できる。

などがあります。一方短所としては、

  * 意図しない変換をされる割合が増える。

  * 個人辞書の送りありエントリが貧弱な場合は、自動処理ができない可能性が高い。

などが考えられます。変数 skk-auto-okuri-process の値を非 nil に設定しても、従来通りの送りあり変換も同時にできますから、一度この機能を試してみることをお勧めします。 (専ら補完的に自動送り処理を利用するのであれば、 (skk-okuri-search)を skk-search-prog-listの最後にもってくるという手もあります。)

辞書登録の際に注意すべきこと
..............

個人辞書に見出し語 わたs についてのエントリが全くない場合、あるいは個人辞書のエントリが

     わたs /渡/[し/渡/]/

のような送り仮名のブロックを持たない場合を考えてみます。ここで、W a t a s i t a SPCと入力すると、送り仮名の自動処理においては送り仮名がマッチしないので、候補が見つからずに辞書登録モードに入ります。

     W a t a s i t a SPC

     ------ Buffer: foo ------
     ▼わたした
     ------ Buffer: foo ------

     ------ Minibuffer -------
     わたした-!-
     ------ Minibuffer -------

辞書登録モードで W a t a S i t a RET と送り仮名を明示的に入力し、渡した と変換して登録したとします。この場合、登録する語の最後が平仮名で終わるので、その最後の平仮名の文字列 (上記の例では、した) が見出し語の最後と一致するかを調べます。一致する場合には、辞書の登録を送りありエントリとして行なうのかどうかの確認を求めます。

     W a t a S i t a
     ------ Minibuffer -------
     わたした 渡した
     ------ Minibuffer -------

     RET

     -------------------------- Echo Area --------------------------
     Shall I register this as okuri-ari entry: わたs /渡/ ? (y or n)
     -------------------------- Echo Area --------------------------

この確認に対し、y と回答した場合は、

     わたs /渡/[し/渡/]/

という辞書エントリが個人辞書の送りありエントリに書き込まれます。一方 n と回答した場合は、個人辞書の送りなしエントリに

     わたした /渡した/

というエントリが書き込まれます。本例の場合は、y と回答するのが正解です。

skk-kana-rom-vector

     この変数は、送り仮名部分をローマ字プレフィックスに分解する際に、参照されます。その既定値は以下のようになっています。

          ["x" "a" "x" "i" "x" "u" "x" "e" "x" "o" "k" "g" "k" "g" "k" "g"
           "k" "g" "k" "g" "s" "z" "s" "j" "s" "z" "s" "z" "s" "z" "t" "d"
           "t" "d" "x" "t" "d" "t" "d" "t" "d" "n" "n" "n" "n" "n" "h" "b"
           "p" "h" "b" "p" "h" "b" "p" "h" "b" "p" "h" "b" "p" "m" "m" "m"
           "m" "m" "x" "y" "x" "y" "x" "y" "r" "r" "r" "r" "r" "x" "w" "x"
           "x" "w" "n"]

     このベクトルは、それぞれ下記のかな文字をそのローマ字プレフィックスで現わしたものです。

          ぁ  あ  ぃ  い  ぅ  う  ぇ  え  ぉ  お  か  が  き  ぎ  く  ぐ
          け  げ  こ  ご  さ  ざ  し  じ  す  ず  せ  ぜ  そ  ぞ  た  だ
          ち  ぢ  っ  つ  づ  て  で  と  ど  な  に  ぬ  ね  の  は  ば
          ぱ  ひ  び  ぴ  ふ  ぶ  ぷ  へ  べ  ぺ  ほ  ぼ  ぽ  ま  み  む
          め  も  ゃ  や  ゅ  ゆ  ょ  よ  ら  り  る  れ  ろ  ゎ  わ  ゐ
          ゑ  を  ん

     これに従うと、見出し語中の送り仮名がローマ字プレフィックスに分解される際、例えば じ は j に、ち は t に、ふ は h に、それぞれ分解されます。これらをそれぞれ z、c、 f に変更することもできます。それには変数 skk-kana-rom-vector の該当部分を "z"、"c"、"f" に変更します。

          (setq skk-rom-kana-vector
                ["x" "a" "x" "i" "x" "u" "x" "e" "x" "o" "k" "g" "k" "g" "k" "g"
                 "k" "g" "k" "g" "s" "z" "s" "z" "s" "z" "s" "z" "s" "z" "t" "d"
                 "c" "d" "x" "t" "d" "t" "d" "t" "d" "n" "n" "n" "n" "n" "h" "b"
                 "p" "h" "b" "p" "f" "b" "p" "h" "b" "p" "h" "b" "p" "m" "m" "m"
                 "m" "m" "x" "y" "x" "y" "x" "y" "r" "r" "r" "r" "r" "x" "w" "x"
                 "x" "w" "n"])

次にもうひとつ例を挙げます。 ありがさつき に対し 有賀さつきを登録したい場合は、上記と同様に辞書登録をし、

     Shall I register this as okuri-ari entry: ありがs /有賀/ ? (y or n)

の確認に対し n と回答します。この結果、個人辞書の送りなしエントリには、

     ありがさつき /有賀さつき/

というエントリが書き込まれます。

送りあり変換の変換開始のタイミング
-----------------

skk-process-okuri-early

     この変数の値を 非 nil に設定すると、送りあり変換の変換開始のタイミングが早められます。つまり、送り仮名のローマ字プレフィックスの入力時点で変換を開始します。

          U g o K

          ------ Buffer: foo ------
          ▼動k
          ------ Buffer: foo ------

     送り仮名が分らないまま変換しているため、個人辞書が送り仮名に対応した形に成長しません。つまり うごk /動/ のような形態のままとなります。ただし、

          うごk /動/[く/動/]/[か/動/]/[け/動/]/[き/動/]/[こ/動/]/

     のようなエントリが既に個人辞書にある場合、それを破壊することはありません。 (辞書の形式を参照してください。)。

     このユーザーオプションを 非 nil に設定して SKK モードを起動すると、両立できないオプションである下記オプションは自動的に nil に設定されます。

          skk-kakutei-early,
          skk-auto-okuri-process, skk-henkan-okuri-strictly

     既に SKK モードに入った後で この変数の設定を変更した場合は、カレントバッファで C-x C-j もしくは C-x j を 2 回タイプして SKK モードを起動し直すことで、これらの変数間の衝突を調整します。またはメニューバーからこのユーザーオプションをオンにすると、自動的に上記の衝突を調整するように設計されています。

          See skk-kakutei-early.
          See skk-auto-okuri-process.
          See skk-henkan-okuri-strictly.

カナモードでの変換の送り仮名の処理
-----------------

カナモードのまま変換を行なうと、見出し語をひらがなに変換してから辞書の検索を行います(see カタカナの見出し語)。このことは、カナモードで送りあり変換を行なうと、

     ------ Buffer: foo ------
     考えル。
     ------ Buffer: foo ------

のように、送り仮名の第 1 文字だけがひらがなのまま残ってしまうことを意味します。そこで以下の変数が用意されています。

skk-convert-okurigana-into-katakana

     この変数の値を非 nil に設定すると、カナモードで送りあり変換を行なった場合、送り仮名の第 1 文字もカタカナに変換します。

自動変換開始
======

▽モードで見出し語の入力中に、単語や文節の区切りとなるような文字を打鍵すると、▽マークからポイントの直前の文字までを見出し語とし (最後に入力された文字は見出し語には含まれません。)、SPC を打鍵することなく自動的に変換を開始し、▼モードに入るようになっています。 (某メーカーの MS-DOS 上の FEP の仕様を参考にしています。)。

     K a n j i

     ------ Buffer: foo ------
     ▽かんじ
     ------ Buffer: foo ------

     w o
     ------ Buffer: foo ------
     ▼漢字を
     ------ Buffer: foo ------

変数 skk-auto-okuri-process の値を非 nil に設定して 送り仮名の自動処理(see 送り仮名の自動処理)を行なっている場合は、以下のような変換も可能です。ただし、辞書に できr /出来/[る/出来/]/ というようなエントリがあると仮定します。

     D e k i r u n n d e s u

     ------ Buffer: foo ------
     ▽できるんです
     ------ Buffer: foo ------

     .
     ------ Buffer: foo ------
     ▼出来るんです。
     ------ Buffer: foo ------

skk-auto-start-henkan-keyword-list

     この変数の値は、単語や文節の区切りとなるような文字列のリストです。既定値は以下のようになっています。

          ("を" "、" "。" "．" "，" "？" "」" "！" "；" "：" ")" ";"
           ":" "）" "”" "】" "』" "》" "〉" "｝" "］" "〕" "}"
           "]" "?" "." "," "!" )

skk-auto-start-henkan

     この変数の値を nil に設定すると、本節で説明した自動変換開始機能を無効にします。

特殊変換
====

数値変換
----

第１２回 というような表現において、数字の部分を # で置きかえてみると、第#回 となります。ここで、# の部分にはあらゆる整数が代入できます。のみならず、例えば 第12回、第一二回、第十二回 など、様々な形式があてはめられます。

そこで、# をパラメータ (媒介変数) と考えて、第#回 という文字列を操作する、というのが、SKK における数値変換の基本的な発想です。

辞書のエントリの例によって具体的に説明します。SKK の L 辞書には、次のようなエントリがあります。

     だい#かい /第#1回/第#0回/第#2回/第 #0 回/第#3回/

だい12かい のような見出し語で変換しようとした場合、見出し語の数字の部分は自動的に # に置き換えられるようになっているので、上記の例にマッチします。

次に上記の例の各候補の意味について説明します。いずれも # の次に 1 桁の数字が続く部分があります。これは、これらが候補として出力される前に数値変換によって加工されることを意味します。そして、0 から 9 の数字はその候補にかけられる数値変換のタイプを表しています。

以下、数値変換の各タイプについて説明します。

#0

     タイプ 0。無変換。入力されたアスキー文字をそのまま出力します。例えば、第12回 のような変換を得るために使われます。

#1

     タイプ 1。全角文字での数字。12 を １２に変換します。

#2

     タイプ 2。漢数字で位取りなし。5500 を 五五〇〇 に変換します。

#3

     タイプ 3。漢数字で位取りあり。5500 を 五千五百 に変換します。

#4

     タイプ 4。数値再変換。見出し語中の数字そのもの (p125 という見出し語であれば、その数値部分である 125 が再変換の見出し語となります。)をキーとして辞書を再検索し、 #4 の部分を再検索の結果の文字列で入れ替えます。これについては後で例を挙げて説明します。

#5

     タイプ 5。小切手や手形の金額記入の際用いられる表記で変換します。例えば、 1995 を 壱阡九百九拾伍 に変換します。

#9

     タイプ 9。将棋の棋譜の入力用。全角数字 + 漢数字 に変換します。これについては後で例を挙げて説明します。

以下にいくつか例を示します。辞書に

     # /#3/

というエントリがあるときに、

     Q 1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 SPC (または/
     1 0 0 2 0 0 3 0 0 4 0 0 5 0 0 SPC。)

と入力すれば、百兆二千三億四十万五百と変換されます (数字を大文字で入力し始めることはできないので、Q または / で▽モードに入る必要があります。)。

辞書に

     #m#d /#0月#0日/

というエントリがあるときに、/ 2 m 2 5 d SPC と入力すれば、 2月25日と変換されます (m や d などアスキー文字を見出し語として入力する場合は / キーを最初に入力して SKK abbrev mode に入ってから入力する必要があります。

See SKK abbrev mode.)。

辞書に

     #kin /#9金/

というエントリがあるときに、/ 3 4 k i n SPC と入力すれば、３四金と変換されます。

辞書に

     p# /#4/
     125 /東京都葛飾区/

というエントリがあるときに、/ p 1 2 5 SPC と入力すれば、見出し語 p125 の候補が #4 なので、見出し語の数字部分の 125 に対し辞書が再検索され、東京都葛飾区 と変換されます。

次に、辞書登録の例を 1 つ挙げます。２月２５日を得るために、

     Q 2 g a t u 2 5 n i t i SPC

と入力したときに、辞書に見出し語

     #がつ#にち

がないときは、辞書登録時のプロンプトは、#がつ#にちとなります。全角数字のタイプは、#1 なので、２月２５日の全角数字部分を #1 で置き換えた文字列 #1月#1日 をミニバッファで作り登録します。辞書には

     #がつ#にち /#1月#1日/

というエントリが追加されます。

skk-num-convert-float

     この変数の値を非 nil に設定すると、浮動小数点数を使った見出し語に対応して数値変換を行ないます。ただし、辞書において

          #.# /#1．#1/#0月#0日/

     などの見出し語が使用できなくなります。

skk-use-numeric-conversion

     この変数を nil に設定すると、本節で説明した数値変換の機能を全て無効にします。

アスキー文字を見出し語とした変換
----------------

SKK abbrev modeでは、アスキー文字を見出し語とした変換を行なうことができます。

まず、かなモードに入ります。/ を入力すると、見出し語入力の間だけ一時的に SKK abbrev mode に入ります。続けて入力する文字は、アスキー文字としてカレントバッファに挿入される。見出し語となるアスキー文字を入力し終った時点で SPC を押すと、その見出し語についての変換が得られます。

仮に、

     is /インクリメンタル・サーチ/

というようなエントリが辞書にあるとして、例を示します。

     /

     ------ Buffer: foo ------
     ▽
     ------ Buffer: foo ------

     is

     ------ Buffer: foo ------
     ▽is
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼インクリメンタル・サーチ
     ------ Buffer: foo ------

     C-j

     ------ Buffer: foo ------
     インクリメンタル・サーチ
     ------ Buffer: foo ------

入力したアスキー文字をそのまま全角アルファベットに変換する方法については、

     See 全角アルファベットへの変換.

を参照してください。

なお、SKK abbrev mode においても見出し語の補完を行なうことができます。

     See 見出し語の補完.

今日の日付の入力
--------

かな/カナモードで @ を入力すれば、今日の日付が入力されます。

日付の形式は以下の変数により決定されます。

skk-date-ad

     この変数の値が非 nil であれば西暦で、nil であれば元号で表示します。既定値は nil です。

skk-number-style

     この変数の値は以下のように解釈されます。

     0
     nil

          半角数字。1996年7月21日(日) のようになります。

     1
     t

          全角数字。１９９６年７月２１日(日) のようになります1。

     2

          漢数字。一九九六年七月二一日(日) のようになります。

     上記の 1996年、１９９６年、一九九六年 の部分は、変数 skk-date-ad の値が nil であれば 平成8年 のように元号で表示されます。 skk-number-style の既定値は、1 です。

L 辞書 (see L辞書.)には、見出し語 today の候補として、skk-date-ad と skk-number-style の全ての組合わせがプログラム実行変換機能 (プログラム実行変換.)を用いて登録されています。従って、 / t o d a y SPC と入力すると、今日の日付が上記の形式で順次候補として表示されます。

@ によって日付けを挿入するのではなく、文字通り @ を挿入したい場合には、

     (setq skk-rom-kana-rule-list
           (append skk-rom-kana-rule-list
                   '(("@" nil "@"))))

のようにします。全角文字の ＠ を挿入したい場合は、

     (setq skk-rom-kana-rule-list
           (append skk-rom-kana-rule-list
                   '(("@" nil "＠"))))

のようにします。

プログラム実行変換
---------

辞書の候補に Emacs Lisp のプログラムが書いてあれば、そのプログラムを Emacs に実行させ、返り値をカレントバッファに挿入します。これを 「プログラム実行変換」と読んでいます。例えば、辞書に

     now /(current-time-string)/

というエントリがあるとします。このとき / n o w SPC と入力すれば、現在のバッファに current-time-string の返り値である

     Sun Jul 21 06:40:34 1996

のような文字列が挿入されます。

ここで、プログラムの返り値は文字列である必要があります。また、プログラム実行変換の辞書登録は通常の単語と同様に行なうことができますが、その中に改行を含まないように書く必要があります (通常の単語では、改行を含むことが可能です。それは、評価するとその位置に改行を挿入するような実行変換プログラムに変換して辞書に書き込んでいるからなのです。

see 辞書の形式.

しかし、実行変換されるプログラムを辞書登録する際にはこの機能を利用できないため、改行を含むことができません。)。

今日の日付の入力 (今日の日付の入力.) で説明した today の辞書エントリは、実際は下記のようなプログラムを候補にもっています。

     today /(let ((skk-date-ad) (skk-number-style t)) (skk-today))/.../

skk-gadget.el (gadgetは「上手く工夫した道具」の意味。「色々飛び出す気のきいたおもちゃ箱」というような意味で名付けられています。因みに、X Windowで使用される Widget という言葉は、 window + gadget から作られた造語のようです。)には、西暦/元号変換プログラムや、簡単な計算プログラムなど、実行変換用のプログラムが集められています。ここではその中の 1 つを取り上げて説明します。

下記は、引数を 1 つ取り、見出し語の数字に対しその演算を行なう簡単な計算プログラムです。

     (defun skk-calc (operator)
       ;;2つの引数を取って operator の計算をする。
       ;;注意: '/ は引数として渡せないので (defalias 'div '/) などとし、別の形で
       ;;skk-calc に渡す。
       ;;辞書見出し例; #*# /(skk-calc '*)/
       (number-to-string (apply operator (mapcar 'string-to-number skk-num-list))))

この関数を実際にプログラム実行変換で利用するには、辞書に以下のようなエントリを追加します (数値変換.)。

     #*# /(skk-calc '*)/

Q 1 1 0 * 4 5 SPC と入力します。ここで、111 と 45 の 2 つの数字は、変換時に ("111" "45") のような文字列のリストにまとめられ、変数 skk-num-list の値として保存されます。次に関数 skk-calc が呼ばれます。この中で、skk-num-list の各要素に対し演算を行うため、各要素は数に変換されます。その上で、 skk-calc に与えられた引数 (この場合は *) を演算子として演算を行います。

接頭辞・接尾辞
=======

接頭辞 (prefix)、接尾辞 (suffix)の入力のために特別な方法が用意されています。

辞書の見出し語の一部に >, <, ? を用いている場合があります。例えば

     >し /氏/

というエントリがあるとき、小林氏を接尾辞入力を用いて、以下のように入力することができます。

     K o b a y a s h i

     ------ Buffer: foo ------
     ▽こばやし-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼小林-!-
     ------ Buffer: foo ------

     >

     ------ Buffer: foo ------
     小林▽>-!-
     ------ Buffer: foo ------

     s i

     ------ Buffer: foo ------
     小林▽>し-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     小林▼氏-!-
     ------ Buffer: foo ------

     C-j

     ------ Buffer: foo ------
     小林氏-!-
     ------ Buffer: foo ------

このように入力することで、見出し語 し に対応する語でも接尾辞になり得ないものは候補に現れないので、変換効率がよくなります。

また、辞書に

     ちょう> /超/

というエントリがあるとき、超大型 を接頭辞入力を用いて、以下のように入力することができます。

     T y o u

     ------ Buffer: foo ------
     ▽ちょう-!-
     ------ Buffer: foo ------

     >

     ------ Buffer: foo ------
     ▼超-!-
     ------ Buffer: foo ------

     O o g a t a

     ------ Buffer: foo ------
     超▽おおがた-!-
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     超▼大型-!-
     ------ Buffer: foo ------

     C-j

     ------ Buffer: foo ------
     超大型-!-
     ------ Buffer: foo ------

skk-special-midashi-char-list

     ▽モードまたは▼モードにおいて、この変数の値に含まれる文字の入力があった場合、接頭辞・接尾辞の入力を開始します。この変数の既定値は、

          (?> ?< ??)

     です。? を入力したときに接頭辞・接尾辞入力を行わない場合は ? を外して

          (setq skk-special-midashi-char-list '(?> ?<))

     とします。

暗黙の確定のタイミング
===========

標準の設定では、▼モードにおいて印字可能な文字または RET が入力されると、暗黙の確定が行なわれ直ちに確定されます。具体的には以下のようになります。

     K a k u t e i

     ------ Buffer: foo ------
     ▽かくてい
     ------ Buffer: foo ------

     SPC

     ------ Buffer: foo ------
     ▼確定
     ------ Buffer: foo ------

     s

     ------ Buffer: foo ------
     確定s
     ------ Buffer: foo ------

     u

     ------ Buffer: foo ------
     確定す
     ------ Buffer: foo ------

skk-kakutei-early

     この変数の値を非 nil にすると、暗黙の確定が行なわれるタイミングが変化します。具体的には、括弧 ((, ), [, ]) または句読点 (,, .) の入力時、次の変換開始 (AからZまでの大文字の入力) 時、あるいは RET 入力時まで暗黙の確定が遅延されます。 (skk-kakutei-early の機能と skk-process-okuri-early の機能を同時に有効にすることはできません。 skk-kakutei-early の 値を非 nil にする場合は skk-process-okuri-early の値を nil にする必要があります。メニューバーからこのユーザーオプションをオンにしたときは、これらのユーザーオプション間の衝突は自動的に調整されます。)

          K a k u t e i

          ------ Buffer: foo ------
          ▽かくてい
          ------ Buffer: foo ------

          SPC

          ------ Buffer: foo ------
          ▼確定
          ------ Buffer: foo ------

          s

          ------ Buffer: foo ------
          ▼確定s
          ------ Buffer: foo ------

          u r u

          ------ Buffer: foo ------
          ▼確定する
          ------ Buffer: foo ------

          .

          ------ Buffer: foo ------
          確定する。
          ------ Buffer: foo ------

領域一括変換
======

以下のコマンドを M-x により呼ぶことで領域一括変換を行なうことができます (メニューバーが使用できる環境では、メニューバーを使ってこれらの一括変換コマンドを呼び出すことができます。

See メニューバー (GNU Emacs Manual).)。

M-x skk-hiragana-region

     カタカナをひらがなへ変換。

M-x skk-katakana-region

     ひらがなをカタカナへ変換。

M-x skk-ascii-region

     全英文字をアスキー文字へ変換。

M-x skk-zenkaku-region

     アスキー文字を全英文字へ変換。

以下に紹介するコマンドについては、外部プログラム KAKASI に依存しています。 KAKASI がインストールされていなければ使用することができません。

     See KAKASI.

M-x skk-gyakubiki-region

     漢字をひらがなへ変換。具体的な変換例をあげると、

          ``漢字をひらがなへ変換。''==>``かんじをひらがなへへんかん。''

     のようになります。引数を渡して、

     C-u M-x skk-gyakubiki-region

     のようにすると、複数の候補がある場合に、`{}' で囲って表示します。例えば

          ``中島''==>``{なかしま|なかじま}''

     のようになります。

     送り仮名がある語は、送り仮名まで含めて領域に指定します (さもないと誤変換の原因となります)。 例えば、五月蝿い について、送り仮名 いを含めずにこのコマンドを実行すると、ごがつはえ に変換されてしまいます。

M-x skk-gyakubiki-katakana-region

     漢字をカタカナへ変換。

     引数を渡して、C-u M-x skk-gyakubiki-katakana-region のようにすると、複数の候補がある場合に、`{}' で囲って表示します。

M-x skk-hurigana-region

     漢字にふりがなを付ける。例えば、

          ``漢字の脇に''==>``漢字[かんじ]の脇[わき]に''

     のようになります。引数を渡して C-u M-x skk-hurigana-region のようにすると、複数の候補がある場合に、`{}' で囲って表示します。

M-x skk-hurigana-katakana-region

     漢字にカタカナのふりがなを付ける。

     引数を渡して、C-u M-x skk-hurigana-katakana-regionのようにすると、複数の候補がある場合に、`{}' で囲って表示します。

M-x skk-romaji-region

     漢字、ひらがな、カタカナ、全英文字を全てローマ字へ変換。標準では、ローマ字への変換様式にヘボン式です。例えば、

          ``し''==>``shi''

     となります。変数 skk-romaji-*-by-hepburn の値を nil に設定すると、訓令式を用います。例えば、

          ``し''==>``si''

     のようになります (昭和 29 年 12 月 9 日付内閣告示第一号によれば、原則的に訓令式 (日本式) を用いるかのように記載されていますが、今日一般的な記載方法は、むしろヘボン式であるようです。)。

以下のコマンドは、領域の文字列を置き換えるの代わりに、変換結果をエコーエリアに表示します。

  * M-x skk-gyakubiki-message

  * M-x skk-gyakubiki-katakana-message

  * M-x skk-hurigana-message

  * M-x skk-hurigana-katakana-message

  * M-x skk-romaji-message

漢字コード関連
=======

漢字コードまたはメニューによる文字入力
-------------------

まずかなモードに入ります。\ キーを入力すると、漢字コード (JIS または EUC コード) またはメニューによる文字入力が行われます。ミニバッファには、

     JIS or EUC code (00nn or CR for Jump Menu):

というプロンプトが表示されます。

ここで、漢字コードがあらかじめ分かっている場合には、その漢字コードを入力します。例えば ℃ の漢字コードは、JIS コードでは 216e、EUC コードでは a1ee なので、いずれかの漢字コードを入力すれば ℃ が現在のバッファに挿入されます。

漢字コードが不明の文字の入力をする場合は、漢字コードを入力せずにそのまま RET キーを入力します。すると以下のような表示が現れます。

     A:　  S:￣  D:〜  F:｝  G:＝  H:¢  Q:◆  W:〓  E:∩  R:〓  T:≡  Y:〓

これを第 1 段階のメニューと呼びます。第 1 段階のメニューでは、JIS 漢字をコードの順に 16 文字毎に 1 文字抽出し、ミニバッファに一度に 12 文字づつ表示しています (上記の例では、JISコード 2121 (全角スペース)、2131、2141、2151、 ... の文字がそれぞれ表示されています。)。ここで SPC を入力すると、次の候補群を表示します (漢字コードの値を16x12 ==192づつ増やします。)。 x により 1 つ前の候補群に戻ります。

キー a, s, d, f, g, h, q, w, e, r, t, y のいずれかを入力すると
 (大文字でも小文字でも構いません。なお、第 1 段階・第 2 段階とも
に、メニューのキーは変更することができます。これについては、)

     see 候補の選択に用いるキー.

を参照してください。、そのキーに対応する文字から始まる 16 個の文字が漢字コード順に表示されます。これを第 2 段階のメニューと呼びます。例えば、第 1 段階のメニューが上記の状態のときに d を入力すると 第 2 段階のメニューは以下のようになります。

     A:〜 S:‖ D:｜ F:… G:‥ H:‘ J:’ K:“ L:” Q:（ W:） E:〔 R:〕 T:［ Y:］ U:｛

ここでタイプすると、キー a, s, d, f, g, h, q, w, e, r, t, y のいずれかを入力すると、対応する文字がカレントバッファに挿入されてメニューによる入力が終了します。

第 2 段階のメニューが表示されているときも SPC と x キーにより第 2 段階のメニューが前進、後退します。

また <、> によりメニューを 1 文字分だけ移動します。例えば、第 2 段階のメニューが上記の状態のときに< を入力すると、メニューは以下のようになります。

     A:＼ S:〜 D:‖ F:｜ G:… H:‥ J:‘ K:’ L:“ Q:” W:（ E:） R:〔 T:〕 Y:［ U:］

第 1 段階あるいは第 2 段階のメニューが表示されているときに ? を入力すると、そのときのキー A に対応する文字 (上記の例では、＼) の文字コードが表示されます。

漢字コードを知る方法
----------

かな/カナモードで $を入力すると、現在位置の直後にある文字の漢字コードをミニバッファに表示します。例えば、カーソルを文字 А の上に置いて $を入力すると、

     『А』  EUC: a7a1 (167, 161), JIS: 2721 ( 39,  33)

がエコーエリアに表示され、この文字がロシア文字であることがわかります。

▼モードの特殊キー
=========

確定動作を行なうキー
----------

skk-kakutei-key

     この変数の値は、明示的な確定動作を行うキーを指定します。標準設定では \C-j となっています。

候補の選択に用いるキー
-----------

変換において、候補が 5 つ以上あるときは、 5 番目以降の候補は 7 つずつまとめてエコーエリアに下記のように表示されます (▼モード.)。

     -------------------- Echo Area --------------------
     A:嘘  S:拒  D:拠  F:虚  J:挙  K:許  L:渠  [残り 2]
     -------------------- Echo Area --------------------

この際、候補の選択に用いるキーは、次の変数によって決定されます。

skk-henkan-show-candidates-keys

     7 つの異なる文字のリスト。文字は必ず小文字とする (x, SPC および C-g は、それぞれ候補選択中における前候補群の表示、次候補群の表示、取り止めのために割り付けられているので、skk-henkan-show-candidates-keys の中に含めてはいけません。)。既定値は、以下の通り。

          (?a ?s ?d ?f ?j ?k ?l)

メニューによる文字入力 (漢字コードまたはメニューによる文字入力.)の際に候補の選択に用いられるキーは、下記の 2 変数により変更されます。

skk-input-by-code-menu-keys1

     第 1 段階のメニューにおける候補の選択キー。既定値は、

          (?a ?s ?d ?f ?g ?h ?q ?w ?e ?r ?t ?y)

     です。このリストには 12 個の異なる文字を含む必要があります。

skk-input-by-code-menu-keys2

     第 2 段階のメニューにおける候補の選択キー。既定値は、

          (?a ?s ?d ?f ?g ?h ?j ?k ?l ?q ?w ?e ?r ?t ?y ?u)

     です。このリストには 16 個の異なる文字を含む必要があります。

上記 2 変数のすべての要素を、全て小文字で指定することを強くお勧めします (小文字が指定された場合は、候補の選択の際に対応する大文字キーが入力されても候補の選択が可能となるように設計されています。その一方で、大文字が指定された場合、候補の選択の際に対応する小文字キーが入力されても候補の選択ができません。これは現在の仕様です。)。

▼モードでのRET
---------

標準設定では、

     K a k u t e i SPC

     ------ Buffer: foo ------
     ▼確定-!-
     ------ Buffer: foo ------

     RET

     ------ Buffer: foo ------
     確定
     -!-
     ------ Buffer: foo ------

のように、▼モードで RET を入力すると、確定し、かつ改行を行います。この挙動を変えるためのユーザーオプションが用意されています。

skk-egg-like-newline

     この変数の値を非 nil にすると、▼モードで RET を入力したときに確定のみ行い、改行はしません
      (従って、辞書登録モードにおいて▼モードであるときの RET
     入力時の挙動も変化します。標準の確定、登録の動作については、)

          see 辞書登録モード.

     を参照してください。。

          K a k u t e i SPC

          ------ Buffer: foo ------
          ▼確定-!-
          ------ Buffer: foo ------

          RET

          ------ Buffer: foo ------
          確定-!-
          ------ Buffer: foo ------

▼モードでのBS
--------

標準設定では、▼モードで BS を押すと、前の一文字を削除した上で確定します。

     D e n k i y a SPC

     ------ Buffer: foo ------
     ▼電気屋
     ------ Buffer: foo ------

     BS

     ------ Buffer: foo ------
     電気
     ------ Buffer: foo ------

skk-delete-implies-kakutei

     この変数の値を非 nil に設定すると、▼モードで BS を押した時に一つ前の候補を表示します。例えば、

          でんき /電気/伝記/

     という辞書エントリがあるとき、以下のようになります。

          D e n k i SPCSPC

          ------ Buffer: foo ------
          ▼伝記
          ------ Buffer: foo ------

          BS

          ------ Buffer: foo ------
          ▼電気
          ------ Buffer: foo ------

          BS

          ------ Buffer: foo ------
          ▽でんき
          ------ Buffer: foo ------

送りあり変換中のC-g
-----------

送りありの変換中に C-g を入力すると、▼モードを抜け、その見出し語と送り仮名を現在のバッファに挿入し、■モードに入ります。

     N a K u

     ------ Buffer: foo ------
     ▼泣く
     ------ Buffer: foo ------

     C-g

     ------ Buffer: foo ------
     なく
     ------ Buffer: foo ------

skk-delete-okuri-when-quit

     この変数の値を非 nil に設定すると、送りありの変換中に C-g を入力したときの挙動が変化します。具体的には、送り仮名を消し、▽モードになります (送り仮名の入力間違いを修正するのには便利です。)。例えば、以下のようになります。

          N a K u

          ------ Buffer: foo ------
          ▼泣く
          ------ Buffer: foo ------

          C-g

          ------ Buffer: foo ------
          ▽な
          ------ Buffer: foo ------

辞書関連
====

個人辞書中の単語の削除
-----------

誤って個人辞書 (see 個人辞書.)に登録した単語を削除する機能があります。

削除したい単語を変換により求め、その単語が得られた時点で X を入力します。ミニバッファに確認が出るので、それに対し y e sと答えます。すると、個人辞書の対応するエントリが削除されます。現在のバッファに先程入力した誤りの変換結果も削除されます。

     さいきてき /再起的/

というエントリを誤って登録したという仮定で、その誤登録を削除する場合を例にとって説明します。

     S a i k i t e k i SPC

     ------ Buffer: foo ------
     ▼再起的
     ------ Buffer: foo ------

     X

     ------------------ MiniBuffer ------------------
     Really purge ``さいきてき /再起的/''?(yes or no)
     ------------------ MiniBuffer ------------------

     y e s RET

     ------ Buffer: foo ------

     ------ Buffer: foo ------

個人辞書の保存動作
---------

個人辞書の保存動作について説明します。

個人辞書の保存が行われる場合として、次の 3 通りがあります。

 1. C-x C-c (または M-x save-buffers-kill-emacs) により Emacs を終了させようとした場合。

 2. M-x skk-save-jisyo と入力するか、メニューバーより Save Jisyo を選択した場合。

 3. 変数 skk-jisyo-save-count で指定された回数辞書の更新を行なった結果として、自動保存 (オートセーブ) 機能が働くとき。

保存動作を分析して考えます。まず、 Emacs に読み込んだ個人辞書が更新されているかどうかを調べます。更新されていたら保存動作に入ります。Emacs の個人辞書バッファを一時ファイルに保存して、そのファイルサイズが現存の (セーブ前の) 個人辞書より小さくないかどうかをチェックします。個人辞書より小さいときは、保存動作を継続するかどうか、確認のための質問がされます。 (通常の使用の範囲ではM-x skk-purge-from-jisyoした場合、あるいは個人辞書をユーザーが意図的に編集した場合、複数の Emacs で SKK を使用した場合などに、個人辞書が小さくなることがあります。他の場合はバグの可能性があります。)

     --------------------------- Minibuffer -----------------------------
     New ~/.skk-jisyo will be 11bytes smaller.  Save anyway?(yes or no)
     --------------------------- Minibuffer -----------------------------

ここで n o RET と答えた場合は、そこで保存動作が中止され、個人辞書は以前の状態のままになります。y e s RET と答えた場合は元の個人辞書を退避用の辞書に退避し、一時ファイルに保存した新しい個人辞書を skk-jisyo に保存します。

もし、一時ファイルのサイズが 0 である場合は、なんらかの異常と考えられるので、保存動作は直ちに中止されます。その場合は

     M-x skk-kill-emacs-without-saving-jisyo

で Emacsを終了させ、個人辞書 (skk-jisyo)、および個人辞書の退避用辞書 (skk-backup-jisyo) をチェックするよう強くお勧めします (skk-jisyo が既に壊れていても、skk-backup-jisyo にそれ以前の個人辞書が残っている可能性があります)。

skk-compare-jisyo-size-when-saving

     この変数の値を nil に設定すると、一時ファイルが 0 でないかどうかのチェックは行いまずか、保存前の個人辞書とのサイズ比較は行ないません。

skk-jisyo-save-count

     この変数で指定された回数、個人辞書の更新を行なった場合に個人辞書の自動保存が行なわれます。既定値は 50 です。また、この値を nil にすると、個人辞書の自動保存機能が無効になります。

     ここで、個人辞書の更新回数は確定回数と一致します。また、同じ候補について確定した場合でもそれぞれ 1 回と数えられます。 (これは、個人辞書の最小ポイントに、常に最後に変換を行なったエントリを移動させるために、エントリ数、候補数が全く増えていなくとも、確定により個人辞書が更新されているからです。)

変換及び個人辞書に関する統計
--------------

SKK では、Emacs の終了時に変換及び個人辞書に関する統計を取っています。その結果は ファイル ~/.skk-record に保存されます。保存される内容は以下のような形式です。

     Sun Jul 28 09:38:59 1996  登録:   4  確定:  285  確定率:  98%  語数:  3042

上記の「語数」の欄は 1 行を 1 語として数えているので、1 つの見出し語に対し複数の候補を持っている場合、2 つ目以降の候補を無視しています。

skk-record-file

     統計の結果を保存するファイル名を指定します。

skk-keep-record

     この変数の値を nil に設定すると、本節で説明した統計機能を無効にします。

skk-count-private-jisyo-candidates-exactly

     この変数の値を非 nil に設定すると、「語数」の数え方を変更します。具体的には、 1 行を 1 語として数えるのではなく、正確に語数を数えます。なお、その分時間がかかります。また、この場合でも [ と ] に囲まれた送り仮名毎のブロック形式内は数えません。

辞書候補数の数えあげ
----------

コマンド M-x skk-count-jisyo-candidates を使うと、辞書の候補数を数えることができます。

     M-x skk-count-jisyo-candidates

     --------------- MiniBuffer --------------
     File: (default: /your/home/.skk-jisyo) ~/
     --------------- MiniBuffer --------------

     . s k k - j i s y o RET

     -------------- Echo Area --------------
     Counting jisyo candidates... 100% done
     -------------- Echo Area --------------

     ------ Echo Area ------
     3530 entries
     ------ Echo Area ------

ただし、[と]に囲まれた送り仮名毎のブロック形式内は数えません。

また、メニューバーが使用できる環境では、メニューバーを使ってこのコマンドを呼び出すことができます。

     See メニューバー (GNU Emacs Manual).

辞書バッファの文字コードの設定
---------------

skk-jisyo-code

     この変数の値は辞書ファイルの漢字コードを決定します。

     この変数は以下のような値を取ります。 (Mule 2.3 では *euc-japan*, *sjis*, *junet* などのシンボルを指定することができます。 Emacs 20 では、euc-jp, shift_jis, junet などのシンボルを指定することができます。)

       * ``euc'', ``ujis'', ``sjis'', ``jis'' などの文字列

       * Emacs によって coding system と認められるシンボル

       * Emacs によって coding system を示すのに使われるシンボル

       * nil

     既定値は nil です。この場合、SKK側で辞書の漢字コードを設定することはせず、 Emacs に任せます。

辞書バッファのメジャーモード
--------------

辞書検索プログラムを実行すると、必要ならば辞書が Emacs のバッファに読み込まれます。このバッファを辞書バッファと呼びます。

辞書バッファの名前は、

「空白+*+辞書ファイル名(ディレクトリ抜き)+*」

という規則に基づいて付けられます。例えば、変数 skk-large-jisyo の値が

/usr/local/share/skk/SKK-JISYO.L

であるとき、これに対する辞書バッファ名は、

 *SKK-JISYO.L*

となります。

このバッファのメジャーモードは fundamental-mode です。しかし、諸般の事情により、変数 major-mode の値をシンボル skk-jisyo-mode、変数 mode-name の値を文字列 SKK dic としています。 (これは、Emacs の dabbrev.el の機能との調和を考えての措置です。 Dabbrev においては、現在のバッファと同じモードの他のバッファを検索して abbreviation の展開を行なうように設定することができるのですが、仮に辞書バッファにおける変数 major-mode の値が fundamental-mode のままだとすると、 Dabbrev が辞書バッファを検索してしまう可能性があります。この措置によって、そのような事態を回避しています。)

辞書バッファのbuffer-file-name
-----------------------

Emacs には save-some-buffers という関数があります。この関数は、ファイルに関連付けられている各バッファについて、変更があればファイルに保存しますが、実際に保存するかどうかを使用者に質問します。

Emacs のコマンドには M-x compile のように、 save-some-buffers を呼び出すものがあります。もし、個人辞書の辞書バッファがファイル名と関連付けられていたとしたら、こうしたコマンドを実行するたびに個人辞書を保存するかどうか質問されるので、面倒です。

SKK では、このような事態を避けるため、辞書バッファにおける変数 buffer-file-name の値を nil に設定しています。

SKK 以外のツールを用いた辞書変換
==================

skk-lookup
----------

skk-lookup を使用すると、辞書検索ツールの Lookup (http://openlab.ring.gr.jp/lookup/) で検索できる辞書を用いて単語の候補を出すことができるようになります (skk-lookup は skk-look とは別ものです。)。

SKK をインストールする時に、 SKK-CFG を編集して、 lookup.el のあるパスを VERSION_SPECIFIC_LISPDIR に設定してインストールして下さい。自動的に skk-lookup がインストールされます (関数 skk-lookup-search が skk-autoloads.el に追加されます (see 辞書検索のための関数)。)。

.skk に以下のように設定します。

     (setq skk-search-prog-list
           '((skk-search-jisyo-file skk-jisyo 0 t)
             (skk-search-server skk-aux-large-jisyo 10000)
             (skk-lookup-search)))

SKK が用意している検索プログラムの中で最も遅いため (6 倍速 CD-ROM ドライブではストレスを感じる程、遅くありませんでした)、 skk-search-server の後ろに持ってきてサーバの検索より後にします。

Lookup の agent で利用するのは、 lookup-search-agents から ndkks, ndcookie, ndnmz を取り去ったものです (skk-lookup-search-agents にセットして検索するようにしています。Lookup とは異なる設定をする場合、この変数の設定を変更すれば可能です)。

skk-look
--------

skk-look は、 look コマンドを使って次の 3 つの機能を提供します (skk-look は skk-lookup とは名前が似ていますが全くの別ものです)。

英単語の補完
......

skk-use-look を non-nil に設定すると skk-look が使用できるようになります。

例えば、 .skk で以下のように設定します。

     (setq skk-use-look t)

SKK abbrev mode が拡張されて、look コマンドを使用した補完が有効になります。

/abstr

------ Buffer: foo ------
▽abstr
------ Buffer: foo ------

[tab]

------ Buffer: foo ------
▽abstract
------ Buffer: foo ------

と補完してくれます。通常の補完と同様に、. で次の補完候補、, でひとつ前の補完候補に移動できます。

SKK 形式の英和辞書 (SKK 形式の英和辞書 edict が提供されています。 See 辞書の入手)があれば、ここから SPC を押して英和変換ができます。

英単語をあいまいに変換して取り出す
.................

見出し語にアスタリスク (*) を入れて、SPC を押すと英単語をあいまいにして変換できます。

------ Buffer: foo ------
▽abstr*
------ Buffer: foo ------

SPC

------ Buffer: foo ------
▼abstract
------ Buffer: foo ------

確定すると、abstr* を見出し語、abstract を候補とするエントリが個人辞書に追加されます。このようなエントリを追加したくない場合、ユーザー変数、skk-search-excluding-word-pattern-function を適切に設定します。

例えば次のような設定です。ちょっと長いですが実際に必要なのは、 skk-abbrev-mode の部分です。

     (setq skk-search-excluding-word-pattern-function
           ;; t だと個人辞書に取り込まない。
           (function
            ;; KAKUTEI-WORD を引数にしてコールされるので、不要でも引数を取る
            ;; 必要あり
            (lambda (kakutei-word)
     	 (and skk-abbrev-mode
     	      (save-match-data
     		;; SKK-HENKAN-KEY が "*" で終わるとき
     		(string-match "\\*$" skk-henkan-key))))))

英単語をあいまいに変換して取り出した後、更に再帰的な英和変換を行う
.................................

skk-look-recursive-search の値を non-nil にセットして下さい。

     ▽abstr* (SPC)

       ---> ▼abstract (SPC) -> ▼アブストラクト (SPC) -> ▼抽象 (SPC)
         -> ▼abstraction (SPC) -> ▼アブストラクション

このように英単語 + その英単語を見出し語にした候補の「セット」を変換結果として出力することができます (SPC をどんどん押すとエコーエリアに候補が出力されます。このバージョンの SKK では単語が長い場合、エコーエリアに入り切れずどれを選択すれば良いか分からなくなってしまいます。Daredevil SKK ではこの問題が解決されています)。

この際、skk-look-expanded-word-only の値が non-nil であれば、再帰検索に成功した英単語の「セット」だけを出力することができます (再帰検索で検出されなかった英単語は無視して出力しません) 。

SKK 辞書に

        abstract /アブストラクト/抽象/
        abstraction /アブストラクション/

というエントリがあることを前提としています
 (edict 辞書、SKK-JISYO.edict があれば例えば、)

     (setq skk-search-prog-list
           '((skk-search-jisyo-file skk-jisyo 0 t)
             (skk-search-jisyo-file "/your-path/SKK-JISYO.edict" 0 t)
             (skk-search-server skk-aux-large-jisyo 10000)))

のように設定することにより、 edict 辞書を使用できます。。

飾りつけ
====

仮名文字のローマ字プレフィックスのエコー
--------------------

skk-echo

     この変数の値は、仮名文字のローマ字プレフィックス (see ローマ字プレフィックス.) のエコーの有無を制御します。

変数 skk-code の値が 非 nil であれば、仮名文字のローマ字プレフィックスが、入力時点で一旦現在のバッファに挿入され、続く母音の入力の際に、かな文字に変換された時点で現在のバッファから消去されます。

     t

     ------ Buffer: foo ------
     t
     ------ Buffer: foo ------

     a

     ------ Buffer: foo ------
     た
     ------ Buffer: foo ------

変数 skk-echo の値が nil であれば、仮名文字のローマ字プレフィックスのエコーは行なわれません。これを上記の例で考えると、t が現在のバッファに挿入されず、続く母音 (a) が入力されたとき た の文字が挿入されます。

入力モードを示すモードラインの文字列の変更
---------------------

下記の変数の値を変更することにより、モード行において入力モードを示す文字列が変更されます。

skk-latin-mode-string

     アスキーモードを示す文字列。標準では、`` SKK''。

skk-hirakana-mode-string

     かなモードを示す文字列。標準では、`` かな''。

skk-katakana-mode-string

     カナモードを示す文字列。標準では、`` カナ''。

skk-jisx0208-latin-mode-string

     全英モードを示す文字列。標準では、`` 全英''。

入力モードを示すカーソル色に関する設定
-------------------

skk-use-color-cursor

     この変数の値が非 nil ならば、カーソルに色付けします。nil ならば、この機能を無効にします。

     標準では、ウィンドウシステムを使用していてなおかつ色表示が可能な場合に限り、この機能が有効になります。

この機能が有効になっているとき、以下の変数の値を変更することで、各モードにおけるカーソルの色が変更されます。

skk-default-cursor-color

     SKK モードがオフであることを示すカーソル色。標準では、カーソルのある該当フレームにおける標準のカーソル色を使います。

skk-hiragana-cursor-color

     かなモードであることを示すカーソル色。標準では、背景の明暗により ``coral4'' または ``pink'' を用います。

skk-katakana-cursor-color

     カタカナモードであることを示すカーソル色。標準では、背景の明暗により ``forestgreen'' または ``green'' を用います。

skk-jisx0208-latin-cursor-color

     全角英字モードであることを示すカーソル色。標準では、``gold'' を用います。

skk-latin-cursor-color

     アスキーモードであることを示すカーソル色。標準では、背景の明暗により ``ivory4'' または ``gray'' を用います。

カーソル色の変更の際、カラーマップ切れが起きた場合にはエラーメッセージを表示し、標準のカーソル色を使います。

skk-report-set-cursor-error

     この変数の値を nil 設定すると、カラーマップ切れの際エラーメッセージを表示しません。

▼モードにおける変換候補のハイライト表示
--------------------

skk-use-face

     この変数の値が非 nil であれば、Emacs のフェイス機能を使って変換候補をハイライト表示します。

     このハイライト表示には Emacs のオーバーレイ (overlay) の機能を使います (以前のバージョンではテキスト属性 (text property) を使用していました。

     オーバーレイ属性はテキスト属性と異なり、テキストの一部とは見なされません。そのため、テキストのコピーの際にオーバーレイ属性は保存されません。その他にも、オーバーレイの移動やその属性の変更はバッファの変更とは見なされないこと、オーバーレイの変更はバッファのアンドゥリストに記録されないこと、などが特徴として挙げられます。

     なお、XEmacs にはオーバーレイ機能はありません。代わりに extent というものが用意されているのでそれを利用します。)。

skk-henkan-face

     この変数の値はフェイスであり、このフェイスによって変換候補がハイライト表示されます。既定値は highlight です。

変数 skk-henkan-face には、既存のフェイス (Emacs 標準 では default, modeline, region, secondary-selection, highlight, underline, bold, italic, bold-italic があります。)を指定できますが、新たにフェイスを作ることもできます。そのために、以下の関数が用意されています。

skk-make-face

     形式: (skk-make-face FACE)

     この関数は、引数 FACE と同じ名前のフェイスを作成して、そのフェイスを返します。フェイスの前景色・背景色は、引数 FACE によって、例えば以下の例のように決定されます。

          (setq skk-henkan-face (skk-make-face 'DimGray/PeachPuff1))

     この場合、前景色は DimGray に、背景色は PeachPuff1 になります。

     もうひとつ例を挙げます。

          (skk-make-face 'RosyBrown1)

     この場合、前景色は DimGray になります。背景色はもちません。つまり、バッファの背景色がそのまま見えます。

エラーなどの日本語表示
-----------

標準では、エラー、メッセージおよびミニバッファでのプロンプトは、英語で表示されます。

skk-japanese-message-and-error

     この変数の値を非 nil に設定すると、エラー、メッセージおよびミニバッファでのプロンプトを日本語で表示します。

VIP/VIPERとの併用
=============

skk-use-viper

     この変数の値を非 nil に設定すると、VIPER に対応します。

VIPER については

     See VIPER (viper).

を参照してください。

また、VIPER の前身である VIP にも対応します。ただし、正式に対応しているバージョンは 3.5 のみです。これは Mule 2.3 に標準添付します (ちなみに、VIP 3.5 の作者は、SKKの原作者でもある佐藤雅彦教授です。VIP 3.5 の発展版である VIPER は現在もメンテナンスされています。Emacs 19, 20 には、VIP 、VIPER とも標準添付します。)。

I-search関連
==========

起動時の入力モードの指定
------------

skk-isearch-use-previous-mode

     この変数の値が非 nil であれば、次のインクリメンタル・サーチ起動時の入力モードは、前回のインクリメンタル・サーチでの入力モードになります。

skk-isearch-start-mode

     この変数の値は、インクリメンタル・サーチの起動時の入力モードを決定します。ただし変数 skk-isearch-use-previous-mode の値が非 nil ならば、そちらの機能が優先されます。

     この変数は以下の値を取り得ます。

     latin

          アスキーモード

     hirakana

          かなモード

     jisx0208-latin

          全英モード

間に空白等を含む文字列の検索
--------------

検索という文字列をインクリメンタル・サーチにより検索する場合に、バッファが以下のような状態になっていることがあります。

     -------- Buffer: foo --------
     この行末から始まる文字列を検
     索して下さい。
     -------- Buffer: foo --------

このような場合のために、Emacs は正規表現によるインクリメンタル・サーチを提供しています。SKK はこの正規表現によるインクリメンタル・サーチにも対応しているため、空白や改行を含んだ検索も可能です。

M-x isearch-forward-regexp

     前方への正規表現によるインクリメンタル・サーチ。 C-u C-s または M-C-s で起動します。

M-x isearch-backward-regexp

     後方への正規表現によるインクリメンタル・サーチ。 C-u C-r または M-C-r で起動します。

以下は空白や改行の処理を制御する変数です。

skk-isearch-whitespace-regexp

     この変数の値は正規表現です。この正規表現にマッチする要素は、正規表現によるインクリメンタル・サーチにおいては、単語を区切る要素ではないと判断されます。この変数の既定値は以下のようになっています。

          "\\(\\s \\|[ \t\n\r\f]\\)*"

変数 skk-isearch-whitespace-regexp の値を変更することで、正規表現によるインクリメンタル・サーチを拡張することができます。例えば、電子メールの引用部分を検索する場合を考えます。

     > 引用部分も検
     > 索できる。

上記のうち、「検索」という語は 2 行にわたっているうえ引用マークが挿入されています。ここで

     (setq skk-isearch-whitespace-regexp "\\(\\s \\|[ \t\n\r\f<>|]\\)*")

と設定することにより、「検索」を検索できるようになります。

skk-init-fileのコンパイル
===================

skk-byte-compile-init-file

     この変数の値が非 nil であれば、SKK の起動時に SKK の設定ファイル (標準では ~/.skk) を必要に応じてバイトコンパイルします。

     この変数の値が nil であれば、SKK の設定ファイルをバイトコンパイルしたファイルを消去します。

     この機能を有効にしたい場合は、~/.emacs に

          (setq skk-byte-compile-init-file t)

     と記述します。 (この変数は SKK の設定ファイルが読み込まれる前に調べられるので、 SKK の設定ファイルに上記の設定を書いてもこの機能は有効になりません。)

picture-modeとの併用
================

SKK モードを picture-mode において使用した場合は、以下のような問題点があります。ただし、これらは picture-mode の問題なので、現在のところ SKK 側では対処していません。

 1. SKK モードで全角文字を入力した場合に、BSで全角文字を消すことができません。現状では、後方にある文字を消したい場合は、その文字にポイントを合わせ、C-c C-dで一文字づつ消す必要があります。

 2. コマンド picture-movement-up や picture-movement-down により上下に全角文字を挿入した場合に、桁がずれる場合があります。

関数 move-to-column-force の中で使用されている関数 move-to-column の引数として、全角文字を無視した桁数が与えられることがあり、そのときカーソル移動ができないため、これらの問題が生じます。

サーバ関連
=====

skk-servers-list

     この変数を使うと、複数のホスト上の辞書サーバを使い分けることができます。

     この変数の値は、辞書サーバ毎の情報リストです。各リストは 4 つの要素から成ります。4 つの要素はそれぞれ、ホスト名、サーバ名 (フルパス)、サーバが読みこむ辞書名、サーバが使用するポート番号、となります。ただし、辞書、およびポート番号は、サーバ自身が決定することもあるため、そのような場合は nil として構いません。

     例えば、以下のように設定します。

          (setq skk-servers-list
                '(("host1" "/your/path/to/skkserv" nil nil)
                  ("host2" "/your/path/to/skkserv" nil nil)))

     上記の設定の場合、まず host1 上のサーバと接続します。接続できなくなると、次に host2 上のサーバと接続します。

skk-report-server-response

     この変数の値が非 nil であれば、変換時に、サーバの送出する文字を受け取るまでに関数 accept-process-output が実行された回数を報告します。

skk-server-remote-shell-program

     この変数には、リモートシェルのプログラム名を指定します。既定値は、システム依存性を考慮する必要があるため、以下の Emacs Lisp コードを評価することにより決定されています。

          (or (getenv "REMOTESHELL")
              (and (boundp 'remote-shell-program) remote-shell-program)
              (cond
               ((eq system-type 'berkeley-unix)
                (if (file-exists-p "/usr/ucb/rsh") "/usr/ucb/rsh" "/usr/bin/rsh"))
               ((eq system-type 'usg-unix-v)
                (if (file-exists-p "/usr/ucb/remsh") "/usr/ucb/remsh" "/bin/rsh"))
               ((eq system-type 'hpux) "/usr/bin/remsh")
               ((eq system-type 'EWS-UX/V) "/usr/ucb/remsh")
               ((eq system-type 'pcux) "/usr/bin/rcmd")
               (t "rsh")))

辞書ツール
*****

SKK 辞書に関するツールには、Perl, C の各言語により書かれたものがあります。入手は、WWW

     http://openlab.ring.gr.jp/skk/skk/tools/

もしくは CVS

     See CVSによる入手方法.

からできます。

Cによるツール
=======

プログラム作成方法
---------

configure スクリプトが付属するので、それを実行します。その後 make を実行します。

     % ./configure
     % make

ここで、作成に関していくつか注意すべきことがあります。

ndbm

     skkdic-expr を作成するには ndbm の機能が必要です。システムにそれがない場合は、Berkeley DB もしくは gdbm をインストールすることで代用することができます。

TMPDIR

     skkdic-expr を実行するとき、作業用のファイルとして辞書の 2 倍程度の大きさのファイルを作成します。このファイルが作成されるディレクトリは実行時に指定できます。もし指定しなければ、skkdic-expr の作成時に TMPDIR に指定されたディレクトリが使用されます。これは標準では /tmp になっていますが、/tmp の容量が小さいなどの事情がある場合は

          -DTMPDIR=\".\"

     のような記述を CFLAGS に追加して作成します。実際には、例えば以下のようにして作成します。

          % CFLAGS="-O2 -DTMPDIR=\".\"" ./configure
          % make

skkdic-expr
-----------

複数の SKK 辞書を結合したり、他の辞書との差分をとるのに使います (但し、 skkdic-expr は辞書を正しい順にソートせず、また、 ;; okuri-ari entries. と ;; okuri-nasi entries. のタグも付けてくれません。skkdic-expr によって生成した辞書は必ず skkdic-sort による事後処理が必要です。

See skkdic-sort.)

例えば、次のようにします。

     % skkdic-expr JISYO1 + JISYO2 - JISYO3 > RESULT

上記の例では、JISYO1 と JISYO2 にある JISYO1 と重複しない候補を加え、その後、JISYO3 と同じ候補があれば削除します。

また、次の引数が使用できます。これらは引数の辞書の前に指定します。

-d

     作業用ディレクトリ。

-o

     出力ファイル。

以下にその他の使用例をあげます。

 1. 複数の辞書をcatでつないだものを整理する。

          % skkdic-expr OLDDICT1 > NEWDICT1

     このように使用すると、重複する候補を削除したり、同じ見出し語が別々の行に複数存在していても一行のエントリにまとめます。例えば、

          じしょ /辞書/
          じしょ /璽書/
          じしょ /字書/

     のような辞書を

          じしょ /辞書/璽書/字書/

     と、一行にまとめることができます。候補が出力される際の優先順位は並び順になります。

 2. 個人辞書と L 辞書との差分を取り出す。

          % skkdic-expr ~/.skk-jisyo - SKK-JISYO.L > PRIVATE

     この差分を将来の SKK 辞書に反映させる方法については

          See お願い.

     を参照してください。

 3. 2 つの辞書の共通部分を取り出す。

          % skkdic-expr JISYO-A - JISYO-B > JISYO-TMP
          % skkdic-expr JISYO-A - JISYO-TMP > JISYO-COMMON

skkdic-sort
-----------

ソートされていない辞書を通常の SKK 辞書の形式にソートし、

;; okuri-ari entries. と ;; okuri-nasi entries. の各行を適切な位置に挿入します。入力は標準入力のみ、出力は標準出力のみが指定できます。skkdic-expr はソートも ;; okuri-ari entries. と ;; okuri-nasi entries. のタグも出力してくれませんので、 skkdic-expr によって生成した辞書は必ず事後に skkdic-sort をかける必要があります  (一時的に使用する swap を小さくするためにあえて skkdic-expr とは別のプログラムとしてあります。

See skkdic-expr.)

     % skkdic-expr JISYO-A + JISYO-B | skkdic-sort > NEWDICT

skkdic-count
------------

SKK 辞書の中の候補数を数えます。[ と] で囲まれた送り仮名毎のブロックも一つの候補として数えます。

Perlによるツール
==========

これは、辞書を結合したり、pubdic 辞書を SKK 辞書の形式に変換したりするためのツール群です。

SKK 辞書は見出し語に対応する複数の候補が / で区切られた構造をしていますが、このツールでは読みと候補が 1 対 1 に対応した形式 (これを リスト形式 と呼びます。)のファイルを中間形式として取り扱います。

Perl によるツールには以下のプログラムがあります。

skk2list

     SKK 辞書をリスト形式に変換する。

pubdic2list

     pubdic 辞書の名詞エントリをリスト形式に変換する。

list2skk

     リスト形式を SKK 辞書に変換する。

adddummy

     SKK 辞書ソートのためにダミー文字を加える。

removedummy

     加えたダミー辞書を取り除く。

sub

     2 つのリスト形式の辞書の差分を計算する。

skkconv

     漢字検索コマンド。

例えば、既存の SKK 辞書と pubdic 辞書を結合して新しいSKK辞書を作成するには次のように行ないます。

     % (skk2list skk-jisyo ; pubdic2list kihon.u) \; リスト形式を連結
           | adddummy \; ダミー文字追加
           | sort -u \; ソート
           | removedummy \; ダミー文字削除
           | list2skk \; SKK辞書に変換
           > skk-jisyo.new

これらのツールでは文字コードが EUC-JP の辞書のみ取り扱い可能です。それ以外の文字コードの辞書を使うときは後述の jis2ujis などのコマンドを組み合わせます。

2 つのリスト形式の辞書の差分を計算するには、

     % sub 旧リスト 新リスト

とします。ただし比較する二つのファイルはあらかじめソートされている必要があります。

skkconv は辞書サーバを使用してコマンドラインでかな漢字変換するためのコマンドです。例えば かんじ という読みをもつ漢字は以下のように検索します。

     % skkconv kanji
     漢字
     幹事
     感じ
     ......
     %

この他に以下の Perl ライブラリとコマンドがあります。

codeconv.pl

     JIS, EUC-JP, SJIS 相互変換ライブラリ。

roma2kana.pl

     ローマ字 ==> 平仮名変換ライブラリ。

kana2roma.pl

     平仮名 ==> ローマ字変換ライブラリ。

jis2sjis

     JIS ==> SJIS 変換コマンド。

sjis2jis

     SJIS ==> JIS 変換コマンド。

jis2ujis

     JIS ==> EUC-JP 変換コマンド。

ujis2jis
     EUC-JP ==> JIS 変換コマンド。

roma2kana
     ローマ字 ==> かな (EUC-JP) 変換コマンド。

kana2roma
     かな (EUC-JP) ==> ローマ字変換コマンド。

旧バージョンからの変更点
************

SKK 10 は SKK 9.6 と比べて、重要な変更がいくつかあります。そこで、 SKK 9.6 のユーザーが SKK 10 に移行するに際して注意すべき点について本節で説明します。

対応する Emacs のバージョン

     Emacs 20 と XEmacs 21 をサポートしたことが最も重要な変更点です。同時に Mule 2.3 (Emacs 19.28 または 19.34) もサポートします。ただし、Nemacs や Mule 1.1 など、Emacs 18 はもはやサポートされません。

APEL ライブラリの使用

     様々な Emacsen の上で動作するようにすると保守が難しくなります。SKK 10 は APEL ライブラリを各種 Emacs の差異を吸収する目的で使用し、この問題に対処しています。

     一方で、SKK をインストールする前に APEL をインストールする必要があるため、管理者にとってはひとつ手間が増えることになります。

Custom パッケージの使用

     Emacs 20 はユーザーオプションの設定のための汎用インターフェイスとして Custom というパッケージを採用しています。SKK 10 もこれを使った設定ができます。ただしその汎用性のためか、必ずしも便利ではないため、このマニュアルでは詳しく説明していません。

多くの変数の defcustom (defvar) 化

     以前のバージョンでは、変数の宣言に defconst を使用していました。これは、どのようなカスタマイズが行なわれている場合でもチュートリアル使用時に標準設定に戻すのが目的でした。このため、全てのカスタマイズは ~/.skk で行なう必要がありました。SKK 10 では、defcustom を使用した宣言を行なっているので、この制限はなくなりました。

skk-input-vector の廃止

     SKK 9 のころは、「？」や「；」などの記号をいわゆる半角で入力するために、 skk-input-vector という変数の設定を各ユーザが行っていました。 SKK 10 では、この変数は廃止されましたが、代わりに skk-rom-kana-rule-list という変数を使って、同様の設定ができるので問題ありません。その設定方法を知りたい場合は

          See 数字や記号文字の入力.

     を参照してください。

拡張アイディア
*******

本章には、将来のバージョンに託された拡張アイディアについて記述します。実現可能かどうかに関しては必ずしも触れません。

これ以外にも要望、拡張の具体的アイディアがあれば、メーリングリストに投稿するなどの方法で、開発チームに連絡いただけることを期待します。

     See SKK Ring Server Openlab メーリングリスト.

  * 辞書の個々の見出し語、候補に属性を持たせる。それにより、例えば、次のような機能を実装する。

      1. その属性の内容により、変換の際に候補の絞り込み条件を指定できるようにする。その際、絞り込み条件はユーザーの任意に変更できるようにする。一例をあげれば、サ変動詞になり得る名詞に適当な属性を持たせ、〜する という送り仮名が入力された場合には、そのサ変動詞属性を持った名詞のみを候補として出力する、など活用の幅は非常に広い。サ変動詞の問題については、

          辞書登録モード

          も参照のこと。

      2. 候補に最終の変換時刻などを属性として持たせ、辞書のメンテナンスに利用する (一定期間アクセスのない候補を個人辞書から削除するなど)。

      3. 候補に関する意味を属性として持たせ、意味を調べるような拡張変換を行なえるようにする。

     言うは易しだが、色々な未解決の問題がある。多数の見出し語や候補に属性を持たせて、通常の変換効率をできる限り落さないで、かつ効率良く属性のメンテナンスを行なう方法を模索することがまず大変。Emacs のバッファに読み込む辞書とサーバ経由でアクセスしている辞書とがあることも検討事項。Emacs 側の機能で対応した場合にサーバ経由の辞書属性をどうやって得るか、またはその逆が課題である。コーディング抜きであってもアイディアをいただけたら幸いである。

  * Canna や Wnn のサーバと接続して検索が可能になるようにする (Tamago 4 では、Emacs Lisp ベースでサーバと接続できる。

     http://www.m17n.org/tamago/)。

  * いかなるユーザーオプション変数をバッファローカル化しても動作するようにすること。辞書バッファで参照されるユーザーオプションを、変換を行なっていたバッファの指定値から受け渡しして辞書バッファで参照するなどの配慮が必要か。

          See 送り仮名の厳密なマッチ.

  * 送り仮名の厳密なマッチを要求せずに、送り仮名の自動処理を行なうオプションを作ること。現状の送り仮名の自動処理では、送り仮名のプレフィックスがマッチするだけでは候補として出力せず、更に送り仮名全体が厳密にマッチするかどうかをチェックしている。これは候補の絞り込みのためには有効に作用するが、個人辞書の内容が貧弱な場合は、逆にこれがあだとなってすぐに辞書登録モードに入ってしまう。オプション設定することにより、いずれの場合にも対応できるようにする。

          See 送り仮名の自動処理.
          See 送り仮名の厳密なマッチ.

  * 部首変換プログラムと辞書を作ること。

  * 辞書毎にコーディングシステムを別々に設定できるようにすること。

SKKメーリングリスト
***********

SKK Ring Server Openlab メーリングリスト
================================

SKK 10 は、 Ring Server Openlab にて CVS を用いて開発されています。このメーリングリストでは、利用者と開発者で分かれていません。バグレポートや開発における議論など様々な話題が流れます。

メーリングリストに参加する場合

     skk-request@ring.gr.jp 宛てのメールに本文に (Subject ではありません) subscribe とだけ書いて送って下さい。機械的に加入処理されます。

メーリングリストから脱会する場合

     skk-request@ring.gr.jp 宛てのメールに本文に (Subject ではありません) unsubscribe とだけ書いて送って下さい。MLのメンバーからあなたのアドレスが機械的に削除されます。

登録したアドレスの変更する場合

     古いアドレスについて一旦 unsubscribe して、新しいアドレスから再度 subscribe して下さい。

記事の投稿

     skk@ring.gr.jp へ送ります。メーリングリストに登録されている人全員にメールが配信されます。

Ring Server Openlab では、ニュースサーバに接続してメーリングリストの記事を読むことができます。NNTP クライアントで news.ring.gr.jp に接続します。ニュースグループ名は、 ring.openlab.skk です。

HTTP 経由でニュースを見ることもできます。

     http://ring.etl.go.jp/news/openlab.skk/

データベースエンジンが装備されていますので、ニュース記事のキーワード検索を行なうこともできます。

ユーザーメーリングリスト
============

SKK に関する意見交換の場として SKK メーリングリストが開設されています。これは SKK Ring Server Openlab メーリングリストが開設されるよりもずっと前から利用されているメーリングリストで、現在でも投稿があります。

メーリングリストへ参加したいとき。

     skk-join@kuis.kyoto-u.ac.jp へメールを送れば、自動的に発信者のメールアドレス (From:のアドレス) が登録されます。

メーリングリストへの記事の投稿を行なうとき。

     skk@kuis.kyoto-u.ac.jp へ送れば自動的に全ての登録者に送付されます。

メーリングリストに登録したアドレスを変更したいとき。

     新しいメールアドレスから skk-change@kuis.kyoto-u.ac.jp 宛に、本文の 1 行目に下記の書式で旧アドレスを書いたメールを送付します。

          Old:YOUR-OLD-ADDRESS

メーリングリストから抜けたいとき。

     skk-leave@kuis.kyoto-u.ac.jpへメールを送ります。

skk-source@kuis.kyoto-u.ac.jp 宛にメールを送付することで、過去の SKK メーリングリストへの投稿記事を入手することができます。入手したい記事の Mailinglist-ID: に従って、以下の要領で Subject: を指定し、メールを送付することで、指定された内容のメールが返送されます。

Mailinglist-ID:が134の記事を入手する場合。

     Subject: 134

Mailinglist-ID:が100番から199番の記事を全部入手する場合。

     Subject: ml-contents-01

ただし、0 〜 99 番の場合は ml-contents-00と指定します。なお、 Mailinglist-ID: が欠番の部分もあります。

SKKの入手方法
********

WWWを利用して入手する方法
==============

SKK OpenLab のホームページでは、SKK の最新版を配布するためのページを設けています。

日本語版URL

     http://openlab.ring.gr.jp/skk/maintrunk-ja.html

英語版URL

     http://openlab.ring.gr.jp/skk/maintrunk.html

CVSによる入手方法
==========

CVS を利用すれば、SKK OpenLab のホームページにて公開されているものよりも新しい開発版の SKK を入手できます。ここではまず、CVS の入手とインストールについて説明し、次に CVS を使って SKK を取得する方法を述べます。

CVSの入手先
-------

CVS は 以下のサイトで配布されています。

     ftp://ftp.cvshome.org/pub/

また、少し更新が遅れ気味のようですが、 GNU のミラーサイトからも入手できます。マスターサイトは

     ftp://ftp.gnu.org/gnu/non-gnu/cvs/

ですが、日本から入手する場合は

     ftp://ftp.ring.gr.jp/pub/GNU/non-gnu/cvs/
     ftp://ftp.win.ne.jp/pub/GNU/non-gnu/cvs/
     ftp://ftp.iij.ad.jp/pub/GNU/non-gnu/cvs/
     ftp://ftp.tokyonet.ad.jp/pub/GNU/non-gnu/cvs/

等の日本のサイトを利用します。上記は安定した正式リリース版ですが、最新の開発版を利用したい人は

     http://www.cvshome.org/dev/source.html

をご覧ください。

CVS に関する情報は

     http://www.loria.fr/~molli/cvs-index.html
     http://www.cvshome.org/
     http://www.race.u-tokyo.ac.jp/~moro/cvs/
     http://www.itojun.org/hack/cvs/tut-kernel.html
     http://www-vox.dj.kit.ac.jp/nishi/cvs/
     http://duff.kuicr.kyoto-u.ac.jp/~okuji/gnujdoc.html

などから得られます。

CVSによるSKKの取得
------------

cvs コマンドで SKK を取得する場合、「ログイン」と「チェックアウト」の 2 つの操作が必要になります。

まず guest アカウントで openlab.ring.gr.jp の CVS server に「ログイン」します。

     $ cvs -d :pserver:guest@openlab.ring.gr.jp:/circus/cvsroot login

プロンプトが出るので、パスワードに `guest' を入れ、CR します。

     CVS password: guest (CR)

~/.cvspass というファイルに password が記録され、次からは明示的なログイン は不要になります。

次に「チェックアウト」 して CVS server からソースをもらってきます (このファイルをワーキングコピーといいます)。

     $ cvs -d :pserver:guest@openlab.ring.gr.jp:/circus/cvsroot checkout skk/main

これで skk/main というディレクトリにワーキングコピーが作られます。

同様の操作で、skk/main を skk/tools に変更すると

     $ cvs -d :pserver:guest@openlab.ring.gr.jp:/circus/cvsroot checkout skk/tools

辞書ツールが、skk/dic とすると辞書のワーキングコピーが作られます。

SKK関連ソフトウェア
***********

dbskkd-cdb
==========

本節は、dbskkd-cdb の開発者である力武健次氏により書かれたものを元に若干変更しています。

正式名称
     dbskkd-cdb

どのようなソフトウェアか

     SKK 用のシステム辞書サーバ。

使用するために要求される環境

     Linux, FreeBSD, Solaris 2.6 上での動作を確認している。現状では使用する SKK システム辞書と比べ、cdb 形式の辞書のサイズは 2 倍弱になる。セキュリティ向上のため、inetd から tcp_wrapper などを経由して起動することを前提とする。Daniel J. Bernstein 氏の開発した同様のソフトウェア ucspi-tcp の使用を推奨する。高速化のため、Daniel J. Bernstein 氏の開発した固定データベース用ライブラリ cdb を使っているので cdb のインストールが必要。

最新バージョン、release の日付

     1.01, 1999 年 9 月 28 日

開発者

     力武 健次 <kenji.rikitake@acm.org>

配布条件

     GPL に準拠。

入手方法

     一次配布先は

          http://www.ne.jp/asahi/bdx/info/software/jp-dbskkd.html

     から参照できる。

bug report,質問のためのアドレス

     kenji-dbskkd-cdb@k2r.org

その他

     さまざまな UNIX 系 OS の上での動作レポートを希望しています。

skkfep内蔵jvim
============

本節は、skkfep 内蔵 jvim の開発者である木原英人氏により書かれました。

正式名称

     skkfep 内蔵 jvim

どのようなソフトウェアか

     jvim (vi クローンのエディタ vim を日本語化したもの) に skkfep を組み込んだものです。vi 系のエディタで SKK 風の日本語入力ができます。

使用するために要求される環境

     UNIX, Windows 95/98/NT, DOS

最新バージョン、release の日付

     jvim, skkfep, ari それぞれに対するパッチとして提供しています。 jvim3.0-j1.7-skk1.2.8.patch 1999/8/30, skkfep0.86c-kh1.2.6.patch, 1999/9/28, ari1.00a-kh1.2.1.patch 1999/1/29

開発者
     木原 英人

配布条件

     skkfep, jvim, ari それぞれに対するパッチとして提供しているので、それぞれの配布条件に従います。

入手方法

     http://hiroshima.cool.ne.jp/deton/jvim-skk/

bug report,質問のためのアドレス

     deton@m1.interq.or.jp

KAKASI
======

KAKASI とは、高橋裕信氏 <takahasi@tiny.or.jp> による「漢字かなまじり文をひらがな文やローマ字文に変換することを目的として作成したプログラムと辞書の総称」です。

KAKASIは、Kanji Kana Simple Inverter にちなんで、またSKKの逆言葉として名付けられました。KAKASI は現在、Namazu のサイト

     http://www.namazu.org/

にて開発が継続されています。

入手方法

     http://kakasi.namazu.org/

skkfep
======

skkfep は、伊藤彰則、渡辺雅俊、金子裕の各氏による、SKK と似た入力方式の漢字入力フロントエンドプロセッサです。

現在サポートされている OS は、以下の通りです。

     SunOS 4.x, AIX3.x, Linux, 386BSD, AIX/ESA, DOMAIN-IX SR9.x, HP-UX 8.x,
     SEIUX 3.x, EWS-UX/V Rel4.0, NEWS-OS 4.x, NEWS-OS 3.3

SKK on Jed
==========

本節は、SKK on Jedの開発者である豊福親信氏により書かれました。

正式名称
     SKK on Jed

どのようなソフトウェアか
     Jed (Emacs 系の軽いエディタ。C 言語風の拡張言語 S-Lang を持つ) に移植された SKK です。

使用するために要求される環境
     日本語版 Jed が動いていればその上で動きます。現在、多くの UNIX、MSDOS、 Win95/NT、OS2 上で日本語版 Jed は動いています。

最新バージョン、release の日付
     version 0.1.1 (1996 年 12 月 15 日)

開発者
     豊福 親信

配布条件
     SKK と同じです。

入手方法

     メールによる入手方法
          unbound@papaya.juice.or.jp にメールで連絡して下さい。

     WWWを利用して入手する方法
          WWW クライアントを利用して

          http://www.juice.or.jp/~toyofuku/jed.html

          から入手できます。

bug report,質問のためのアドレス
     unbound@papaya.juice.or.jp

その他
     まだいくつか未実装機能がありますが SKK の全機能実装を目指しています。

skkinput
========

本節は、skkinput の開発者である阪本崇氏により書かれたものを若干修正したものです。

正式名称
     skkinput

どのようなソフトウェアか

     日本語テキスト入力を要求する X11 のアプリケーションのための入力サーバ。現在は Kinput Protocol にしか対応していませんが、将来的には XIM や Kinput2 Protocol に対応させる予定です。

使用するために要求される環境

     UNIX + X11R5 または X11R6 (R6.1)

最新バージョン ,release の日付

     2.03,

開発者

     阪本 崇 (sakamoto@yajima.kuis.kyoto-u.ac.jp,

     PXG01715@niftyserve.or.jp)

配布条件

     ありません。

入手方法

          http://member.nifty.ne.jp/Tatari_SAKAMOTO/skkinput.htm

     から入手できます。

bug report、質問のためのアドレス

     sakamoto@yajima.kuis.kyoto-u.ac.jp もしくは PXG01715@niftyserve.or.jp まで御願い致します。

その他

     SKK 8.6 にはかなり近付けたと思うのですが、まだまだ異なる部分が残っています。特に操作体系で異なると感じられた方は私までレポートを御願い致します。

SKKIME
======

開発者
     skkinput と同じく 阪本崇氏

最新バージョン
     SKKIME 1.0

入手先

     http://member.nifty.ne.jp/Tatari_SAKAMOTO/skkime.htm

SKK95
=====

本節は、京大マイコンクラブ川崎進一郎氏によって書かれました。

正式名称
     SKK95

どのようなソフトウェアか
     Windows95, WindowsNT, Windows98 上で SKK ライクなかな漢字入力を実現する IME。

使用するために要求される環境
     上記の OS (もちろん日本語版)。

最新バージョン、release の日付
     最新バージョン α13。1999 年 6 月 9 日。

開発者
     京大マイコンクラブ

配布条件
     SKK95 はフリーウェアです。商業目的以外の目的のためならば自由にコピーしていただいて構いません。SKK95 を使用したことによるいかなる被害に対しても、 SKK95 の作者は責任を負いません。

入手方法
     下記のウェッブページから入手して下さい。

     http://www.kuis.kyoto-u.ac.jp/~kmc/proj/skk95/

bug report,質問のためのアドレス
     skk95-bugs@kmc.kyoto-u.ac.jp

その他
     1999 年 9 月現在、SKK95 はαバージョンであり、動作が安定していないところもあります。WindowsNT では比較的安定して動作するようです。

最新情報など
******

最新情報
====

SKK 10 についての最新情報は、

http://openlab.ring.gr.jp/skk/

から得ることができます。

SKK Openlab では、開発者、文章の整備にご協力いただける方、テスター、よろずものを言う人などなど、常に募集しています。

     See SKK Ring Server Openlab メーリングリスト.

また、SKK の開発は、 CVS によってなされています。CVS を使って最新の SKK を取得する場合、CVS account を取得して開発に参加される場合は、付属の READMEs/CVS_digest ファイルを参照して下さい。

謝辞
==

(本節は、旧来のマニュアルのものですが、歴史的意義を踏まえて、そのまま掲載します。)

SKK の設計方針は TAO/ELIS 上の日本語入力システム Kanzen の影響を受けています。Kanzen のデモを行ってくださり、また Kanzen を使う機会を与えてくださった NTT の竹内郁雄さんに感謝します。

第 1 版の辞書作成のための読みの入力を行ってくださった東北大学電気通信研究所佐藤研究室の 安藤大君、猪岡美紀さん、奥川淳一君、佐々木昭彦君、佐藤克志君、山岸信寛君に感謝します。

SKK辞書第 2, 3, 4, 5, 6, 7, 8 版作成のためのデータを提供してくださった方々に感謝します。

SKK辞書第 6, 7 版作成にあたり協力してくださった高橋裕信氏に感謝します。

お願い
===

SKK 辞書は多くのユーザの方々から提供された辞書によりコピーフリーの辞書としては最大規模の辞書になっています。今後もこの方式により SKK 辞書をより充実したものにしていきたいと思います。

SKK 辞書の充実にご協力いただける方は、随時以下のアドレスまで個人辞書と SKK-JISYO.L との差分をお送りください。お送りいただいた辞書を整理して SKK-JISYO.L に含めさせていただきます。差分ファイルの作成方法については skkdic-expr を参照してください。

また, SKK-JISYO.L の誤りを発見された場合にも、多少にかかわらず、下記のアドレスまでお知らせください。

     skk-dic@maid.ne.jp
     skk@ring.gr.jp

SKKの作者
======

SKK の原作者は、現京都大学の佐藤雅彦教授 <masahiko@kuis.kyoto-u.ac.jp> です。

現在の SKK は、大勢のボランティアの貢献により成立しています。以下は確認されている貢献者名です。ここに入っていない貢献者がおられる場合には、修正しますので、SKK OpenLab メーリングリスト <skk@ring.gr.jp> までご一報ください。

  小関 吉則 <kose@wizard.tamra.co.jp>

  小野 孝男 <takao@hirata.nuee.nagoya-u.ac.jp>

  進藤裕志 <shindo@super.ees.saitama-u.ac.jp>

  中津山 恒 <hisashi@rst.fujixerox.co.jp>

  沈志勇 <jshen@cas.org>

  柘植 正大 <ma-tsuge@kdd.co.jp>

  Chikanobu Toyofuku <unbound@papaya.juice.or.jp>

  FUKANO Masaaki <fukano-m@alp.cs.uec.ac.jp>

  Fukaya Shigeru <SFUKAYA@oracle.co.jp>

  FURUE Hideyuki <furue@kke.co.jp>

  GUNJI Takao <gunji@lisa.lang.osaka-u.ac.jp>

  Haru Mizuno <mizu@cs3.cs.oki.co.jp>

  Haru'yasu Ueda <hal@sics.se>

  Hideki Sakurada <sakurada@kuis.kyoto-u.ac.jp>

  Hisao Kuroda <kuroda@msi.co.jp>

  Hitoshi SUZUKI <h-suzuki@ael.fujitsu.co.jp>

  IIDA Yosiaki <iida@secom-sis.co.jp>

  Jun-ichi Nakamura <nakamura@pluto.ai.kyutech.ac.jp>

  Katuya Tomioka <tomioka@culle.l.chiba-u.ac.jp>

  Kazuo Hirokawa <hirokawa@rics.co.jp>

  Kazushi Marukawa <kazushi@kubota.co.jp>

  Keisuke Nishida <kxn30@po.cwru.edu>

  Kenji Rikitake <kenji@reseau.toyonaka.osaka.jp>

  Kenji Yamashita <kenji@cs.titech.ac.jp>

  Kimura Chikahiro <kimura@oa1.kb.nec.co.jp>

  Kiyotaka Sakai <ksakai@netwk.ntt-at.co.jp>

  Koichi MORI <kmori@onsei2.rilp.m.u-tokyo.ac.jp>

  Koji Uchida <uchida@cfd.tytlabs.co.jp>

  Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>

  Manabu Kawashima <kaw@lp.nm.fujitsu.co.jp>

  Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>

  Masahiko Suzuki <suzmasa@sm.sony.co.jp>

  Masahiro Doteguchi <xdote@rp.open.cs.fujitsu.co.jp>

  Masakazu Takahashi <masaka-t@ascii.co.jp>

  Masatake YAMATO <masata-y@is.aist-nara.ac.jp>

  Mikio Nakajima <minakaji@osaka.email.ne.jp>

  MINOURA Itsushi <minoura@uni.zool.s.u-tokyo.ac.jp>

  MIYOSHI Tsutomu <minkov@fuzzy.or.jp>

  Motohiko Mouri <mouri@jaist.ac.jp>

  Murata Shuuichirou <mrt@notwork.org>

  NAMBA Seiich <pi9s-nnb@asahi-net.or.jp>

  Naoki HAMADA <nao@mimo.jaist-east.ac.jp>

  Naoki Wakamatsu <naoki-w@ht-net21.ne.jp>

  NEMOTO Takashi <tnemoto@mvi.biglobe.ne.jp>

  NISHIDA Keisuke <knishida@nn.iij4u.or.jp>

  Rei FURUKAWA <furukawa@tcp-ip.or.jp>

  Ryoichi Hashimoto <gnu@ipri.go.jp>

  Satoshi Harauchi

  Sekita Daigo <sekita@mri.co.jp>

  Shuhei KOBAYASHI <shuhei@aqua.ocn.ne.jp>

  Shuji Ashizawa <ashizawa@zuken.co.jp>

  SL Baur <steve@altair.xemacs.org>

  sphere <sphere@pop12.odn.ne.jp>

  Stephen Turnbull  <turnbull@sk.tsukuba.ac.jp>

  Takao KAWAMURA <kawamura@ike.tottori-u.ac.jp>

  Takeshi OHTANI <ohtani@iias.flab.fujitsu.co.jp>

  Thierry Emery <Thierry.Emery@nmu.alcatel.fr>

  TOKUYA Junichi <tokuya@crab.fuji-ric.co.jp>

  Tomotaka SUWA <cooper@saitama.fujimic.fujisankei-g.co.jp>

  Tomoyuki Hiro <hiro@momo.it.okayama-u.ac.jp>

  Toyonobu Yoshida <toyono-y@is.aist-nara.ac.jp>

  Tsugutomo Enami <enami@ptgd.sony.co.jp>

  Tsukamoto Tetsuo  <czkmt@remus.dti.ne.jp>

  Tsuyoshi AKIHO <akiho@media.osaka-cu.ac.jp>

  TSUMURA Tomoaki <tsumura@kuis.kyoto-u.ac.jp>

  Wataru Matsui <matsui@atr-rd.atr.co.jp>

  Wataru Matsui <matsui@gf.hm.rd.sanyo.co.jp>

  Yoshida Toyonobu <toyono-y@is.aist-nara.ac.jp>

  YOSHIZAWA Masahiro <manbou@ceres.dti.ne.jp>

  Yukiyoshi Kameyama <kameyama@kuis.kyoto-u.ac.jp>

  Yuh Ohmura <yutopia@t3.rim.or.jp>

このマニュアルについて
===========

本マニュアルは、SKK オープンラボの有志の貢献により、従来のマニュアルに加筆修正したものです。

よくある質問とその回答(FAQ)
****************

     [file skk-faq.texi not included]