org-mode – ¿Utiliza org-protocol con una ventana de captura flotante?

Pregunta:

Recientemente encontré una manera de tener una ventana de captura flotante , con esta configuración puedo crear una ventana de captura flotante usando:

emacsclient -n -e '(make-capture-frame)'

Mi conocimiento de los componentes internos de elisp y org-mode está cerca de 0, no encontré una manera de tener el mismo comportamiento a través del org-protocol. Lo que me gustaría es que cuando ocurra una llamada usando el protocolo org, tenga una bonita ventana de captura flotante frente a mí.

Tenga en cuenta que no estoy adjunto para usar este código específico para crear una ventana de captura flotante, pero ese es mi punto de partida actual.

Aquí está el código que estoy usando actualmente:

;;;
;; Capture floating frame
;;
;; taken from: http://www.windley.com/archives/2010/12/capture_mode_and_emacs.shtml
;;;

(defadvice org-capture-finalize
    (after delete-capture-frame activate)
  "Advise capture-finalize to close the frame"
  (if (equal "capture" (frame-parameter nil 'name))
      (delete-frame)))

(defadvice org-capture-destroy
    (after delete-capture-frame activate)
  "Advise capture-destroy to close the frame"
  (if (equal "capture" (frame-parameter nil 'name))
      (delete-frame)))

;; make the frame contain a single window. by default org-capture
;; splits the window.
(add-hook 'org-capture-mode-hook
          'delete-other-windows)

(defadvice org-switch-to-buffer-other-window
  (after supress-window-splitting activate)
  "Delete the extra window if we're in a capture frame"
  (if (equal "capture" (frame-parameter nil 'name))
      (delete-other-windows)))

(defun make-capture-frame ()
  "Create a new frame and run org-capture."
  (interactive)
  (make-frame '((name . "capture")
                (width . 120)
                (height . 15)))
  (select-frame-by-name "capture")
  (setq word-wrap 1)
  (setq truncate-lines nil)
  (org-capture))

Respuesta:

He ideado una solución "hacky".

He reescrito el make-capture-frame para admitir un argumento opcional y llamo directamente a org-protocol-capture con este argumento si existe.

(defun make-capture-frame (&optional capture-url)
  "Create a new frame and run org-capture."
  (interactive)
  (make-frame '((name . "capture")
                (width . 120)
                (height . 15)))
  (select-frame-by-name "capture")
  (setq word-wrap 1)
  (setq truncate-lines nil)
  (if capture-url (org-protocol-capture capture-url) (org-capture)))

Por lo tanto, puedo llamar a emacs así:

emacsclient -n -e '(make-capture-frame)'

o

emacsclient -n -e '(make-capture-frame-test "x/test/test")'

x/test/test es la URL del protocolo org-protocol://capture:// sin la parte org-protocol://capture:// .

Si bien esto funciona, no es tan genérico como lo permite el protocolo de la organización. Por lo tanto, para admitir cualquier subprotocolo nuevo, tengo que agregar una función específica.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım