【问题标题】:Insert text string into ido minibuffer using non-interactive defun使用非交互式 defun 将文本字符串插入 ido minibuffer
【发布时间】:2014-11-29 21:00:18
【问题描述】:

需要在 ido-find-file 期间使用绑定到键和弦的 defun 在 ido 迷你缓冲区中插入一些文本。此行为与以交互方式键入以下序列相同,C-x C-f,然后是 C-e 编辑迷你缓冲区,然后删除当前文本,然后键入或拉出我要插入的文本。为此,我在 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 期间是 C-e

(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)?

【问题讨论】:

    标签: emacs ido minibuffer


    【解决方案1】:

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

    (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)
    

    【讨论】:

      猜你喜欢
      • 2016-07-07
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      相关资源
      最近更新 更多