For Development HEAD DRAFTSearch (procedure/syntax/module):

12.67 text.external-editor - 外部エディタの起動

Module: text.external-editor

外部エディタプログラムを起動するための便利なモジュールです。 もともとREPLで使われることを意図していましたが、他の目的にも有用かもしれません。

Function: ed path-or-proc :key editor load-after

{text.external-editor} 外部エディタを起動します。起動するエディタのパスは次のように決められます。

  • editorキーワード引数に文字列が与えれれば、それをパスと解釈します。
  • userモジュールに変数*editor*が定義されていれば、その値。
  • 環境変数GAUCHE_EDITORが定義されていれば、その値。
  • 環境変数EDITORが定義されていれば、その値。
  • どれも該当しなかった場合、editorキーワード引数によって振る舞いが決まります。
    #f

    単に#fを返します。

    error

    エラーを投げます。

    ask

    ユーザに尋ねます。(デフォルト)

    message

    メッセージを出して#fを返します。

エディタを起動して、それが終了した場合は#tを返します。

エディタプログラムは次のどちらかの形で呼ばれます:

EDITOR filename
EDITOR +lineno filename

後者の場合、エディタはfilenameをオープンした後、 linenoで示される行にカーソルを移動することが期待されます。

オープンするファイル名は、ジェネリックファンクションed-pick-filepath-or-procを引数として起動することで決定されます。 ed-pick-file(filename lineno)を返すか、 オープンすべきファイル名が決定できない場合は#fを返します。 <string><procedure>に対するメソッドは既に定義されています。 詳しくは下のed-pick-fileを見てください。

load-after引数は、ファイルが変更された後でそれを 自動的にロードするかどうかを指定します。以下の値のいずれかでなければなりません。

#t

エディタが終了し、その時点でファイルが変更されていた場合は、それをロードします。

#f

ファイルをロードしません。

ask

ファイルが変更されていた場合に、ロードすべきかどうかをユーザに尋ねます。(デフォルト)

註: Common Lispのedは引数なしで呼び出すこともできます。 しかし我々の用途ではそれはあまり有用でないと判断しました。REPLを走らせている場合、 それが既にエディタの中である可能性は高く、 それなら指定ファイルをバッファで開けばいいわけです。 また、emacsclientはファイル名を取るので、 ファイル名無しの場合の処理が煩雑になります。なので今のところ、ファイル名を必須としました。

Function: ed-string string :key editor

{text.external-editor} stringを一時ファイルに書き出して、それをオープンするエディタを起動します (エディタがどう起動されるかについてはedのエントリを参照)。 エディタが終了したら、編集済の内容を文字列として返します。

Generic Function: ed-pick-file obj

{text.external-editor} 何を編集するかを決めるジェネリックファンクションです。 ファイル名と行番号からなるリストか、編集すべきファイル名が見つからなければ#fを 返します。

文字列、<procedure>、そして<top>に対するメソッドが既に定義されています。 objが文字列なら、それがファイル名です。 objが手続きでそのソース位置が分かっていれば、ソースファイル名と定義行を返します。 objがそれ以外なら#fを返します。



For Development HEAD DRAFTSearch (procedure/syntax/module):
DRAFT