@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1993 Free Software Foundation, Inc. 
@c See the file elisp-jp.texi for copying conditions.
@c 複製の条件はelisp-jp.texiに書いてあります。
@setfilename ../info/anti-jp
@c ???オリジナルでは@setfilenameしてないけど???
@c @set jp-draft
@clear jp-draft
@node Antinews, Word List, Standard Hooks, Top
@appendix Emacs 18ニュース(の反対)

  過去の世界に住むユーザたちへ、Emacsバージョン18へのダウングレード情報
を送ります。Emacs 19特有の機能が沢山なくなって、素晴らしくも単純になった
世界をお楽しみください。

@section Lispに残っていた古い機能
@c ???

  Emacsバージョン18でなくなったり変更された関数は以下のとおりです。

@itemize @bullet
@item
関数@code{delete}、@code{member}、@code{indirect-function}、
@code{map-y-or-n-p}、@code{invocation-name}は削除されました。

@item
関数@code{read}は、バッファから読み込むときにシンボルの終端文字をスキップす
るようになりました。たとえば、ポイント位置に続いて@samp{foo(bar)}が存在
するバッファで@code{read}を使うと、@code{foo}が返され、ポイントは開かっ
この後に移動します。つまり、@samp{(bar)}をそのままの形で正確に読むことは
できません。

この単純化のおかげで、入力ストリーム関数はオプション引数を取らずに済むよ
うになりました。Emacs 18では、入力ストリームは引数を取らず必ず次の文字を
返します。

@item
関数@code{documentation}は引数を一つだけ、
関数@code{documentation-property}は二つだけ取るようになりました。

@item
@code{random}はオプション引数@var{n}を取らなくなりました。

@item 
Lispライブラリがロードされたときにフックを実行する仕組みはなくなりました。
変数@code{after-load-alist}と関数@code{eval-after-load}は削除されました。

@item
関数@code{autoload}はキーマップの自動ロードをサポートしなくなりました。

@item
@samp{;;;###autoload}の形式のコメントはまさしく単なるコメントとして扱わ
れるようになりました。これらのコメントは見ためが美しいだけで、まったく何
もしません。デフォルトで関数を自動ロードさせるように設定したいときは、ファ
イル@file{loaddefs.h}を直接書き換えてください。
エディタってのはそのためにあるものでしょ?
@c ???上の一文はKenji Nagahashi <nag@soft.flab.fujitsu.co.jp>さんより頂戴つかまつった???
@c ???どんなエディタを使うのがいいでしょうかねぇ?  も捨てがたい。誤訳だけど???

@item
@code{format}関数で@samp{%S}は使えなくなりました。@code{prin1-to-string}
からはオプション引数@var{noescap}が削除されました。@code{print-level}も
削除されました。
@end itemize

@section コンパイル機能の変更

@itemize @bullet
@item
Emacs 18ではインライン関数はありません。関数呼出しを実現するコードを必要
以上に大きくしてしまうことが判明したからです。(サイズが小さいのもEmacs
18の新しい特徴の一つです)

@item
特殊形式@code{eval-when-compile}と@code{eval-and-compile}はなくなりまし
た。@code{compile-defun}コマンドもなくなりました。

@item
同一ディレクトリに@samp{.elc}ファイルとそれより新しい@samp{.el}ファイル
があっても、Lispファイルやライブラリのロード時にそれについての警告はしな
いようになりました。うるさいもんね。

@item
バイトコード関数を表す特別なデータ型はなくなりました。コンパイルされた関
数は関数@code{bytecode}を起動することによって動くようになりました。この
関数はバイトコード・インタプリタを起動します。
@end itemize

@section 浮動小数点数

  Emacs 18では浮動小数点数を扱う組込みの機能はなくなりました。代わりに浮
動小数点数をエミュレートする使いやすいLispプログラムがあります。でも、こ
れを使うにはプログラムを書かなきゃなりませんが。

  なんにせよ、マクロや関数、述語などは浮動小数点数の存在を考える必
要がなくなりました。

@itemize @bullet
@item
関数@code{string-to-number}、述語@code{floatp}、変数
@code{float-output-format}はなくなりました。

@item
関数@code{float}、@code{truncate}、@code{floor}、@code{ceil}、
@code{round}、@code{logb}はなくなりました。同様に@code{abs}、@code{cos}、
@code{sin}、@code{tan}、@code{acos}、@code{asin}、@code{atan}、
@code{exp}、@code{expt}、@code{log10}、@code{log}、@code{sqrt}もなくな
りました。

@item
@code{format}関数は、浮動小数点数の印字を指示する@samp{%e}、@samp{%f}、
@samp{%g}を扱わなくなりました。@code{message}についても同様です。
@end itemize

@section 基本編集関数の変更

@itemize @bullet
@item
killリングにテキストを格納するためのプリミティブである@code{kill-new}
と@code{kill-append}はなくなりました。
@c @code{kill-append}はドキュメンテーションなしながらEmacs 18にもあっ
@c たようだが、news.texiで19から追加されたということになっている。

@item
変数@code{interprogram-paste-function}と
@code{interprogram-cut-function}はEmacs 18では削除されました。

それから、Transient Markモードがなくなったので@code{mark-active}と
@code{deactivate-mark}は必要なくなりました。フック
@code{activate-mark-hook}と@code{deactivate-mark-hook}も削除されました。

@item
@code{kill-region}関数は読出し専用のバッファでは使用できなくなり
ました。@code{compare-buffer-substrings}と@code{current-kill}関数は削
除されました。

@item
変数@code{overwrite-mode-binary}は削除されました。

@item
関数@code{move-to-column}は@var{column}引数だけしか取らないようにな
りました。

@item 
検索関数は、検索成功時には@code{t}だけを返すようになりました。この
変更は、@code{search-forward}、@code{search-backward}、
@code{word-search-forward}、@code{word-search-backward}、
@code{re-search-forward}、@code{re-search-backward}についてなされました。

@item
正規表現での検索や照合で、@code{match-beginning}と@code{match-end}を使
用できる@samp{\(@dots{}\)}ペアの数は10個までとなりました。さらに、
@code{save-match-data}がなくなったので、一致データの保存には明示的に
@code{unwind-protect}を使用する必要があります。

@item
@code{translate-region}はなくなりました。

@item
変数@code{before-change-function}、@code{after-change-function}、
@code{first-change-hook}はなくなりました。

@item
@code{insert-abbrev-table-description}の2番目の引数は必須になりました。
@end itemize

@section テキスト属性

  テキスト属性はなくなりました。

@section ファイル関連の機能

  ファイル関連の関数の多くが削除されたり単純化されました。変更内容の概略を
以下に示します。

@itemize @bullet
@item
関数@code{file-accessible-directory-p}、@code{file-truename}、
@code{make-directory}、@code{delete-directory}、
@code{set-visited-file-modtime}、
@c Overfull対策
@c 関数の並びを入れ換えた。どういう風に換えたかはオリジナルと見比べてね。
@c まだ、ちょっとハミ出てるけど読点の分だから見逃してね。
@code{write-region}、@code{write-contents-hooks}、@code{after-save-hook}、
@code{directory-abbrev-alist}、@code{abbreviate-file-name}、
@code{set-default-file-modes}、@code{default-file-modes}、
@code{unix-sync}はなくなりました。

@item
@code{read-file-name}の``initial file name''引数はなくなりました。

@item
それから、@code{file-attributes}から返されるリストの12番目の要素は削除さ
れました。

@item
@code{directory-files}は常にファイル名のリストをソートするようになりまし
た。滅茶苦茶な順番に並んだファイル名を見せるのはユーザ・フレンドリーじゃ
ないですから。

@item
変数@code{write-contents-hooks}、@code{local-write-file-hooks}はなくな
りました。
@end itemize

@section 魔力をもつファイル名

  魔法のファイル名はなくなりました。すまん。マジックポイントを全部使い切っ
てしまったのだ。

@section フレーム

  Emacs 18ではフレームは一つしかありません。フレーム関連の関数は全て削除
されました。

@section X Window System関連の機能

  大艦巨砲主義を排し、EmacsとXとの関係を単純化することに成功しました。

@itemize @bullet
@item
関数@code{mouse-position}と@code{set-mouse-position}、特殊形式
@code{track-mouse}はなくなりました。

@item
同様に、関数@code{x-set-selection}、@code{x-set-cut-buffer}、
@c Overfull対策
@c 次の二つの関数の順番を入れ換えた。
@code{x-open-connection}、@code{x-close-current-connection}はEmacs
Lisp 18から全て削除されました。

@item
Xサーバとスクリーンに関する情報を扱う関数群がばっさり削除され、すべての
サーバと平等につき合えるようになりました。削除された関数は、
@code{x-display-screens}、@code{x-server-version}、
@code{x-server-vendor}、@code{x-display-pixel-height}、
@code{x-display-mm-height}、@code{x-display-pixel-width}、
@code{x-display-mm-width}、@code{x-display-backing-store}、
@code{x-display-save-under}、@code{x-display-planes}、
@code{x-display-visual-class}、@code{x-display-color-p}、
@code{x-display-color-cells}です。

@item
それから、変数@code{x-no-window-manager}と関数@code{x-synchronize}、
@code{x-get-resource}が削除されました。

@item
@code{x-display-color-p}は、名前が@code{x-color-display-p}に変更され
ました。@code{x-color-defined-p}は廃止されました。

@item
@code{x-popup-menu}の1番目の引数としてキーマップを渡すことはできなくな
りました。

@item
関数@code{x-rebind-key}と@code{x-rebind-keys}は削除されました。

@item 
@code{x-parse-geometry}は廃止されました。
@end itemize

@section 便利になったウィンドウ操作

  Emacs 18がある今となっては、Emacs 19のウィンドウはいろいろな面で時代遅
れとなりました。我々はウィンドウ操作について全面的な見直しを行ない、以下
のような変更を施しました。
@c ???まったくもって意訳ですな???

@itemize @bullet
@item
関数@code{window-at}、@code{window-minibuffer-p}、
@code{set-window-dedicated-p}、
@c Overfull対策
@c 関数の順番を入れ換えた。どういう風に入れ換えたかはオリジナルと見比べ
@c てね。
@code{window-dedicated-p}、@code{coordinates-in-window-p}、
@code{walk-windows}、@code{window-end}を削除
しました。

@item
変数@code{pop-up-frames}、@code{pop-up-frame-function}、
@c Overfull対策
@c 次の二つの変数を入れ換えた。
@code{other-window-scroll-buffer}、@code{display-buffer-function}を削除
しました。

@item
フレームはEmacs version 18ではオブジェクトではなくなったので、関数
@code{minibuffer-window}の引数としてフレームを渡すことはできなくなりま
した。この関数はミニバッファが使用しているウィンドウを返します。

@item
フレームは一つしかないので、関数@code{next-window}と
@code{previous-window}は@var{all-frames}引数を受け取らなくなりました。

@item
関数@code{get-lru-window}、@code{get-largest-window}、
@code{get-buffer-window}、@code{get-buffer-window}も、調べるべきフレー
ムは一つしかないので、オプション引数@var{all-frames}を取らなくなりまし
た。
@end itemize

@section 表示機能

@itemize @bullet
@item
オーバレイやフェースはなくなりました。

@item
後のバージョンでは現在の行番号の表示に使われているモード行構成要素
@samp{%l}は削除されました。変数@code{line-number-mode}と
@code{line-number-display-limit}は削除されました。

@item
@code{baud-rate}は変数ではなく関数になりました。

@item
@code{nil}一つだけを引数にして@code{message}を呼ぶことはできなくなりまし
た。つまり、ミニバッファの内容が確実に表示されているようにすることはでき
なくなりました。

@item
変数@code{temp-buffer-show-function}の名前は
@code{temp-buffer-show-hook}に変更されました。

@item
関数@code{force-mode-line-update}は削除されました。代わりに以下のような
式を使用してください。

@example
(set-buffer-modified-p (buffer-modified-p))
@end example

@item
表示テーブルはなくなりました。@sc{ASCII}は本来あるべき姿で表示されるよう
になりました。
@c ???何か違うような???
@end itemize

@section 入力イベントの扱い

  入力イベントについてもっとも大きな変更は、ファンクション・キーとマウス
に関するイベントが削除されたことでしょう。入力イベントは文字だけになった
のです。それに、文字は0から127の範囲のコードとメタ・ビットとで表現される
ようになりました。これらの変更により、単純化が非常に大きく進みました。
@c ???

@itemize @bullet
@item
@code{define-key}や@code{global-set-key}、@code{read-key-sequence}、
@code{local-set-key}のような関数はEmacs 19では文字列またはベクタを受
けつけるようになっていましたが、文字列のみを受けつけるようになりました。

@item
説明文字列に関する関数(@code{single-key-description}、
@code{key-description}など)もベクタは受けつけずに文字列だけを受けつける
ようになりました。

@item
関数@code{read-event}、@code{event-start}、@code{posn-window}、
@code{posn-point}、@code{posn-col-row}、@code{posn-timestamp}、
@code{scroll-bar-scale}、@code{event-end}は文字イベントには意味がないの
で削除されました。

@item
@code{unread-command-events}と@code{last-event-frame}変数は削除されま
した。

@item
関数@code{this-command-keys}と@code{recent-keys}は常に文字列を返すように
なりました。同様に、キーボード・マクロの定義にもベクタは使用できず、文字
列のみしか使用できなくなりました。

@item
文字イベントでは意味がないので、対話引数の指定子として@samp{e}は使用でき
なくなりました。

@item
Emacs 18では、メタ文字を文字オブジェクトとして、文字列と同じく、128と
@sc{ASCII}コードとの和で表現するようになりました。
@end itemize

@section メニュー

@itemize @bullet
@item
メニューをキーマップとして定義することはできなくなりました。それぞれの仕
組みにはそれぞれの特性に合わせてプログラム・インタフェースを用意するのが
よいシステム設計であり、それでこそ両方式の利点を活かせるのです。キーマッ
プとメニューの統合による単純化には無理があると我々は考えています。
@c ???超意訳。もうちょっと堅い文だと思うんだけど???

@item
Emacs 18では、メニューはマウスでのみ使用できるようになりました。キーボー
ドでのメニュー操作は非常に多くのユーザを大混乱におとしいれることになって
しまいます。

@item
Emacs 18ではメニュー・バーはなくなりました。メニュー・バー関連の全ての関
数と変数は削除されました。
@end itemize

@section ミニバッファ関連の変更

@itemize @bullet
@item
ミニバッファでのヒストリ機能はなくなりました。また、ミニバッファでの入力
関数@code{read-from-minibuffer}と@code{completing-read}のオプション引数
@var{hist}を削除しました。

@item
@code{read-from-minibuffer}などのミニバッファでの入力関数の@var{initial}
引数として、@code{(@var{string} . @var{position})}の形式のコンス・セルを
渡すことはできなくなりました。

@item
関数@code{read-no-blanks-input}の@var{initial}引数は必須になりました。
@end itemize

@section コマンド定義に関する新機能

@itemize @bullet
@item
対話引数の指定子として@samp{@@}は使用できなくなりました。

@item
Emacs 18では、対話引数の指定のプロンプト文字列として、書式指定と
同様な@samp{%}-指定子は使用できなくなりました。

@item
属性@code{enable-recursive-minibuffers}は意味を持たなくなりました。
@end itemize

@section 入力からの読込みに関して削除された機能

@itemize @bullet
@item
関数@code{set-input-mode}の3番目の引数(@var{meta})は削除されました。代わ
りに、変数@code{meta-flag}が追加されました。この変数を@code{t}にセットす
るとMetaキーが有効になり、@code{nil}なら無効になります。変数
@code{meta-flag}で指定できるのはこの2種類だけです。

@item
また、変数@code{extra-keyboard-modifiers}も削除されました。

@item
関数@code{keyboard-translate}、変数@code{num-input-keys}と
@code{function-key-map}は削除されました。
@end itemize

@section 構文テーブルに関して削除された機能

@itemize @bullet
@item
関数@code{skip-syntax-forward}、@code{skip-syntax-backward}、
@code{forward-comment}は削除されました。

@item
``接頭辞構文(prefix syntax)''を表す構文フラグはなくなりました。また、も
う一つのコメント形式を表すフラグもなくなりました。Emacs 18では、構文テー
ブルにはそれぞれ1種類ずつしかコメント形式を持てません。

@item
変数@code{words-include-escapes}はなくなりました。
@end itemize

@section ケース・テーブル

@itemize @bullet
@item
ケース・テーブルはEmacs 18ではなくなりました。そのため、関連する関数
@code{set-standard-case-table}、@code{standard-case-table}、
@code{current-case-table}、@code{set-case-table}、
@code{set-case-syntax-pair}は削除されました。
@end itemize

@section バッファを扱う機能

@itemize @bullet
@item
バッファ関連の関数@code{buffer-modified-tick}と
@code{generate-new-buffer-name}は削除されました。

@item
@code{buffer-disable-undo}の名前は@code{buffer-flush-undo}に変更され
ました。わかりやすい名前になった、でしょ?
@c ???

@item
Emacs 18では関数@code{other-buffer}は引数を一つしか取らないようになり
ました。

@item
関数@code{rename-buffer}の引数として、すでに存在しているバッファ名を
渡すことはできなくなりました。
@c ???自信なし、未確認???

@item
ローカル変数@code{list-buffers-directory}は削除されました。

@item
フック@code{kill-buffer-hook}はなくなりました。
@end itemize

@section ローカル変数について

@itemize @bullet
@item
関数@code{kill-all-local-variables}は、常にカレント・バッファにローカル
な変数全てを消し去るようになりました。

@item
voidである変数をバッファローカルにした際に、その変数の値が@code{nil}
になるようになりました。

@item
変数のグローバルな値がvoidであることはなくなったので、関数
@code{default-boundp}は削除されました。
@c ???自信なし???
@c ???functionsはfunctionの間違いでしょう???

@item
特殊形式@code{defconst}と@code{defvar}は、変数がカレント・バッファにロー
カルなとき、変数のグローバルな値ではなくローカルな値をセットするようになり
ました。
@end itemize

@section サブプロセス関連の機能

@itemize @bullet
@item
@code{call-process}と@code{call-process-region}はサブプロセスの終了ステー
タスを返さないようになりました。きっとうまく実行されますよ。信じてくださ
い。
@c ???何か違う???

@item
非同期プロセス関連の標準機能はVMSの上では使用できなくなり、代わりに、VMS
向けに特別に設計された非同期プロセス関数群が追加されました。でも、VMSで
しか使えない機能のドキュメントをわざわざ書くのも面倒なので、すいません。
ルーク、ソースを使え。

@item
関数@code{signal-process}は削除されました。

@item
トランザクション待ち行列の機能は廃止されました。関連する関数
@code{tq-create}、@code{tq-enqueue}、@code{tq-close}は削除されました。
@end itemize

@section 時刻、時間、遅延の扱い

@itemize @bullet
@item
関数@code{current-time}、@code{current-time-zone}、@code{run-at-time}、
@code{cancel-timer}は削除されました。

@item
関数@code{current-time-string}はオプション引数を取らなくなりました。

@item
関数@code{sit-for}と@code{sleep-for}はミリ秒単位での時間指定を行なう
ためのオプション引数を取らないようになりました。また、@code{sit-for}の
三つ目のオプション引数@var{nodisp}はなくなりました。

@item
@code{accept-process-output}関数の二つ目と三つ目のオプション引数はな
くなりました。引数はプロセス一つだけになりました。
@end itemize

@need 3000

@section Lispデバッガからなくなった機能

@itemize @bullet
@item
Emacs 18では、起きたエラーの種類によってデバッガの起動を抑制することはで
きなくなりました。変数@code{debug-on-error}の値が非@code{nil}ならば、エ
ラーの種類によらず必ずデバッガが立ち上がるようになりました。

@item
変数@code{command-debug-status}と関数@code{backtrace-frame}は削除さ
れました。
@end itemize

@section メモリ割り当てに関する変更

@itemize @bullet
@item
関数@code{memory-limit}は削除されました。

@item
Emacs 18では浮動小数点数は扱えないので、@code{garbage-collect}の返すリ
ストは浮動小数点数に関する情報を含まないようになりました。
@end itemize

@section フックに関する変更

@itemize @bullet
@item
@c Overfull対策
@c 関数の順番を入れ換えた。一番最後のauto-save-hookを一番前に持ってきた。
フック@code{auto-save-hook}、@code{pre-abbrev-expand-hook}、
@code{pre-command-hook}、@code{post-command-hook}
は削除されました。

@item
変数@code{revert-buffer-insert-file-contents-function}は削除されました。

@item
また、関数@code{add-hook}も削除され、フックの追加は手で行なわなくてはな
らなくなりました。確実な動作を望むのであれば、フック変数の設定には旧来の
方法を取ってください。つまり、関数のリストではなく、関数一つだけを入れる
ようにしてください。まあ、強制するわけではありませんが。

@item
変数@code{lisp-indent-hook}の名前は@code{lisp-indent-function}に変更
されました。

@item
変数@code{auto-fill-function}の名前は@code{auto-fill-hook}に変更され
ました。

@item
@code{blink-paren-function}の名前は@code{blink-paren-hook}に変更され
ました。

@item
変数@code{temp-buffer-show-function}の名前は
@code{temp-buffer-show-hook}に変更されました。
@end itemize
