P : ¿cómo puedo controlar dónde org
aparece el búfer de palabras clave de todo?
Al ingresar una todo
palabra clave con C-c C-t
( org-todo
), se abre un nuevo búfer con las opciones de palabras clave y luego se cierra nuevamente después de seleccionar una. Hasta aquí todo bien. Sin embargo, se necesita otra ventana para hacerlo, lo cual es menos bueno, especialmente porque realmente solo necesita mostrar una o dos líneas con las palabras clave.
Entonces, con el siguiente diseño, presionar C-c C-t
mientras está en la ventana izquierda ( some-org-buffer
) se abrirá *Org todo*
en la ventana derecha:
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
En cambio, me gustaría tener una pequeña ventana emergente como una división vertical, como se muestra a continuación:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
A pesar de
esta respuesta , escribí una función para poner en display-buffer-alist
:
(defun org-todo-position (buffer alist)
(let ((win (car (cl-delete-if-not
(lambda (window)
(with-current-buffer (window-buffer window)
(memq major-mode
'(org-mode org-agenda-mode))))
(window-list)))))
(when win
(let ((new (split-window win -5 'below)))
(set-window-buffer new buffer)
new))))
(add-to-list 'display-buffer-alist
(list " \\*Org todo\\*" #'dan-org-todo-position))
Sin embargo, eso no funciona. Suspiro. ¿Qué he hecho mal con el display-buffer-alist
? Más concretamente, ¿cómo hago para que mi
todo
búfer de palabras clave aparezca donde lo quiero?
org-switch-to-buffer-other-window
para hacer lo que quiera: puede crear una condición que haga lo que quiera.org-switch-to-buffer-other-window
un montón de otrasorg
entrañas feas . Vea la respuesta para la ignominiosa "solución".win
. ¿Hay alguna razón que no puedas usar(selected-window)
aquí?Respuestas:
Suspiro. Encontré una "solución", pero es fea y requiere sobrescribir una
org
función existente . Preferiría uno que no requiera modificar elorg
código fuente, pero estoy poniendo los resultados de mi excavación arqueológica aquí en caso de que alguien más pueda usarlo.Como he notado en el pasado con otras
org
funciones,org-mode
es bastante obstinado sobre cómo maneja las ventanas.Enterrado en lo profundo del código fuente de
org-todo
es una llamada a la funciónorg-fast-todo-selection
. Esa función, a su vez, llamaorg-switch-to-buffer-other-window
, cuya cadena de documentos se lee, en parte:UH oh.
Bien, voy a morder: echemos un vistazo
org-switch-to-buffer-other-window
. Utiliza laorg-no-popups
macro. Su cadena de documentos lee, en parte:Resulta que esa
display-buffer-alist
es una de las variableslet
-bound tonil
.( Cabeza explota )
En última instancia, podemos lograr que no se ignore
display-buffer-alist
editandoorg-fast-todo-selection
y reemplazando laorg-switch-to-buffer-other-window
línea por la antiguaswitch-to-buffer-other-window
:fuente
flet
aquí para volver a vincularorg-switch-to-buffer-other-window
? Preguntándome si puede aconsejar o envolver enorg-fast-todo-selection
lugar de sobrescribirlo.org-switch-to-buffer-other-window
a solo(switch-to-buffer-other-window args)
. También eliminé&rest
los argumentos de la función.Recientemente descubrí cómo hacer la captura en modo Org en un nuevo marco . Modificar ese código para usar su función es bastante sencillo. Así es como lo haría:
Para completar, aquí está la definición de la
my/with-advice
macro de la otra respuesta:fuente
Buscando en algún otro config , he encontrado una manera de control donde
*Org Src.*
y*Org todo*
aparecen tampones. Ahora, cuando presionoC-c C-t
oC-c '
estos buffers se muestran en una nueva ventana en la parte inferior de mi diseño de ventana actual, y al seleccionar un estado TODO o presionarC-c '
(org-edit-src-exit
), la configuración de mi ventana vuelve a su diseño original.Esta solución implica el uso de grilletes y algo de Elisp:
Paso 1
Descargar
shackle
desde MELPA. Así es como lo configuréuse-package
en mi archivo init:Las configuraciones importantes aquí son:
☞ Fuente
Tenga en cuenta especialmente el espacio entre
"
y*Org
en la línea inferior. No he probado la configuración:align
en otras ubicaciones, peroshackle
parece ser bastante flexible, por lo que vale la pena leer la documentación y experimentar con ella.Paso 2
Ahora hacemos
org-mode
escucharshackle
con un poco más de Elisp en nuestro archivo init. Para obtener*Org Src.*
buffers a seguirshackle-rules
:☞ Fuente
Lamentablemente
org-mode
, no proporciona una configuración análoga para las*Org todo*
memorias intermedias. Este truco lo compensa (y probablemente sea(setq org-src-window-setup 'other-window)
superfluo, pero alguien más conocedor tendrá que intervenir):☞ Fuente
fuente