আকর্ষণীয় সমস্যা। সম্পাদক মত দেখায় রান post-command-hook
প্রত্যেক সময় এটি একটি নতুন কম্যান্ড-লুপ, অর্থাত্ একটি প্রবেশ recursive-edit
। তবে আমরা শুরু করতে পারি minibuffer-setup-hook
, যা মিনিবাসে প্রবেশের পরে একটি ফাংশন কার্যকর করে। যদিও এটি ইনপুট সন্নিবেশ করানোর অনুমতি দেয় তবে মিনিবফার থেকে বেরিয়ে আসা খুব শীঘ্রই, কারণ ক্যাচটি এখনও সেটআপ করা হয়নি।
(defmacro with-minibuffer-input (form &rest inputs)
(declare (indent 1))
`(minibuffer-with-setup-hook
(lambda ()
(minibuffer-input-provider ',inputs))
,form))
এটি হ'ল আমাদের নিজস্ব কমান্ড লুপে 'আর্গুমেন্টগুলি' মোড়ানোর দরকার ছিল, যা আমরা যখন প্রবেশ করি তখনই এটি কার্যকর করা হয় recursive-edit
, যার বিন্দুতে এটি একটি যুক্তিটি পপ করে এবং একটি স্তরের উপরে ফেলে দেয় exit-minibuffer
।
;; -*- lexical-binding: t -*-
(defun minibuffer-input-provider (inputs)
(let ((hook (make-symbol "hook")))
(fset hook (lambda ()
(remove-hook 'post-command-hook hook)
(when inputs
(when (= 0 (minibuffer-depth))
(error "Too many inputs"))
(when (cdr inputs)
(add-hook 'post-command-hook hook))
(insert (pop inputs))
(exit-minibuffer))))
(add-hook 'post-command-hook hook)))
(with-minibuffer-input (call-interactively 'find-file)
"/")
(with-minibuffer-input (call-interactively 'occur)
"\\(foo\\)\\(bar\\)" "\\1");;C-u C-x C-e
;;foobar
(with-minibuffer-input (call-interactively 'replace-string)
"foo" "bar")
;; foo
interactive
ধারাটিতে এই জাতীয় তথ্যের জন্য অনুরোধ করা উচিত । যখন এলিসপ থেকে কল করা হবে তখন আপনার ফাংশন আর্গুমেন্ট হিসাবে তথ্যটি পাস করতে সক্ষম হওয়া উচিত। অবশ্যই, এটি আপনাকে সাহায্য করবে না, যদি আপনি যে ফাংশনটিতে কল করার চেষ্টা করছেন সেটি এই নকশাটি অনুসরণ করে না case