12

私はの大ファンなので、「Emacsでタグを検索するためのido-modeスタイルの補完を取得できますか?」のように書くことなく、ido-modeなどに使用したいと思います。それぞれについて。describe-functionfind-tag

両方

(defalias completing-read ido-completing-read)

(setf 'completing-read 'ido-completing-read)

少なくとも部分的にはその本体のido-completing-read呼び出しcompleting-readのために機能しないので、単純な再定義は無限の再帰になります。

ido-completing-read理論的には、のdocstringの最初の行は「ビルトインのイド語置換」であるため、可能であるはずcompleting-readです。私は少し周りを見回しましたが、それを試みたり成功したりした人を他に見つけることができないようです。

Iciclesはおそらくこのようなものを提供していることを理解しており、とにかくそれを使用することになるかもしれませんが、それは私が今気にかけているよりも少し思い切ったものです。

助けてくれてありがとう。

4

6 に答える 6

10

編集:これはMELPAから入手できるEmacsパッケージになりました。本格的なマイナーモードに拡張されました。開発はGitHubで行われます

元の投稿:

これがヤコボの答えの私の洗練です。元の魔法の彼の功績。ido-completing-read特定の関数での使用を防ぐために使用できるオーバーライド変数を追加しました。また、元の完了を使用するチェックを追加しました-完了がない場合は読み取ります(これは、たとえばorg-remember-apply-templateorg-modeから発生することがあり、Jacoboの元のアドバイスに違反します)。

(defvar ido-enable-replace-completing-read t
  "If t, use ido-completing-read instead of completing-read if possible.

Set it to nil using let in around-advice for functions where the
original completing-read is required.  For example, if a function
foo absolutely must use the original completing-read, define some
advice like this:

(defadvice foo (around original-completing-read-only activate)
  (let (ido-enable-replace-completing-read) ad-do-it))")

;; Replace completing-read wherever possible, unless directed otherwise
(defadvice completing-read
  (around use-ido-when-possible activate)
  (if (or (not ido-enable-replace-completing-read) ; Manual override disable ido
          (boundp 'ido-cur-list)) ; Avoid infinite loop from ido calling this
      ad-do-it
    (let ((allcomp (all-completions "" collection predicate)))
      (if allcomp
          (setq ad-return-value
                (ido-completing-read prompt
                               allcomp
                               nil require-match initial-input hist def))
        ad-do-it))))

ああ、でidoを使用するには、 amxM-xを使用します。

于 2009-06-19T18:58:29.650 に答える
7

Hocus pocus、abracadabra、presto!

(defadvice completing-read
  (around foo activate)
  (if (boundp 'ido-cur-list)
      ad-do-it
    (setq ad-return-value
      (ido-completing-read
       prompt
       (all-completions "" collection predicate)
       nil require-match initial-input hist def))))

これは、subr以外のすべてで機能します。ここから、execute-extended-commandが重要です(Mxにバインドされているもの)。しかし、Mxから欲しいものを手に入れることができます

(global-set-key
 "\M-x"
 (lambda ()
   (interactive)
   (call-interactively
    (intern
     (ido-completing-read
      "M-x "
      (all-completions "" obarray 'commandp))))))
于 2009-07-05T20:04:41.693 に答える
3

ido-modeまだ準備ができていないと思います。特に、ido-completing-read現在は文字列でのみ機能しますが、completing-readリストもサポートしています。これは、完了したい項目について別のユーザーレベルの説明が必要な場合に非常に重要です。

したがって、それが箱から出してすぐに機能しないことにはまだ驚いていません。コードを自分で変更する以外の最善の策は、おそらくバグレポート/機能リクエストを提出することです。

于 2009-05-26T15:48:52.023 に答える
1

Idoにはこれを実行する関数が付属しているので、.emacsファイルで呼び出すだけです。

(イド語-どこでもt)

于 2009-05-25T15:01:56.577 に答える
1

Emacs 24.3を使用すると、ido-ubiquitousは機能しませんでした。これを試してみましたが、これまでのところ正常に機能しています。

(defun my-completing-read (prompt collection &optional predicate
                  require-match initial-input
                  hist def inherit-input-method)
  (if (listp collection)
      (ido-completing-read prompt collection predicate require-match
               initial-input hist def inherit-input-method)
    (completing-read-default prompt collection predicate require-match
                 initial-input hist def inherit-input-method)))

(setq completing-read-function 'my-completing-read)
于 2013-03-12T13:43:18.193 に答える
0

考えてみてください。現在の状態であると定義してから、defaliasまたはsetfを実行する代わりに、ido-completing-readを呼び出すように編集してみましたか?original-completing-readcompleting-readoriginal-completing-readcompleting-read

于 2009-05-25T09:03:46.363 に答える