F : Wie kann ich steuern, wo der org
Aufgabenschlüsselpuffer angezeigt wird?
Wenn Sie ein todo
Schlüsselwort mit C-c C-t
( org-todo
) eingeben, wird ein neuer Puffer mit den Schlüsselwortoptionen geöffnet und nach Auswahl eines Schlüsselworts wieder geschlossen. So weit, ist es gut. Es übernimmt jedoch ein anderes Fenster, was weniger gut ist, zumal es wirklich nur ein oder zwei Zeilen mit den Schlüsselwörtern anzeigen muss.
Bei folgendem Layout wird das Drücken C-c C-t
im linken Fenster ( some-org-buffer
) *Org todo*
im rechten Fenster geöffnet :
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
Stattdessen möchte ich ein kleines Fenster als vertikale Teilung wie folgt anzeigen lassen:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
Ausgehend von dieser Antwort schrieb ich eine Funktion, um Folgendes einzufügen
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))
Dies funktioniert jedoch nicht. Seufzer. Was habe ich falsch gemacht mit dem display-buffer-alist
? Genauer gesagt, wie kann ich meinen
todo
Keyword-Puffer dort anzeigen lassen, wo ich ihn haben möchte?
org-switch-to-buffer-other-window
zu tun, was Sie wollen. Sie können eine Bedingung erstellen, die alles tut, was Sie wollen.org-switch-to-buffer-other-window
eine ganze Reihe anderer hässlicherorg
Innereien herausgefunden. Siehe Antwort für die schmachvolle "Lösung".win
. Gibt es einen Grund, den Sie hier nicht einfach verwenden können(selected-window)
?Antworten:
Seufzer. Ich habe eine "Lösung" gefunden, aber es ist eine hässliche, bei der eine vorhandene
org
Funktion überschrieben werden muss. Ich würde einen bevorzugen, der keine Änderung desorg
Quellcodes erfordert , aber die Ergebnisse meiner archäologischen Ausgrabung hier einfüge, falls jemand anderes ihn verwenden kann.Wie ich in der Vergangenheit bei anderen
org
Funktionen bemerkt habe ,org-mode
ist eher eine Meinung darüber, wie es mit Fenstern umgeht.Tief im Quellcode von
org-todo
ist ein Aufruf der Funktion vergrabenorg-fast-todo-selection
. Diese Funktion ruft wiederum Aufrufe auforg-switch-to-buffer-other-window
, deren Dokumentzeichenfolge teilweise lautet:Oh oh.
Okay, ich werde beißen: lass uns schauen
org-switch-to-buffer-other-window
. Es verwendet dasorg-no-popups
Makro. Die Dokumentation lautet teilweise:Es stellt sich heraus, dass dies
display-buffer-alist
eine der Variablen ist, an dielet
gebunden istnil
.( Kopf explodiert. )
Letztendlich können wir es schaffen, das nicht zu ignorieren,
display-buffer-alist
indem wirorg-fast-todo-selection
dieorg-switch-to-buffer-other-window
Zeile bearbeiten und durch einfache alte ersetzenswitch-to-buffer-other-window
:quelle
flet
hier verwenden, um erneut zu bindenorg-switch-to-buffer-other-window
? Ich frage mich, ob Sie raten oder auf andere Weise einpacken können,org-fast-todo-selection
anstatt es zu überschreiben.org-switch-to-buffer-other-window
einfach neu definierte(switch-to-buffer-other-window args)
. Ich habe auch&rest
aus den Funktionsargumenten entfernt.Ich habe kürzlich herausgefunden, wie man im Org-Modus in einem neuen Frame erfasst . Das Ändern dieses Codes zur Verwendung Ihrer Funktion ist ziemlich einfach. So würde ich es machen:
Der Vollständigkeit halber hier die Definition des
my/with-advice
Makros aus der anderen Antwort:quelle
In der Konfiguration eines anderen habe ich einen Weg gefunden, um zu steuern, wo
*Org Src.*
und*Org todo*
Puffer angezeigt werden. Wenn ich jetzt drückeC-c C-t
oderC-c '
diese Puffer in einem neuen Fenster am unteren Rand meines aktuellen Fensterlayouts angezeigt werden und wenn Sie einen TODO-Status auswählen oderC-c '
(org-edit-src-exit
) drücken, wird meine Fensterkonfiguration auf das ursprüngliche Layout zurückgesetzt.Diese Lösung beinhaltet die Verwendung von Schäkel und etwas Elisp:
Schritt 1
Download
shackle
von MELPA. So richte ich esuse-package
in meiner Init-Datei ein:Die wichtigen Einstellungen hier sind:
☞ Quelle
Beachten Sie insbesondere den Abstand zwischen
"
und*Org
in der unteren Zeile. Ich habe die Einstellung:align
an anderen Orten nicht getestet ,shackle
scheint aber ziemlich flexibel zu sein. Es lohnt sich also, die Dokumentation zu lesen und damit zu experimentieren.Schritt 2
Jetzt
org-mode
hören wir uns nochshackle
etwas Elisp in unserer Init-Datei an. So erhalten Sie*Org Src.*
Puffer, die folgenshackle-rules
:☞ Quelle
Bietet leider
org-mode
keine analoge Einstellung für*Org todo*
Puffer. Dieser Hack macht das wieder wett (und macht ihn wahrscheinlich(setq org-src-window-setup 'other-window)
überflüssig, aber jemand, der sich besser auskennt, muss sich einschalten):☞ Quelle
quelle