キーコードにバインドされた defun を使用して、ido-find-file 中に ido ミニバッファにテキストを挿入する必要があります。この動作は、次のシーケンスをインタラクティブに入力した場合と同じです。Cx Cf に続いて Ce を入力してミニバッファーを編集し、現在のテキストを削除してから、挿入するテキストを入力またはヤンクします。そのために、この defun を ido-find-file の直後に実行しました。
(global-set-key [f10] 'mytest)
(defun mytest ()
(interactive)
(ido-edit-input) ;#1
(delete-minibuffer-contents) ;#2
(insert "C:/users/family/" )) ;#3
私の予想では、mytest を 1 回呼び出した後、ミニバッファーには指定された文字列 (#3) が含まれます。ただし、挿入された文字列をミニバッファーに取得するには、 mytest 2x を実行する必要があるようです。最初の呼び出しの後、ido ミニバッファーは編集モードになりますが、#1 だけが実行されたかのようになります (元のテキストはまだ存在します)。mytest の 2 回目の呼び出しの後、ido ミニバッファーは #1、#2、および #3 が実行されたように見えます。
1 対 1 ライブラリの一部であるスタンドアロンのミニバッファを使用しています。
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 から同じ定義を実行することは、インタラクティブに実行することとは異なる動作をしているようです。
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 を変更して、1 回の呼び出しで文字列 (#3) を挿入するにはどうすればよいですか?