[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27. ミニバッファの入力/補完機能とヒストリ (2007/11/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuffer"
"MeadowMemo/ミニバッファの入力/補完機能とヒストリ"へのコメント(無し)
検索全文Elisp


この章で紹介していること

Meadow を操作していると,ミニバッファで文字を入力する機会が多くあります.

しかし,その度に毎回すべての文字を入力していては非常に面倒です.しかも,ミニバッ ファで入力する文字はある程度決まっています.

そこで, Meadow にはヒストリや補完機能など,入力を楽にするための機能がたくさんあ ります.

そこで,ここでは,ミニバッファでの文字入力を補助する機能を紹介します.

通常のバッファでテキストの入力を補完する機能は 34. テキストの補完入力 ― abbrev ,定型句 (2008/11/11) にありますの で,そちらを参照ください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1 補完機能関連 (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=complete%20word"
"MeadowMemo/補完機能関連"へのコメント(無し)
検索全文Elisp

Meadow ではミニバッファへカーソルが移動した時に TABSPC を入力する と,候補の一覧が表示されることがあります.これにより,すべて入力しなくても,途中 まで入力して TABSPC を入力することで,補完されます.

補完入力に関しては,23. ファイルを開く関連 (2005/11/19) でも紹介しています.

ここでは,その補完機能に関連した Elisp について紹介します.

27.1.1 M-x の補完候補をミニバッファに表示 ― icomplete (2005/03/11)  
27.1.2 M-x の補完を iswitchb のようにしたい ― mcomplete (2005/03/11)  
27.1.3 補完ウィンドウを補完完了時に消す ― lcomp (2005/03/15)  
27.1.4 不要時にはデフォルト値を表示しない (2005/03/15)  
27.1.5 ミニバッファでの補完を自動入力 (2005/03/15)  
27.1.6 補完候補をカーソルキーで表示 ― cycle-mini (2005/03/15)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.1 M-x の補完候補をミニバッファに表示 ― icomplete (2005/03/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=icomplete"
"MeadowMemo/M-xの補完候補をミニバッファに表示―icomplete"へのコメント(無し)
検索全文Elisp
要約

M-x などでの補完候補をミニバッファに表示します.

何が問題なのか?

通常,Meadow/Emacs では補完候補は SPCTAB を入力するまで,分かり ません.

何ができるのか?

M-x で文字を入力するだけで,

M-x she(ll){,-command,-command-on-region,-script-mode}

といった風に補完候補が表示されます.この例であれば,TABで補完すれば, 「shell」と展開できることが分かります.また,「shell」や「shell-command」という 関数があることもすぐに分かります.

設定済みMeadowでは

設定していません.

さらに高機能な mcomplete をインストールしています.

インストール方法

標準で付属しています.

設定方法

以下を .emacs に追加します.

 
(icomplete-mode 1)

詳しい使い方

M-xとすると,補完候補がミニバッファに表示されます.ただし,特にキーバインド があるわけではなく,単に候補が iswicthb のように出るだけです.

コメント

これは,あまりメリットが無いかな.表示だけされても,少しは便利だけど,入力の手間 は結局変わらないし.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.2 M-x の補完を iswitchb のようにしたい ― mcomplete (2005/03/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mcomplete"
"MeadowMemo/M-xの補完をiswitchbのようにしたい―mcomplete"へのコメント(無し)
検索全文Elisp
要約

M-x などで,ミニバッファで文字を入力すると,可能な選択候補が表示され,その 中から簡単に指定したものを選択できる.

何が問題なのか?

M-x などでミニバッファに文字を入力する場合,入力すべき文字は決まっています. 存在しない関数は指定できませんから.

しかし,通常では,補完を繰り返しながら,すべての文字を入力しなければなりません.

何ができるのか?

M-x で文字を入力するだけで,例えば,

M-x she(ll){,-command,-command-on-region,-script-mode}

といった風に補完候補が表示されます.この例であれば,TABで補完すれば, 「shell」と展開できることが分かります.また,「shell」や「shell-command」という関 数があることもすぐに分かります.

さらに,これらの関数を簡単に選択することができ,入力の手間が小さくて済むのです.

設定済みMeadowでは

インストールと設定済みですので,そのままで利用できます.

インストール方法

mcomplete.el からダウンロードして,ロードパスの通ったところへ置いておきま す.

設定方法

.emacs に以下を追加します.

 
(require
'mcomplete) (turn-on-mcomplete-mode)

詳しい使い方

M-x で文字を入力するだけで,例えば,

M-x she[ll]{,-command,-command-on-region,-script-mode}

といった風に補完候補が表示されます.このままで,RET とすると,最初にある 「shell」という関数が実行されます.

ここで,C-s とすると,

M-x she[ll]{-command,-command-on-region,-script-mode,}

となります.さらに,C-s

M-x she[ll]{-command-on-region,-script-mode,,-command}

と選択している関数が変わていきます.逆方向は C-r でできます.

こうすることで,少ない入力で,簡単に実行したい関数を指定できます.

さらに,普通は M-x では,先頭の文字が一致していないと補完できません.しかし, mcomplete を使うと,「 region 」で「 indent-region 」など「 region 」を途中に含む ものを補完することができます.その方法は,M-x としてミニバッファに移動した 後で,C-n あるいは C-p とします.そうすると,ミニバッファに 「 [Substring match] 」と表示されます.これで,「 region 」と入力すると, 「 region 」を含む関数を一覧できます.

ただし,この部分一致は,文字を入力してから候補が出るまで少し待たされます.

補完方法の設定

このような補完方法は,設定で変更できます.デフォルトでは「Prefix」と「Substring」 というメソッド(補完方法)が用意されています.

こういった補完方法は「 mcomplete-default-method-set 」という変数で設定されていま す.デフォルトでは,以下のように設定されています.

 
(defcustom mcomplete-default-method-set
  '(mcomplete-prefix-method mcomplete-substr-method)
  "List of completion methods.  The first method is applied first."
  :type  '(repeat function)
  :group 'mcomplete)

M-xとすると,一番最初の方法,つまり,「 mcomplete-prefix-method 」が使われ ます.C-n で次の方法,C-p で前の方法を選択できます.片方のみでよけれ ば,

 
(setq mcomplete-default-method-set
      '(mcomplete-prefix-method))

を.emacs に追加します.

ここまで,M-x を例にとって説明しましたが, mcomplete は M-x 以外でも ミニバッファで入力する際には,いつでも使うことができます.

27.1.2.1 M-x などをヒストリで補完したい (2005/03/11)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.2.1 M-x などをヒストリで補完したい (2005/03/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mcomplete-history"
"MeadowMemo/M-xなどをヒストリで補完したい"へのコメント(無し)
検索全文Elisp
要約

mcomplete の補完をヒストリのみから行うことができます.

何が問題なのか?

M-x など,ミニバッファで入力するコマンドはそれほど多いものではありません. よく使うものは大体決まっていますので,毎回全コマンドリストの一覧が表示されてもあ まりうれしくありません.

例えば,M-x f とすると,通常なら 100 以上の補完候補が出ます. mcomplete を 使っていても,この中から選ぶのは大変面倒です.

何ができるのか?

M-x のヒストリを見ると,M-x f の補完候補は,私の場合,M-x face2html しかありません.それなら,たくさんの候補が出るよりも,ヒストリのみから 補完して M-x f RET とできた方がずっと便利です. mcomplete-history なら,こ のような操作が可能になります.

インストール方法

mcomplete-history.el をダ ウンロードし,ロードパスの通ったところへ置きます.

設定方法

27.1.2 M-x の補完を iswitchb のようにしたい ― mcomplete (2005/03/11)で紹介した設定を以下で置き換えます.

 
(require 'mcomplete)
(require 'cl)
(load "mcomplete-history")
(turn-on-mcomplete-mode)

詳しい使い方

通常はヒストリとお気に入りからの補完になります.

ヒストリに候補がなければ,すべての候補から補完できます.もちろん補完方法を切り換 えても,すべての候補から補完できます.

また,キーバインドを変更して,左右のカーソルキーで候補を選択できるようにしていま す.

これがないと,TABを打つのが面倒でやってられません.

コメント

ただし,副作用もあります.ミニバッファで文字を補完入力をする時には常にこの機能が 働くので,予期しないところで補完候補が絞られてしまうことがあります.

その時には,C-nで Prefix に切り替えて使用してください.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.3 補完ウィンドウを補完完了時に消す ― lcomp (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=lcomp%20completion"
"MeadowMemo/補完ウィンドウを補完完了時に消す―lcomp"へのコメント(無し)
検索全文Elisp
要約

補完ウィンドウを補完完了時に消すことができます.

何が問題なのか?

ファイルを開くときなどに出てくる*completion*バッファは補完終了時にも残っている時 があり,少し邪魔です.

何ができるのか?

comp.el を使うと,補完ウィンドウを補完完了時に消してくれます.

設定済みMeadowでは

インストールしていません

インストール方法

使うためには,http://www.geocities.co.jp/SiliconValley-Oakland/7673/から, lcomp.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を .emacs に追加します.

 
(require 'lcomp)
(lcomp-install)

詳しい使い方

普通に補完をするだけです.補完が完了したら,勝手に消してくれます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.4 不要時にはデフォルト値を表示しない (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuf-eldef"
"MeadowMemo/不要時にはデフォルト値を表示しない"へのコメント(無し)
検索全文Elisp
要約

ミニバッファではデフォルト値が表示されますが,文字を入力しはじめたら.デフォルト 値は不要です.その時には,自動的にデフォルト値を非表示にできます.

何が問題なのか?

ミニバッファで入力する時に

How many articles from nnml:mail.misc.info (default 207): 

のようにデフォルト値が利用できることがあります.

しかし,文字を入力し始めたら,デフォルト値以外を入力するわけですから,デフォルト 値には意味がありません.

何ができるのか?

ミニバッファで文字が入力されたら,デフォルト値を消してくれます

設定済みMeadowでは

設定していませんので,設定が必要です.

インストール方法は?

標準で付属していますので,インストールは不要です.

設定方法は?

以下を.emacs に追加します

 
(minibuffer-electric-default-mode t)

あるいは,起動後に M-x minibuffer-electric-default-mode としても利用できま す.再度, M-x minibuffer-electric-default-mode とするとオフになります.

詳しい使い方は?

ミニバッファで文字を入力するだけです.デフォルト値があれば,

How many articles from nnml:mail.misc.info (default 207): 

が,文字を入力しはじめると

How many articles from nnml:mail.misc.info: 2

のように変わります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.5 ミニバッファでの補完を自動入力 (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuffer-complete-cycle"
"MeadowMemo/ミニバッファでの補完を自動入力"へのコメント(無し)
検索全文Elisp

要約

TAB で補完候補を出力し,さらに,TAB を入力すると,補完候補の1番目を 選択することができる.

何が問題なのか?

ファイルを開く際などミニバッファで文字を入力する機会はたくさんあります. Meadow ではそんな作業を楽にするために,補完機能があります.

しかし,補完機能を使ってもある程度入力しなくてはなりません.

何ができるのか?

例えば,あるディレクトリに .emacs や.bashrc といったファイルがあったとします.

普通は,C-x C-f TABとすると,一覧が表示され,「.emacs 」を開きたいなら 「.e TAB」と入力して補完します.

これを使うと,

C-x C-f . TAB TAB TAB」と入力すると,1回目の TAB で補完候補が表示さ れ,2回目の TAB でミニバッファの文字が「.bashrc 」となり,3回目の TAB で「.emacs 」と変わります.

こんな風に頭数文字入力しておけば,後は TAB だけで入力していくことができるわ けです.これは,M-x の補完でも利用できます.

設定済みMeadowでは

mcomplete と干渉するために,インストールしていません.

インストール方法は?

http://mail.gnu.org/archive/html/gnu-emacs-sources/2000-11/msg00009.html よりダウンロードし,ロードパスの通ったところへ置きます.

設定方法は?

以下を.emacs に追加します.

 
(require 'minibuffer-complete-cycle)

詳しい使い方は?

補完時にTABを何度か入力すると,順番に候補が入力されます.

うまく動かない

同じようにミニバッファでの補完を改良するような Elisp と同時には使えないかもしれま せん.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.1.6 補完候補をカーソルキーで表示 ― cycle-mini (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=cycle-mini"
"MeadowMemo/補完候補をカーソルキーで表示―cycle-mini"へのコメント(無し)
検索全文Elisp
要約

ファイルを開く時に,カーソルキーだけで,簡易にファイルを選択することができるよう になります.

何が問題なのか?

ファイルを開く場合,ミニバッファでファイル名の一部を入力して,TAB で補完し て,また文字を入力してと,補完ができるといっても結構面倒なものです.

何ができるのか?

ファイルを開くときなら

d:/home/m

まで入力して,カーソルの上下キーを入力すると,

d:/home/meadow.html
d:/home/memo.txt
d:/home/mail.txt

という風に d:/home/m で始まるファイルを順番に補完してくれます.

ファイルを開くときだけでなく,ミニバッファで補完が可能な時であれば,常にこのよう な動作になります.

設定済みMeadowでは

インストールしていませんので,インストールと設定が必要です.

個人的にはファイルを開く時には便利だと思うけど,M-x の時には,ヒストリが出 てくれた方がいいな.

インストール方法

cycle-mini.elをダウンロードし,ロー ドパスの通ったところに置きます.

設定方法

以下を.emacs に追加します.

 
(require 'cycle-mini)

詳しい使い方

ミニバッファでの入力時にカーソルの上下キーや C-nC-p で上記動作にな ります.

コメント

やっぱりヒストリはカーソルキーで辿りたいという時には以下の設定を上記設定の後に書 いておくといいでしょう.これで,設定が上書きされます.

 
(define-key minibuffer-local-map [up] 'previous-history-element)
(define-key minibuffer-local-completion-map [up] 'previous-history-element)
(define-key minibuffer-local-must-match-map [up] 'previous-history-element)
(define-key minibuffer-local-ns-map [up] 'previous-history-element)

(define-key minibuffer-local-ns-map [down] 'next-history-element)
(define-key minibuffer-local-map [down] 'next-history-element)
(define-key minibuffer-local-completion-map [down] 'next-history-element)
(define-key minibuffer-local-must-match-map [down] 'next-history-element)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.2 補完候補の詳細を表示 ― completing-help (2005/03/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=completing-help"
"MeadowMemo/補完候補の詳細を表示―completing-help"へのコメント(無し)
検索全文Elisp
要約

M-x? と入力すると,補完候補のコマンドのヘルプを表示できます.

何が問題なのか?

M-x auto- と補完候補を表示したものの,たくさんありすぎて,どのコマンドが何 なのか分からないということがあります.

何ができるのか?

M-x auto-まで補完して,?とすると,

Possible completions are:
auto-compression-mode
<<menu-bar> <options> <toggle-auto-compression>>
Toggle automatic file compression and uncompression.
With prefix argument ARG, turn auto compression on if positive, else off.
Returns the new status of auto compression (non-nil means on).

という風に各コマンドの詳細が表示されます.

M-x setenvでも同様に,環境変数の補完時に?とすると,

Possible completions are:
COMSPEC=C:\WINDOWS\system32\cmd.exe
CVSEDITOR="RunMW32 -nw"
SystemDrive=C:

などとその値が表示されます.

設定済みMeadowでは

インストールしていませんので,インストールと設定が必要です.

インストール方法は?

completing-help.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法は?

以下を.emacs に追加します

 
(require 'completing-help)
(turn-on-completing-help-mode)

詳しい使い方は?

M-x で適当に TAB を使って補完入力します.ある程度絞れたら,? と します.これで,各コマンドの詳細が表示されます.

いきなり ? でも試せますが,当り前ながらかなり待たされます.

説明が出た状態で,TAB とすると,通常の補完候補が表示されますので,C-x o で補完バッファに移動してスクロールする必要があります.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3 ヒストリをカスタマイズ (2007/11/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=customize%20history"
"MeadowMemo/ヒストリをカスタマイズ"へのコメント(無し)
検索全文Elisp

M-x でコマンドを入力すると,それは記憶され,次に M-x した際に,カーソ ルキーで簡単にその履歴を呼び出すことができます.

ここでは,その履歴に関連する設定などを紹介します.

27.3.1 ミニバッファを isearch − minibuf-isearch (2004/02/22)  
27.3.2 ヒストリの自動保存 ― session (2007/11/15)  
27.3.3 先頭文字の一致する M-x ヒストリを辿る ― tails-history (2003/09/27)  
27.3.4 ヒストリから重複を削除 (2004/02/03)  
27.3.5 以前に実行したコマンドを履歴表示・実行 (2003/11/24)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3.1 ミニバッファを isearch − minibuf-isearch (2004/02/22)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuf-isearch"
"MeadowMemo/ミニバッファをisearch−minibuf-isearch"へのコメント(無し)
検索全文Elisp

履歴をミニバッファでインクリメンタル検索できるので,目的の履歴をすばやく取り出す ことができます.

使うためには minibuf-isearch からダウンロードし ,ロードパスの通ったところへ置きます.そして,以下を .emacs に追加します.

 
(require 'minibuf-isearch)

これで,ミニバッファで C-r とすると検索することができます.検索が完了した ら RET で決定します.C-j とすると,検索に一致したファイルをすぐに開 くことができます.

Meadow ならば,何もしなくてもミニバッファで M-rM-s とすると正規 表現での検索もできます.ついでに,ヒストリは M-nM-p でたどることが できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3.2 ヒストリの自動保存 ― session (2007/11/15)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=session"
"MeadowMemo/ヒストリの自動保存―session"へのコメント(無し)
検索全文Elisp

要約

開いたファイルの履歴などを自動で保存することで,次回起動時も同じヒストリを利用で きる.カーソル位置の復元も含みます.

何が問題なのか?

多くの場合,毎日同じファイルを開いて,編集することが多いのではないでしょうか. Meadow/Emacs を起動している間であれば,一度開いたファイルの履歴は,ヒストリに残 りますので,何度でも簡単に同じファイルを開くことができます.

でも,その履歴は Meadow/Emacs を再起動すると消えてしまいます.

また,カーソル位置も,普通はファイルを開くと,先頭へ行ってしまいますが,これを, 前回の場所に戻すことができます.

何ができるのか?

いろいろな履歴を Meadow/Emacs を終了する時に自動的の保存し,起動する時に自動的に その履歴を復元することができます.

設定済みMeadowでは

インストールと設定済みですので,何もしなくても利用できます.

インストール方法

インストールは http://emacs-session.sourceforge.net/ からダウンロードして, session.el をロードパスの通ったところに置きます.

設定方法

以下を .emacs に追加します.

 
(require 'session)
(add-hook 'after-init-hook 'session-initialize)

■[Emacs]session.elで前回 「セーブ」したときではなく「閉じた」ときの位置にカーソルを復帰する によると,下 記を .emacs に追加すると,ファイルを保存した時ではなく,閉じた時の場所を保存して くれます.

 
(setq session-undo-check -1)

詳しい使い方

M-x で入力した関数はカーソルキーや M-pM-n で履歴を辿ることができま す.しかし, Meadow を終了させると,その履歴は消えてしまいます.M-x の履歴 だけでなく,カットした内容なども Meadow を終了させると消えてしまいます.

また,ファイルを開いて,ある場所を編集して,ファイルを閉じ,次に開くとカーソルは 先頭に戻ってしまいます. これも面倒です. 多くの場合,前回,編集したところにカーソルがあった方が楽ですからね.

このように Meadow を終了させると消えてしまう履歴やカーソル位置などを自動で保存し, Meadow 起動時に復元するものが session です.

session.el を使うと,これらの履歴などが自動的に ~/.session に保存されます. そして, Meadow を起動すると自動的にこのファイルが読み込まれます.

特に意識しなくても session.el が勝手にヒストリを復元してくれるので,非常に便利で す.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3.3 先頭文字の一致する M-x ヒストリを辿る ― tails-history (2003/09/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=tails-history"
"MeadowMemo/先頭文字の一致するM-xヒストリを辿る―tails-history"へのコメント(無し)
検索全文Elisp

これは齊藤高明氏が作成されたものです.

そのままでは Meadow 1.99 で動きません

何が問題なのか?

Meadow ではM-x M-pM-x M-nとすると履歴を辿ることができます. しかし, 履歴が入力した順番通りに出てくるため, 使いにくいものです.

何ができるのか?

例えば,

M-x gnus
M-x dired
M-x g M-p

としたとします.標準ではM-x diredとなってしまいます.しかし,これを使うと M-x gnusと補完してくれます.

インストール方法

tails-history.elをダウンロー ドし,ロードパスの通ったところへ置きます.

設定方法

.emacs に 以下を追加します.

 
(load-library "tails-history")

これで,上記のような補完が可能になります.

コメント

ヒストリ以外でこのような動作をするには,cycle-miniを利用します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3.4 ヒストリから重複を削除 (2004/02/03)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=delete%20history"
"MeadowMemo/ヒストリから重複を削除"へのコメント(無し)
検索全文Elisp

ネタ元:2 ちゃんねる

例えば M-xのコマンド入力で同じコマンドを何回か入力すると,重複したコマンド がヒストリに残ります.その後で,履歴を辿ると当然何度も同じ候補が出てきます.

これは後で辿る時には邪魔になるので,重複はない方が便利です.

そのために,以下を.emacs に追加します.すると,ヒストリの重複を消してくれます.

 
;; history から重複したのを消す
(require 'cl)
(defun minibuffer-delete-duplicate ()
  (let (list)
    (dolist (elt (symbol-value minibuffer-history-variable))
      (unless (member elt list)
        (push elt list)))
    (set minibuffer-history-variable (nreverse list))))
(add-hook 'minibuffer-setup-hook 'minibuffer-delete-duplicate)



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.3.5 以前に実行したコマンドを履歴表示・実行 (2003/11/24)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=chistory"
"MeadowMemo/以前に実行したコマンドを履歴表示・実行"へのコメント(無し)
検索全文Elisp

C-x d を入力すると,M-x dired と同じコマンドが実行されます.このコマ ンドは,履歴に保存されており,C-x ESC ESC で呼び出すことができます.

例えば,C-x d なら

(dired "c:/home/tmp/" nil)

というコマンドが履歴に残ります.

C-x ESC ESC でこのコマンドを呼び出し,そのまま実行することもできますし,適当に編集 して実行することもできます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.4 ミニバッファ関連 (2004/01/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuffer%20config"
"MeadowMemo/ミニバッファ関連"へのコメント(無し)
検索全文Elisp

ミニバッファに関連した設定です.

27.4.1 ミニバッファでの文字の削除を便利に (2004/01/17)  
27.4.2 ミニバッファがアクティブ時に背景色を変える ― perkymbf (2003/09/23)  
27.4.3 ミニバッファでの編集をバッファで行う (2003/09/23)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.4.1 ミニバッファでの文字の削除を便利に (2004/01/17)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=minibuffer%20shrink"
"MeadowMemo/ミニバッファでの文字の削除を便利に"へのコメント(無し)
検索全文Elisp

ネタ元:http://ko.meadowy.net/~shirai/diary/20030903.html#p03 (コード)

要約

ミニバッファで一文字ずつ消すのではなく, gnus-agent-batch を gnus-agent のように 一区切り分を消すことができる設定.

何が問題なのか?

ミニバッファで文字を入力する機会は多々ありますが,文字を削除するためには一文字一 文字削除する必要があります.

このミニバッファでの入力は決まった書式であることが多いものです.例えば,ファイル なら/で,コマンドなら-で区切られており,区切り単位で削除したいこともよくあります.

何ができるのか?

ミニバッファで区切り単位で文字を削除することができます.

設定方法

以下を.emacs に追加します.

白井さんの日記が最新になりますので,こちらからどうぞ.

以下は一応バックアップ.

 
(defvar minibuf-shrink-type0-chars '((w3m-input-url-history . (?/ ?+ ?:))
                                     (read-expression-history . (?\) ))
                                     (t . (?/ ?+ ?~ ?:)))
  "*minibuffer-history-variable とセパレータと見なす character の alist 。
type0 はセパレータを残すもの。")

(defvar minibuf-shrink-type1-chars '((file-name-history . (?.))
                                     (w3m-input-url-history . (?# ?? ?& ?.))
                                     (t . (?- ?_ ?. ? )))
  "*minibuffer-history-variable とセパレータと見なす character の alist 。
type1 はセパレータを消去するもの。")

(defun minibuf-shrink-get-chars (types)
  (or (cdr (assq minibuffer-history-variable types))
      (cdr (assq t types))))

(defun minibuf-shrink (&optional args)
  "point が buffer の最後なら 1 word 消去する。その他の場合は delete-char を起動する。
単語のセパレータは minibuf-shrink-type[01]-chars 。"
  (interactive "p")
  (if (/= (if (fboundp 'field-end) (field-end) (point-max)) (point))
      (delete-char args)
    (let ((type0 (minibuf-shrink-get-chars minibuf-shrink-type0-chars))
          (type1 (minibuf-shrink-get-chars minibuf-shrink-type1-chars))
          (count (if (<= args 0) 1 args))
          char)
      (while (not (zerop count))
        (when (memq (setq char (char-before)) type0)
          (delete-char -1)
          (while (eq char (char-before))
            (delete-char -1)))
        (setq count (catch 'detect
                      (while (/= (if (fboundp 'field-beginning)
                                     (field-beginning) (point-min))
                                 (point))
                        (setq char (char-before))
                        (cond
                         ((memq char type0)
                          (throw 'detect (1- count)))
                         ((memq char type1)
                          (delete-char -1)
                          (while (eq char (char-before))
                            (delete-char -1))
                          (throw 'detect (1- count)))
                         (t (delete-char -1))))
                      ;; exit
                      0))))))

(defvar minibuf-expand-filename-original nil)
(defvar minibuf-expand-filename-begin nil)

(defun minibuf-expand-filename (&optional args)
  "file-name-history だったら minibuffer の内容を expand-file-name する。
連続して起動すると元に戻す。 C-u 付きだと link を展開する。"
  (interactive "P")
  (when (eq minibuffer-history-variable 'file-name-history)
    (let* ((try-again (eq last-command this-command))
           (beg (cond
                 ;; Emacs21.3.50 + ange-ftp だと 2 回目に変になる
                 ((and try-again minibuf-expand-filename-begin)
                  minibuf-expand-filename-begin)
                 ((fboundp 'field-beginning) (field-beginning))
                 (t (point-min))))
           (end (if (fboundp 'field-end) (field-end) (point-max)))
           (file (buffer-substring-no-properties beg end))
           (remote (when (string-match "^\\(/[^:/]+:\\)/" file)
                     (match-string 1 file)))
           (home (if (string-match "^\\(/[^:/]+:\\)/" file)
                     (expand-file-name (format "%s~" (match-string 1 file)))
                   (expand-file-name "~"))))
      (unless try-again
        (setq minibuf-expand-filename-begin beg))
      (cond
       ((and args try-again minibuf-expand-filename-original)
        (setq file (file-chase-links (expand-file-name file))))
       (args
        (setq minibuf-expand-filename-original file)
        (setq file (file-chase-links (expand-file-name file))))
       ((and try-again minibuf-expand-filename-original)
        (setq file minibuf-expand-filename-original)
        (setq minibuf-expand-filename-original nil))
       (t
        (setq minibuf-expand-filename-original file)
        (if (string-match (concat "^" (regexp-quote home)) file)
            (if remote
                (setq file (concat remote "~" (substring file (match-end 0))))
              (setq file (concat "~" (substring file (match-end 0)))))
          (setq file (expand-file-name file)))))
      (delete-region beg end)
      (insert file))))

(mapcar (lambda (map)
          (define-key map "\C-d" 'minibuf-shrink)
          (define-key map "\M-\C-d" 'minibuf-expand-filename))
        (delq nil (list (and (boundp 'minibuffer-local-map)
                             minibuffer-local-map)
                        (and (boundp 'minibuffer-local-ns-map)
                             minibuffer-local-ns-map)
                        (and (boundp 'minibuffer-local-completion-map)
                             minibuffer-local-completion-map)
                        (and (boundp 'minibuffer-local-must-match-map)
                             minibuffer-local-must-match-map))))

詳しい使い方

ミニバッファでC-dで削除できます.また,ファイル名を入力時に, M-C-d(Esc C-d) とすると,「~/」を「 c:/home/」に展開してくれます.

この削除機能は「 minibuf-shrink-type0-chars 」と「 minibuf-shrink-type1-chars 」 で制御されてますので,これを設定すると入力に応じてカスタマイズすることができます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.4.2 ミニバッファがアクティブ時に背景色を変える ― perkymbf (2003/09/23)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=perkymbf"
"MeadowMemo/ミニバッファがアクティブ時に背景色を変える―perkymbf"へのコメント(無し)
検索全文Elisp

何ができるのか?

カーソルがミニバッファに移動すると背景色を変更することができます.

インストール方法

http://www.neilvandyke.org/perkymbf/からダウンロードして,ロードパスの通っ たところへ置きます.

設定方法

以下を.emacs に追加します.

色などは適当に変更してください.

 
(require 'perkymbf)

;; デフォルトではカーソルが縦棒になってしまうので, box にする
(defun perkymbf-minibuffer-exit-hook-func (&optional minibuffer-frame)
  (modify-frame-parameters
   (or minibuffer-frame (perkymbf-minibuffer-frame))
   (list (cons 'background-color perkymbf-normal-background-color)
         (cons 'foreground-color perkymbf-normal-foreground-color)
         (cons 'cursor-color     perkymbf-normal-cursor-color)
         (cons 'cursor-type      'box))))

;; 通常時の背景と文字色
(setq perkymbf-normal-foreground-color "azure3")
(setq perkymbf-normal-background-color "black")
;; ミニバッファがアクティブの時の背景と文字色
(setq perkymbf-active-foreground-color "azure3")
(setq perkymbf-active-background-color "gray20")

詳しい使い方

ミニバッファにカーソルが移動すると,勝手に背景色が変化します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

27.4.3 ミニバッファでの編集をバッファで行う (2003/09/23)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=miniedit"
"MeadowMemo/ミニバッファでの編集をバッファで行う"へのコメント(無し)
検索全文Elisp

何が問題なのか?

ミニバッファでの編集って不便ですよね.一行しかないので,改行を入れようとすると面 倒ですし,,,長い文字を入れようとすると見通しが悪いですし.

ま,そんな機会はそうそうないですけども.

何ができるのか?

ミニバッファではなく.通常のバッファでミニバッファの文字を編集できます.

インストール方法

http://24.197.159.102/~deego/emacspub/lisp-mine/miniedit/から最新の miniedit.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します.

 
(require 'miniedit)
(miniedit-install)

詳しい使い方

ミニバッファにカーソルが移動したら,ESC C-e とします.これで,バッファで編 集できるようになります.

編集後には,ESC C-c とするとバッファで編集した文字がミニバッファに入力され ます.


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]