В Emacs я могу сделать Cx 5 Cf или Cx 5 f, чтобы найти файл в новом кадре. Я хочу сделать что-то подобное, но для закладок. Как я могу перейти к закладке в новом кадре?
2 ответа
Существует 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)]")
Я хотел перейти к новому кадру, из закладки в меню / списке закладок, без подсказки.
Но объяснение 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))