P: como posso controlar qual janela é org-deadline
usada para exibir o calendário?
org-deadline
abre temporariamente o calendar
buffer em uma janela ao definir um prazo e, em seguida, fecha-o novamente após a conclusão. Quando existe apenas uma janela, ela abre uma nova janela na parte inferior do quadro existente. Quando há várias janelas, ele seleciona uma - presumo que seja algo parecido get-lru-window
- entre as janelas disponíveis.
O último é problemático se ele assumir uma das outras janelas com as informações necessárias para definir o prazo (data, hora etc.). Geralmente, esse é um problema em uma configuração de janela, como:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
| | (C: mu4e view) |
| | |
| | |
| | |
+--------------------+--------------------+
Ao adicionar um prazo ao arquivo da agenda em (A), org-deadline
assumirá o controle (B) ou (C), que contém e-mails com as informações de data / hora de que preciso. Eu prefiro muito isso, se eu estiver ligandoorg-deadline
de (A), ele abriria uma janela temporária (D) para conter o calendar
buffer, conforme abaixo:
+--------------------+--------------------+
| | |
| | (B: mu4e header) |
| | |
| +--------------------+
| (A: agenda file) | |
| | |
| | |
+--------------------+ (C: mu4e view) |
| | |
| (D: calendar) | |
| | |
+--------------------+--------------------+
Então: como uma força org-deadline
(e funções análogas) uma nova janela temporária na parte inferior da janela ativa, em vez de assumir uma das outras?
PS: Estou ciente das janelas dedicadas , mas elas não me parecem a melhor abordagem, pois não é tanto o fato de eu querer dedicar buffers para as janelas quanto evitar evitar que uma função assuma um dos "curtos" uns.
display-buffer-alist
) Mas acho que há uma ruga adicional aqui, porque osorg-deadline
usoscalendar
que se esforçam muito para controlar qual janela usar. cf os comentários emcalendar-basic-setup
.Respostas:
A seguir, faça o que você deseja.
O calendário usa a função
calendar-basic-setup
para exibir o buffer do calendário;calendar-basic-setup
por sua vez, usa opop-to-buffer
que, por sua vez, usadisplay-buffer
para exibir o buffer do calendário. Agoradisplay-buffer
é altamente personalizável e nos permite fornecer funções para exibir um buffer usando determinadas variáveis que usamosdisplay-buffer-alist
aqui.Basicamente, estamos dizendo ao emacs para usar a função
my-position-calendar-buffer
para exibir um buffer correspondente ao regexp\*Calendar\*
. A funçãomy-position-calendar-buffer
procura uma janela exibindo a agenda organizacional; se não encontrar nenhuma janela, não fará nada; nesse casodisplay-buffer
, tentará outras funções para exibir o buffer. Caso seja encontrada uma janela exibindo a agenda organizacional, a função divide essa janela verticalmente e exibe o buffer do calendário.Eu não testei isso completamente (tentei iniciar o calendário com a exibição da agenda e sem a exibição da agenda), parece estar funcionando, mas pode haver alguns erros.
fonte
add-to-list
no display-buffer-alist. O usosetq
substitui outras personalizações.