سؤال

وأنا استخدم تمديد ايماكس cscope (وتجد أنه من المفيد جدا). لسوء الحظ، انها السلوك الافتراضي تبحث عن الدليل الحالي وتحت غير كاف بالنسبة لي، لذلك أنا استخدم بين مجموعة cscope-الأولي-الدليل إلى دليل خياري. للأسف أصبح هذا غير كاف بالنسبة لي كذلك لأن لدي عدة مشاريع مختلفة ولكل منها الخاصة بهم الدليل "الأولي".

ولقد شكلت المفاتيح الساخنة للطرق cscope ثلاثة يمكنني استخدام أكثر في ايماكس

(global-set-key [f9] 'cscope-find-this-text-string)
(global-set-key [f8] 'cscope-find-global-definition)
(global-set-key [f7] 'cscope-find-this-symbol)

وأنا أحسب أنه سيكون من السهل جدا للالتفاف بطريقة أو بأخرى تلك المكالمات مع وظيفة لتشغيل مجموعة cscope-الأولي، دليل على مسار معين (ولدت من خلال النظر في ما هو ملف اسم عازلة). ولكن لقد تم كما هو وبعد فاشلة!

(global-set-key [f9] (lambda () (interactive) (cscope-set-initial-directory "blah") 'cscope-find-this-text-string))

ولا يعمل. لقد حاولت ايضا مضيفا السنانير إلى اثنين cscope السنانير، ولكن أيا من هذه يبدو أن الحصول على استدعاء من أي وقت مضى خلال بلدي أنماط الاستخدام العادي. وأود أن لا تمانع حتى تشغيله مرة واحدة في كل مرة كنت تبديل مخازن، ولكن لم أكن أرى ربط لذلك في أي مكان سواء: /

ويمكن للشخص أن تساعد؟ :)

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

المحلول

تنويه: لقد غير مثبتة cscope ذلك لا يمكن اختبار هذه

(global-set-key (kbd "<f9>") 'my-cscope-find-this-text-string)
(defun my-cscope-find-this-text-string (dir)
  (interactive "DRoot area to start search:")
  (let ((default-directory dir))
    (call-interactively 'cscope-find-this-text-string)))

والفكرة الأساسية كونها تريد للمطالبة دليل للبدء من: هذا هو الدعوة إلى تفاعلية. ثم قمت بتعيين الدليل: بيان اسمحوا يفعل ذلك بالنسبة لك. ثم استدعاء روتين الأصلي تريد، واصفا إياه بأنه مع 'call-interactively تحصل على المطالبة.

وأنت تريد التفاف اثنين الروتينية الأخرى بالمثل.

وبمجرد أن العمل بالنسبة لك، يمكنك الحصول على مربي الحيوانات عن طريق تخصيص موجه لمنطقة الجذر أن يكون متغير تاريخها الخاص الذي تتم مشاركته عبر إجراءات الثلاث.

وفيما يتعلق الحل الأولي، الذي كان محاولة جيدة. معظمهم لا يدركون الحاجة إلى 'interactive لتحويل وظيفة إلى أمر. والسبب اسم نقلت لا عمل لك هو أن اقتبس ببساطة يحكي مترجم لعلاج الرمز كرمز وليس القيام بأي شيء معها. استدعاء الروتين، كنت تفعل عادة:

(lambda ()
    (c-scope-find-this-text-string "some-string"))

ومما يؤسف له، مع دعوة مباشرة مثل واحد فقط فوق، لديك لتقديم حجة (سلسلة للبحث عن). لذلك، يمكنك إضافة بعض رمز للمطالبة سلسلة، أو استخدام رمز الأمر الذي بني في القيام المطالبة. هذا ما يستخدم 'call-interactively ل، فإنه يدعو الأمر واستدعاء النموذج 'interactive والتي لا والمطالبة.

وكما انها عموما فكرة جيدة لربط المفاتيح إلى أسماء الأوامر، خلافا لالعارية lambdas، وذلك لسببين: أولا، إذا كنت تفعل أي وقت مضى C-h k (M-x describe-key)، وتحصل على اسم الأمر ذا معنى، وثانيا، إذا / عند تعديل وظيفة، يمكنك القيام بذلك دون الحاجة إلى الوحل مع ملزمة كذلك.

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