[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34. OSインタフェース

この章では、 Emacsを立ち上げたりEmacsから抜けたりすること、 オペレーティング・システム環境の値を取得すること、 端末と入出力とフロー制御について説明します。

関連する情報についてはSee section Emacsを作る。 また、端末と画面にまつわるオペレーティング・システムの状態、 情報については、Emacsの表示を参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1 Emacsの立ち上げ

この節では、Emacsが立ち上げ時に何をするか、 そして、その動作をどのようにカスタマイズするかについて述べます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1.1 立ち上がりの際の一連の動作一覧

Emacsの起動時には以下の順序で実行されます (これは`startup.el'に書かれています)。

  1. ウィンドウ・システムを使っているときは、 ウィンドウ・システムの初期化ライブラリをロードします。 ライブラリの名前は`term/windowsystem-win.el'です。
  2. 初期化オプションを処理します (オプションによってはもっと前に処理するものもあります)。
  3. 必要に応じて、Xウィンドウのフレームとフェースを初期化します。
  4. 正規フックbefore-init-hookを実行します。
  5. もし`-no-site-file'を指定していなければ、 ライブラリ`site-start'をロードします。 普通、ライブラリの名前は`site-start.el'です。
  6. コマンド行に`-q'が指定されていなければ、 ファイル`~/.emacs'をロードします (これは`-batch'モードでは行ないません)。 `-u'オプションを指定すると、 `~'の代わりに誰のホーム・ディレクトリを使うかを指定することができます。
  7. inhibit-default-initが非nilならば、 ライブラリ`default'をロードします (`-batch'モードやコマンド行で`-q'を指定してあるときは、 ロードを行ないません)。 普通、ライブラリの名前は`default.el'です。
  8. 正規フックafter-init-hookを実行します。
  9. initial-major-modeにしたがって主モードの設定を行ないます。 ただし、この時点ではまだ`*scratch*'がカレントで、 しかもまだFundamentalモードです。
  10. バッチ・モードでないときか、 あるいはウィンドウ・システムを使っているとき、 端末固有のLispファイルがもしあれば、ロードします。
  11. inhibit-startup-echo-area-messageによって抑止されていなければ、 最初のエコー領域メッセージを表示します。
  12. コマンド行の動作引数を処理します。
  13. term-setup-hookを実行します。
  14. 選択されたフレームのパラメータを初期化ファイルの指定どおりに修正する、 frame-notice-user-settingsを呼び出します。
  15. window-setup-hookを実行します。See section ウィンドウ・システム
  16. (少し前の段階で)コマンド行引数が残ってなく、 inhibit-startup-messageの値がnilならば、 copyleft、無保証性、基本的利用のための情報を表示します。
User Option: inhibit-startup-message

この変数は、 (無保証性などを示す) 最初の立ち上げメッセージを取りやめます。 非nilの場合、メッセージを表示しません。

立ち上げメッセージの内容を熟知したら、 個人的な初期化ファイルの中でこの変数を設定すればよいようになっています。 新しいユーザが見ることになっている情報の取得が妨げられるので、 新しいユーザの初期化ファイルや複数のユーザに影響の出るようなやり方で、 この変数を設定してはいけません。

User Option: inhibit-startup-echo-area-message

この変数は、最初のエコー領域メッセージの表示を制御します。 立ち上げ時のエコー領域メッセージの表示は、 以下の形式のテキストを`.emacs'ファイルに追加すれば抑止できます。

 
(setq inhibit-startup-echo-area-message
      "your-login-name")

単純にinhibit-startup-echo-area-messageへログイン名を設定することは、 メッセージを抑制するのに不十分です。 Emacsは陽に`.emacs'が上記のような式を含むか調べています。 ログイン名はLispの文字列定数として式に現われなければなりません。

こうして、あなたは簡単にメッセージを抑止できますが、 誰かがやみくもにあなたの`.emacs'ファイルを転記しても、 その人へのメッセージは抑止されません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1.2 初期化ファイル`.emacs'

Emacsを立ち上げたとき、 通常はあなたのホーム・ディレクトリ配下にある ファイル`.emacs'をロードしようとします。 このファイルがある場合はLispコードを含んでいなければなりません。 これをあなたの初期化ファイル(init file)といいます。 コマンド行スイッチの`-q'`-u'が、 初期化ファイルの利用に影響を与えます。 `-q'は初期化ファイルをロードしないことを、 そして`-u'はあなたの初期化ファイルの代わりに、 指定したユーザの初期化ファイルをロードすることを 指定します。See (emacs)Entering Emacs section `Entering Emacs' in The GNU Emacs Manual

サイトには、`default.el'という名前のライブラリである、 デフォルト初期化ファイル(default init file)があることもあります。 Emacsは`default.el'ファイルを見つけるのに、 ライブラリの標準検索パスを使用します (see section プログラムでロードする方法)。 Emacsの配布物件にはこのファイルを含んでいません。 サイトで固有なカスタマイズをすることができます。 デフォルト初期化ファイルがあれば、 バッチ・モードの場合と、`-q'を指定した場合を例外として、 Emacsを立ち上げるときにいつもロードされます。 個人の初期化ファイルがあれば、そちらが先にロードされます。 そこでinhibit-default-initを非nilの値に設定すると、 Emacsは`default.el'のロードを取りやめます。

もう一つ`site-start.el'というサイトのカスタマイズ用ファイルがあります。 Emacsは、ユーザの初期化ファイルのに、このファイルをロードします。 このファイルのロードは、オプション`-no-site-file'で禁止できます。

Variable: site-run-file

この変数は、 ユーザの初期化ファイルの前にロードする、 サイトのカスタマイズのファイルを指定します。 通常の値は"site-start"です。

もし`.emacs'のコードが大きくなりすぎたら、 `something.el'のようにファイル名を変えて、 それをバイトコンパイルしておき(see section バイトコンパイル)、 そして`.emacs'ファイルからloadを使って、 ほかのファイルをロード(see section ロード)した方がいいでしょう。

`.emacs'ファイルでありがちな、 望ましいカスタマイズのいろいろなこと については、See (emacs)Init File Examples section `Init File Examples' in The GNU Emacs Manual

User Option: inhibit-default-init

この変数は、Emacsがデフォルト初期化ライブラリをロードするのを禁止します。 値が非nilの場合、デフォルトのライブラリをロードしません。 デフォルト値はnilです。

Variable: before-init-hook
Variable: after-init-hook

この二つの正規フックはユーザの初期化ファイル、`default.el'`site-start.el'のロードの直前と直後に作動されます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1.3 端末固有の初期化

各端末の型には独自のLispライブラリがあって、 Emacsが作動するときにはその端末型のライブラリをロードします。 termtypeという名前の端末型のライブラリの名前は、 `term/termtype'です。 ほかのファイルの場合と同様に、 Emacsはload-pathのディレクトリを検索して、 `.elc'`.el'の接尾辞のついたファイルがないか調べます。 通常、端末固有のライブラリは、 `emacs/lisp/term'というEmacs Lispライブラリの 保管してある`emacs/lisp'ディレクトリの サブディレクトリに置いてあります。

ライブラリの名前は、 変数term-file-prefixの値と端末型を結合して構築します。 通常term-file-prefixは、"term/"という値をもっています。 この値を変更することはおすすめできません。

端末固有ライブラリの通常の機能は、 特殊キーの送出するシーケンスをEmacsが理解できるようにすることです。 端末にたいするTermcapの項目が、 端末のファンクション・キーの全部を指定してはいない場合、 このライブラリでfunction-key-mapの設定や追加をすることも あります。See section 端末入力

端末型の名前がハイフンを含むとき、 ライブラリの名前としては最初のハイフンの前までが有効です。 したがって`aaa-48'`aaa-30-rv'という端末型は、 両方とも`term/aaa'というライブラリを使います。 必要であれば、ライブラリは(getenv "TERM")を評価して 端末型の完全な名前を使うことができます。

`.emacs'ファイルで変数term-file-prefixnilに 設定することで、端末固有ライブラリのロードを止めることができます。 この機能は、あなたが独創的なカスタマイズを試してみるときに役に立ちます。

変数term-setup-hookを設定することによって、 端末固有ライブラリの動作の一部を無効にすることができます。 これは`.emacs'ファイルと端末固有ライブラリの両方をロードした後に、 つまり、 Emacsの初期化の最後にrun-hooksを使って作動させる正規フックです。 独自のライブラリをもたない端末の初期化の定義に、 この変数を使うことができます。See section フック

Variable: term-file-prefix

もしterm-file-prefixが非nilならば、 Emacsは、端末固有の初期化ファイルを以下のようにロードします。

 
(load (concat term-file-prefix (getenv "TERM")))

端末初期化ファイルのロードを望まない場合は、 `.emacs'ファイルでterm-file-prefix変数をnilに設定することができます。 そうするには、 `.emacs'(setq term-file-prefix nil)と書きます。

Variable: term-setup-hook

この変数は、`.emacs'、デフォルト初期化ファイル(もしあれば)、 端末固有Lispファイルのロードの後にEmacsが作動させる正規フックです。

term-setup-hookを使って、 端末固有ファイルで施された定義を無効にすることができます。

関連する機能についてウィンドウ・システムwindow-setup-hookを 参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.1.4 コマンド行引数

コマンド行引数を使って、 Emacsを立ち上げるときにいろいろな動作をさせることができます。 1日に1回よりも多くEmacsを立ち上げる必要はありませんし、 何日もEmacsを立ち上げたままにすることもありますから、 コマンド行引数を使うことはほとんどないでしょう。 実際、こうした習慣こそが不必要に多くEmacsを殺したり、 再起動したりすることを助長しているのであって、 このようなものを使う習慣をなくすことの方が最高なのです。 これらのオプションが存在するのは二つの理由があります。 (ほかのプログラムに起動されるときのための) ほかのエディタとの互換性と、 Lispプログラムをシェル・スクリプトから起動することができるようにすることです。

この節ではEmacsがコマンド行引数をどのように処理するのかと、 どのようにそれをカスタマイズするのかについて述べます。

Function: command-line

この関数は、Emacsが呼ばれたときのコマンド行を解析し、それを処理し、 ユーザの`.emacs'ファイルをロードし、 立ち上げメッセージの表示を行ないます。

Variable: command-line-processed

この変数の値は、一度コマンド行を処理するとtになります。

もしdump-emacsを呼び出してEmacsを再ダンプするときは、 新しくダンプされたEmacsに新しいコマンド行引数を処理させるために、 この変数をnilに設定したくなることでしょう。

Variable: command-switch-alist

この変数の値は、 ユーザ定義のコマンド行オプションとそれに対するハンドラ関数のalistです。 この変数に要素を追加できるようになっています。

コマンド行オプション(command line option)とは 以下のようなコマンド行の引数のことです。

 
-option

command-switch-alistの要素は以下のようになっています。

 
(option . handler-function)

handler-functionoptionを処理するために呼び出され、 オプション名を唯一の引数として受け取ります。

場合によっては、オプションにコマンド行中の引数がともなうことがあります。 そのような場合、 handler-functioncommand-line-args-leftの中から、 残りの全部の引数をとりだすことができます (コマンド行引数全体のリストは、command-line-argsにあります)。

コマンド行引数は、 `startup.el'ファイルのcommand-line-1関数で 解析します。(emacs)Command Switches section `Command Line Switches and Arguments' in The GNU Emacs Manualを 参照してください。

Variable: command-line-args

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

Variable: command-line-functions

この変数の値は認識されないコマンド行引数を処理する関数のリストです。 処理中の次の引数が特別な意味をもっていないときは常に、 このリストの関数がリストの先頭から呼び出され、 どれか一つが非nilの値を返すまで順に繰り返します。

この関数群は引数なしで呼び出されます。 考慮中のコマンド行引数はargi変数でアクセスできます。 残りの引数(処理中のものをのぞく)は、 command-line-args-leftにあります。

関数が引数argiを認識し処理を行なうとき、 その引数を処理したことを示すために、 非nilの値を返さなければなりません。 もし後続する引数も処理した場合、 command-line-args-leftから消去して、 そのことを示します。

もしすべての関数がnilを返したら、 引数は読み込むファイルの名前として使います。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.2 Emacsから抜ける

Emacsから抜ける方法は二つあります。 Emacsジョブを殺せば完全に終了してしまいます。 後でまたEmacsプロセスに入れるように、サスペンドすることもできます。 ログ・アウトするときをのぞけば、 実際それほどEmacsを殺すことはありません。 サスペンドすることが、ほとんどです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.2.1 Emacsを殺す

Emacsを殺すということはEmacsプロセスの実行を終わらせるということです。 通常は、親プロセスが制御を取り戻します。 Emacsを殺す低水準プリミティブは、kill-emacsです。

Function: kill-emacs &optional exit-data

この関数は、Emacsのプロセスを抜けて、killします。

exit-dataが整数の場合、 それをEmacsプロセスのexitステータスとして用います (これは主にバッチ操作のときに便利です。バッチ・モードを参照してください)。

もしexit-dataが文字列ならば、 シェル(あるいは次に入力を読み込むプログラムなら何でも)が読み込めるよう、 内容を端末の入力バッファに放り込みます。

Emacsプロセスの全情報は、 セーブしたファイルをのぞいて、 Emacsが殺されたときになくなります。 Emacsを殺すといろいろな作業結果が失われてしまうので、 保存の必要なバッファや走行中のサブプロセスが存在すると、 Emacsはユーザに本当に終了するべきか否かを尋ねます。 これは関数save-buffers-kill-emacsによります。

Variable: kill-emacs-query-functions

標準的な質問の後で、 save-buffers-kill-emacsは、 リストkill-buffer-query-functionsにある関数を、 先頭から引数なしで呼び出します。 これらの関数でユーザに付加的な確認の質問をすることができます。 一つでも非nilを返すと、Emacsは殺されません。

Variable: kill-emacs-hook

この変数は、正規フックです。 save-buffers-kill-emacsは、 いったんすべてのファイルのセーブと確認を終えた後で、 これはこのフックにある関数群を作動させます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.2.2 Emacsのサスペンド

Emacsのサスペンド(suspending Emacs)とは、 Emacsを一時的に停止させ、 通常はシェルであろう上位のプロセスに、制御を戻すことをいいます。 これは後から同じバッファ、同じkillリング、 同じ取り消し履歴などがある同じEmacsプロセスで、 編集を再開させることができます。 Emacsを再開させるには、 親シェルで適切なコマンドを(大体fgですが)使います。

オペレーティング・システムによっては、 ジョブのサスペンドをサポートしていないこともあります。 このようなシステムでの「サスペンド」は、実際、 Emacsの子プロセスとして新しいシェルを一時的に立ち上げるだけです。 このときシェルを抜けるとEmacsに戻ります。

Xのようなウィンドウ・システムを使っている場合、 再開すべき親がいないかもしれないですし、 別なウィンドウに移動するだけでシェルなどのほかのジョブに入力を与えることができるので、 サスペンドは役に立ちません。 そのためEmacsがXのクライアントの場合、 サスペンドは禁止してあります。

Function: suspend-emacs string

この関数は、Emacsを停止させ上位のプロセスに制御を戻します。 上位プロセスがEmacsを再開させると、 suspend-emacsnilをLispの呼び出し側に返します。

もしstringが非nilならば、 その文字はEmacsの上位シェルに端末入力として読み込まれます。 (訳注:文字を読み込んだ)結果だけが現われます。

suspend-emacsは、 サスペンドの前に正規フックsuspend-hookを作動させます。 suspend-hookは、 Emacsバージョン18では正規フックではありませんでした。 この値は単一の関数で、 もしその値が非nilならば、 suspend-emacsはサスペンドをせずすぐに戻っていました。

ユーザがEmacsを再開させた後、 suspend-emacsは、 正規フックsuspend-resume-hookを作動させます。See section フック

no-redraw-on-reenterが非nilでなければ、 再開の直後で全画面の再表示を行ないます。 (see section 画面の再表示)。

以下の例でEmacsがサスペンドした後`pwd'はエコーされません。 しかし、シェルによって読み込まれ実行されます。

 
(suspend-emacs)
     ⇒ nil

(add-hook 'suspend-hook
          (function (lambda ()
                      (or (y-or-n-p
                            "Really suspend? ")
                          (error "Suspend cancelled")))))
     ⇒ (lambda nil
          (or (y-or-n-p "Really suspend? ")
              (error "Suspend cancelled")))
(add-hook 'suspend-resume-hook
          (function (lambda () (message "Resumed!"))))
     ⇒ (lambda nil (message "Resumed!"))
(suspend-emacs "pwd")
     ⇒ nil
---------- Buffer: Minibuffer ----------
Really suspend? y
---------- Buffer: Minibuffer ----------

---------- Parent Shell ----------
lewis@slug[23] % /user/lewis/manual
lewis@slug[24] % fg

---------- Echo Area ----------
Resumed!
Variable: suspend-hook

この変数は、サスペンドの前の正規フックです。

Variable: suspend-resume-hook

この変数は、サスペンドの後の正規フックです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.3 OS環境

Emacsは、 オペレーティング・システム環境にある変数へのアクセスを、 さまざまな関数によって提供しています。 これらの変数にはシステムの名前やユーザのUIDなどが含まれます。

Variable: system-type

この変数の値は、 Emacsが機能しているオペレーティング・システムの型を示すシンボルです。 以下にとりうる値の一覧表を示します。

aix-v3

AIX.

berkeley-unix

Berkeley BSD.

dgux

Data General DGUX operating system.

gnu

A GNU system using the GNU HURD and Mach.

hpux

Hewlett-Packard HPUX operating system.

irix

Silicon Graphics Irix system.

linux

A GNU system using the Linux kernel.

ms-dos

Microsoft MS-DOS "operating system."

next-mach

NeXT Mach-based system.

rtu

Masscomp RTU, UCB universe.

unisoft-unix

UniSoft UniPlus.

usg-unix-v

AT&T System V.

vax-vms

VAX VMS.

windows-nt

Microsoft windows NT.

xenix

SCO Xenix 386.

絶対的に必要ではないのなら、 私たちはきれいな区別をするために新しいシンボルをつけ足すことは望みません。 異なるオペレーティング・システムを区別するためには、 system-configurationを利用することを推奨します。

Variable: system-configuration

この変数は、 システムのハードウエア/ソフトウエアの三部構成名を文字列として保持します。 この文字列の一部分を比較するときは、 string-matchを使うと便利です。

Function: system-name

この関数は、走っているマシンの名前を返します。

 
(system-name)
     ⇒ "prep.ai.mit.edu"

シンボルsystem-nameは、関数であると同時に変数でもあります。 実際、関数の方は変数system-nameが現在保持している値が何であれ、 それを返します。 したがってEmacsがシステムの名前について混乱している状況なら、 変数system-nameに値を設定することも可能です。 この変数は、フレームのタイトルを構成するときにも役に立ちます (see section フレーム・タイトル)。

Variable: mail-host-address

もしこの変数が非nilならば、 emailアドレスを生成する目的でsystem-nameの代わりに利用されます。 たとえば、user-mail-addressのデフォルト値を構成するときに使用します。See section ユーザの識別。 (これはEmacsの立ち上がり時になされるので、実際に値が使われるのは、 Emacsをダンプしたときに保存していた値です。See section Emacsを作る。)

Function: getenv var

この関数は、環境変数varの値を文字列として返します。 Emacs内部で環境変数の値は、 Lisp変数のprocess-environmentに保管します。

 
(getenv "USER")
     ⇒ "lewis"

lewis@slug[10] % printenv
PATH=.:/user/lewis/bin:/usr/bin:/usr/local/bin
USER=lewis
TERM=ibmapa16
SHELL=/bin/csh
HOME=/user/lewis
Command: setenv variable value

このコマンドはvariableという環境変数の値をvalueに設定します。 引数は両方とも文字列です。 この関数は、process-environmentを修正することではたらいています。 letでこの変数を束縛するのも実際、合理的に行なわれていることです。

Variable: process-environment

この変数は、文字列のリストで、 それぞれが一つの環境変数を表わします。 関数getenvsetenvはこの変数によってはたらいています。

 
process-environment
⇒ ("l=/usr/stanford/lib/gnuemacs/lisp"
    "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin"
    "USER=lewis" 
    "TERM=ibmapa16" 
    "SHELL=/bin/csh"
    "HOME=/user/lewis")
Variable: path-separator

この変数は、 (環境変数にある)検索パスのディレクトリを分離する文字を保管します。 UnixとGNUシステムでは":"で、 MS-DOSとWindows NTでは";"です。

Variable: invocation-name

この変数は、Emacsが起動されたプログラム名を保管します。 値はディレクトリ名を含まない文字列です。

Variable: invocation-directory

この変数は、起動されたEmacs実行形式のディレクトリか、 あるいはそれが決定できない場合は、nilを保管します。

Variable: installation-directory

もし非nilならば、 `lib-src'`etc'のサブディレクトリを探すためのディレクトリです。 これはEmacsが標準のインストール場所のディレクトリを見つけられなかったが、 Emacsの実行可能形式を含むディレクトリから相対的に見つけることができたとき、 非nilになります。

Function: load-average

この関数は、 最近の1分間、5分間、15分間のロード・アベレージをリストにして返します。 この値はシステムロード・アベレージに100を掛けたものです (ロード・アベレージは走行を試みているプロセスの数を示します)。

 
(load-average)
     ⇒ (169 48 36)

lewis@rocky[5] % uptime
 11:55am  up 1 day, 19:37,  3 users,
 load average: 1.69, 0.48, 0.36
Function: emacs-pid

この関数は、EmacsプロセスのプロセスIDを返します。

Function: setprv privilege-name &optional setp getprv

この関数は、VMS特権の設定と解除を行ないます (Unixにはありません)。 第1引数は文字列としての特権名です。 第2引数setptあるいはnilで、 特権がオンか、オフかを示します。 デフォルトでnilです。 成功するとtを返し、そうでないとnilを返します。

第3引数getprvが非nilならば、 setprvは特権を変更せずに、 tあるいはnilを返して、 現在その特権があるかどうかを示します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.4 ユーザの識別

Variable: user-mail-address

これはEmacsを使っているユーザの通常のemailアドレスを保持します。 Emacsが立ち上がったとき、たいていは正しいデフォルト値を算出します。 このデフォルト値が正しくないときはユーザが自分で値を設定します。

Function: user-login-name &optional uid

もしuidを指定しなければ、 この関数は、ログインしているユーザの名前を返します。 もし環境変数LOGNAMEが設定されていたら、 その値を使います。さもないと、 もし環境変数USERが設定されていたら、 その値を使います。さもないと、 値は実UIDでなく、実効UIDに基づいて取られます。

もしuidを指定したとき、 値はuid(整数でなければなりません)に対応するユーザ名です。

 
(user-login-name)
     ⇒ "lewis"
Function: user-real-login-name

この関数は、Emacsの実UIDに対応した名前を返します。 これは、実効UID、環境変数LOGNAMEUSERを無視します。

Function: user-full-name

この関数は、ユーザの氏名を返します。

 
(user-full-name)
     ⇒ "Bil Lewis"

シンボルuser-login-nameuser-real-login-nameuser-full-nameは、関数であると同様に変数でもあります。 この関数群はこの変数群が保持する値を返します。 この変数群で関数群の返す値を設定して、 Emacsを「だます」ことができます。 この変数群はフレームのタイトルを構成するときにも役に立ちます (see section フレーム・タイトル)。

Function: user-real-uid

この関数は、ユーザの実UIDを返します。

 
(user-real-uid)
     ⇒ 19
Function: user-uid

この関数は、ユーザの実効UIDを返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.5 1日の時刻

この節では現在の時刻と時間帯の決定方法を説明します。

Function: current-time-string &optional time-value

この関数は、現在の時刻を人が読める文字列の形で返します。 この文字列の形式は固定です。 各部分(訳注:曜日の部分とか年の部分など)には常に同じ文字数が用いられます。 このため、 各部分を抽出するのに安心してsubstringを用いることができます。 文字列の後ろに情報を拡張する場合を考慮すれば、文字は後ろからではなく、 前から数えた方がいいでしょう。

引数time-valueが与えると、現在時刻の代わりに整形すべき 時刻を指定します。 引数は最初の二つの要素が整数であるリストでなければなりません。 したがってcurrent-time(以下を参照)やfile-attributes (see section ファイルに関するそのほかの情報)で得た値を使うことができます。

 
(current-time-string)
     ⇒ "Thu Aug 24 06:30:15 1995"
Function: current-time

この関数は、システム時刻の値を三つの整数のリスト (high low microsec)として返します。 整数highlowは、 のようにして(訳注: UTCで)1970年1月1日0時0分0秒 からの秒数を表わします。

第3要素microsecは、 最近の秒が始まってからのマイクロ秒数 (あるいは秒精度までしか返さないシステムでは0)を示します。

最初の二つの要素は、 関数file-attributesで得られるような時刻の値と 比較することができます。See section ファイルに関するそのほかの情報

Function: current-time-zone &optional time-value

この関数は、ユーザの属している時間帯を返します。

値は(offset name)という形をしています。 ここでoffsetは整数でUTCよりも進んでいる (グリニッチより東の)秒数です。 負の値はグリニッチよりも西であることを意味します。 第2要素nameは文字列で時間帯の名称を表わします。 双方とも夏時間の始まりと終わりに変化が生じます。 夏時間の制度のないところでは常に一定です。

値を算出するのに必要な情報が、 オペレーティング・システムからすべては与えられていない場合、 両方の要素はnilです。

引数time-valueが与えられると、 現在時刻の代わりに解析すべき時刻を指定します。 引数は二つの整数を含むコンス・セルか、 あるいは、先頭の二つの要素が整数のリストです。 したがってcurrent-time (上記参照)や file-attributes (see section ファイルに関するそのほかの情報) で得られるような 時刻を使うことができます。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.6 時刻の変換

この関数群は、 時刻の値(2個、3個の整数のリスト)から文字列、 暦情報への変換を行ないます。 また、暦情報から時刻の値へ変換する関数もあります。 時刻の値は関数current-time (see section 1日の時刻) とfile-attributes (see section ファイルに関するそのほかの情報) から得ることができます。

Function: format-time-string format-string time

この関数は、 timeformat-stringにしたがった文字列に変換します。 引数format-stringは、 時刻の一部分の置換を指示する`%'列を含ませることができます。 `%'列の意味の一覧は以下のとおりです。

`%a'

曜日の省略形を表わします。

`%A'

完全な曜日の名前を表わします。

`%b'

月の省略形を表わします。

`%B'

完全な月の名前を表わします。

`%c'

これは`%x %X'の省略形です。

`%C'

これはロケール特有の意味があります。 デフォルトのCというロケールでは`%A, %B %e, %Y'と等価です。

`%d'

これは0で埋め草した月の日付です。

`%D'

これは`%m/%d/%y'の省略形です。

`%e'

これは空白で埋め草した月の日付です。

`%h'

これは`%mb'の省略形です。

`%H'

これは時間(00-23)を表わします。

`%I'

これは時間(00-12)を表わします。

`%j'

年間での日数(001-366)を表わします。

`%k'

これは空白で埋め草した時間(0-23)です。

`%l'

これは空白で埋め草した時間(0-12)です。

`%m'

これは月(01-12)を表わします。

`%M'

これは分(00-59)を表わします。

`%n'

これは改行を表わします。

`%p'

これは必要に応じて`AM'あるいは`PM'を表わします。

`%r'

これは`%I:%M:%S %p'の省略形です。

`%R'

これは`%H:%M'の省略形です。

`%S'

これは秒(00-60)を表わします。

`%t'

これはタブ文字を表わします。

`%T'

これは`%H:%M:%S'の省略形です。

`%U'

年間での週の数(01-52)を表わします。 週は日曜日からと仮定します。

`%w'

これは数で表わした曜日です。 日曜日は0です。

`%W'

年間での週の数(01-52)を表わします。 週は月曜からと仮定します。

`%x'

これはロケール特有の意味があります。 デフォルトのCというロケールでは`%D'と等価です。

`%X'

これはロケール特有の意味があります。 デフォルトのCというロケールでは`%T'と等価です。

`%y'

世紀での年数(00-99)を表わします。

`%Y'

これは世紀を含む西暦年を表わします。

`%Z'

これは時間帯の省略形を表わします。

Function: decode-time time

この関数は、時刻の値を暦情報に変換します。 返す値は以下のような九つの要素のあるリストです。

 
(seconds minutes hour day month year dow dst zone)

要素の意味は、以下のとおりです。

sec

毎分ちょうどから経過した秒数で0から59までの整数です。

minute

毎時ちょうどから経過した分の数で0から59までの整数です。

hour

1日が始まってから経過した時間の数で0から23までの整数です。

day

1か月の日付で1から31までの整数です。

month

月を表わす1から12までの整数です。

year

西暦年で通常の値は1900より大きい整数です。

dow

週の曜日で0から6までの整数です。0は日曜日です。

dst

夏時間中はtでそうでなければnilです。

zone

時間帯を示す整数でグリニッチからの秒数です。

Common Lispでのdowzoneの意味は違うので、 注意してください。 (訳注:ちなみに0は月曜で、時間帯は時間単位。)

Function: encode-time seconds minutes hour day month year &optional zone

この関数は、decode-timeの逆です。 暦情報の7項目を時刻の値に変換します。 引数の意味は、decode-timeの表を参照してください。

100以下の年数もほかの年と同様に扱われます。 1900以降の年の意味にしたければ、 encode-timeを呼び出す前に自分で変えておいてください。

オプション引数zoneは、 デフォルトで現行の時間帯と夏時間規則となります。 指定したときは、(current-time-zoneで得られるような)リストか、 あるいは(decode-timeで得られるような)整数が使えます。 特に夏時間の修正はせずに指定した時間帯を使用します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.7 タイマーと遅延実行

指定した未来の時刻に関数を呼び出すことができます。

Function: run-at-time time repeat function &rest args

この関数は、functionを引数argsとともに 時刻timeに呼び出します。 引数functionは後で呼び出す関数で、 argsは呼び出すときに渡す引数です。 時刻timeは文字列で指定します。

絶対時刻はいろいろな書式で指定することが可能です。 全フィールドが整数の`hour:min:sec timezone month/day/year'という形式は受けつけられます。 current-time-stringの返す値も有効です。

相対時刻は数量と単位で指定します。たとえば、

`1 min'

は1分後です。

`1 min 5 sec'

は65秒後です。

`1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year'

は103か月123日 と10862秒後です (訳注: fortnightとは2週間のこと)。

もしtimeが整数ならば、秒で測った相対時間です。

引数repeatは呼出しを何回繰り返すか指定します。もしrepeatnilならくり返しはせず、timeに一度呼び出されます。もし repeatが整数ならば、秒で測ったくり返しの期間を指定します。いずれ にせよrepeatは、1回目の呼出しには影響しません。それは timeで指定します。

run-at-timeはスケジュールに入れた未来のこの動作を特定する、 タイマーの値を返します。 この値は後でcancel-timerを呼び出すときに使用することができます。

Function: cancel-timer timer

以前にrun-at-timeが返した値の timerで要求していた動作を取消します。 これはrun-at-timeを呼出しの効果を取り消します。 指定時刻が来ても特別なことは何も起きません。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.8 端末入力

この節では端末入力を記録し、操作するための関数と変数について述べます。 関連した関数についてはEmacsの表示を参照してください。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.8.1 入力モード

Function: set-input-mode interrupt flow meta quit-char

この関数は、キーボードから入力を読み込む時のモードを設定します。 もしinterruptが「non-null」の場合、 Emacsは入力割込みを用います。 もしnilの場合、CBREAKモードを用います。 Emacsが直接Xと通信しているときは、 通信の方法がわかっているので、 この引数を無視して割込みを使います。

もしflowが非nilならば、 Emacsは端末への出力にXON/XOFF (C-qC-s)フロー制御を用います。 これはCBREAKモード以外では何の影響も及しません。See section フロー制御文字

通常の設定はシステムに依存します。 システムによっては何を指定しても常にCBREAKモードを使います。

引数metaは127よりも大きい入力文字符号の扱いを制御します。 もしmetatならば、 Emacsは、8ビット目を立てた文字をメタ文字に変換します。 もしmetanilならば、 Emacsは8ビット目を無視します。 これは端末がパリティービットとして使うときに必要です。 もしmetatでもnilでもないとき、 Emacsは8ビットの入力をそのまま使います。 これはヨーロッパの8ビット文字集合を使う端末のとき便利です。

もしquit-charが非nilなら、 とりやめに使う文字を指定します。 通常この文字はC-gです。See section とりやめ

current-input-mode関数は、 Emacsが現在使っている入力モードの設定を返します。

Function: current-input-mode

この関数は、現在のキーボード入力の読み込みモードを返します。 これはset-input-modeの 引数(interrupt flow meta quit) に対応したリストを返します。

interrupt

は、Emacsが割込み入力を使っているとき非nilです。 もしnilならEmacsはCBREAKモードを使用中です。

flow

はEmacsがXON/XOFF (C-qC-s) を端末出力のフロー制御に使うとき非nilです。 この値はinterruptが非nilでないと、効果をもちません。

meta

は、Emacsが入力文字の8ビット目をメタビットとして扱うときtです。 Emacsが全入力文字の8ビット目を落とすときはnilです。 Emacsが8ビットすべてを基本的な文字符号として使うときは、 それ以外の値です。

quit

はEmacsが今とりやめに使っている文字で、通常C-gです。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.8.2 入力イベントの変換

この節ではキー・シーケンスの一部になる前に、 入力イベントを別なイベントに変換する機能について述べます。

Variable: extra-keyboard-modifiers

この変数でLispプログラムでキーボードの修飾キーを「押す」ことができます。

1

SHIFTキー。

2

LOCKキー。

4

CTLキー。

8

METAキー。

ユーザがキーボードのキーを押下するたびに、 まるでビット・マスクで指定した修飾キーが押されているかのように、 キーが変更されます。

Xウィンドウを使っているとき、 プログラムで上記のように修飾キーを「押す」ことができます。 それ以外の場合、 CTLMETAキーだけ仮想的に押すことができます。

Variable: keyboard-translate-table

この変数は、キーボード文字の変換テーブルです。 コマンドのバインドを変更せずにキーボードのキーを並べ替えることができます。 値は文字列かnilです。

もしkeyboard-translate-tableが文字列ならば、 キーボードから読み込まれた各文字は、 この文字列を参照し文字列中の文字列を代用します。 もし文字列の長さがnならば、 n以上の文字符号は変換しません。

以下の例では、 keyboard-translate-tableを128文字の文字列に設定しています。 そして文字C-sC-\、また、文字C-qC-^を 交換するように設定しています。 したがって、 C-\の押下は、通常C-sを押下したときの全効果をもち、 逆もまた同様です (これについてはさらにSee section フロー制御文字)。

 
(defun evade-flow-control ()
  "C-sをC-\\ でC-qをC-^で置き換える。"
  (interactive)
  (let ((the-table (make-string 128 0)))
    (let ((i 0))
      (while (< i 128)
        (aset the-table i i)
        (setq i (1+ i))))
    ;; C-sC-\の交換。
    (aset the-table ?\034 ?\^s)
    (aset the-table ?\^s ?\034)
    ;; C-qC-^の交換。
    (aset the-table ?\036 ?\^q)
    (aset the-table ?\^q ?\036)
    (setq keyboard-translate-table the-table)))

この変換は、端末から読み込んだ直後に行なうことに注意してください。 recent-keysやドリブル・ファイルのような記録保存機能は、 変換の後に文字を記録します。

Function: keyboard-translate from to

この関数は、keyboard-translate-tableを修正して、 符号fromが符号toに変換するようにします。 必要に応じて変換テーブルの生成と拡張を行ないます。

Variable: function-key-map

この変数は、 普通のキャラクタ端末のファンクション・キーが送出する文字シーケンスを記述する、 キーマップを保持します。 このキーマップはほかのキーマップと同じデータ構造をしていますが、 異なった用い方をします。 これはイベントを読み込んでいる間の変換の指定をしています。

もしfunction-key-mapが、 あるキー・シーケンスkをあるベクタvに「バインドする」ならば、 kがシーケンスのどこかに現われたとき、 イベントvに置換されます。

たとえば、VT100端末は、キーパッドPF1キーを押下したとき、 ESC O Pを送出します。 したがって、Emacsには このイベント群のシーケンスを pf1なる単一のイベントに変換してもらいたいわけです。 VT100を使う場合、 function-key-mapESC O P[pf1]に 「バインド」します。

したがってC-c PF1の押下では、 文字シーケンスC-c ESC O Pを送出します。 そして関数read-key-sequenceは、 これをC-c PF1に変換し、 結果としてベクタ[?\C-c pf1]を返します。

function-key-map内のエントリーは、 副モード、ローカル、グローバル・キー マップでできたバインドと衝突する場合、無視されます。 これは本来、ファンクション・キーの送出する文字シーケンスは、 コマンドとのバインドをもってないはずだ、 というところにあります。

function-key-mapの値は、 たいてい端末のTerminfoやTermcap項目に基づいて自動的に設定されますが、 ときどき端末固有のLispファイルで補強しなければならないこともあります。 Emacsには多くの共通な端末固有ファイルがついてきます。 TermcapとTerminfoからすぐ出てくるもの以外の 項目をfunction-key-mapに設定するのが、 主な目的です。See section 端末固有の初期化

バージョン18以前のEmacsは、 ファンクション・キーの表現する文字シーケンスの検出に まったく異なった方法を使っていました。

Variable: key-translation-map

この変数は、 function-key-mapのように 入力イベントをほかのイベントに変換するのに使います。 これはfunction-key-mapと以下の点で異なっています。

key-translation-mapは、 通常self-insert-commandにバインドしておく普通の文字も含め、 ユーザのために一つの文字集合を別のものに写すことにあります。

function-key-mapkey-translation-mapにキー・シーケンスで なく関数を使うことによって、単なる別名づけにとどまらず、 キーの変換を行なうことも可能です。

キー変換関数は、read-key-sequenceに指定されたプロンプトか、 あるいはエディタのコマンド・ループで読込み中の場合はnilを、 単一の引数としてとります。ほとんどたいていの場合、これは無視できます。

もし関数が自分で入力を読み取るなら、 引き続くイベントの変更効果があることになります。 例としてC-c hで、ひき続く文字をハイパー文字に変える定義を、 以下に示します。

 
(defun hyperify (prompt)
  (let ((e (read-event)))
    (vector (if (numberp e)
                (logior (lsh 1 20) e)
              (if (memq 'hyper (event-modifiers e))
                  e
                (add-event-modifier "H-" e))))))

(defun add-event-modifier (string e)
  (let ((symbol (if (symbolp e) e (car e))))
    (setq symbol (intern (concat string
                                 (symbol-name symbol))))
    (if (symbolp e)
        symbol
      (cons symbol (cdr e)))))

(define-key function-key-map "\C-ch" 'hyperify)

`iso-transl'ライブラリではこの機能を使って、 ASCII以外のLatin-1文字の入力ができるようにしています。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.8.3 入力の記録

Function: recent-keys

この関数は、 キーボードとマウスからの入力イベントのうち最後の100個を、 ベクタにして返します。 入力イベントは、キー・シーケンスの一部になってもならなくても、 すべてここに含めます。 したがって、 キーボード・マクロをのぞく最後の100個の入力はいつでも取得できます (キーボード・マクロからのイベントをのぞくのは、 デバッグのときにそれほど有用でないからです。 イベントを調べれば、マクロの起動はすぐにわかります)。

Command: open-dribble-file filename

この関数は、filenameという名前の ドリブル・ファイル(dribble file)を開きます。 ドリブル・ファイルを開くと、 (キーボード・マクロをのぞく) キーボードとマウスからの全入力イベントをこのファイルに書き込みます。 文字以外のイベントは、`<…>'で囲った印字表現で表わします。

ドリブル・ファイルを閉じるには、 nilを引数にしてこの関数を呼び出します。

この関数は、通常、 バグ報告用にEmacsのバグを引き起こすのに必要な入力を記録するときに、 使用します。

 
(open-dribble-file "~/dribble")
     ⇒ nil

open-termscript関数も参照してください (see section 端末出力)。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.9 端末出力

端末出力関数は、端末出力を送出したり、 端末に送出した出力を追跡したりします。 変数baud-rateは、 端末への出力スピードをいくつにするかをEmacsに指定しています。

Variable: baud-rate

この変数の値は、Emacsの知るかぎりでの、端末の出力スピードです。 この変数の設定では実際のデータ伝送スピードに変化はありませんが、 パディングの計算にはこの値を使います。 これはまた、画面の一部分をスクロールするか、 あるいは書き換えをするかの決定の際にも使用します (ウィンドウ・システムには真の出力スピードがない、 という事実にもかかわらずこう設計したのは、 この決定方法の調整手段を提供するためです)。

値の単位はボー(baud)です。

もしネットワーク経由でアクセスしていて、 ネットワークの一部でボー・レートが異なる場合、 Emacsの返す値は、 ローカルな端末で使用中のボー・レートの値とは異なることがあります。 あるネットワーク・プロトコルでは、 ローカルな端末速度を遠隔装置と交信してEmacsやほかのプログラムが 正しい値を取得できるようになっていますが、 そうなっていないプロトコルもあります。 もしEmacsの値が間違っていたら、 最適でない決定を下してしまいます。 この問題を解決するためには、 baud-rateを設定します。

Function: baud-rate

この関数は、変数baud-rateの値を返します。 バージョン18やそれ以前のEmacsでは、 これが端末スピードを取得する唯一の方法でした。

Function: send-string-to-terminal string

この関数は、stringを変更せずに端末に送ります。 string中の制御文字は、端末に依存する効果を生じます。

この関数の一つの使いかたとして、 ダウンロード可能なファンクション・キー定義機能をもつ端末の ファンクション・キーの定義を行なうのに用います。 この例では、ある端末で、ファンクション・キー4を (コンピュータへ文字C-u C-fを伝送することによって) 4文字前に進ませるものとして定義しています。

 
(send-string-to-terminal "\eF4\^U\^F")
     ⇒ nil
Command: open-termscript filename

この関数は、 Emacsが端末に出力する全文字を記録する 端末記録ファイル(termscript file)を開きます。 nilを返します。 端末記録ファイルは、Emacsが画面を壊したりする問題や、 本当のEmacsのバグというよりも、 間違ったTermcap項目や不適切な端末オプションの設定のせいでおこる問題を 調べるときに役に立ちます。 どの文字が実際に出力されたのかが確実にわかってしまえば、 使用中のTermcap仕様に対応する文字を確定できます。

端末入力open-dribble-fileも参照してください。

 
(open-termscript "../junk/termscript")
     ⇒ nil

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.10 システム固有のX11キーシム

システム固有のX11キーシムを定義するには、 変数system-key-alistを設定します。

Variable: system-key-alist

この変数の値は、 システム固有の各キーシムごとに要素をもつalistでなければなりません。 各要素は(code . symbol)という形をしており、 codeは数値のキーシム符号 (ただし「ベンダー固有ビット」の1 << 28は含まない)で、 symbolはそのファンクション・キーの名前です。

たとえば、(168 . mute-acute)は、 (1 << 28) + 168という値をもつ HPのXサーバーのシステム固有キーを定義しています。

alistでほかのXサーバーのキーシムを定義しても、 実際に使用中のXサーバーと衝突さえしなければ、問題ありません。

この変数は、常に現在のX端末にローカルなので、 バッファ・ローカルにすることはできません。See section 複数のディスプレイ


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.11 フロー制御文字

この節では、「どうしてEmacsでは、 フロー制御文字をコマンド文字集合に選んだのか?」 という質問に答えようと思います。 この件については配布物件の`emacs/INSTALL'ファイルにある フロー制御についてのコメントもあわせてお読みください。 Termcap項目とDEC端末コンセントレータに関しては、 `emacs/etc/TERMS'をご覧ください。

昔はほとんどの端末でフロー制御が不要だったので、 C-sC-qをフロー制御に使うことはありませんでした。 したがってC-sC-qをコマンド文字として使うのは、 議論の余地のないところだったのです。 キー・ストロークの経済性と可搬性から、 Emacsは可能なかぎりほとんどすべてのASCII制御文字に おぼえやすい意味を与えました。 そのため、C-sがsearchに、C-qがquoteになったのです。

その後、ある端末がこの文字群でフロー制御をし始めました。 これは全画面での編集にはむいてなかったので、 Emacsの保守をする人は気にとめませんでした。 何年か経って、 C-sC-qでのフロー制御は端末でも一般的になりましたが、 それでもたいていはオプションでした。 フロー制御を使わないユーザの大部分は、 フロー制御のせいでしかたなく、 それほどおぼえやすくもないキー・バインドに切り替えていました。

で、どちらが「正しい」のでしょう? Emacsでしょうか?端末やコンセントレータの製造業者でしょうか? この問いへの単純な答えはありません。

なぜ私たちがC-sC-qで起こる問題に 迎合することに気がすすまないのか という一つの理由として、 これには正当性がないということがあげられます。 文字の流れの透過性を保存するフロー制御の技術は、 (まだそれほど共通に実用に供されていないとはいえ)ほかにもあります。 この方法によるフロー制御が公式の標準でないことにも、注意してください。 興味深いことに、紙テープ・パンチつきのモデル33テレタイプ(とても古い)は、 パンチのオン・オフにコンピュータから送られたC-sC-qを 使っていました!

Xサーバーやそのほかのウィンドウ・システムが、キャラクタ端末を置き換えると、 この問題はだんだん解消されそうです。とりあえずの間、Emacsは、望むならば、 フロー制御を有効にする簡単な方法を提供しつづけるでしょう。 これには関数enable-flow-controlを呼び出します。

Function: enable-flow-control

この関数は、C-sC-qによる出力フロー制御の使用を有効にし、 keyboard-translate-tableC-\C-^という 別名による入力ができるようにします(see section 入力イベントの変換)。

`.emacs'ファイルの中で関数enable-flow-control-onを使い、 特定の端末型で自動的にフロー制御を有効にすることができます。

Function: enable-flow-control-on &rest termtypes

この関数は、 端末の型がtermtypes中の一つであるとき、 フロー制御およびC-\C-^による別名を有効にします。

 
(enable-flow-control-on "vt200" "vt300" "vt101" "vt131")

enable-flow-controlが行なうことは以下のとおり。

  1. 端末入力をCBREAKモードに設定し、 (set-input-mode nil t)で オペレーティング・システムにフロー制御を扱うよう指示します。
  2. C-\C-^C-sC-qになるよう、 keyboard-translate-tableを設定します。 最下位の部分をのぞいて、 EmacsはC-sC-qが押下された文字ではないことは意識しません。 そのためC-\C-^がほかのコマンドの文字であっても 押下できます。See section 入力イベントの変換

もし端末がフロー制御文字の発信源ならば、 いったんカーネルのフロー制御を有効にすると、 多分その端末の通常の場合よりもパディングが少なくてすみます。 Termcap項目をカスタマイズしてパディングの量を減らすことができるでしょう。 またはbaud-rateを小さい値に設定することにより、 必要なパディングに(端末のボー・レートが) 遅い速度の場合の計算をさせることもできます。See section 端末出力


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

34.12 バッチ・モード

コマンド行オプション`-batch'でEmacsを非対話的にすることができます。 このモードでは、Emacsは端末からコマンドを読み込むことはありませんし、 端末のモードを変更することもありませんし、 消去可能な画面へ出力することを期待しません。 これは作動させるLispプログラムを指定し、 完了後Emacsが抜けるべきであるということです。 作動させるプログラムは、 `-l file'`-f function'で指定します。 ここでfileはロードするライブラリの名前であり、 functionという引数のない関数を呼び出します。

messageprin1などでストリームをtにして、 通常ならエコー領域にいくような出力をするLispプログラムは、 バッチ・モードではEmacsの標準エラー記述子で出力を行ないます。 したがってEmacsは非対話的な応用プログラムのように振る舞います (コマンドのエコーのように、 通常Emacs自身が行なうエコー領域出力は完全に抑止されます)。

Variable: noninteractive

Emacsがバッチ・モードで走っている間、この変数は、非nilです。


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Yasutaka SHINDOH on September, 29 2006 using texi2html 1.76.