ido.elのインストール
通常のC-x bとC-x C-fにこのパッケージ特有のswitch-to-bufferとfind-file関数を割当てる為には、ido.elファイルをload-pathの通った場所の何処かに置き、バイトコンパイルをして、次の行を.emacsに追加します。
(require 'ido)
(ido-mode t)
例: ido-switch-buffer
もし「123456」と「123」という二つのバッファがあったとして、「123456」の方が最近使われたものだとすると、ido-switch-bufferを使った時にはまず最初に、全てのバッファがリストに現れます。
Buffer: {123456,123}
ここで2をタイプすると、
Buffer: 2[3]{123456,123}
{}の中のリストはマッチしたバッファであり、(現在前面にあるバッファはデフォルトでリストの最後に置かれますが)最近のものから順に並べられます。RETを押せばいつでもリストの先頭にある項目が選ばれます。
C-sまたは[right]で先頭の項目を最後に移動したり、C-rまたは[left]で最後の項目を先頭に移動したりする事も出来ます。
[]の中の文字列はTABの入力によって追加されるものです。この場合は、「3」が追加される事になるでしょう。だからTABを押すと、
Buffer: 23{123456,123}
この時点で、マッチしているバッファはまだ二つあります。
もし最初のバッファを開きたいなら、ただRETを押せば良いのです。二つ目のバッファを開きたいのなら、[right]かC-sでそれを先頭に持って来て、RETで選択する事が出来ます。
しかし、もしここで4を入力すると、マッチするバッファは一つだけになります。
Buffer: 234[123456] [Matched]
マッチするバッファが一つだけですから、これは[]の中に入り、その後に[Matched]と表示されます。
ここでTABかRETを押すと、そのバッファを開く事が出来ます。
一方で、もし「a」を入力するとマッチするバッファは無くなります。
Buffer: 234a [No match]
ここでRETかTABを押すと、「234a」という新しいバッファを開くかどうかを尋ねられます。
勿論、この機能の最も便利な所は、極く僅かなキー入力でバッファを指定できる事です。
以上の例で「123456」を選ぶための最も速い方法は、ただ「4」を入力してRETを押す事です。
(名前に4を含む別のバッファが無い事を前提としています。)
マッチした全てのバッファの一覧を別のバッファで表示したい時は、「?」を押します。
補完可能な文字列が存在しない場合には、TABを押す事でも同様に表示されます。
TABを繰返し押せば、一覧表示のバッファをスクロールする事が出来ます。
リストの先頭にあるバッファは、C-kで閉じる事が出来ます。もしそのバッファを保存する必要があるなら、バッファを閉じる前に保存するかどうかを聞かれます。
もし開きたいファイルがバッファに無い事が分かったら、C-fを押す事で即座にido-find-fileへ移行する事が出来ます。
例: ido-find-file
同じように、ido-find-fileを使った場合、現在のディレクトリにあるファイルとディレクトリのリストがバッファの時と同じように表示されます。ただし、ファイル名とディレクトリ名は単純にアルファベット順で並びます。
[right]と[left]でリストをスクロールできる事に加えて、[up]と[down]で次や前のサブディレクトリに素早くスクロールする事が出来ます。
あるサブディレクトリの中に入ってファイルの選択を続けるには、単純にそれをリストの先頭に持って来て、RETを押します。
親ディレクトリに戻るには、ファイル名の部分を(例えば[backspace]等で)完全に削除した上で、[backspace]を押します。M-[backspace]でファイル名の部分を消す事も出来ます。
(現在のドライブの)ルートディレクトリへ行くには、二つのスラッシュを入力します。
MS-DOSかWindowsで他のドライブのルートへ行くには、「X:/」と入力します。Xはドライブレターです。
あるディレクトリの中のファイルを開いた後では(それが以前のEmacsセッションであっても)、そのディレクトリ内のファイルを別のディレクトリ内からでも素早く開く事が出来ます。ファイル名(の一部)を入力し、M-pを一度か二度押す事で、idoのワーキングディレクトリのヒストリから検索されます。
それに加えて、現在のディレクトリ内にマッチするものが無かった場合、ido-find-fileは自動的に過去の50ディレクトリから検索して来ます。入力した文字はそのままに、この検索を取り消したい場合は、C-zを押すか、[backspace]で削除します。
何らかの理由でファイル名の指定が出来ない時は、C-eでパスを編集し、RETで終了すれば、対話的な操作を一時中断する事が出来ます。
もし入力されたパスが存在しないディレクトリを指しているなら、idoはそのディレクトリを作成するかどうかを尋ねます。
それに対し、C-fを押す事でいつでも通常の非対話的なfind-fileへ移行する事が出来ます。
また、C-bでido-switch-bufferへ移行する事も出来ます。
完全なキーバインディングや機能の説明を見るには、ido-switch-bufferとido-find-fileのdoc stringを見て下さい。
(describe-function 'ido-find-file)
歴史
Stephen Eglenの完璧なiswitchbパッケージを見付けてからというもの、私はそれ無しでは生きられなくなりましたが、ひとたび最小のキー入力でバッファを切り換える事に耽溺した後になっては、すぐに私は昔ながらの方法でファイルを開く事を酷く遅く感じるようになりました。だから私はiswitchbがバッファを切替えるのと同じ素早さと簡潔さで、ファイルを開く為のパッケージを書く事に決めたのです。
最初は、独立したifindf.elパッケージを、iswitchb.elのコピーを元にして書きました。iswitchbのバッファ切替えのようにしてファイルを開くものです。その過程で私はifindfの中にあったiswitchbに由来する幾つかの誤りを訂正しましたが、この二つのパッケージの殆どの部分は非常に似通っているため、私は適切な事として自分のifindfパッケージをiswitchbにマージする事に決めました。
これが基本的にido (interactively do)の全てですが、自分の変更を「iswitchb-」名前空間にマージするのは間違っているように思えたため、マージするパッケージの為に共通の「ido-」名前空間を考案しました。
謝辞
当然の事ながら、あらゆる感謝の気持ちはiswitch-buffer modeを書いたStephen Eglen へ向けられます。ido-switch-bufferの為に99%のコードを剥ぎ取った事と、ido-find-fileのインスピレーションを得た事についてです。彼の仕事無くしては、idoパッケージは決して存在する事はありません。
Revision History
- Revision 1.56, 2002-01-05
Don't use obsoleted insert-string in emacs 21.3
Fixed: Don't bind backspace and M-backspace specifically for xemacs.
- Revision 1.55, 2001-12-28
Fixed ido-minibuffer-setup for xemacs (but ido still has problems is some areas with xemacs).
Automatically look in list of ignored files or buffers [C-a] when there are no matches.
Specifically, .. is now completed normally although it is ignored by default.
Removed the ido-merge-work-directories variable which modified the functionality of M-p and M-n.
The M-p and M-n commands now always go to the previous / next (matching) work directory in the history.
New M-s command (ido-merge-work-directories) to actively search (and merge) the work directory history.
Added ido-show-dot-for-dired to allow easy entry to dired from ido-find-file.
- Revision 1.54, 2001-12-07
Adapted key-binding fix from Bill Benedetto for (ido-mode 'buffer).
Added find-file-read-only-other-window and find-file-read-only-other-frame.
Adapted fix from Stephen Eglen to use select-frame-set-input-focus when available.
- Revision 1.53, 2001-12-06
Immediately fallback to non-ido find-file if ido-find-file is activated
in a buffer whose default-directory is on a slow ftp host.
C-k in ido-find-file offers to delete file at head of list.
- Revision 1.52, 2001-11-24
Fixed: Ignore error messages from `find' command in ido-wide-find-dirs-or-files.
Added ido-slow-ftp-hosts and ido-slow-ftp-host-regexps to automatically fallback
to standard find-file if visiting one of the matching hosts.
Added ido-merge-ftp-work-directories; by default, ftp hosts are ignored when
searching work directories.
Added ido-cache-ftp-work-directory-time; by default, ftp host directories are
cached for one hour without checking for new contents.
Don't cache root directories on nt and ms-dos systems.
- Revision 1.51, 2001-11-16
Fixed ido-to-end: would clear ido-temp-list if applied to entire list.
C-backspace now goes to parent directory without clearing current file name.
Disable print-level and print-length limitations when saving history.
Now check proper formatting of all loaded history data in ido-wash-history.
Discard bogus elements.
Added M-m to make-directory in current directory.
Added M-f to search for a matching files using external find command.
Added M-d to search for a matching directories using external find command.
- Revision 1.50, 2001-11-05
User input now interrupts auto merge.
Fixed: maintain current input when switching between file and buffer selection.
- Revision 1.49, 2001-10-30
In emacs 21, now resizes minibuffer according to max-mini-window-height.
Added ido-max-window-height to override max-mini-window-height.
Added fix from Alex Schroeder for ido-max-prompt-path customization.
Fixed: Input was not echoed in minibuffer when no matches; the fix
uses a timer to perform auto-merge delay rather than sit-for.
Replaced ido-auto-merge-delay by ido-auto-merge-delay-time (seconds).
Don't auto-merge with 1 character only (so don't auto-merge on ~).
M-k removes current directory from ido-work-directory-list.
- Revision 1.47, 2001-10-15
Added ido-decorations to allow more customization of ido minibuffer.
Enhanced ido-wash-history to remove text properties from strings.
In match list, strings whose prefix matches are now placed first.
Fixed: Clear previous input string when C-g is used to quit minibuffer.
Fixed: Restore previous matches when undoing merge using [backspace].
Fixed: Avoid duplicates in ido-work-file-list.
No longer uses pp to save ido history file.
Added ido-read-file-name and ido-read-directory-name functions.
- Revision 1.46, 2001-10-03
Added ido-auto-merge-delay to delay auto merge operation by 500 ms waiting for more input.
Corrected minor problems related to cycling through merged lists.
- Revision 1.45, 2001-10-01
Added C-o command to ido-find-file to copy file name from current buffer.
Modified C-w to no copy extension if current directory hasn't changed.
- Revision 1.44
Use directory cache contents when creating merged directory list.
Added ido-ignore-directories-merge.
Fixed customize type for ignore lists to choice of regexps or functions.
- Revision 1.43
Added ido-merged-indicator and ido-indicator-face.
Use directory file cache rather than work directory list when merging directories (ending in /)
- Revision 1.42
Don't auto-merge in write-file, dired, and list-directory
Restore pre-merge state when backspacing or no merged matches found
C-z now undoes last merge and returns to the pre-merge directory
- Revision 1.41
Ignore text properties in minibuffer contents (if yanked)
Fixed: don't auto-merge in root to allow entry of ange-ftp hostnames
- Revision 1.40
Added ido-work-directory-list-ignore-regexps.
Added ido-dir-file-cache and ido-max-dir-file-cache.
Added automatic lookup in work directory history for files when no match.
Added ido-merge-work-directories and ido-auto-merge-work-directories-length.
- Revision 1.37, 2001-06-28
Avoid corrupting .ido.last and check after load.
- Revision 1.36, 2001-06-14
Fixed handling of ~/ (was broken in 1.34)
$VAR expansion how happens automatically when typing /
Fixed: dired would store /path/./ rather than /path/ in work directory history.
ido-write-file now disables ido-work-directory-match-only.
- Revision 1.35, 2001-06-12
Added work file history (on M-o and M-b)
Fixed: allow entering dired with wildcard filename.
C-w now inserts current buffer's file name.
TAB scrolls *Ido Completions* buffer; when used at end of buffer,
start from top, but now show all completions in the buffer.
More customization: ido-completion-buffer-all-completions.
Work file and directory lists can now be saved and loaded using
M-x ido-save-history and M-x ido-load-history.
- Revision 1.34, 2001-06-10
Selection with keyboard or mouse now works in completion buffer.
- New variable ido-completion-buffer (default *Ido Completion*).
- Completion buffer is automatically removed when context changes.
- Completion buffer contents are now sorted alphabetically.
Fixed: ido-dired didn't put directory in work directory history.
Added short description of how ido-find-file actually works.
[M-backspace] now deletes word (if any) or last subdir like [backspace]
- Revision 1.33, 2001-06-07
When using multiple frames, ido-switch-buffer now shows current frame's buffers first.
- Revision 1.32, 2001-06-06
Added fixes and enhancements from Klaus Berndl:
- New ido-separator variable.
- Fixed documentation of various make-list-hooks.
- Don't backspace past root directory.
Fixed: default-directory of current buffer was changed by find-file fallback.
Added ido-make-file-prompt-hook and ido-rewrite-prompt-path-rules variables.
Added work directory history for ido-find-file [M-n] / [M-p].
- Revision 1.31, 2001-05-30
Changed package location to cua.dk
- Revision 1.30, 2001-05-21
Dired now has . as default choice to make entering current directory easy.
C-f now always falls back to non-ido version of current command.
"../" is now handled like backspace (updir).
Handle $VAR expansion in file names
Disable show-paren-mode in minibuffer
Fixed handling of / in directory paths
Fixed unintended ange-ftp interaction in root directory.
- Revision 1.29, 2001-05-14
Use [C-e] to edit the input string (and path).
Added idonized version of find-file-read-only [C-x C-r].
Added idonized version of dired [C-x d].
Added idonized version of list-directory [C-x C-d].
Minor bug fixes.
- Revision 1.24, 2001-04-17
The directory history list is now saved in .ido.last file in home directory.
Currently visited files are now moved to end of file selection list.
- Revision 1.23, 2001-03-20
Documentation fixes.
- Revision 1.22, 2001-01-04
Added: support for emacs 21.
Added: Limit number of items shown in buffer/file list according
to new variable ido-max-prospects. This gives rather significant
speed improvements.
- Revision 1.21, 2000-11-27
Merged Klaus' modification into development version.
- Revision 1.20, 2000-10-01
Improved version from Klaus Berndl.
Added: prefix macthing in addition to the normal substring-matching.
Customized via ido-enable-prefix and toggled with ido-toggle-prefix [C-p].
Added: highlighting for sub-directories in the alternative-list
for better and faster overview. Customized via ido-subdir-face.
Added: possibilty to customize for what function group (buffer
and/or file handling) ido should be enabled. Look at ido-enabled.
Fixed: file-functions (find, insert, write...) now handle
the default-directory of the current buffer correctly.
Fixed: Compatiblity for emacs without customize for deface too.
- Revision 1.10, 2000-04-03
Added "ido-record-commands" which causes ido commands to be registered
in the command-history so they can be repeated by [C-x ESC ESC].
Fixed: [C-x i] now only queries for file to insert once.
Fixed: [C-x C-w] no longer reports [No Match].
Fixed: ido-last-directory-history is ignored if directory no
longer exists.
- Revision 1.9, 2000-03-22
Fixed: [C-x k] now uses current buffer as default choice even when matched
by ido-ignored-buffers.
Fixed: ido-find-file now works with ange-ftp.
- Revision 1.8, 2000-03-21
Added "interactive do" versions of more buffer and file related commands:
[C-x C-v] ido-find-alternate-file
[C-x C-w] ido-write-file
[C-x i] ido-insert-file
[C-x C-i] ido-insert-buffer (new binding)
[C-x k] ido-kill-buffer
- Revision 1.7, 2000-03-05
Added "ido-enable-last-directory-history" which causes the last directory
selected in a directory to be placed at the head of the item list
presented by [C-x C-f].
[C-l] now toggles a 'find-literal' flag (default off) which causes
[C-x C-f] to open the file without conversion (i.e. literally/binary).
- Revision 1.6, 2000-02-15
Initial release.