考慮下面的例子:我想從迷你緩衝區使用ido讀取文件,但合併在我經常使用的所有目錄中。我不能只執行乾淨的方式來執行Emacs迷你緩衝區中的命令
(ido-find-file)
(ido-merge-work-directories)
因爲第二個sexp將只在用戶完成選擇文件後執行。那麼問題是:在minibuffer的命令循環中執行命令的最好/最乾淨的方式是什麼?
我知道只有這樣,才能做,這是我想要的命令綁定到一個鍵序列,並依次加入到讀命令的事件所以關鍵的運行,一旦我們進入迷你緩衝區命令循環:
(setq unread-command-events (append (listify-key-sequence (kbd "M-s")) unread-command-events)) ; std key-binding for ido-merge-work-directories
(ido-find-file)
但這是非常hacky,我想知道是否有更好的解決方案。
謝謝!
編輯:只是爲了澄清,這個問題是不是關於ido。讓我解釋。當你調用一個函數,如發現文件,或切換到緩衝,或任何需要小緩衝區的互動中,「遞歸編輯」創建 - 也就是說,一個命令循環的內部命令循環。
所以,代碼:
(message "A")
(recursive-edit)
(message "B")
印刷品A,然後暫停功能的執行並重新進入命令循環。你可以四處移動,打開文件等,直到你離開遞歸編輯,然後打印「B」。
所以,讓我改一下我的問題:如果你創建一個遞歸編輯,你怎麼又在創建新的命令循環執行一個命令(在同一個函數)?如果我必須鍵入額外的鍵,它不會計算在內。對於ido示例,要合併目錄,ido必須正在運行:在調用ido之前執行合併目錄不在ido的命令循環中。如果你之後執行它,那麼ido就會銷燬它的命令循環。
你總是* *要合併的其他目錄? – 2012-07-08 08:06:36
這只是一個例子,但對於我正在編寫的應用程序(項目管理庫),答案是肯定的。我主要對一般問題的答案感興趣:如果我進入minibuffer命令循環,我該如何幹淨地執行該循環中的命令? – 2012-07-08 20:04:40