Lookupは、Emacs 上で動作する辞書検索インターフェイスです(公式サイトより)。 現在は電子辞書オープンラボでメンテナンスされています。 しかし、Lookup 1.4が出た後は更新もなく2年以上が経過し、残念ながら現在は事実上更新は停止している状態です(2006年3月時点。2007/1/30にセキュリティに関する修正が加わったLookup 1.4.1がリリースされました。)。 そこで、このページではLookup及び関連するソフトウェアに対するbug fixや機能追加を行った改造版やパッチを提供しています。
EPWINGに含まれる動画・音声データの再生を可能にしたLookup 1.4の改造版です。 動画データの再生は白井さんから提供頂いたパッチによるものです。 eblookへのパッチと併せて使用して下さい。 細かいバグ修正も入っています。
lookup-1.4+media-20240317.tar.gz
lexical binding を有効にしていますが、十分にはテストできていません。
インストールは通常のLookupと同様の手順で行って下さい。 ただし、configureスクリプトからの--with-emacsオプションは無効のようなので、指定する場合はbash等のシェル上から
とするか、make時に
のようにして下さい。 また、eblookにもこのページにあるパッチを当てる必要があります。
20210612以降のバージョンではEmacs 24.5以降のみがサポートされます。
20210612以降のバージョンではlisp/stem-english.elは同梱されなくなりました。 MELPAにも登録されているlexical-binding版か、SDICに含まれるオリジナルのstem.elを利用する等してください。
古い Emacs に対するサポート終了に伴い、bitmap-muleによるsplash画像の表示はできなくしました。 bitmap-muleによる外字表示はまだ行えるはずですが、undocumented 扱いになっており、廃止予定です。
従来はバイトコンパイルの際にlookup.elcに画像イメージを取り込まれるようになっていました。 しかし、この方法はEmacs 28以降で利用可能になった native compilationへの対応が困難です。 この為、画像ファイルはdata-directory以下にlookupディレクトリを作って別にインストールするようにしました。 ついでに、カラー画像のフォーマットはPNGに変更しています。
パッチをあてたeblookを使う事で音声・動画に対するリンクが生成されます。 対応する音声・動画はEB Libraryに依存しており、EPWINGのWAVE形式の音声とMPEG1形式の動画となります。 (詳細はEB Libraryのドキュメントを参照して下さい。)
また、補助パッケージを使用している場合はarrangeも正しく設定しないといけません。 arrangeの先頭あるいはndeb-arrange-jpeg等のイメージデータのarrangeの直前または直後にndeb-arrange-waveとndeb-arrange-mpegを、arrangeの最後にndeb-arrange-snd-autoplayを追加して下さい。
ndeb-binary-programsに、関数名のシンボルを指定する事で外部プログラムの代わりに関数を呼び出す事ができるようになりました。 この際にはプロパティの指定は無視されます。 音声再生用の関数として、play-sound-file関数を使用するndeb-binary-play-sound-fileが用意されています。
また、プロパティに:directが追加されました。 マルチメディアデータは、一般にHONMONファイル等に収録されており、Lookupではデータを抽出し、一時ファイルを作成した後にプログラムの起動・関数の呼出しを行います。 しかし、動画については抽出せずとも元々一つのファイルとして存在しています。 :directをnon-nilにすると、動画の再生時には、最初から存在するファイルを引数にしてプログラムの起動を行うようになります。 このファイルには拡張子が付いていないので、動画を再生するプログラムは拡張子に依らず再生が可能である必要があります。
ndeb-binary-programsに、waveやmpegに対応した記述を追加する事で音声・動画の再生が可能になります。 play-sound-file関数を持つEmacsでは外部プログラムを使用せずに音声再生が可能です。 この機能を利用する場合は、ndeb-binary-programsにwaveに対応する記述としてndeb-binary-play-sound-fileを指定するか、ndeb-binary-programsを一切指定しないでデフォルト値を使用して下さい。 一例としては~/.lookupに以下のような記述を行います。
(setq ndeb-binary-programs
'((wave ndeb-binary-play-sound-file)
(jpeg "gv")))
ndeb-binary-play-sound-fileを使用する場合、音声再生中はEmacs上で他の操作が一切できなくなります。 この為、後述する:snd-autoplayオプションを有効にすると、音声再生が終了するまでcontentが表示されません。
上記以外の場合の音声再生、及び動画の再生には外部プログラムが必要になります。 ndeb-binary-programsは例えば以下のように設定します。
(setq ndeb-binary-programs
'((wave "mplayer")
(mpeg ("mplayerc" "/play") :direct t)
(bmp "gv")))
ここではmplayerを音声再生プログラムの例に出していますが、音声の最後が再生されない不具合が確認されています(2006/5/1)ので、mplayerは使わない方がよいようです。 お勧めの外部プログラムがあれば教えてください。
non-nilにするとarrangeの最後で音声を再生します。 補助パッケージを使用している場合はそのままではオプションが有効になりませんのでarrangeを前述のように設定して下さい。
これらの変数にkey(define-keyのdocstringを参照して下さい)を指定する事でEntryモードから音声・動画の再生が可能になります。 例えば、以下の様な内容を~/.lookupに記述を行います。
(setq ndeb-play-sound-from-entry "z")
(setq ndeb-play-movie-from-entry "x")
上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの音声を、xを押す事で動画を再生します。 この際にprefix argumentを指定すると、先頭からn番目の音声、あるいは動画を再生できます。
尚、これらの変数による設定は、後述する変数ndeb-play-binaries-from-entryで、ほぼ同様の事が行えます。 違いはdescribe-keyの時の表示とエラーメッセージの一部だけ(の筈)です。 また、ndeb-play-binaries-from-entryも含め、同じkeyを指定した場合はndeb-play-binaries-from-entry、ndeb-play-movie-from-entry、ndeb-play-sound-from-entryの順に設定が優先されます。
この変数にkey(define-keyのdocstringを参照して下さい)とリンクのタイプを指定したリストのリストを設定する事でEntryモードから音声・動画・画像の再生が可能になります。 例えば、以下の様な内容を~/.lookupに記述を行います。
(setq ndeb-play-binaries-from-entry
'(("z" wave)
("x" mpeg)))
上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの音声を、xを押す事で動画を再生します。 この際にprefix argumentを指定すると、先頭からn番目の音声、あるいは動画を再生できます。 変数ndeb-play-sound-from-entry, ndeb-play-movie-from-entryの設定例と同じ状態になる設定です。
リンクのタイプは複数指定する事も可能です。
(setq ndeb-play-binaries-from-entry
'(("z" wave mpeg)
("x" xbm bmp jpeg)))
上記の場合、Entryモードからzを押す事でカーソル位置にあるentryの最初にある音声または動画を、xを押す事でentryの最初にある画像を再生します。 この際にprefix argumentを指定すると、keyに対応するタイプのうち、先頭からn番目のリンクを再生できます。
BMPイメージの表示についてですが、Lookup 1.4では一旦TIFFファイルに変換してから表示しています(ちなみにTIFFイメージが扱えない場合はBMPイメージとして直接表示、それもできない場合は表示しないという実装になっています)。 Lookup 1.4+mediaでは、BMPで直接表示、ppm、TIFFの順番で表示に使える画像形式を調べるようにしました。 TIFFよりppmを優先して使用するようにしたのは、TIFFは避けたほうがよいという意見があったのと、私のところではNTEmacsでeblookが出力するTIFFファイルを表示できなかった為です。
実際に表示に使用する形式はndeb-binary-bmp-display-typeに設定されます。 不都合がある場合は~/.lookupで直接指定する事もできます。
Lookup 1.4では画像は全て前後に改行をはさんで表示するようにしていますが、(理化学辞典等でよく使われている)インライン画像に関しては本文のテキスト中に、改行をはさまずに表示するようになります。 eblookへのパッチも必要です。 尚、この変更により、ndeb-arrange-fill-linesがうまく動かない場合が出てくると思われます。
Emacsがサポートしている場合は画像の表示時に縮小表示が可能です。 Emacsは27以降か、24.4以降 (要ImageMagickサポート) が必要です。 変数ndeb-max-image-width, ndeb-max-image-heightに整数を指定した場合はそのピクセル数を超えないように、少数を指定した場合はフレームの大きさからの比率を超えないように縮小します。 拡大はしません。
ndebエージェントでビットマップイメージによる外字表示を行っている場合、辞書が対応していれば外字の大きさをより大きなものに変更できるようになります。 変数ndeb-gaiji-sizeに、使用する外字の大きさ(高さ)を整数値で指定して下さい。 通常は16, 24, 30, 48のいずれかです。 指定した大きさの外字が無い場合は指定した値を越えない最も大きな外字を探し、それも無い場合は16ドットの外字を使用します。
個々の辞書について指定する場合は辞書オプションまたはエージェントオプション:gaiji-sizeを整数値で指定して下さい。 オプションで指定した大きさの外字が無い場合は16ドットの外字を取得します。 オプションが指定されていない辞書については、初めて外字データを取得する際に変数ndeb-gaiji-sizeの値に応じて自動的にオプションが設定されます。
EPWINGの広辞苑第五版などに含まれる図版メニューに対応しました。 パッチをあてたeblookが必要です。 selectモードかentryモードからMを押す(lookup-select-menuまたはlookup-entry-show-menu)事で図版メニューが存在する場合はentryに出現します。 同様にイメージマップも表示できるようになりました。
イメージからの参照先は、画像上の領域を示したリンクとして画像の下に表示されます。 また、emacs22以上では画像をクリックする事で該当する参照先を表示させる事ができます。
広辞苑第五版のような条件検索やクロス検索に対応した辞書と20070120以降のeblookを使用する事で、キーワード検索に対応します。 キーワード検索を行うには辞書オプション:default-methodや変数lookup-default-methodを設定するか、検索文字列の先頭に"@"をつけて下さい。 複数語を指定する場合はスペースやタブで区切ります。 例えば、広辞苑第五版では
@犬 猿 雉
のように検索文字列を指定します。 条件検索とクロス検索の両方の結果をそのまま返す為、最大でlookup-max-hitsの倍の項目数がヒットする可能性があります。
ワイルドカード検索に対応したeblookと、対応した辞書を使用する事でa?ple*の様なパターンで検索できるようになります。
ebestmkが作成するインデックスの検索に対応しました。 インデックスが存在する辞書に対しては、検索方法に全文検索が自動的に追加されます。 実際の検索にはndestエージェントの設定が必要です。
EB Libraryはversion 4から遠隔サーバにある辞書へのアクセスが可能になりました。 ebnetとはこの際に使用されるプロトコルです。 サーバ側にはebnetdが必要です。 同様の事はndtpによっても可能ですが、ebnetを使用すればndtpでは対応していない画像、音声等のマルチメディアデータが扱えます。 UNIX環境ではEB Libraryがebnetに対応していればeblookも自動的に対応しますが、Windows環境(厳密にはコンパイル時にDOS_FILE_PATHがdefineされる環境)ではeblookのソースにも変更が必要です。
ndeb-program-argumentsが文字列から文字列のリストに変更になりました。 Windows上のeblook.exeが従来のndeb-program-argumentsの値を一つの引数として受け取るので、このままでは空白を含まない一つのオプションしか指定できない為です。 自動的に追加されていた-qオプションもこの変数で指定するようにしています。 また、ndeb-process-coding-systemもEUCに明示的に設定しています。 これらの値を~/.lookupで変更している場合は注意して下さい。
EPWING辞書に含まれる字下げ情報に対応しました。 eblook 1.6.1+mediaが必要です。 字下げ量の指定が辞書オプション:minimum-indentで指定された値を越えた場合に、越えた文字数分の字下げを行います。 指定しない場合は変数ndeb-minimum-indentの値が参照されます。 デフォルトでは1です。 字下げ量の最小値が0である書籍を使用している場合はこれらの値を0にした方が良いかもしれません。
EPWING辞書に含まれる上付き・下付き文字情報に対応しました。 文字の大きさは、displayプロパティでheightを設定して変更しています。 設定する値は辞書オプション:script-heightの値が参照されます。 指定されていない場合は変数ndeb-default-script-heightの値が使用されます。 設定できる値に関してはEmacs lispのリファレンスを参照してください。
EPWING辞書に含まれる文字修飾情報に対応しました。 イタリック体・ボールド体についてはeblook 1.6.1+mediaが必要です。 イタリック体・ボールド体・強調表示について、それぞれndeb-italic-face, ndeb-bold-face, ndeb-emphasis-faceを割り当てます。 表示が気に入らない場合はfaceの設定を変更してください。 手抜き実装のため、入れ子になっている場合は一番内側の指定のみ有効になります 。
Boookendsで提供される書籍で使用されている、Unicode外字拡張表示に対応しました。 eblook 1.6.1+mediaおよびEB Library (4.4.3以降) が必要です。
ndebエージェントでは、見出し語を得るときはeblookの内部変数decorate-modeをoffにする為、上付き・下付き・文字修飾といった情報は捨てていましたが捨てないようにしました。
eblookが対応していれば、エージェントオプション:codingにutf-8を指定する事でJIS X 4081 UTF-8 extensionの書籍も扱えます。
:backward-methodsに検索方法のリストを指定した場合にはそれらの検索方法で検索して得られたエントリについて、また、:backward-headingに正規表現を指定した場合はそれに見出しがマッチするエントリについて、エントリの位置は項目の途中を指しているとみなして遡って項目全体を表示するように試みます。 eblook 1.6.1+mediaが必要です。 通常は指定する必要はありません。
エージェントの場所として指定したディレクトリ (CATALOGもしくはCATALOGSファイルが存在するディレクトリ)にalternate.iniというファイルがあると、Unicode検索置換ファイルとして読み込みます。 この置換は後述の:expandersや:normalizersの処理には影響を与えず、該当するエージェントでの全ての検索時に、実際の検索の直前に常に行われます。 内部的には新設された:alternatesオプションを設定しますが、この部分は変更されるかもしれません。
この動作は変数ndeb-set-alternates-automaticallyがnil、もしくはエージェントオプション:alternatesが設定されている場合は行われません。
エージェントの場所として指定したディレクトリ (CATALOGもしくはCATALOGSファイルが存在するディレクトリ)に、例えば辞書の実体が存在するSUBDIRというサブディレクトリとsubdir.mapというファイルがあると、subdir.mapを外字定義ファイルとして読み込みます。 内部的には:gaiji-tableオプションを設定します。
この動作は変数ndeb-set-gaiji-table-automaticallyがnil、もしくは辞書オプション:gaiji-tableが指定されている場合は行われません。
ndebsエージェントが新しく使用可能になります。 これはndebエージェントのvariantです。 ndebではエージェント一つに対してeblookのプロセスが一つ必要ですが、ndebsでは複数のエージェントで一つのeblookのプロセスを共有して使います。
利点は起動にかかる時間を短縮できる事と、NTEmacsのように同時に起動できる子プロセスの数に制限がある場合に、制限に届きにくくなる事です。 逆に、UNIX環境やエージェントの数が少ない場合にはあまりメリットはありません。 加えて、検索時にはndebエージェントよりeblookへのコマンドの発行数が増える為、ndebよりも時間がかかるかもしれません。
設定はほとんどndebエージェントと変わりません。例えば、以下のように設定します。
(setq lookup-search-agents
'((ndebs "/usr/local/dic/kojien")))
エージェントオプション、辞書オプションについてもndebエージェントと同じものがほとんど使えます。 多くのケースでは~/.lookupに書かれたエージェントや辞書名に使用している"ndeb"を"ndebs"に書き換えるだけでそのまま使えます。 ただし、ndeb-binary-*等のカスタマイズ変数まで書き換えないように注意して下さい。
ndebエージェントと異なり、辞書のあるディレクトリの指定が誤っていた場合等にエラーにならずに辞書数0のエージェントとなります。 また、ndeb-program-arguments, ndeb-process-coding-systemによる指定は無視され、ndebs-program-arguments, ndebs-process-coding-systemが参照されます。 辞書オプション:codingによる指定も無視されますが、エージェントオプションによる指定は有効です。
この値がnon-nilかつ、ndebsエージェントにおいてエージェントオプション:codingが指定されていない場合、初回アクセス時に自動的にエージェントオプション:codingと、設定されていなければ:charsetsを設定します。 環境によっては初回アクセス時の速度が目に見えて落ちます。 耐えられない人はnilに変更するか、エージェントオプション:codingを全てのndebsエージェントで設定してください。
ndebs辞書では初期化の際に利用可能な検索方法が設定されます。
a?ple*の様なパターンで検索できるようになります。
正規表現検索以外の場合に空白文字などを検索語から取り除くようにしました。
ndsrdエージェントがcsrdを呼び出す際に付加するオプションを文字列のリストで指定できるようになりました。 NTEmacsからcsrdを呼び出す際に、文字列のコードがEUCだとcsrdにうまく渡されない場合があった為、オプションを指定してシフトJISで呼び出せるようにする為です。
ndspellエージェントが複数の候補を返す際に、ispell等が返すのとは逆の順番に候補を並べていたのを合わせるようにしました。
ndspellエージェントがispellプログラムを起動する際に使用する追加の引数を文字列のリストで指定できます。 デフォルトはnilで、追加の引数はありません。 通常は設定する必要はありません。
ndicエージェントでSDIC形式の辞書を検索する場合、エージェントオプション:codingによって辞書の文字コードを指定できます。
文字コードの異なる辞書が混在する場合は辞書のディレクトリを分け、複数のエージェントを設定する必要があります。
ndicエージェントでSDIC形式の辞書を検索する場合、SUFARY (の古い版) に付属するarrayコマンドを利用することで高速に検索が行えますが、salookコマンド及びsaryに付属するsaryコマンドも利用できるようにしました。 array, salook, saryの順番で検索を行い、最初に見つかったコマンドを使用するようになります。 この時、SDIC辞書オブジェクトのstrategyにはそれぞれarray, salook, saryが指定されます。
sdicf.elを改造して実現していますので、SDICに付属するsdicf.elが読み込まれると機能しません。
SDIC辞書をarrayやsaryで検索した場合、その結果が辞書の登録順にならない (事がある) ので、見出し語を使ってソートするようにしました (saryは検索結果をソートしていました)。
主に英辞郎対策です。
sdicf.elを改造して実現していますので、SDICに附属するsdicf.elが読み込まれると機能しません。
元々の設定ではSDIC辞書の内容の表示の際に見出しとの間に空行を挟んで4桁インデントされるなど、かなりゆったりとした表示になっていますが、個人的な好みによりもっと詰めて表示するようにしました。 また、変数ndic-sdic-default-content-formatにformat stringを指定することでカスタマイズ可能としました。 以前と同様の表示にするには(setq ndic-sdic-default-content-format "%s\n\n %s\n")と設定してください。 また、辞書オプション:content-formatが設定されている場合はndic-sdic-default-content-formatの代わりに参照されます。
SDIC辞書に対してエージェントオプション:sdic-strategyにより、SDIC辞書検索時のstrategyを指定できます。 値はそのままsdicf-open関数のSTRATEGY引数として使われます。 指定が無い場合はndic-sdic-default-strategyが使用され、nilの場合はSDIC側のデフォルトに従います。 辞書ごとに異なるstrategyを指定したい場合は辞書のディレクトリを分け、複数のエージェントを設定する必要があります。
egrep, fgrepは利用せず、grepを引数付で呼び出すようにしました。 また、デフォルトではgrepは-aオプションを付けて呼び出し、辞書ファイルがバイナリファイルと認識される場合がある問題を回避するようにしました。 あまりないと思いますが、grepが古すぎて-aオプションをサポートしない場合などは変数sdicf-grep-program-argumentsをnilにしてください。
sdicf.elを改造して実現していますので、SDICに付属するsdicf.elが読み込まれると機能しません。
ndictエージェントは検索文字列にASCII以外の文字があると検索しないようになっていますが、困る時があるのでチェックしないようにしました。
これは、平林幹雄さんが作成された全文検索システムであるHyper Estraierのインデックスを検索するエージェントです。 まだ実験段階のものですが、分けて管理するのが面倒になったので一緒に入っています。 説明は別ページに分けています。
これは、日本語WordNetのsqlite3用データベースを検索するエージェントです。 説明は別ページに分けています。
ワイルドカード検索(?や*を使った検索)は、Lookup本体側で正規表現検索としてクエリーを作り、エージェントに渡していました。 しかし、ndsrdやndeb[s]エージェントでは正規表現に変換する前の文字列を受け取った方が都合がいいのと、正規表現検索の書式はエージェント依存という建前から、ワイルドカード検索を検索メソッドの一つになるように変更しました。 正規表現への変換等が必要な場合はエージェントが行わなければなりません。 ワイルドカード検索が可能な辞書はSelectモードではmethodに"w"と表記されるようになります。 また、ワイルドカード検索のクエリーにlookup-query-methodを行うとシンボルwildが返ってきます。
ターミナル等のビットマップイメージでの外字表示ができない環境において、外字テーブル(辞書オプション:gaiji-table)で指定のない文字は<gaiji=za423>等の文字列がそのまま表示されます。 この改造版では代替文字(デフォルトでは"_")が表示されるようになります。
referenceを貼り付ける文字列や、referenceの見出しの文字列が指定されていない場合に使われる文字列です。 本来はエージェント側で対応する事のような気もしますが、このパッチではLookup側で対応しています。
インラインでの画像表示の際に、画像のサイズがndeb-max-image-sizeバイトよりも大きいと先頭からndeb-max-image-sizeバイトまで読み込んで表示しようとしますが、危険なので読み込まないようになります。
関数名のシンボルもしくは関数名のシンボルと引数のリストを要素とするリストを指定する事で、検索文字列の正規化をかけることができます。 ここで指定された正規化は検索前に常に行われます。 例えば、特定の辞書に対しては検索をかける前に検索文字列のアルファベットから常にアクセントを取り除くといった事が行えます。
関数は第一引数として文字列を受け取り、文字列のリスト、もしくはnilを返すものが利用できます。 関数は指定された順番に、直前の関数が返した文字列に対して実行されます。 例えばa, b, c三つの関数を指定した時に、元の検索文字列が"0"に対して関数aが("1" "2")という結果を返した場合、関数bは"1"、"2"をそれぞれ引数として計2回実行されます。 関数bが返した結果が("1" "2")、("2" "3")だったとすると、関数cは"1"、"2"、"3"を引数として3回実行されます。
検索は最後の関数によって得られる文字列のリスト (複数回実行された場合はLookup側でまとめます) を使って行われます。 ndsrdエージェントでは実際に使用している例があります。
予め用意している関数として以下のものがあります。
検索文字列から指定された文字を取り除きます。 追加の引数で取り除く文字のリスト、もしくは取り除く文字を含んだ文字列を指定します。
日本語の旧字を新字に、もしくは新字を旧字にそれぞれ変換します。 変換テーブルはLookup 2.0のものを利用しています。 文字コードutf-8が扱える環境が必要です。
アルファベットからアクセント類を取り除きます。 変換テーブルはLookup 2.0のものを利用しています。 文字コードutf-8が扱える環境が必要です。
追加の引数に、文字列を受け取り文字列を返す関数名のシンボルを指定するとnormlizerとして利用できます。 更に追加の引数があれば呼び出す関数に渡されます。
辞書オプション:expandersは辞書オプション:expander, :expand-filter, :hiragana, :stemmerを統合・拡張したようなオプションです。 指定された内容に基づき、検索の際に対象の辞書でヒットしなかった場合に新たな検索文字列候補により検索をかけ、結果を取捨選択できます。
具体的にはexpanderとfilter関数のconsを要素とするリストを指定します。 expanderに指定できる内容は:normalizersオプション、もしくはその要素と同様で、関数名のシンボルもしくは関数名のシンボルと引数のリスト、もしくはそれらを要素とするリストです。 expanderに指定できる関数の仕様も:normalizersオプションの要素と同様で、また、従来の:expanderオプションで指定できる関数も指定できます。 filter関数は従来の:expand-filterオプションで指定できる関数をそのまま指定できます。 すなわち、文字列とエントリのリストを取り、エントリのリストを返す関数名のシンボル、もしくはnilが利用できます。 nilの場合は得られた全てのエントリを結果として用います。
指定された順番にexpanderによる検索とfilterによる選別を行い、最初にエントリが得られた時点で検索を打ち切ります。 例えば従来の:hiraganaオプションと:stemmerオプションでstem-english関数を指定した状態と同等にする場合は
(lookup-set-dictionary-option
"dictionary-id" ':expanders
'((lookup-kanji-get-readings . lookup-kanji-filter)
(stem-english . nil)))
のように設定します。
尚、デフォルトの設定ではワイルドカード検索・正規表現検索・全文検索時にはexpander/filterによる拡張検索は行いません。 これは、辞書オプション:expansion-methodsもしくは変数lookup-query-expansion-methodsで設定できます。 いずれの場合も拡張検索を行う検索方法のシンボルのリストを指定します。 勿論辞書オプションの方が優先されます。
辞書に設定された、normalizerやexpander等の検索語の調整を、検索方法に依存して上書きできます。 ndebエージェントにおける全文検索等、後付けで検索方法を追加した場合等を想定しています。 :charsets, :coding, :alternates, :normalizers, :expanders, :hiraganaおよび:stemmerオプションを上書きできます。 具体的な設定方法はndeb.elでの使用例を参照してください。
上述の様に、辞書オプション:expandersオプションに統合されたので廃止しました。 :hiragana, :stemmerオプションは使用可能です。
expander/filterによる拡張検索でヒットしたエントリの見出しの先頭につける文字列を指定します。 文字列は拡張検索をかける前の検索語を引数にしてformat関数にかけ、その結果を表示に用います。 エントリの本来の見出しはその後に続いて表示されます。
キャラクターセットのリストを指定します。 指定されたキャラクターセットのいずれにも存在しない文字を検索文字列が含んでいた場合に検索を試みなくなります。 不要な検索を試みないことで検索時間の短縮を図ることができます。
このオプションはLookup 2.0に実装されたものを移植したものです。
検索文字列が指定された文字コードで正しくエンコードできない場合には検索を試みなくなります。:charsetsオプションが指定されている場合はこのチェックは行われません。
referenceの開始・終了文字列の正規表現のconsを設定する事で、関数lookup-arrange-referenceが辞書オプション:reference-patternに従ってreferenceを検索する際の検索範囲を制限します。 通常、ユーザが直接指定する事はありません。
辞書の初期化時にエージェント/辞書に特有の処理を加えることができるようになります。 辞書IDは設定されていますが、辞書のタイトル、拡張検索の検索方法の一覧への追加、外字テーブルの設定等は行われていない段階で設定されたコマンドが呼び出されます。 通常、ユーザーが直接指定する事はありません。
Lookupではテキストからの検索語の切り出し、読みを検索するndkksエージェント、漢字を含む検索語から読みを検索するlookup-kanji-get-readings関数において形態素解析エンジンとしてKAKASIを利用しています。 Lookup 1.4+mediaでは、これらのコードを統合し、また、ChaSen、MeCabの様な他の形態素解析エンジンを利用しやすいように変更を加えています。 詳しい変更内容は別ページにて解説します。
外部ファイルに保存することでLookupやEmacs終了後も内容を保持できるキャッシュ機構を導入しました。 EPWING書籍の副本の一覧や、ndicエージェントにおけるディレクトリ中のファイル一覧等、一度設定してしまえばあまり変更されないであろう部分をキャッシュさせることで起動にかかる時間を短縮させるのがねらいです。
デフォルトでは~/.lookup-cacheにキャッシュの内容を保持します。 ファイル名は変数lookup-cache-file-nameで変更できます。 また、キャッシュファイルの文字コードはlookup-cache-file-coding-systemで指定できます。 例えば以下のような記述を~/.lookupに追加します。
(setq lookup-cache-file-coding-system 'emacs-mule-unix)
lookup-enable-cacheをnilにするとキャッシュは無効になりますが、キャッシュデータの収集と保存は行われます。
キャッシュの内容と実際の状態に不整合が生じた場合はキャッシュをクリアしてください。 Lookupを起動した事があるEmacsを全て終了させた状態でキャッシュファイル(デフォルトでは~/.lookup-cache)を削除するか、M-x lookup-cache-clearとM-x lookup-cache-saveを実行してEmacsを終了すればクリアできます。
現在キャッシュしている内容は以下の通りです。
各エージェントにおけるUnicode検索置換ファイルの解析結果。各辞書における外字定義ファイルの解析結果。
ndebエージェントと同じもの。
加えて、各エージェントにおける書籍の一覧。各辞書におけるメニューの有無・利用可能な外字サイズの一覧・利用可能な検索方法の一覧。
各エージェントにおけるファイル名の一覧。dictd形式の辞書における(インデックスではない)辞書ファイル名。
サーバーのプログラム名と辞書の一覧。
Lookupには個々のエージェントや辞書の細かな調整を行うために補助パッケージという仕組みが存在しています。 通常、補助パッケージの利用は~/.lookup等でlookup-use-package関数を使用して明示的に読み込む必要がありますが、ndeb, ndebs, ndic, ndsrdエージェントで、辞書の場所として指定されたディレクトリに特定の名前の補助パッケージを置くことで自動的に読み込むようになります。
デフォルトでは例えば/path/to/DIRECTORYというディレクトリが指定されているエージェントでは/path/to/DIRECTORY/directory-pkg.elというファイルがあれば補助パッケージとして読み込まれます。 読み込みはエージェントのセットアップの際に行われ、~/.lookup等で同一のエージェントに対して別の補助パッケージを指定している場合も設定を上書きします。 -pkgの部分はlookup-package-autoload-suffixで文字列を指定できます。
また、この機能は変数lookup-enable-package-autoloadをnilにするかエージェントオプション:package-autoloadを負数にすると無効になります。
lookup-fill-columnとlookup-window-heightはフレームローカル変数として定義していましたが、新しいEmacsではフレームローカル変数自体が廃止となります。 そのため、これらの変数は通常の変数とし、代わりにフレームパラメータを参照するようにしました。 フレームパラメータに同名のパラメータがあった場合はそれぞれの変数に優先して使用されます。 例えば、lookup-frame-alist変数のデフォルト値にはlookup-fill-columnパラメータが指定されています。
texi/lookup.texiとtexi/lookup-guide.texiを更新しました。 元が古いこともあって、現状にそぐわない点とか表現の統一が取れてない点とかまだまだあると思います。 修正・追記案等あればお知らせ下さい。
また、Lookupのパッケージにはinfo形式のファイルが同梱されていますが、Lookup 1.4+mediaではパッケージから外しています。 インストール時には Emacs を使って自動的に生成します。
バージョン番号は1.4から1.4+media-yyyymmddに変更されます。 splash画面、関数lookup-version、変数lookup-versionで確認できます。
Lookupのソースファイルをバイトコンパイルする際にはlookup-byte-compileをnon-nilにする必要があったり、splash画像を取り込んだりとトリッキーな事を行っています。 この為、Emacsから単純にバイトコンパイルできることを想定したパッケージシステムや、Emacs 28から使用可能になったnative compilationと極めて相性が悪いです。 今後、native compilationができないのは困りそうなので、単純にバイトコンパイルできるように変更しました。 lexical bindingにも移行しましたが、十分なテストは行えていません。
ndeb, ndebsエージェントでのcontentの表示の際にlookup-arrange-fill-linesでの改行処理がうまくいかずに折り返しが生じることがあります。 不完全ですが応急的に対処しました。
eblookを起動した際にエラーがあった場合にlookup-debug-modeの値によって挙動が異なります。 また、Windows環境ではeblookの文字コードの指定に不具合があります。
MS WindowsやOS/2環境においてはkakasiを-uオプション付きで起動させないとうまく機能しません。
ndspellが返す候補を再検索した際に一つもマッチしなかった場合に動作がおかしくなります。 マッチしなかった場合は、ndspell自身がentryを一つ返すようにしました。
referenceの文字列内に外字があるとreferenceが分断されます。 Entryモードでこのようなreferenceがあるentry上でLを押すと分断されたreferenceに応じて多数のreferenceがentryに並びます。
同じ外字が連続する場合に1つしか表示されません。
ndebエージェントで、referenceの開始タグと終了タグの間に何も含まれない場合にreferenceが生成されません。 EPWINGの書籍で、メニューからreferenceをたどると該当するreferenceを認める事があるようです。
bitmap-muleとMule-UCSを併用している場合にsplashが正しく表示されません。 Lookup 1.4+mediaではbitmap-muleによるsplash表示はサポートしないので影響を受けません。 また、NTEmacsでsplashの表示ができないバグも修正しています。
Lookupには、インストールの手段の一つとして、Emacsを起動し、diredからinstall.elをLで実行してインストールするという方法があります。 しかし、画像表示が可能な状態のEmacsでこの操作を行うと、ファイルのコピーは終了するものの途中でエラーになってしまいます。
message関数の呼び出し時に表示させたい文字列をformat-stringとして与えている部分がありますが、明らかに問題のない部分を除いてformat-stringを指定するように変更しました。
この変更をしない場合、例えばモジュール名に'%'を含むモジュールにlookup-module-forwardやlookup-module-backwardで切り替えた時にエラーになります。
Lookupを起動させた時のbufferによってはsplash表示後に元のbufferに戻らない事があります。 lookup-pattern関数等によって初回起動した際にこの現象が起きると、コマンド実行時とは異なるbufferから単語をピックアップしてしまいます。
contentの整形にadjust関数を使用している場合、最後のadjust関数を抜けた際のpointが見えるようにContentバッファは表示されます。 しかし、Contentバッファが予め表示されていた場合には常にバッファの先頭が表示されてしまいます。
Lookupの初回起動直後に、著作権情報の表示に対応した辞書に対してその表示を行おうとするとエラーになります。
補助パッケージを読み込む際に、lookup-package-directory以外の場所から絶対パスを指定されると、lookup-package-file-directoryの値が不適切なものとなり、特に複数ファイルから成る補助パッケージが正しく動作しません。
eblookに音声・動画タグを出させるようにした改造版です。 動画対応は白井さんから提供頂いたパッチによるものです。 Lookup 1.4+mediaで使用して下さい。 EB Libraryは最新版を使用して下さい。
eblook-1.6.1+media-20220426.tar.gz
eblook-1.6.1+media-20220426-ebu-4.5-20220425.exe Win32用のバイナリです。EB Library with UTF-8 supportと静的にリンクしています。 IPv6に対応しています。 IPv6に未対応の環境 (Windows 2000等) でも実行できるはずです (IPv6が使えるという意味ではありません)。 ほとんどチェックしていないので、おかしかったらお知らせください。
eblook-1.6.1+media-20220426-ebu-4.5-20220425-win64.exe Win64用のバイナリです。EB Library with UTF-8 supportと静的にリンクしています。 IPv6に対応しています。
インストールは通常のeblookと同様の手順で行って下さい。 (特に32ビット環境では)off_tの大きさがEB Libraryと一致するように注意してください。
EPWINGの音声データへのリンクが生成されます。 media patchをあてたLookupで使用する事でLookup上で音声データへのリンクが生成されるようになります。 これに伴い、音声データをダンプするコマンド"wave"および"wav"が新設されます。 両者はコマンド名以外は同一のものです。
音声データと同様にEPWINGの動画データへのリンクが生成されます。 これに伴い、動画データをダンプするコマンド"mpeg"および"mpe"が新設されます。 両者はコマンド名以外は同一のものです。
EPWINGでは、動画データはHONMONファイル等に収録されるのではなく、単一のファイルとしてファイルシステム上に存在します。 この、特定の動画に対応するファイル名を表示させるコマンド"mpeg_path"が新設されます。
"color"コマンドが新設されました。 色見本情報を持つ書籍に対して番号 (最小値は1) を指定すると、対応する色見本の情報を出力します。
EPWINGの広辞苑第五版などに含まれる図版メニューに対応しました。 図版メニューを表示するコマンドimage_menuコマンドが新設されます。 また、イメージマップに関して、従来はリンクは表示されるもののリンク先が表示できない状態でしたが正しく表示するようになりました。
インライン画像に関してはimgタグではなく、inlineタグを出力するようになります。
書籍に含まれる字下げ情報を出力するようにしました。 字下げ量が10以上の場合はすべて9として出力します。 また、内部変数decorate-modeがonになっていないと出力されません。
書籍に含まれる文字修飾情報を出力するようにしました。 内部変数decorate-modeがonになっていないと出力されません。
対応するEB Libraryにリンクされている場合に、書籍に含まれる色見本への参照情報を出力するようにしました。 colorコマンドに渡せる色見本の番号を出力します。
内部変数escape-textがtrueになっていると、テキストに含まれる&, <, >を&, <, >と出力するようになります。
bmp2ppmおよびbmp2tiffコマンドにおいて、16色RLE圧縮なBMPデータからの出力に対応しました。 実際にそのようなBMPデータが含まれているEPWINGの辞書は知りません。 ただし、FreePWINGではそのようなデータを含む辞書の作成は可能です。 (EBStudioでも可能だと思いますが確認はしていません。) また、従来のBMPの展開ルーチンはBMPヘッダに含まれているファイルサイズの情報を参照していましたが、参照しないように変更しました。 ヘッダの情報が正しくない場合もそれなりにある(らしい)為です。
searchコマンドで入力した文字列について、従来は 先頭が"="あるいは":"の場合は変数search-methodの値によらず条件検索または複合検索が実行されていました。 この為、条件検索や複合検索のインデックスを持った辞書では"="あるいは":"で始まる項目が検索できなくなっていました。 これを回避する為、search-methodが設定されている場合はその内容に従った検索が実行されるようにしました。
また、変数search-methodをkeywordと設定すると条件検索が、multiと設定すると複合検索が選択されるようになりました。 ただし、これらの検索はsearch-methodをunsetするだけで自動選択されます。
クロス検索に対応しました。 検索方法は条件検索とほぼ同様ですが、単語の区切りに"="ではなく"&"を使用します。 明示的に検索方法を指定するにはsearch-methodをcrossに設定して下さい。
限定的ですがワイルドカード検索を可能にしました。 前方一致検索用の表記インデックスを持つ、EBGやEBXA-Cではない、テキストがJIS X 0208で収録されいてる辞書でワイルドカード検索が可能になります。 無条件にインデックス全体から検索を試みるので検索には時間がかかります。 また、かなインデックスは見ないので、かなインデックスにしかない項目はヒットしません。
今のところ、ワイルドカード検索の実行には変数search-methodにwildを指定しておく必要があります。
subinfoコマンドでの表示にutf-8のケースを入れただけですが、一応対応しました。
Lookupからeblookを利用する場合は、GNU readlineとリンクしたバイナリであってもreadlineの機能は利用しないようになっています。 しかし、実際にはLookupから利用していてもreadlineの機能が有効になることがあります。 その為、明示的に機能を利用しないようにするオプションを新設しました。 Lookup 1.4+mediaでは、デフォルトでこのオプションを使用します。
contentコマンドで指定するentryの先頭に'-'を付加すると、entryの位置は項目の途中であるとみなし、項目の先頭から表示するように試みます。
バージョン番号は1.6.1から1.6.1+media-yyyymmddに変更されます。 オプション--versionで確認できます。
--version (または-v) オプションで、ビルド時に有効にした機能が表示されるようになります。 今のところ、EB_UTF8, ICONV, PAGER, READLINEが有効の際に表示されます。
コンパイル時にDOS_FILE_PATHがdefineされる環境ではEB Libraryがebnetに対応していてもebnet経由でのアクセスができません。
コマンドライン引数やbookコマンドでappendixを指定すると二度とappendixが選択されていない状態にできません。 このパッチではbookコマンドでappendixを指定しなかった時にappendixの設定を解除するようになります。
strcpy関数の使い方が間違っている為に、一部の環境で正しく動作しません。 参照先に倣ってmemmoveを使用するように変更しています。
(2008/07/19 時点ではcygwin側で対策されているようで、この不具合は再現しません。)
cygwin環境では(おそらく)select関数に不備があり、cygwin用にビルドしたEB Libraryはebnetクライアントの機能が正常動作しません。 この為、cygwin環境でビルドしたeblookもebnetに対応できません。 このページにあるeblookのバイナリはcygwin環境で動作するものではないのでこの不具合の影響は受けません。
(古い情報であり、現在も有効かは不明です。)
Linux環境でReadlineあるいはiconvサポートを有効にしたeblookでEBGの書籍がひけない(eblookのプロセスが落ちる)という報告がされています。 筆者が確認できるNetBSDの環境ではReadlineサポートを有効にすると、iso-8859-1に含まれるウムラウトつきアルファベット等を入力(EBGの書籍を利用する場合には起こりうる状態です)すると動作がおかしくなるようでした。 このページにあるバイナリはどちらも無効になっているので影響は受けません。
ndsrdエージェントでビットマップによる外字表示を可能にするパッケージです。 使用にはLookup 1.4+mediaが必要です。 このパッケージに含まれる外字データはかずひこさんが公開されているsrd-fpwからほとんどそのまま流用させて頂いています。
アーカイブに含まれるndsrd-pkg.elと、ndsrd-gaijiディレクトリ以下のファイルを、ディレクトリ構造を保持したままlookup-package-directoryで指定された(した)ディレクトリにコピーして下さい。 それから~/.lookupを変更し、ndsrdの:fmtオプションと:gaiオプションを指定しないようにして下さい。 最後に、~/.lookupに以下のような記述を追加します。
(lookup-use-package "ndsrd+srd" "ndsrd-pkg")
インストール後は今まで通りにLookupを使用して下さい。
ndebやndtpエージェントで外字が表示される環境ではビットマップで外字が表示されるようになります。 以下はHero's formulaの項目を表示した例です。 発音記号の一部、公式の根号を含んだ部分、1/2がビットマップで表示されています。
標準の状態に比べてfaceの割り当てやインデントの設定を積極的に行うようになります。
Lookupのマニュアル(texi/lookup.texi)には辞書のグループ化ができると書かれていますがその具体的な方法については書かれていません。 せっかくなのでこのページで紹介しておきます。 まず、lookup-search-agentsの設定を行っておいて下さい。
Lookupではグループ化された辞書のグループの事をモジュールと呼んでいます。 このモジュールを利用するには、~/.lookupでlookup-search-modulesを設定します。 lookup-search-modulesは、モジュール名と使用する辞書のリストを要素としたリストです。 使用する辞書については、辞書名の最初の一部分だけを記入する事で、同じエージェントの辞書などの複数の辞書を一度に指定することができます。 一例として以下のように書きます。
(setq lookup-search-modules
'(("english"
"ndtp+localhost:GENIUS/GENIUS"
"ndtp+localhost:PLUS/PLUS"
"ndtp+localhost:CHUJITEN/CHUJITEN"
"ndsrd+/arc/eb/srd:srd"
"ndict+localhost"
)
("japanese"
"ndtp+localhost:DAIJIRIN/DGX01"
"ndtp+localhost:KOUJIEN/KOUJIEN"
)
("all"
"ndsrd+/arc/eb/srd:srd"
"ndtp+localhost"
"ndict+localhost")
))
上記の例では3つのモジュールが作られます。 1つ目のモジュール"english"ではndtpエージェントを利用した3冊の辞書と、ndsrdエージェントを利用した辞書が1冊、localhostに接続した ndictエージェント(辞書は複数冊含まれるかもしれません)を使用します。 2つ目のモジュール"japanese"では別の ndtpエージェントを利用した2冊の辞書を使用します。 最後の、モジュール"all"では ndsrdエージェントと、localhost に接続したndtpエージェントとndictエージェントを利用した辞書全てを使用します。
Lookupの起動時には最初に設定されているモジュール(上記の例では"english")が使用されます。 モジュールの切り替えは SelectモードかEntryモードで、M-f, M-bで行うことができます。
通常の検索コマンドに対してC-uを最初に入力する事で検索に使用するモジュールを入力することができます。また、
(defun lookup-pattern-module-english ()
(interactive)
(lookup-pattern (lookup-input-pattern) (lookup-get-module "english")))
(global-set-key "\C-cle" 'lookup-pattern-module-english)
または、
(global-set-key "\C-cle"
'(lambda ()
(interactive)
(lookup-pattern (lookup-input-pattern) (lookup-get-module "english"))))
の様な内容を~/.emacsに書いておくとC-c l eでモジュール"english"を使った検索が行えるようになります。
Lookupでは、補助パッケージを用意したり辞書オプション:gaiji-tableを設定する事で外字をテキストへの置き換える事ができます。 簡単に書いておくと(詳細はLookupのマニュアルを参照して下さい)、
(defconst kojien-gaiji-table
(lookup-new-gaiji-table
'((code1 glyph1 [alternate1])
(code2 glyph2 [alternate2])
...)))
(lookup-set-dictionary-option "ndebs+kojien:kojien"
':gaiji-table kojien-gaiji-table)
のようにして外字テーブルを定義し、辞書オプションとして指定します。 外字テーブルのcodeは外字を一意に決定するコードを文字列で指定します。 ndeb[s]エージェントでは"ha138"等のようになります。 具体的な値はeblookで項目を表示させた時や、Lookupからcontentを表示した状態でフォーマットを解除(t)すれば確認できます。 また、全てを一気に確認する場合はebfontを使用すると便利です。 この場合は、フォントのファイル名に半角外字では"h"、全角外字では"z"を先頭につけたものが外字コードに相当します。 glyphは実際に表示に使う文字を文字列で指定します。 alternateは代替文字で、省略可能です。
ndeb[s]エージェントで使用できるappendixによる置き換えとは異なり、置き換え先はemacsが文字として認識できるものが使えます。 ですので、UTF-8が扱えるemacsでは当然UTF-8な文字への置き換えが可能です。 UTF-8な外字テーブルはEBPocketやコトノコ、ebmini等で使用されており、機械的に変換する事でLookupからも使用することができます。 Lookup 1.4+media では所定の位置にあるEBWin/EBPocketの外字定義ファイルを自動的に読み込みます。
前項では外字テーブルの定義の際はglyphを指定しalternateを省略可能と書きましたが、実際にはglyphを省略(nilにする)しalternateのみ設定する事も可能です。 この場合はビットマップイメージな外字が表示可能であれば表示し、できない場合はalternateの文字列を表示します。 ちなみにndsrd-pkgでは実際にそのような定義を使用しています。
Lookup sound extenderのページを参照して下さい。
2024/03/17 Lookupを更新。 lexical bindingに移行した。 obarrayの作り方が間違っているのを修正した。
2023/08/23 Lookupを更新。 ndwnjエージェントを更新した。
2022/10/10 Lookupを更新。 辞書単独に対して全文検索をかけ (Selectモードで/, lookup-select-text-search)、エントリーが見つからなかった場合に正しくエラーを出すようにした。
2022/10/10 古い記述を削除・修正した。
2022/04/26 eblookを更新。 subinfoコマンドで著作権表示の有無が確認できるようにした。 --versionオプションで、有効になっている機能を確認できるようにした。
2022/04/24 Lookupを更新。 ebestmkが作成するインデックの検索に対応した。 平たくいうとEPWINGで全文検索できるようにした。
2022/01/13 Lookupを更新。 makeを使ったインストールで、splash画像が正しくインストールできないのを修正した。
2021/07/11 Lookupを更新。 前回の更新でlookup-kanji.elの読み込み時にエラーが出るようになったのを修正した。 eblookのcoding systemのデフォルトに、(あれば) cp51932を使うようにした。世界大百科事典Toolkitで変換した辞書で、Ⅰ, Ⅱ等が直接テキストに入っている事への対策。
2021/06/13 Lookupを更新。 XEmacsおよび古いEmacs (24.4以前) のサポートを止めた。 lisp/stem-english.el の同梱を止めた。 native compilationが通るようにした。 splash画像を画像のままインストールするようにした。
2020/07/26 Lookupを更新。 ndwnjエージェントを更新した。
2020/04/14 eblook更新。 色見本に対応した。 要EB Library with UTF-8 support 4.5以降。
Lookupを更新。 画像の縮小表示に対応した。 上記のeblookの更新に対応した (表示を消すだけ)。
2018/03/25 Lookupを更新。 process-kill-without-queryの廃止に対応した。
2017/01/19 Lookupを更新。 make-variable-frame-localの廃止にちゃんと対応した。 EBWin用のUnicode検索置換ファイルと外字定義ファイルの読み込みがとても遅いのを修正した。
2017/01/12 Lookupを更新。 make-variable-frame-localが廃止されたのにとりあえず対応した。
2016/06/12 Lookupを更新。 ispellの呼び出し時にオプションを追加できるようにした。 ドキュメントを更新した。
2015/09/20 Lookupを更新。 SDICの検索でegrep, fgrepを使うのをやめてgrepを使うようにした。 grepを-aオプション付で呼び出すようにした。
2015/07/24 eblookを更新。 長い見出しの末尾が表示されない不具合を修正した (つもり)。
2015/03/01 eblookを更新。 Debianで報告されている不具合を修正した (つもり)。
2014/11/18 eblookを更新。 Readline 6.3とリンクできないのを修正した。 Readline 4.1以前とは非互換になったはず。 その他、細かいバグ修正。