Como abrir um marcador do Emacs em um novo quadro?

3

No Emacs eu posso fazer C-x 5 C-f ou C-x 5 f para encontrar um arquivo em um novo quadro. Eu quero fazer algo semelhante, mas para marcadores. Como posso pular para um favorito em um novo frame?

    
por N.N. 18.01.2012 / 10:21

2 respostas

4

Existe bookmark-jump-other-window que você pode clonar e modificar para criar a função 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))

Vincule essa função a um acorde de teclas de seu gosto e use-a para abrir marcadores em outro quadro, por exemplo, assim:

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

Observe que my-bookmark-jump-other-frame ainda precisa de bookmark.el e suas funções. Certifique-se de que as funções apropriadas estejam carregadas no seu arquivo de inicialização, por exemplo:

(require 'bookmark)

ou

(autoload 'bookmark-completing-read "bookmark"
 "Prompting with PROMPT ...[rest of docstring (optional)]")
    
por 18.01.2012 / 10:48
0

Eu queria pular para um novo quadro, de um marcador no menu / lista de favoritos, sem um prompt .

Mas a explicação de u-punkt foi útil na construção desta nova função. Eu clonei o comando existente associado a RET e liguei-o ao não usado C-RET localmente para o modo.

Você pode descrever a chave original com C-h k RET . Rastrear o código para bookmark-bmenu-this-window não é difícil, então use a estratégia do u-punkt para escrever o seguinte:

(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)))

Para a associação de teclas, bookmark-bmenu-mode-map não está definido até que bookmark+ seja carregado, então eu uso um eval-after-load ,

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

EDITAR

Se você precisar de algo que funcione quando bookmark+ não estiver instalado, tente o seguinte,

(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))
    
por 08.07.2014 / 03:32

Tags