text.external-editor
- 外部エディタの起動 ¶外部エディタプログラムを起動するための便利なモジュールです。 もともとREPLで使われることを意図していましたが、他の目的にも有用かもしれません。
{text.external-editor
}
外部エディタを起動します。起動するエディタのパスは次のように決められます。
*editor*
が定義されていれば、その値。
GAUCHE_EDITOR
が定義されていれば、その値。
EDITOR
が定義されていれば、その値。
#f
単に#f
を返します。
error
エラーを投げます。
ask
ユーザに尋ねます。(デフォルト)
message
メッセージを出して#f
を返します。
エディタを起動して、それが終了した場合は#t
を返します。
エディタプログラムは次のどちらかの形で呼ばれます:
EDITOR filename EDITOR +lineno filename
後者の場合、エディタはfilenameをオープンした後、 linenoで示される行にカーソルを移動することが期待されます。
オープンするファイル名は、ジェネリックファンクションed-pick-file
を
path-or-procを引数として起動することで決定されます。
ed-pick-file
は(filename lineno)
を返すか、
オープンすべきファイル名が決定できない場合は#f
を返します。
<string>
と<procedure>
に対するメソッドは既に定義されています。
詳しくは下のed-pick-file
を見てください。
load-after引数は、ファイルが変更された後でそれを 自動的にロードするかどうかを指定します。以下の値のいずれかでなければなりません。
#t
エディタが終了し、その時点でファイルが変更されていた場合は、それをロードします。
#f
ファイルをロードしません。
ask
ファイルが変更されていた場合に、ロードすべきかどうかをユーザに尋ねます。(デフォルト)
註: Common Lispのed
は引数なしで呼び出すこともできます。
しかし我々の用途ではそれはあまり有用でないと判断しました。REPLを走らせている場合、
それが既にエディタの中である可能性は高く、
それなら指定ファイルをバッファで開けばいいわけです。
また、emacsclient
はファイル名を取るので、
ファイル名無しの場合の処理が煩雑になります。なので今のところ、ファイル名を必須としました。
{text.external-editor
}
stringを一時ファイルに書き出して、それをオープンするエディタを起動します
(エディタがどう起動されるかについてはed
のエントリを参照)。
エディタが終了したら、編集済の内容を文字列として返します。
{text.external-editor
}
何を編集するかを決めるジェネリックファンクションです。
ファイル名と行番号からなるリストか、編集すべきファイル名が見つからなければ#f
を
返します。
文字列、<procedure>
、そして<top>
に対するメソッドが既に定義されています。
objが文字列なら、それがファイル名です。
objが手続きでそのソース位置が分かっていれば、ソースファイル名と定義行を返します。
objがそれ以外なら#f
を返します。