1

需要在 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)?

4

1 回答 1

0

这不是标题中问题的答案,但它确实可以满足您的需求:

(defun my-ido-find-file-in-dir ()
  (interactive)
  (let ((default-directory "C:/users/family"))
    (call-interactively 'ido-find-file)))

(global-set-key [f10] 'my-ido-find-file-in-dir)
于 2014-11-29T13:00:18.723 回答