需要在 ido-find-file 期间使用绑定到键和弦的 defun 在 ido 迷你缓冲区中插入一些文本。此行为与以交互方式键入以下序列相同,Cx Cf,然后是 Ce 以编辑迷你缓冲区,然后删除当前文本,然后键入或拉出我要插入的文本。为此,我在 ido-find-file 之后运行了这个 defun:
(global-set-key [f10] 'mytest)
(defun mytest ()
(interactive)
(ido-edit-input) ;#1
(delete-minibuffer-contents) ;#2
(insert "C:/users/family/" )) ;#3
我的期望是在一次调用 mytest 后,迷你缓冲区将包含给定的字符串(#3)。但是,似乎我需要运行 mytest 2x 才能将插入的字符串放入迷你缓冲区。在第一次调用之后,ido 迷你缓冲区处于编辑模式,但是好像只运行了 #1(原始文本仍然存在)。在第二次调用 mytest 之后,ido 迷你缓冲区似乎 #1、#2 和 #3 已被执行。
我正在使用一个独立的迷你缓冲区,它是一对一库的一部分。
在 Windows 上运行 GNU emacs 24.4。
这是我在 emacs 启动时运行的 ido 自定义配置。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;IDO Config
(setq ido-enable-flex-matching t)
;
(setq ido-everywhere t)
(ido-everywhere 1)
;
(require 'ido)
(ido-mode 1)
;
(setq ido-auto-merge-work-directories-length -1)
;
;https://github.com/gempesaw/ido-vertical-mode.el/blob/master/ido-vertical-mode.el
;; Display ido results vertically, rather than horizontally
(setq ido-decorations (quote ("\n-> " "" "\n " "\n ..." "[" "]" " [No match]" " [Matched]" " [Not readable]" " [Too big]" " [Confirm]")))
(defun ido-disable-line-trucation ()
(set (make-local-variable 'truncate-lines) nil))
(add-hook 'ido-minibuffer-setup-hook 'ido-disable-line-trucation)
;
(setq ido-ignore-buffers '("\\` " "^\*Mess" "^\*Back" ".*Completion"
"^\*Ido" "^\*trace" "^\*compilation" "^\*GTAGS" "^\*Help" "^session\.*" "^\*"))
;
;use IDO for more things
(setq recentf-max-saved-items 100)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
我通过绑定各个命令然后以交互方式运行它们来确认逻辑有些合理。似乎从 lisp 运行相同的 defs 与以交互方式运行相同的行为不同。
Ido-edit-input 在 ido-find-file 期间是 Ce
(global-set-key [f11] 'delete-minibuffer-contents)
(global-set-key [f12] (lambda () (interactive) (insert "C:/users/family")))
还尝试在 mytest defun 中插入 (sit-for 1) 可能存在一些时间问题。
如何修改 defun mytest 以通过单次调用插入字符串 (#3)?