هل يمكنني استخدام قراءة IDO-إكمالها بدلا من إكمال القراءة في كل مكان؟

StackOverflow https://stackoverflow.com/questions/905338

سؤال

أنا معجب كبير ido-mode, ، كثيرا حتى أرغب في استخدامها لأشياء مثل describe-function أو find-tag وهكذا، دون الحاجة إلى كتابة شيء كما هو الحال في "هل يمكنني إكمال النمط الأكبر في الوضع في وضع العلامات في EMACS؟" لكل واحد.

كلاهما

(defalias completing-read ido-completing-read)

و

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

لا تعمل، على الأقل جزئيا بسبب ido-completing-read المكالمات completing-read في جسمها، لذلك فإن أي إعادة تعريف بسيطة سيؤدي إلى العودية اللانهائية.

من الناحية النظرية، يجب أن يكون ذلك ممكنا، منذ السطر الأول من DocString ido-completing-read هو "استبدال IDO للمدمجة completing-read. "لقد نظرت حول القليل ولا أستطيع أن أجد أي شخص آخر حاول أو نجح في ذلك.

أدرك ذلك icicles. ربما يوفر شيئا كهذا، وقد ينتهي بالذهاب مع ذلك على أي حال، لكنه أكثر قليلا من الغطس مما يهمني أن يأخذه الآن.

شكرا على اي مساعدة.

هل كانت مفيدة؟

المحلول

لا أعتقد ido-mode جاهز لهذا تماما بعد. خاصه، ido-completing-read يعمل حاليا فقط مع سلاسل، في حين completing-read يدعم العطب أيضا. هذا مهم للغاية بمجرد أن ترغب في الحصول على وصف مختلف على مستوى المستخدم للعناصر التي تريد إكمالها.

لذلك أنا لست مندهشا أنه لا يعمل خارج الصندوق، ومع ذلك. باختصار تعديل الرمز بنفسك هو أفضل رهان لك هو مجرد تقديم طلب تقرير / ميزة علة.

نصائح أخرى

تحرير: هذا هو الآن emacs الحزمة المتاحة من ميلبا. وبعد لقد تم توسيعها في وضع بسيط كامل. يحدث التنمية على جيثب.

البريد الأصلي:

هنا هو تحسين إجابة جاكوبو. الائتمان له للسحر الأصلي. لقد أضفت متغير التجاوز، والذي يمكنك استخدامه لمنع استخدام ido-completing-read في وظائف محددة. لقد أضفت أيضا فحصا يستخدم الإكمال الأصلي قراءة إذا لم تكن هناك إكمال (يحدث هذا من حين لآخر، على سبيل المثال org-remember-apply-template من وضع ORG، الذي يكسر مع نصيحة جاكوبو الأصلية).

(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 في ماجستير, ، استعمال سمك

هووس 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، الذي يتم من خلاله تنفيذ الأمر الموسع هو الذي يهم (ما يلبث MX). ولكن يمكننا الحصول على ما نريد من MX

(global-set-key
 "\M-x"
 (lambda ()
   (interactive)
   (call-interactively
    (intern
     (ido-completing-read
      "M-x "
      (all-completions "" obarray 'commandp))))))

يأتي IDO مع وظيفة يجب القيام بذلك، لذلك فقط اتصل به في ملف .emacs الخاص بك:

(IDO - في كل مكان ر)

باستخدام EMACS 24.3، لم تنجح IDO-Cybiquitous بالنسبة لي. جرب هذا الأمر ويعمل بشكل جيد حتى الآن:

(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)

مجرد فكرة: هل حاولت التحرير ido-completing-read للإتصال original-completing-read بدلا من completing-read, ، تعريف original-completing-read أن تكون الحالية completing-read ثم القيام بشيء defalias أو setf الخاص بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top