3

В Emacs я могу сделать Cx 5 Cf или Cx 5 f, чтобы найти файл в новом кадре. Я хочу сделать что-то подобное, но для закладок. Как я могу перейти к закладке в новом кадре?

2 ответа2

4

Существует bookmark-jump-other-window которое вы можете клонировать и модифицировать для создания функции my-bookmark-jump-other-frame:

(defun my-bookmark-jump-other-frame (bookmark)
  "Jump to BOOKMARK in another frame.  See `bookmark-jump' for more."
  (interactive
   (list (bookmark-completing-read "Jump to bookmark (in another frame)"
                                   bookmark-current-bookmark)))
  (bookmark-jump bookmark 'switch-to-buffer-other-frame))

Привяжите эту функцию к ключевому аккорду по своему вкусу и используйте ее для открытия закладок в другом кадре, например, так:

(global-set-key (kbd "C-x C-5 b") 'my-bookmark-jump-other-frame)

Обратите внимание, что my-bookmark-jump-other-frame все еще нужен bookmark.el и его функции. Убедитесь, что в вашем загрузочном файле загружены соответствующие функции, например:

(require 'bookmark)

или же

(autoload 'bookmark-completing-read "bookmark"
 "Prompting with PROMPT ...[rest of docstring (optional)]")
0

Я хотел перейти к новому кадру, из закладки в меню / списке закладок, без подсказки.

Но объяснение u-punkt было полезным при создании этой новой функции. Я клонировал существующую команду, связанную с RET , и привязал ее к неиспользуемому C-RET локально для режима.

Вы можете описать оригинальный ключ с помощью C-h k RET . Отслеживание кода для bookmark-bmenu-this-window несложно, а затем используйте стратегию u-punkt, чтобы написать следующее:

(defun my-bookmark-bmenu-other-frame (&optional use-region-p) ; Bound to `C-RET' in bookmark list
  "Select this line's bookmark in a new frame.
See `bookmark-jump' for info about the prefix arg."
  (interactive "P")
  (bmkp-bmenu-barf-if-not-in-menu-list)
  (bookmark-bmenu-ensure-position)
  (let ((bookmark-name  (bookmark-bmenu-bookmark)))
    (bmkp-jump-1 bookmark-name 'switch-to-buffer-other-frame use-region-p)))

Для привязки клавиш bookmark-bmenu-mode-map не определяется до тех пор, пока не будет загружен bookmark+ , поэтому я использую eval-after-load ,

(eval-after-load 'bookmark+ '(define-key bookmark-bmenu-mode-map 
                              (kbd "<C-return>") 
                              'my-bookmark-bmenu-other-frame))

РЕДАКТИРОВАТЬ

Если вам нужно что-то, что работает, когда bookmark+ не установлен, попробуйте следующее,

(when (locate-library "bookmark+")
  '(eval-after-load 'bookmark 'bookmark+))

(if (locate-library "bookmark+")
    ;; then
    (defun my-bookmark-bmenu-other-frame (&optional use-region-p) ; Bound to `C-RET' in bookmark list
      "Select this line's bookmark in a new frame.
See `bookmark-jump' for info about the prefix arg."
      (interactive "P")
      (bmkp-bmenu-barf-if-not-in-menu-list)
      (bookmark-bmenu-ensure-position)
      (let ((bookmark-name  (bookmark-bmenu-bookmark)))
        (bmkp-jump-1 bookmark-name 'switch-to-buffer-other-frame use-region-p)))
  ;; else
  (defun my-bookmark-bmenu-other-frame ()
    "Select this line's bookmark in other frame."
    (interactive)
    (bookmark-jump (bookmark-bmenu-bookmark) 'switch-to-buffer-other-frame))
  )

(eval-after-load 'bookmark '(define-key bookmark-bmenu-mode-map 
                              (kbd "<C-return>") 
                              'my-bookmark-bmenu-other-frame))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .