Version 19 Antenews(Version 19予告)
*********************************

本章では不十分ではあるがリリースを見込んで、Emacs 19の新しい機能を述べる。これを含めるのは、Emacs 19が出ると同時にバージョン18のマニュアルが時代遅れにならないようにするためである。本リストではThe GNU Emacs Manualに含まれる機能だけを述べる。 Emacs Lispに関連する変更は、次版のThe GNU Emacs Lisp Manualで解説する。

Basic Changes(基本部変更点)
=====================

変更を行ったのは、Emacsが使う資源を減らし、回復不能なハングをしないようにするためである。これらの変更がEmacsのコマンドを変えることはないが、重要なので説明する。

ファイル読み書きのために待ち状態にあるEmacsをC-gで中断できる。 OSがハングしているシステム・コールに対する割り込みを許すからである (残念ながら、NFSはこの割り込みを許すように実装されていない)。

バッファをkillすると、今度のEmacsはメモリをOSに返すので、 Emacsプロセスのサイズは減少する。バッファをkillしてできたスペースは、その大きさに関わらず、他のバッファが再利用できる。Emacsが不要なら、他のプロセスが再利用する。

Multiple X Windows(Xのマルチウィンドウ)
------------------------------

Xウィンドウ使用時は、Xレベルのウィンドウを複数作ることができる。各Xウィンドウは、1つ以上のEmacsウィンドウを中に持つframeを表示する。各フレームはそれぞれ通常ミニバッファであるエコー領域を持つ。 (混乱を避けるために、``ウィンドウ''という言葉はEmacsが実装する分割領域に対して使用し、フレームについて使わないことにする。) フレームを最も簡単に追加するには、C-x 5プリフィクス文字を使う (see New Everyday Commands)。

Emacsウィンドウにスクロール・バーがつけられるようになった。 scroll-bar-modeコマンドで、スクロール・バーをon/offできる。引数無しならば、スクロール・バー使用する/しないをトグルする。引数があれば、正の時に限りスクロール・バーをonにする。このコマンドはこれから作るフレームを含む、全てのフレームに適用される。 (スクロール・バーをフレーム毎に制御したいならば、Lispプログラムを書くこと。)

Undo Improvements(アンドゥの向上)
--------------------------

deleteのアンドゥは、delete直前の位置にカーソルを戻すようになった。

Auto Save Improvements(オート・セーブの向上)
----------------------------------

Emacsはガーベジ・コレクションとオート・セーブを入力待ちの間に行うことで、タイプ中に発生するのを避けるようにした。タイプを止めた後変数auto-save-timeoutが示す秒数を待って、 Emacsはオート・セーブと恐らくはガーベジ・コレクションとを行なう。 (実際の時間はバッファのサイズによってもバラついてくる。バッファが大きければ長くなる、というのもバッファが大きい程オート・セーブ自体が長くかかるから) こうして、Emacsはタイプを妨げたり遅らせたりしないようにする。

Emacs 18では、異常に縮んだバッファを検出するとそのバッファをオート・セーブせずにウォーニングを表示する。バージョン19では、そのバッファのAuto Saveモードもoffにして、繰り返し同じメッセージを表示しないようにする。もしAuto Saveモードを再度有効に切り替えれば、 Emacsはバッファが縮んだことに構わず再びセーブをするようになる。

Emacs 19のrevert-bufferは、最新のオート・セーブ・ファイルから復旧するかとは訊いてこない。より多くのアンドゥ情報を保持するように変更したので、あまり便利では無くなったからだ。

recover-fileはAuto Saveモードをoffにしなくなった。

File Local Variables
--------------------

ファイルがローカル変数をセットできるか否かを制御するユーザ・オプションは、 enable-local-variablesとEmacs 19では呼び、 inhibit-local-variablesではない。値tはローカル変数リストが許されていることを意味し、 nilならば、無視である。それ以外の値なら、ユーザに確認を取る。

New Basic Facilities(新基本機能)
===========================

過去のミニバッファ入力を簡単に取り出せるようになった。ミニバッファにおいて、M-p(previous-history-element)で 1つ前のミニバッファ入力を、M-n(next-history-element)で 1つ後の入力を取り出すことができる。

履歴の中を前方或いは後方に検索するコマンドもある。いうなれば、ミニバッファに正規表現を指定すると、それに一致する履歴要素を検索するものである。 M-r (previous-matching-history-element) がより古い履歴要素を探し、 M-s (next-matching-history-element)がより新しいものを探す。特別な仕組みにより、これらコマンドは常にミニバッファから引数を読みとる。それを使おうとした時たとえ既にミニバッファにいても構わない。

Emacs 19のリリース迄には、これらコマンドの正確な動作を変更するかも知れない。もしかしたら、それまでに入力した文字列で、それに一致するものを探すかも知れない。或いは文字通りの比較を正規表現の代わりに使うかも知れない。或いは履歴要素の先頭に一致するものだけをとるようにするかもしれない。或いはC-sのように入力した文字列で段階的に一致するものを探すかも知れない。我々が選びたいインタフェースは、便利で柔軟で自然なもので、これら目標は幾分対立するからである。実際にどのインタフェースが有効であるのかを知りたければ、 C-h f previous-matching-history-elementとタイプすること。

この履歴機能はミニバッファを使う全てに関して有効だが、異なる入力の種類に応じて別々の履歴リストがある。例えば、ファイル名のリストがあり、ファイル名を読む全てのコマンドはそれを使う。 query-replaceのようなコマンドの引数のリストもある。非常に特化した履歴リストもある。例えばcompileはそれをコンパイル関係のコマンドに使う。

Remote File Access
------------------

特別なファイル名構文によって、他のマシンにあるファイルを参照できる。

     /HOST:FILENAME
     /USER@HOST:FILENAME

これを使うと、EmacsはFTPプログラムを使って指定ホストのファイルを読み書きする。これは、ユーザ名即ち名前USERを使ってFTPログ・インする。ときどきパスワードを訊いてくる。これを使ってHOSTにログ・インする。

Using Flow Control
------------------

フロー・コントロール抜きでは働かない端末或いは接続で、それを簡単に有効にすることができるようになった。例えば、VT-100とH19端末でこれをやりたいならば、次のコードを.emacsに入れればいい。

     (enable-flow-control-on "vt100" "h19")

フロー・コントロールが有効の時には、C-\をC-sの代わりにタイプし、 C-^をC-qの代わりにタイプする。

Controlling Backup File Names(バックアップ・ファイル名の制御)
----------------------------------------------

Lisp変数version-controlのデフォルト設定は、環境変数VERSION_CONTROLから取るようになった。よって、バックアップ・ファイル名の付け方をEmacsと他のGNUユーティリティとで揃えることができる。

Changed Key Bindings(キー・バインドの変更)
================================

M-{
     backward-paragraphに対する新しいキー・シーケンス。古いキー・シーケンスM-[は、未定義がデフォルトになる。

     変更の理由は、殆どの端末でファンクション・キーが送出するシーケンスとの衝突を避けるためである。

M-}
     forward-paragraphに対する新しいキー・シーケンス。古いキー・シーケンスM-]は、未定義がデフォルトになる。

     M-{に見合うように変更した。

C-x C-u
C-x C-l
     2つのコマンド、C-x C-u (upcase-region) と C-x C-l (downcase-region)とは、デフォルトで禁止することにした。これらのキーは、なんらかの際に打たれてしまうことが多く、すぐに気づかない場合、被害は大きいからである。

C-x 3
     C-x 3はsplit-window-horizontallyにバインドされ、これは1つのウィンドウを並び立つ2つに分割する。かつてはC-x 5だった。

C-x 4 C-o
     このキーではdisplay-bufferを実行し、これは指定のバッファを選択せずに別のウィンドウに表示する。

M-g
     M-gは未定義にした。かつてはコマンドfill-regionを実行した。このコマンドは、意図せず間違って実行されることが多かったので。

C-x a
C-x n
C-x r
     3つの新しいプリフィクス・キーがC-xコマンド群をもっとシステマチックにするために作られた。 C-x aとC-x nとC-x rとである。 C-x aは略語コマンド群に使う。 C-x nはナローイング関連コマンド群に使う。そして、C-x rはレジスタと矩形コマンド群に使う。以下が新しいバインドの詳細。

     C-x a l
          add-mode-abbrev (以前の C-x C-a).

     C-x a g
          add-global-abbrev (以前の C-x +).

     C-x a i g
          inverse-add-mode-abbrev (以前の C-x C-h).

     C-x a i l
          inverse-add-global-abbrev (以前の C-x -).

     C-x a e
          expand-abbrev (以前の C-x ').

     C-x n n
          narrow-to-region (以前の C-x n).

     C-x n p
          narrow-to-page (以前の C-x p).

     C-x n w
          widen (以前の C-x w).

     C-x r C-SPC
          point-to-register (以前の C-x /).

     C-x r SPC
          Also point-to-register (以前の C-x /).

     C-x r j
          jump-to-register (以前の C-x j).

     C-x r s
          copy-to-register (以前の C-x x).

     C-x r i
          insert-register (以前の C-x g).

     C-x r r
          copy-rectangle-to-register (以前の C-x r).

     C-x r k
          kill-rectangle (以前はキー・バインドしていない).

     C-x r y
          yank-rectangle (以前はキー・バインドしていない).

     C-x r o
          open-rectangle (以前はキー・バインドしていない).

     C-x r f
          frame-configuration-to-register (新しいコマンド) 全フレーム内の全ウィンドウ状態を保存する。 C-x r jを使って、この状態を戻す。

     C-x r w
          window-configuration-to-register (新しいコマンド) 選択したフレームの全ウィンドウ状態を保存する。 C-x r jを使って、この状態を戻す。

     旧バインドC-x /, C-x j, C-x x, C-x gは、まだ削除していない。それ以外のここに挙げた旧バインドは削除した。 append-to-bufferであるC-x aは、プリフィクス・キーとするために、削除した。append-to-bufferは、現在キー・バインドしていない。

C-x v
     C-x vは、新たにプリフィクス文字となった。バージョン・コントロール・コマンド群に使われる。 See Version Control.

Changed Everyday Commands(変更のあった常用コマンド)
=======================================

C-o
     フィル・プリフィクスがある場合、コマンドC-oは新たに作る行頭にプリフィクスを挿入する。

M-^
     フィル・プリフィクスがある場合、コマンドM-^はdeleteした改行に続くプリフィクスを(もしあれば)delete する。

M-z
     M-z コマンド (zap-to-char)は、目的の文字を含めてkillするようになった。 18版では、目的迄killしたが、目的の文字は含めなかった。

M-!
     コマンドM-! (shell-command)は、ちょうどシェルがそうするように、指定されたシェル・コマンドが&で終わるならば、非同期に実行するようになった。

C-x 2
     C-x 2 コマンド (split-window-vertically)は、スクロールを避けるために、ポイントを既にカーソルが画面行に載っている方のウィンドウに持っていこうとする。これが気に入らないのなら、split-window-keep-pointをnilにセットすればoffにできる。

C-x s
     C-x sコマンド(save-some-buffers)が特定のバッファをセーブするか否かを訊いてくるときの選択肢が更に増えた。選択肢は、query-replaceのそれに類似性がある。以下の通り。

     y
          このバッファをセーブし、残りのバッファについては訊いてくる

     n
          このバッファをセーブしないで、残りのバッファについては訊いてくる

     !
          このバッファ以降全てをセーブし、もう何も訊いてこない。

     ESC
          save-some-buffersを終了し、もう何も言わない。

     .
          このバッファだけをセーブし、save-some-buffersを抜けてしまい、他のバッファについては訊いてこない。

     C-r
          現在訊かれているバッファをViewする。Viewモードを抜けた後、 save-some-buffersに戻ってくる。再び質問をしてくる。

     C-h
          これら選択肢についてのヘルプ・メッセージを表示する。

C-x C-v
     このコマンド(find-alternate-file)は、完全な現ファイル名をミニバッファに挿入するようになった。些細なタイプ・ミスをした場合に、これが便利。ポイントは、最後のスラッシュの後ろ、最後のファイル名要素の直前にあるので、それを完全に置き換えたいのなら、C-kを使って直ちに削除できる。

C-M-f
     式とリストのコマンド、C-M-fのようなものは、 Lispモードにおいてコメント内の括弧を無視するようになった。

Changes in Common M-x Commands(M-xコマンド群に共通する変更)
===============================================

M-x make-symbolic-link
     このコマンドは2番目の引数を展開しないようになった。それで、相対ファイル名で目的リンクを作ることができるようになった。

M-x add-change-log-entry
C-x 4 a
     これらコマンドは変更したファイル名や時には関数名も自動的に挿入するようになった。エントリのグループ化も行う。

     Changesファイルをエディットするための特別な主モードができた。フィル(字詰め)が便利に働く。グループ化されたエントリの各塊が1段落で、同一日に同一人によるエントリの集まりが1ページである。

M-x compare-windows
     前置引数付きなら、compare-windowsは空白の変化を無視する。変数compare-ignore-caseが非-nilならば、大文字/小文字の変化も同様に無視する。

M-x view-buffer
M-x view-file
     Viewコマンド群(例えば(M-x view-buffer や M-x view-file)は、最早リカーシブ・エディットを使わない。代わりに、一時的に別の主モード(Viewモード)に切り替える。これはエディットせずにバッファ中を移動するのに都合がいいように設計してある。

M-x manual-entry
     M-x manual-entryはViewモードを使ってmanページを表示するようになった。

M-x compile
     以前に入力したどのcompileでも繰り返したいならば、コンパイル・コマンドをミニバッファで入力している最中にミニバッファ履歴コマンドを使って簡単に行える。

     コンパイル実行中には、文字列Compilingがモード行に現れる。この文字列が消えた時、コンパイルは終了している。

     コンパイラ・メッセージが出るバッファはCompilationモードにある。このモードではSPCとDELで全画面スクロールし、 M-n 及び M-pで前後のエラー・メッセージに移動する。 M-{ と M-}も使えて、異なるソース・ファイルのエラー・メッセージに上がったり下がったりできる。 C-c C-cを任意のエラー・メッセージ上で使えば、対応するソース・コードを見つけることができる。

     Emacs 19はコンパイラ・メッセージの更に一般的化したパーサを持つ。例えば、lintのメッセージや、ある種のCコンパイラが出す特殊なエラー・メッセージ・フォーマットも理解できる。

New Everyday Commands(新しい常用コマンド)
================================

C-z
     Xウィンドウを使っている場合、C-z (iconify-frame)によって現フレームをアイコン化できるようになった。

C-M-l
     C-M-l コマンド (reposition-window)は現ウィンドウを、有意義な情報が画面に出るように設計されたヒューリスティックな手法でスクロールする。例えば、Lispファイルにおいて、このコマンドは可能ならば現defunの全体が画面に現れるようにする。

C-M-r
     C-M-rキーによって、逆方向段階的正規表現検索を行うコマンドisearch-backward-regexpが動くようになった。

C-x 5
     プリフィクス・キーC-x 5はC-x 4とサブコマンド群が対応する類似性を持たせた。違うのは、C-x 5コマンド群は新しいウィンドウだけでなく、新しいフレームも作ることである。

C-x 5 C-f
C-x 5 b
     これらの新しいコマンド群は新しいフレーム内の、指定ファイル或いはバッファに切り替える(Xウィンドウ使用時)。コマンド名は、 find-file-other-frame と switch-to-buffer-other-frameである。

C-x 5 m
     送信用メールを別フレームに出す(mail-other-frame)。

C-x 5 .
     別フレームで、タグを見つける(find-tag-other-frame)。

C-x 4 r
     これはfind-file-read-only-other-windowになった。

arrow keys
     矢印キーはそれぞれの方向に移動するバインドをデフォルトで持つようになった。

C-h C-f
C-h C-k
     これらの新しいヘルプコマンド群はInfoに入り、それぞれ与えられたEmacsの関数名やキー列に対応するノードを表示する。

M-a
M-e
     Cモードでは、M-a と M-eで完全なCの文単位で移動できるようになった (c-beginning-of-statement and c-end-of-statement)。

M-q
     CモードにおけるM-qが、 Cのコメントをフィルするc-fill-paragraphを実行するようになった。 (実際のCのコードをフィルしたいなんて思わないと仮定している。)

M-x c-up-conditional
     Cモードでは、c-up-conditionalがプリプロセッサ条件式の始めの位置に戻り、以前のポイントをマークする。

     前置引数は繰り返し回数として働く。負の引数で、このコマンドは前方のプリプロセッサ条件式の終わりの位置まで進む。後方に戻る場合、#elif は #ifに続く#elseの如く働く。前方に進む場合、#elifは無視する。

M-x comment-region
     comment-regionコマンドはコメント区切りをリージョン開始行に追加して、リージョン全体をコメント化する。負の引数で、リージョンからコメント区切りを取り去る。引数無しcomment-regionの逆効果である。

     正の引数付きのcomment-regionでは、コメント区切りを追加するが、更にコメント開始文字列の最後の文字が引数で指定した回数だけ並ぶようにする。このようにして、コメントが目立つようにする。 Lispでは、少なくとも引数の値は2にすること。なぜならセミコロン1つのコメントは、インデントの決まり上、行頭に来なくなるので。

M-x super-apropos
     このコマンドはaproposと似ているが、それが単なる文字列を検索する代わりに正規表現を検索する点が異なる。

     前置引数(値はなんでもいい)付きでapropos や super-aproposを使った場合、シンボル名同様にドキュメント文字列も検索する。前置引数は、全コマンドのキーバインドについても検索表示を制御する。

M-x diff
     この新しいコマンドは、2つのファイルを比較し、相違をEmacsバッファに表示する。 diffプログラムに対するオプションは、 diff-switchesにセットした文字列が使われる。

     相違を表示するバッファはCompilationモードを主モードとしているので、 C-x `で連続して2つの入力ファイルの変更箇所へ飛ぶことができる。あるいは、特定の変更箇所断片に移動して、 C-c C-cとタイプすることで対応する入力ファイルの位置に移動できる。 Compilationモードの他の特殊コマンドも使用できる。 SPC と DELで、スクロールし、 M-p と M-nで、カーソル移動となる。

M-x diff-backup
     コマンドdiff-backupは、指定ファイルをその最新のバックアップと比較する。もしバックアップ・ファイル名を指定すれば、 diff-backupは入力されたバックアップの元となるファイルとバックアップとを比較する。

Changes in Incremental Search(段階的検索の変更箇所)
=========================================

段階的検索の変更点で最も重要なのは、RETが検索を終了してしまい、 ESCはしないことである。その他の変更は便利になったが、あえて知る程ではない。

  * 段階的検索を終了させる文字は、RETになった。これは、他の殆どの引数の読みとられ方に合わせるためである。

     改行を段階的検索するには、LFD(C-jのことでもある)をタイプする。

     (この変更は、ある種の実験である。Emacs 19が本当にリリースされる迄には、元に戻っているかも知れない)

  * 段階的検索は以前に入力した検索文字列のリングを維持するようになった。 M-p と M-nとを使えば、リングの中を移動して、検索文字列を再利用のために取り出すことができる。これらコマンドは選んだリングの要素をミニバッファに残すので、そこでエディットすることもできる。RETをタイプすると、エディットが終了し、選んだ文字列の検索が始まる。

  * 大文字が検索文字列に含まれていた場合、検索は大文字/小文字を区別する。

  * 段階的検索は、主モードとして実現された。 C-sをタイプすると、一時的に異なるキーマップに切り替える。それぞれのキーはそこで、段階的検索にふさわしいものが定義されている。このお陰で、検索の振る舞いをユーザへの見かけの影響無しに、簡単にカスタマイズできるようになった。