¿Cómo saltar directamente a un titular de organización?

16

Si estoy en un archivo de organización, quiero un comando que limite una lista de candidatos, en estilo hiedra / timón, que comprenda todos los encabezados de organización en el archivo y me permita elegir el título, mediante búsqueda difusa, a la que quiero saltar a. ¿Hay una manera de hacer eso?

ninrod
fuente

Respuestas:

13

El nodo Org Manual en Motion proporciona una descripción algo lacónica del comando incorporado org-goto(enlace predeterminado:) C-c C-j, cuyo comportamiento se puede personalizar fácilmente para lograr el efecto deseado:

  1. Inspeccione la documentación de la variable personalizable listada al final de este nodo manual: C-h v org-goto-interface RET
  2. Si está contento de renunciar al org-gotocomportamiento predeterminado de buscar incrementalmente a través del esquema del búfer, puede cambiar a elegir un título al completar:

    (setq org-goto-interface 'outline-path-completion)
  3. Los usuarios de paquetes de finalización como ido/ ivy/ helmprobablemente deseen cambiar la siguiente configuración para ver la ruta de destino completa de una vez:

    (setq org-outline-path-complete-in-steps nil)

    Ver aquí para más discusión.

Este enfoque tiene la ventaja añadida (sobre el uso de, por ejemplo, helmla funcionalidad específica de) de trabajar con todos los marcos de terminación que se conectan en el valor por defecto completing-read, incluyendo, como puedo confirmar personalmente, ivy.

APÉNDICE:

Al usar la outline-path-completioninterfaz para el org-gotocomando como se describe en esta respuesta, la variable personalizable org-goto-max-leveldetermina la profundidad máxima de los titulares para ofrecer.

EDITAR:

Encontré una pregunta antigua y relevante con respuestas útiles: /programming//q/15011703/3084001

ACLARACIÓN (como lo solicitó el comentario de Att Righ):

Establecer org-goto-interfaceuno de los dos valores reconocidos no significa sacrificar la interfaz alternativa. Llamar org-gotocon un argumento de prefijo (es decir, C-u C-c C-jo C-u M-x org-goto RET) selecciona automáticamente la interfaz alternativa para la finalización actual. De esta manera, puede establecer org-goto-interfacela interfaz que probablemente usará con más frecuencia y usar el argumento prefijo cuando desee cambiar temporalmente el comportamiento. Si incluso esto no satisface sus necesidades, siempre puede escribir su propio contenedor org-goto, según el ejemplo de Att Righ.

Albahaca
fuente
> renunciar al comportamiento predeterminado de org-goto, puede solucionar esto utilizando un enlace let alrededor de la llamada funcional(defun my-org-goto () (let ((org-goto-interface 'outline-path-completion)) (org-goto)))
Att Righ
outline-path-completionno juega muy bien con helmen mi caja (no puede completar más allá de un nivel - logrado presionando <TAB>si helm está deshabilitado: ver helm-completing-read-handlers-alist)
Att Righ
@AttRigh Claro, let-expresiones se pueden utilizar para cualquier tipo de enlace temporal; Esta pregunta es más acerca de la configuración / funcionalidad / paquetes relevantes. Una forma más general de lograr un cambio temporal de interfaz es llamar org-gotocon un argumento prefijo. Agregaré una nota a esta respuesta.
Albahaca
@AttRigh Recuerdo haber visto algo similar con ivy, pero solo cuando se vuelve a llenar y con una configuración de profundidad incorrecta org-refile-targets, ya que org-gotoadapta temporalmente las configuraciones relevantes para el relleno para satisfacer sus necesidades. Desafortunadamente, no estoy en condiciones de explorar la helmfuncionalidad en este momento, ¿tal vez otro usuario pueda intervenir?
Albahaca
1
gracias @Basil por la respuesta detallada. Desafortunadamente, la finalización de este enfoque no funciona tan bien como worfo counsel-imenu.
ninrod
8

Uso el paquete worf , pero solo ato una de sus funciones:

 (use-package worf
    :diminish worf-mode
    :bind (:map org-mode-map ("C-c h" . worf-goto)))

worf-goto le da una lista de los encabezados en el búfer en el mini búfer, que luego puede filtrar.

El paquete está hecho por el autor de ivy , por lo que si te gusta la hiedra, es posible que te guste worf.

Algunos fragmentos relevantes de worf.el:

;;  - "g" (`worf-goto'): select an outline in the current buffer, with
;;    completion.  It's very good when you want to search/navigate to
;;    a heading by word or level. See https://github.com/abo-abo/lispy
;;    for a package that uses this method to navigate Lisp code.

(defun worf-goto-action (x)
  (with-ivy-window
    (goto-char (cdr x))
    (outline-show-children 1000)
    (worf-more)))

(defun worf-goto ()
  "Jump to a heading with completion."
  (interactive)
  (let ((cands (worf--goto-candidates)))
    (cond ((eq worf-completion-method 'helm)
           (require 'helm-multi-match)
           (let (helm-update-blacklist-regexps
                 helm-candidate-number-limit)
             (helm :sources
                   `((name . "Headings")
                     (candidates . ,cands)
                     (action . worf-goto-action)
                     (pattern-transformer . worf--pattern-transformer)))))
          ((eq worf-completion-method 'ivy)
           (ivy-read "Heading: " cands
                     :action 'worf-goto-action)))))
tirocinio
fuente
1
gracias @tirocinium. counsel-imenula finalización funciona mejor que worf pero no puede buscar en los titulares de la organización de nivel 1 worfs busca en todos los niveles, así que creo que esto es lo que estoy buscando.
ninrod
@ninrod ¿Has intentado establecer org-imenu-depthalgo mayor que el valor predeterminado de 2?
Sam
5

Encuentro helm-org-rifle particularmente agradable. Además, todo lo que tome la fuente imenu podrá mostrar encabezados (por ejemplo, Helm with imenu).

usuario673592
fuente
Cabe señalar que helm-org-riflebusca el contenido de las entradas de la organización además de sus títulos. No encontré ninguna forma de alterar este comportamiento. helm-org-riflereferencias org-search-gotoque busca en todos los titulares pero realmente no admite búsquedas difusas.
Att Righ
Att Righ tiene razón, helm-org-rifleno busca solo títulos. Podría expandirse para hacer esto, pero hay pocas razones para hacerlo, ya que helm-org-in-buffer-headings, etc., existen en Helm.
Blujay
4

imenuestá integrado en Emacs y se puede combinar con helm / ivy para proporcionar la búsqueda difusa requerida. helm-org-rifleSin embargo, recomendaría si usa timón.

monotux
fuente
4

Auto-promoción flagrante, pero es posible que desee probar orgnav . Cuál es mi tipo de proyecto alfa (pero utilizado activamente por mí) para este propósito.

orgnav busca titulares en lugar de contenido, puede variar la profundidad de la búsqueda, buscar subárboles en lugar de todo el archivo (aunque esto también se puede lograr con el estrechamiento).

Aquí hay un video de algunas características: https://asciinema.org/a/1r0fp33xgwh48lfgsh7mllw4u

Probablemente también debería conocer el helm-orgpaquete, que es parte de lo helmcual fue la inspiración para este paquete (o más bien, cuyas limitaciones fueron la inspiración para este paquete), así como se helm-org-riflediscutió en otras publicaciones.

(Cortesía de respuestas aquí: https://www.reddit.com/r/emacs/comments/69mc6l/how_to_jump_directly_to_an_orgheadline/ ) También es potencialmente interesante la worf-gotofunción como parte de worf(un modo de navegación de organización que aplica un conjunto diferente de combinaciones de teclas sobre "*" antes de los titulares). Esto parece muy similar a helm-org.

Att Righ
fuente
4

La biblioteca swiper tiene una nueva característica en 0.9.0, que es la finalización de los titulares de los archivos en su org-agenda-files.

abogado-org-agenda-titulares

Solo necesita configurar su lista de archivos de agenda en org init.

(setq org-agenda-files (list "~/org/work.org"
                             "~/org/school.org" 
                             "~/org/home.org"))

En relación con la respuesta de @ tirocinium, esto proporciona lo mismo pero para muchos archivos de agenda.

Darryl Hebbes
fuente
3

Yo uso counsel-imenu; enumerará los diferentes encabezados, puede escribir algunas letras para limitar su selección y luego simplemente presionar <return>.

gnuvince
fuente
hola @gnuvince. esto no me permite saltar al nivel 1 de los archivos de la organización, ¿verdad?
ninrod
2

Recomiendo helm-org-in-buffer-headings. Está integrado en Helm y respeta los buffers reducidos, lo cual es importante si usa buffers indirectos para editar subárboles de forma independiente. También hay helm-org-parent-headingspara navegar por un árbol y helm-org-agenda-files-headingspara navegar por todos los archivos de agenda.

Blujay
fuente