我的大部分书签都以前缀 的字母作为前缀,几乎总是唯一确定书签。 这样我可以,例如, 跳转到我的源文件夹(书签为“s:源”)与M-X书签跳转RET的RET。我有一个快捷方式,所以它实际上是〜s RET。Emacs更快捷的书签跳转?
我想最终摆脱RET的, 即得到M-X的书签,快速跳RET小号或 做上述工作。 我还想回到默认行为:向我展示所有以给定字母开头的书签 ,以防不仅有一个变体。
到目前为止,我有:
(defun bookmark-do-quick-jump (str)
(let ((completions (all-completions str bookmark-alist)))
(bookmark-jump
(if (eq 1 (length completions))
(car completions)
(completing-read "Jump to bookmark: " bookmark-alist nil t str)))))
有仍然是两个打嗝:
首先,我要跳进小缓冲区不知何故,坚持在那里此地图(不知道如何做到这一点):
(setq bookmark-quick-jump-map
(let ((map (make-sparse-keymap)))
(mapcar (lambda (key)
(define-key map key
(lambda()
(interactive)
(bookmark-do-quick-jump key))))
(loop for c from ?a to ?z
collect (string c)))
map))
其次,当我做了呼叫
(bookmark-do-quick-jump "o")
它带有3个变体(org-capture-last-stored,org-capture-last-stored-marker ...)。 我现在在minibuffer中,但我仍然需要按RET RET 才能看到这3个变体。我想这是自动完成的。
我会很感激任何回应,直接回答我的两个子问题, 或完全不同的方法,只要我能得到我描述的行为和可用性 。
UPD:
我切换从completing-read
到ido-completing-read
解决的第二件事:
(defun bookmark-do-quick-jump (str)
(let ((completions (all-completions str bookmark-alist)))
(bookmark-jump
(if (eq 1 (length completions))
(car completions)
(ido-completing-read "Jump to bookmark: " completions nil t str)))))
顺便说一句,我忘了提,我使用bookmark+
。我不确定跳转到 是否由默认的bookmark-jump
支持。
这可能是更容易实现与调用键盘宏功能。唯一的复杂情况是键盘宏的其中一个键必须是该函数的参数。 – Malabarba
@ abo-abo您可否提供用于为书签创建唯一名称的方法,并设置问题第一行中提到的快捷方式?另外,您是否在最终解决方案中使用了auto-completion-read.el?谢谢。 – Anusha
我通过用唯一字符加前缀来制作书签名称。我只有50左右,所以小写字母和大写字母就足够了。请参阅http://oremacs.com/2015/01/06/rushing-headlong/。 –