P : como posso controlar onde o org
buffer de palavras-chave todo aparece?
A inserção de uma todo
palavra - chave com C-c C-t
( org-todo
) abre um novo buffer com as opções de palavra-chave e o fecha novamente depois que eu seleciono um. Por enquanto, tudo bem. No entanto, ele assume outra janela, o que é menos bom, especialmente porque ele realmente precisa exibir apenas uma ou duas linhas com as palavras-chave.
Portanto, com o seguinte layout, pressionar C-c C-t
enquanto estiver na janela esquerda ( some-org-buffer
) será aberto *Org todo*
na janela direita:
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
Em vez disso, eu gostaria que uma pequena janela fosse exibida como uma divisão vertical, como abaixo:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
Partindo
dessa resposta , escrevi uma função para inserir 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))
No entanto, isso não funciona. Suspiro. O que eu fiz de errado com o display-buffer-alist
? Mais exatamente, como faço para que meu
todo
buffer de palavras-chave seja exibido onde eu quero?
org-switch-to-buffer-other-window
para fazer o que deseja - você pode criar uma condição que faça o que quiser.org-switch-to-buffer-other-window
um monte de outrasorg
entranhas feias . Veja a resposta para a "solução" ignominiosa.win
. Existe um motivo para você não poder usar apenas(selected-window)
aqui?Respostas:
Suspiro. Eu encontrei uma "solução", mas é feia e exige a substituição de uma
org
função existente . Eu preferiria um que não requer modificação doorg
código fonte, mas estou colocando aqui os resultados da minha escavação arqueológica, caso alguém possa usá-lo.Como notei no passado com outras
org
funções,org-mode
é bastante opinativo sobre como ele lida com o Windows.Enterrado profundamente no código fonte de
org-todo
está uma chamada para a funçãoorg-fast-todo-selection
. Essa função, por sua vez, chamaorg-switch-to-buffer-other-window
, cuja doutrina lê, em parte:Uh oh
Ok, eu vou morder: vamos olhar
org-switch-to-buffer-other-window
. Ele usa aorg-no-popups
macro. Sua documentação lê, em parte:Acontece que essa
display-buffer-alist
é uma das variáveislet
ligadas anil
.(A cabeça explode. )
Por fim, podemos fazer com que não ignore
display-buffer-alist
editandoorg-fast-todo-selection
e substituindo aorg-switch-to-buffer-other-window
linha por simplesswitch-to-buffer-other-window
:fonte
flet
aqui para religarorg-switch-to-buffer-other-window
? Pensando se você pode aconselhar ou encapsular emorg-fast-todo-selection
vez de substituí-lo.org-switch-to-buffer-other-window
para apenas(switch-to-buffer-other-window args)
. Também removi&rest
os argumentos da função.Recentemente, descobri como fazer a captura no modo Org em um novo quadro . Modificar esse código para usar sua função é bem direto. Aqui está como eu faria isso:
Por uma questão de completude, aqui está a definição da
my/with-advice
macro da outra resposta:fonte
Procurando na configuração de outra pessoa , encontrei uma maneira de controlar onde
*Org Src.*
e os*Org todo*
buffers aparecem. Agora, quando pressionoC-c C-t
ouC-c '
esses buffers são exibidos em uma nova janela na parte inferior do meu layout de janela atual, e selecionar um estado TODO ou pressionar hC-c '
(org-edit-src-exit
) retorna a configuração da minha janela ao seu layout original.Esta solução envolve o uso de manilha e alguns Elisp:
Passo 1
Download
shackle
do MELPA. Aqui está como eu o configureiuse-package
no meu arquivo init:As configurações importantes aqui são:
☞ Fonte
Observe especialmente o espaço entre
"
e*Org
na linha inferior. Não testei a configuração:align
para outros locais, masshackle
parece ser bastante flexível, por isso vale a pena ler a documentação e experimentar.Passo 2
Agora
org-mode
ouvimosshackle
mais Elisp em nosso arquivo init. Para obter*Org Src.*
buffers a seguirshackle-rules
:☞ Fonte
Infelizmente
org-mode
, não fornece uma configuração análoga para*Org todo*
buffers. Esse hack compensa isso (e provavelmente torna(setq org-src-window-setup 'other-window)
supérfluo, mas alguém mais experiente terá que entrar em cena):☞ Fonte
fonte