【问题标题】:Completion choices for bookmarks gone from Emacs minibuffer从 Emacs minibuffer 中删除的书签的完成选择
【发布时间】:2013-10-23 02:00:26
【问题描述】:

我设置了一些书签来跳转到dired 缓冲区。以前,Emacs 会在点击 C-x r b 以召回书签后,在 minibuffer 中为我提供一个小的(内联)候选列表,但在我的 .emacs 文件被黑客入侵以将其拆分为模块后,候选列表已经消失。

我假设我无意中更改了一些与idoautocomplete 相关的设置,我都使用了这两个设置,但我无法弄清楚它是什么。有人可以提出解决方案吗? [编辑:书签仍然存在,如果我输入书签的名称,我可以跳转到它们,但没有提示列表。如果我按 TAB 键,我会得到一个带有完成候选的缓冲区,但我没有在 minibuffer 中得到它们。]

以前我会得到这个:

我认为这与我从 Scott Frazer 复制的以下一组函数有关。

(require 'bookmark)

(defun my-ido-bookmark-jump ()
  "Jump to bookmark using ido"
  (interactive)
  (let ((dir (my-ido-get-bookmark-dir)))
    (when dir
      (find-alternate-file dir))))

(defun my-ido-get-bookmark-dir ()
  "Get the directory of a bookmark."
  (let* ((name (ido-completing-read "Use dir of bookmark: " (bookmark-all-names) nil t))
         (bmk (bookmark-get-bookmark name)))
    (when bmk
      (setq bookmark-alist (delete bmk bookmark-alist))
      (push bmk bookmark-alist)
      (let ((filename (bookmark-get-filename bmk)))
        (if (file-directory-p filename)
            filename
          (file-name-directory filename))))))

(defun my-ido-dired-mode-hook ()
  (define-key dired-mode-map "$" 'my-ido-bookmark-jump))

(add-hook 'dired-mode-hook 'my-ido-dired-mode-hook)


(defun my-ido-use-bookmark-dir ()
  "Get directory of bookmark"
  (interactive)
  (let* ((enable-recursive-minibuffers t)
         (dir (my-ido-get-bookmark-dir)))
    (when dir
      (ido-set-current-directory dir)
      (setq ido-exit 'refresh)
      (exit-minibuffer))))

;;define-key ido-file-dir-completion-map (kbd "$") 'my-ido-use-bookmark-dir)

(add-hook 'ido-setup-hook 'ido-my-keys)
(defun ido-my-keys ()
"Add my keybindings for ido."
(define-key ido-file-dir-completion-map (kbd "$") 'my-ido-use-bookmark-dir))

【问题讨论】:

  • 我对那个列表感到很紧张,但是当我开始输入书签名称时,我可以使用制表符或回车键完成它。出于个人兴趣,您使用的是什么主题?
  • 嗯,如果你从未见过它,那么它可能是在我添加到我的 init 文件中的一个函数中,但如果是这样,我找不到哪个函数负责。主题是 tangotango.el,我在 Emacs 24.3 的 load-theme 中使用它(以前使用 color-theme 来处理这类事情,但现在没有更多了)。
  • 你的配置版本控制了吗?
  • 不,我不认为我有任何与版本相关的条件。
  • 您显示为屏幕截图的内容似乎与您显示的代码不对应。你在*scratch*,而不是 Dired 缓冲区,所以dired-mode-hook 代码在这里可能无关紧要。因此还有my-ido-bookmark-jump 代码,您似乎也没有调用它。目前尚不清楚您实际上在做什么,但看起来您只是在调用书签跳转。尝试呈现相关代码,从您实际交互调用的键/命令追溯。

标签: emacs


【解决方案1】:

试试这个

(global-set-key (kbd "C-x r b")
    (lambda ()
      (interactive)
      (bookmark-jump
       (ido-completing-read "Jump to bookmark: " (bookmark-all-names)))))

【讨论】:

  • 谢谢,这解决了它。我以为我已经包含了那个键绑定,但显然我错过了它——只需要一双更聪明的眼睛来寻找它。现在它再次按照上面的第二个屏幕截图工作。
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 2014-01-28
  • 2011-08-01
  • 1970-01-01
相关资源
最近更新 更多