Q : Comment puis-je contrôler où le org
tampon de mots clés todo apparaît?
La saisie d'un todo
mot - clé avec C-c C-t
( org-todo
) ouvre un nouveau tampon avec les options de mot-clé, puis le ferme à nouveau après en avoir sélectionné un. Jusqu'ici tout va bien. Cependant, il reprend une autre fenêtre pour ce faire, ce qui est moins bon, d'autant plus qu'il n'a vraiment besoin d'afficher qu'une ou deux lignes avec les mots clés.
Ainsi, avec la disposition suivante, frapper C-c C-t
dans la fenêtre de gauche ( some-org-buffer
) s'ouvrira *Org todo*
dans la fenêtre de droite:
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
Au lieu de cela, j'aimerais avoir une petite fenêtre pop up comme une division verticale, comme ci-dessous:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
A partir de
cette réponse , j'ai écrit une fonction à mettre dans 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))
Cependant, cela ne fonctionne pas. Soupir. Qu'est-ce que j'ai fait de mal avec le display-buffer-alist
? Plus précisément, comment puis-je faire todo
apparaître mon
tampon de mots clés là où je le souhaite?
org-switch-to-buffer-other-window
pour faire ce que vous voulez - vous pouvez créer une condition qui fait ce que vous voulez.org-switch-to-buffer-other-window
tout un tas d'autresorg
entrailles laides . Voir la réponse pour la "solution" ignominieuse.win
. Y a-t-il une raison que vous ne pouvez pas simplement utiliser(selected-window)
ici?Réponses:
Soupir. J'ai trouvé une "solution", mais c'est une laide qui nécessite d'écraser une
org
fonction existante . Je préférerais un qui ne nécessite pas de modifier leorg
code source, mais je mets ici les résultats de mes fouilles archéologiques au cas où quelqu'un d'autre pourrait l'utiliser.Comme je l'ai remarqué dans le passé avec d'autres
org
fonctions,org-mode
est plutôt d'avis sur la façon dont il gère les fenêtres.Enterré profondément dans le code source de
org-todo
est un appel à la fonctionorg-fast-todo-selection
. Cette fonction, à son tour, appelleorg-switch-to-buffer-other-window
, dont la docstring lit, en partie:Euh oh.
D'accord, je vais mordre: regardons
org-switch-to-buffer-other-window
. Il utilise laorg-no-popups
macro. Son docstring se lit en partie:Il s'avère que
display-buffer-alist
c'est l'une des variableslet
liées ànil
.(La tête explose. )
En fin de compte, nous pouvons l'obtenir pour ne pas ignorer le
display-buffer-alist
en éditantorg-fast-todo-selection
et en remplaçant laorg-switch-to-buffer-other-window
ligne par plain oldswitch-to-buffer-other-window
:la source
flet
ici pour vous relierorg-switch-to-buffer-other-window
? Vous vous demandez si vous pouvez conseiller ou envelopper autrementorg-fast-todo-selection
plutôt que de l'écraser.org-switch-to-buffer-other-window
à juste(switch-to-buffer-other-window args)
. J'ai également supprimé&rest
des arguments de fonction.J'ai récemment découvert comment effectuer une capture en mode Org dans un nouveau cadre . Modifier ce code pour utiliser votre fonction est assez simple. Voici comment je le ferais:
Par souci d'exhaustivité, voici la définition de la
my/with-advice
macro de l'autre réponse:la source
En regardant dans la configuration de quelqu'un d'autre , j'ai trouvé un moyen de contrôler où
*Org Src.*
et les*Org todo*
tampons apparaissent. Maintenant, lorsque je frappeC-c C-t
ou queC-c '
ces tampons s'affichent dans une nouvelle fenêtre au bas de ma disposition de fenêtre actuelle, et en sélectionnant un état TODO ou en appuyant surC-c '
(org-edit-src-exit
), ma configuration de fenêtre reprend sa disposition d'origine.Cette solution implique l'utilisation de manilles et de certains Elisp:
Étape 1
Téléchargez
shackle
depuis MELPA. Voici comment je l'ai configuréuse-package
dans mon fichier init:Les paramètres importants ici sont:
☞ Source
Notez en particulier l'espace entre
"
et*Org
sur la ligne du bas. Je n'ai pas testé la configuration:align
vers d'autres emplacements, maisshackle
semble être assez flexible, il vaut donc la peine de lire la documentation et de l'expérimenter.Étape 2
Maintenant, nous faisons
org-mode
écoutershackle
avec un peu plus d'Elisp dans notre fichier init. Pour que les*Org Src.*
tampons suiventshackle-rules
:☞ Source
Malheureusement,
org-mode
ne fournit pas de paramètre analogue pour les*Org todo*
tampons. Ce hack compense cela (et rend probablement(setq org-src-window-setup 'other-window)
superflu, mais quelqu'un de plus compétent devra sonner):☞ Source
la source