ndest agent

ndestエージェント

平林幹雄さんが作成された全文検索システムであるHyper Estraierのインデックスを検索するLookupのエージェントです。 Lookup 1.4+mediaに含まれています。 また、ローカルなインデックスの検索にはHyper Estraierに含まれるestcmdが必要です。

実験段階の状態ですので仕様が大幅に変更される可能性もあります。

for your download, インストール

Lookup 1.4+mediaに含まれています。

エージェントの設定

~/.lookuplookup-search-agentsの設定に適宜追加して下さい。例えば

(setq lookup-search-agents
      '((ndest "~/est/navi2ch")
        (ndest "http://localhost:1978/node/mail")))

のように設定します。 "~/est/navi2ch"の部分はHyper EstraierのインデックスのパスかノードのURIを指定します。 複数のインデックスやノードを検索する場合はエージェントを複数記述して下さい。

カスタマイズ変数

ndest-estcmd-program-name

estcmdへパスが通っている場合は変更の必要はありません。 estcmdへパスが通っていない場合はフルパス名を含めて指定して下さい。

ndest-estcall-program-name

estcallへパスが通っている場合は変更の必要はありません。 estcallへパスが通っていない場合はフルパス名を含めて指定して下さい。

ndest-process-coding-system-for-write

estcmdへの引数のコーディングシステムを指定します。 通常はデフォルトのutf-8のままで問題ありません。 Windows環境ではsjis等に適宜変更して下さい。

estcall使用時には設定は無視されます(常にutf-8)。

ndest-iconv-coding-system-for-write

コーディングシステムを指定する為にestcmdに指定する文字列を設定します。 通常はiconvが認識するコーディングシステム名を設定します。 ndest-process-coding-system-for-writesjiseuc-jputf-8等の場合は自動設定されるのでnilのままで問題ありません。

estcall使用時には設定は無視されます(常にutf-8)。

ndest-program-arguments

通常は変更する必要はありません。 辞書オプション:argsを参照して下さい。

ndest-access-to-node-directly

non-nilにするとノードサーバへのアクセスにestcallを使用せず、関数url-retrieve-synchronouslyを使用するようになります。 デフォルトではnilに設定されています。

ndest-default-auth

ノードサーバにアクセスする際のユーザ名とパスワードのデフォルト値を文字列のconsで設定します。 パスワードは平文でそのまま記載する必要があり、セキュリティに関しては一切考慮されていません。 nilの場合は無認証でのアクセスを試みます。

辞書オプションまたはエージェントオプション:authが設定されている場合はその設定が優先されます。 個々のエージェントで異なる値を使用する場合はこちらを利用して下さい。

ndest-default-proxy

ノードサーバにアクセスする際のproxyサーバをサーバ名とポート番号のconsで設定します。 サーバ名は文字列で、ポート番号は数値で指定して下さい。 nilの場合、estcall使用時はproxyサーバを利用せずに直接アクセスし、url-retrieve-synchronously関数使用時は変数url-proxy-servicesの設定に従います。 url-retrieve-synchronously関数使用時にこの変数にconsではないnon-nilな値を設定すると、変数url-proxy-servicesの設定によらずproxyサーバを利用しません。

辞書オプションまたはエージェントオプション:proxyが設定されている場合はその設定が優先されます。

ndest-max-text

ndestエージェントのcontentの長さを制限します。 0の時はestcmdコマンドまたはノードサーバのデフォルト値になります。 nilの場合はlookup-max-textの値が参照されます。 lookup-max-textのデフォルト値(100000)をそのまま使用すると余計に見づらい気がしたので異なる値を指定できるようにしました。 辞書オプションもしくはエージェントオプション:max-textが指定されているとそちらが優先されます。

estcall使用時には設定は無視されます(常にデフォルト値)。

ndest-arrange-functions

元のデータ形式やURIによってアレンジの内容を変化させる場合には設定します。 設定内容はデータ形式の正規表現、URIの正規表現、関数名のシンボルを要素とするリストのリストを設定します。 データ形式とURIが正規表現にマッチした場合に関数が実行されます。 正規表現がnilの場合は無条件にマッチしたと判断されます。 いずれの条件にもマッチしなかった場合はndest-arrange-defaultが実行されます。 例えば

(setq ndest-arrange-functions
      '(("^message/rfc822$" nil ndest-arrange-rfc822)
        ("^text/plain$" "/.navi2ch/.+.dat$" ndest-arrange-navi2ch-dat)))

のように設定すると

のように動作します。 ndestエージェントで予め用意している関数として以下のものがあります。

ndest-arrange-rfc822

rfc822形式のデータ用の関数です。

ndest-arrange-navi2ch-dat

「text/plain形式でインデックスされた」navi2chが作成するdatファイル用の関数です。

ndest-arrange-default

デフォルトの関数です。

ndest-follow-link-functions

通常、検索項目の内容には実データへのリンクが存在しますが、そのリンク先にジャンプする際に使用する関数を設定します。 設定内容はndest-arrange-functionsと同様にデータ形式の正規表現、URIの正規表現、関数名のシンボルを要素とするリストのリストを設定します。 関数名のシンボルの代わりに文字列を指定した場合は外部コマンドを呼び出します。 この時、コマンドへの引数として、検索項目がローカルファイルの場合はフルパスのファイル名を、それ以外の場合はURIを与えます。

いずれの条件にもマッチしなかった場合は引き続きndest-follow-file-functions, ndest-follow-uri-functionsによるマッチングを行い、そこでもマッチしなかった場合はndest-follow-link-defaultが実行されます。 例えば

(setq ndest-follow-link-functions
      '(("^text/html$" nil "fiber")))

の様に設定するとhtmlデータに対してはfiberを起動し、それ以外の場合はndest-follow-link-defaultを呼び出します。 ndestエージェントで予め用意している関数として以下のものがあります。

ndest-follow-link-default

ローカルファイルに対してはfind-fileを、その他のURIについてはbrowse-urlを実行します。

ndest-follow-file-functions

ndest-follow-link-functionsと同様に、リンク先にジャンプする際に使用する関数を設定します。 この変数は、検索項目がローカルファイルであり、ndest-follow-link-functionsでの設定にマッチするものがなかった場合に参照されます。

ndestエージェントで予め用意している関数として以下のものがあります。 それ以外に、ファイル名を唯一の引数とする関数または外部コマンドを指定できます。

ndest-follow-link-with-wl

rfc822形式のファイルの表示用のコマンドです。 ファイルが存在するディレクトリMH形式のフォルダとみなしてWanderlustから開きます。 Wanderlustの起動に必要な最低限の設定が必要です。

ndest-follow-link-with-mime-view

rfc822形式のファイルの表示用のコマンドです。 取り敢えずでっち上げただけです。 ローカルファイルにしか対応していません。 SEMI (あるいはそのvariant)が必要です。

ndest-follow-link-with-navi2ch

navi2chが作成するdatファイルを表示する為のコマンドです。 navi2chが必要です。

ndest-follow-uri-functions

ndest-follow-link-functionsと同様に、リンク先にジャンプする際に使用する関数を設定します。 この変数は、ndest-follow-link-functionsでの設定にマッチするものがなく、検索項目がローカルファイルではない、もしくはndest-follow-file-functionsでの設定にもマッチするものがなかった場合に参照されます。

ndestエージェントで予め用意している関数はありませんが、URIを唯一の引数とする関数または外部コマンドを指定できます。

ndest-follow-link-from-entry

key(define-keyのdocstringを参照して下さい)を指定する事でEntryモードからリンク先のURIを参照する事ができます。 例えば、以下の様な内容を~/.lookupに記述を行います。

(setq ndest-follow-link-from-entry "N")

特有のエージェントオプション・辞書オプション

:args

estcmdまたはestcallへの追加の引数を文字列のリストで指定します。 設定されていない場合はndest-program-argumentsが代わりに参照されます。 ndest-program-argumentsは、デフォルトでは"-sf"のみ指定されています。

:max-text

設定されているとndest-max-textの代わりに参照されます。 設定方法はndest-max-textと同一です。

:functions

設定されているとndest-follow-link-functionsの代わりに参照されます。 書式はndest-follow-link-functionsと同一です。

:file-functions

設定されているとndest-follow-file-functionsの代わりに参照されます。 書式はndest-follow-file-functionsと同一です。

:uri-functions

設定されているとndest-follow-uri-functionsの代わりに参照されます。 書式はndest-follow-uri-functionsと同一です。

:hide-type

non-nilに設定されていると、entryの一覧表示の際にURIのデータタイプを表示しなくなります。 例えば、メールログ検索ではデータタイプは常に"message/rfc822"になりますが、これを隠す事でメールのサブジェクトをより長く表示できます。

:auth

ノードサーバにアクセスする際のユーザ名とパスワードを文字列のconsで設定します。 ndest-default-authとほぼ同じ書式で、設定されているとndest-default-authに優先します。 nilの場合はndest-default-authの値が参照されます。 consではないnon-nilな値を設定するとndest-default-authが設定されていても無認証でアクセスを試みます。

:proxy

ノードサーバにアクセスする際のproxyサーバをサーバ名とポート番号のconsで設定します。 ndest-default-proxyと同じ書式で、設定されているとndest-default-proxyに優先します。 nilの場合はndest-default-proxyの値が参照されます。 consではないnon-nilな値を設定するとndest-default-proxyが設定されていてもproxyを経由せずにアクセスします。

その他

検索文字列の書式について

検索文字列の書式はestcmdやestcallに与えるオプションによって変化しますが、デフォルトでは簡便書式を使用するようになっています。 また、url-retrieve-synchronously関数による直接アクセス時の検索文字列は簡便書式を想定していますが、エージェント側で簡便書式を通常書式に変換しているので、estcall使用時と結果が異なる可能性があります。

ノードサーバへの直接アクセスの利点

estcall使用時に対する利点です。

Hyper Estraierが無くても利用可能

特に別ホストのノードサーバにアクセスする場合、ローカルな環境にHyper Estraierをインストールしなくても利用可能になります。

Windows環境において、検索文字列の文字種の制限がなくなる

Windows環境では一部検索条件式に使えない文字がありますが、その制限を回避できます。

早い(かもしれない)

私の環境のように、外部プロセスの起動に時間がかかる環境ではestcall使用時より検索が早く終わるかも知れません。

ノードサーバへの直接アクセスの欠点

estcall使用時に対する欠点です。

(現時点では)通常書式が使えない

簡便書式で書いているものと決め打ちしたコードになっている事による制限です。

複雑な検索式では意図した検索ができない(かもしれない)

簡便書式から通常書式への変換をエージェント側で行っているのでどこかおかしかったりするかも知れません。

既知の不具合(とお願いリスト)

ndest-follow-link-with-mime-viewの表示が見づらい。

誰かもっとまともなのを作って下さい。

ndest-process-coding-system-for-writeに日本語以外のコーディングシステムを設定するとうまく動作しない。

手抜きによるものです。 日本語でもうまく動作しないコーディングシステムがあるかもしれません。 ndest-iconv-coding-system-for-writendest-process-coding-system-for-writeに対応する、iconvが認識するコーディングシステムを設定して下さい。 APELがインストールされている場合はcoding-system-to-mime-charsetが使えるかもしれません(未確認)。

Windows環境でノードサーバ検索時に日本語を含む単語の検索ができない(時がある)

Windows上ではMBCSなAPIを使用している事と、estcallでは検索語のエンコーディングがutf-8に固定されている為に起こる制限です。 多分estcallもMBCSなAPIを使っていると思うのですが確認はしていません。 変数ndest-access-to-node-directlynon-nilに設定する事で自前でノードサーバにアクセスするようになり、この制限は回避できます。

また、estcallの呼び出しでrawサブコマンドを使用すれば回避できるのですが、それではestcallを使うありがたみがないので取り敢えずこのままにしています。

url-retrieve-synchronously関数使用時において、サーバへのアクセス時にプロンプトからパスワードを入力すると検索に失敗する。

一度入力してプロンプト無しにアクセスできるようになると問題なくなります。 Emacs側の問題だとは思いますが追っかけていません。

更新履歴

2023/07/23 古い記述を消した。

2013/07/15 Wanderlustを使ってrfc822形式のファイルの表示させる関数を用意した。

2013/07/11 メールのヘッダ情報が存在しない場合にエラーになる事があるのを修正した。

2013/05/01 ndest-follow-uri-functionsの初期値が正しくないのを修正した。

2012/11/22 得られた検索結果のうち、最後の一つを無視していたのを修正した。

2012/06/11 ndest-follow-file-functionsndest-follow-uri-functionsの初期値を変更した。

2008/07/31 実データへのジャンプのカスタマイズを分かりにくいけど変更しやすくした(つもり)。 ndest-follow-link-functionsを変更している場合は再設定が必要。

2007/04/24 Emacs22以降ではestcallを使用せずにノードサーバへアクセスできるようにした。 認証とproxyを使えるようにした(つもり)。 proxyは動作未確認。 ndest-max-textのデフォルト値をもう少し大きくした。

2007/04/21 文書に@type属性がないとエラーになるのを修正した。

2007/04/21 ノードサーバにも検索をかけられるようにした。 ndest-program-namendest-estcmd-program-nameに変更になった。

2007/04/16 ndest-arrange-navi2ch-datにおいて、デコードする実体参照を追加した。

2007/03/20 URIがfileスキームの際に、ファイルパスのコーディングシステムがutf-8以外の場合にはうまく動作しなくなるのを修正した。

2007/03/20 typoを修正した。 辞書オプション:hide-typeを追加した。

2007/03/14 公開。


Kazuhiro's blog
http://ikazuhiro.s206.xrea.com/staticpages/index.php/ndest