我想创建一个函数,为我提供可供切换到的可用帧的编号或字母选择(1, 2, 3
或 a, b, c
),而不是手动输入名称。 Aspell
将是我能想到的最接近的例子。
有人可以分享一个如何做到这一点的例子吗?以下函数的第 6 到 14 行即时创建所有可用帧名称的列表。与帧切换相关的附加功能可以找到here
(defun switch-frame (frame-to)
(interactive (list (read-string (format "From: (%s) => To: %s. Select: "
;; From:
(frame-parameter nil 'name)
;; To:
(mapcar
(lambda (frame) "print frame"
(reduce 'concat
(mapcar (lambda (s) (format "%s" s))
(list "|" (frame-parameter frame 'name) "|" )
)
)
)
(frame-list) )
)))) ;; end of interactive statement
(setq frame-from (frame-parameter nil 'name))
(let ((frames (frame-list)))
(catch 'break
(while frames
(let ((frame (car frames)))
(if (equal (frame-parameter frame 'name) frame-to)
(throw 'break (select-frame-set-input-focus frame))
(setq frames (cdr frames)))))) )
(message "Switched -- From: \"%s\" To: \"%s\"." frame-from frame-to) )
编辑 (2014 年 11 月 13 日):这是使用
ido-completing-read
的修改后的函数:(defun ido-switch-frame ()
(interactive)
(when (not (minibufferp))
(let* (
(frames (frame-list))
(frame-to (ido-completing-read "Select Frame: "
(mapcar (lambda (frame) (frame-parameter frame 'name)) frames))))
(catch 'break
(while frames
(let ((frame (car frames)))
(if (equal (frame-parameter frame 'name) frame-to)
(throw 'break (select-frame-set-input-focus frame))
(setq frames (cdr frames)))))))))
最佳答案
我明白你想做什么。以下是我解决此问题的方法:
第1部分
您每天使用的文件应该加书签。
原因是当你阅读任何类型的菜单时你会失去注意力,
甚至和你描述的一样短。用书签一段时间后,
它变得像触摸打字:您选择缓冲区而不考虑它。
你可以看看这个question
看看我的系统。
我有大约 20 个重要文件和缓冲区已添加书签且可访问
在两次击键中,例如μ k 为 keys.el
和 μ h 为 hooks.el
.
一个不错的奖励是bookmark-bmenu-list
显示所有这些东西,所以我可以
bookmark+
允许功能书签,所以我有 org-agenda
在 μ 上和
magit
在 μ m 上。当然还有
dired
书签:来源在 μ s 和org 文件位于 μ g 上。
第2部分
对于无法添加书签的文件,我正在使用:
(ido-mode)
(setq ido-enable-flex-matching t)
(global-set-key "η" 'ido-switch-buffer)
这也很快:您只需按一下键即可调用 ido-switch-buffer
以及大约 2-3 个字母来找到您需要的缓冲区,以及 RET
选择。我最近还添加了这个技巧:
(add-hook 'ido-setup-hook
(lambda()
(define-key ido-buffer-completion-map "η" 'ido-next-match)))
有了这个,您可以使用相同的键调用ido-switch-buffer
并循环选择。第 3 部分
带有字母选项的实际功能已经在我的待办事项列表上一段时间了
现在。当我开始实现它时,我会在这里发帖,
或者也许只是从不同的答案复制解决方案:)
关于emacs - 按数字或字母在帧之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17900889/