GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/elisp/Command_002dLine-Arguments.html ・ emacs-doc.conao3.com

43.1.4 コマンドライン引数

Emacsの起動時にコマンドライン引数を使用して、さまざまな操作を要求できます。なお、Emacsの推奨される使い方は、ログイン後に一度だけ起動し、すべての編集を同一のEmacsセッション内で行うことです(The GNU Emacs ManualのEntering Emacsを参照してください)。このため、コマンドライン引数をあまり頻繁に使用することはないかもしれませんが、セッションスクリプトからEmacsを呼び出す場合や、Emacsのデバッグを行う際には有用です。本節では、Emacsがコマンドライン引数をどのように処理するかについて説明します。

機能: コマンドライン

この関数は、Emacsの起動時に指定されたコマンドラインを解析・処理し、(その他の処理と併せて)ユーザーのinitファイルを読み込んで起動メッセージを表示します。

変数: command-line-processed

コマンドラインの処理が完了すると、この変数の値は t になります。

dump-emacs-portable を呼び出して Emacs を再ダンプする場合(Building Emacs を参照)、ダンプされた新しい Emacs が新しいコマンドライン引数を処理できるように、あらかじめこの変数を nil に設定しておくとよいでしょう。

変数: command-switch-alist

この変数は、ユーザー定義のコマンドラインオプションとそれに関連付けられたハンドラ関数のalistです。デフォルトでは空ですが、必要に応じて要素を追加できます。

コマンドラインオプションとは、コマンドライン上の引数であり、次のような形式をとります:

-option

command-switch-alistの要素は次のようになります。

(option . handler-function)

CAR, option は文字列であり、コマンドラインオプションの名前(先頭のハイフンを含む)です。handler-function は option を処理するために呼び出され、オプション名を唯一の引数として受け取ります。

場合によっては、コマンドラインにおいてオプションの後に引数が続きます。このような場合、handler-function は残りのすべてのコマンドライン引数を変数 command-line-args-left で取得できます(後述)。(コマンドライン引数の全リストは command-line-args に含まれます。)

なお、command-switch-alist の処理では、option 内の等号を特別に扱うことはありません。つまり、コマンドラインに --name=value のようなオプションがある場合、car が文字通り --name=value である command-switch-alist メンバのみがこのオプションに一致します。このようなオプションをパースしたい場合は、代わりに command-line-functions を使用する必要があります(後述)。

コマンドライン引数は、startup.el ファイル内の command-line-1 関数によって解析されます。また、The GNU Emacs Manual の Command Line Arguments for Emacs Invocation も参照してください。

変数: command-line-args

この変数の値は、Emacsに渡されたコマンドライン引数のリストです。

変数: command-line-args-left

この変数の値は、まだ処理されていないコマンドライン引数のリストです。

変数: command-line-functions

この変数の値は、認識されないコマンドライン引数を処理するための関数リストです。処理対象となる次の引数に特別な意味がない場合、このリスト内の関数が、いずれかが非nil値を返すまで、出現順に呼び出されます。

これらの関数は引数なしで呼び出されます。この時点で一時的にバインドされる変数 argi を通じて、対象のコマンドライン引数にアクセスできます。残りの引数(現在の引数を除く)は、変数 command-line-args-left に格納されます。

関数が argi 内の引数を認識して処理した際は、その引数を処理したことを示すために、nil 以外の値を返す必要があります。また、以下の引数の一部も処理した場合は、それらを command-line-args-left から削除することでその旨を示すことができます。

これらの関数がすべて nil を返す場合、その引数はアクセス対象のファイル名として扱われます。