P : Jak mogę kontrolować, gdzie org
pojawia się bufor słów kluczowych do zrobienia?
Wprowadzenie todo
słowa kluczowego za pomocą C-c C-t
( org-todo
) otwiera nowy bufor z opcjami słowa kluczowego, a następnie zamyka go ponownie po wybraniu. Na razie w porządku. Jednak zajmuje to inne okno, co jest mniej dobre, zwłaszcza, że tak naprawdę wystarczy wyświetlić wiersz lub dwa ze słowami kluczowymi.
Tak więc, w następującym układzie, kliknięcie C-c C-t
w lewym oknie ( some-org-buffer
) otworzy się *Org todo*
w prawym oknie:
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
Zamiast tego chciałbym, aby małe okienko wyskoczyło jako podział pionowy, jak poniżej:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
Cribing z
tej odpowiedzi , napisałem funkcję, aby umieścić w 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))
To jednak nie działa. Westchnienie. Co zrobiłem źle z display-buffer-alist
? Co więcej, jak sprawić,
todo
by bufor słów kluczowych pojawiał się tam, gdzie chcę?
org-switch-to-buffer-other-window
aby robić to, co chcesz - możesz stworzyć warunek, który zrobi co chcesz.org-switch-to-buffer-other-window
całej masie innych brzydkichorg
wnętrzności. Zobacz odpowiedź na haniebne „rozwiązanie”.win
. Czy istnieje powód, dla którego nie możesz po prostu(selected-window)
tutaj skorzystać ?Odpowiedzi:
Westchnienie. Znalazłem „rozwiązanie”, ale jest to brzydkie, które wymaga zastąpienia istniejącej
org
funkcji. Wolałbym taki, który nie wymaga modyfikacjiorg
kodu źródłowego, ale umieszczam tutaj wyniki mojego wykopaliska archeologicznego na wypadek, gdyby ktokolwiek mógł go użyć.Jak zauważyłem w przeszłości z innymi
org
funkcjami, jestemorg-mode
raczej przekonany o tym, jak obsługuje okna.Głęboko w kodzie źródłowym
org-todo
znajduje się wywołanie funkcjiorg-fast-todo-selection
. Ta funkcja z kolei wywołujeorg-switch-to-buffer-other-window
, której dokumentacja brzmi, po części:O o.
Dobra, ugryzę: spójrzmy
org-switch-to-buffer-other-window
. Używaorg-no-popups
makra. Jego dokumentacja brzmi częściowo:Okazuje się, że
display-buffer-alist
jest to jedna ze zmiennychlet
związanych znil
.( Głowa eksploduje. )
Ostatecznie możemy sprawić, że nie będzie ignorować
display-buffer-alist
, edytującorg-fast-todo-selection
i zastępującorg-switch-to-buffer-other-window
wiersz zwykłym starymswitch-to-buffer-other-window
:źródło
flet
tutaj, aby ponownie powiązaćorg-switch-to-buffer-other-window
? Zastanawiasz się, czy możesz doradzić lub w inny sposób zawinąć,org-fast-todo-selection
zamiast nadpisać.org-switch-to-buffer-other-window
na just(switch-to-buffer-other-window args)
. Usunąłem również&rest
z argumentów funkcji.Ostatnio wymyśliłem, jak zrobić przechwytywanie w trybie Org w nowej ramce . Zmodyfikowanie tego kodu w celu użycia funkcji jest dość proste. Oto jak bym to zrobił:
Dla kompletności, oto definicja
my/with-advice
makra z drugiej odpowiedzi:źródło
Patrząc na czyjąś konfigurację , znalazłem sposób na kontrolowanie gdzie
*Org Src.*
i gdzie*Org todo*
pojawiają się bufory. Teraz, gdy uderzęC-c C-t
lubC-c '
bufory te wyświetlają się w nowym oknie u dołu mojego bieżącego układu okna, a wybranie stanu TODO lub naciśnięcieC-c '
(org-edit-src-exit
) przywraca pierwotny układ mojego okna.To rozwiązanie wymaga użycia szekli i niektórych Elisp:
Krok 1
Pobierz
shackle
z MELPA. Oto jak to skonfigurowałemuse-package
w moim pliku init:Ważne ustawienia to:
☞ Źródło
Zwróć uwagę zwłaszcza na odstęp między
"
i*Org
w dolnej linii. Nie testowałem ustawień:align
w innych lokalizacjach, aleshackle
wydaje się być dość elastyczny, więc warto przeczytać dokumentację i eksperymentować z nią.Krok 2
Teraz
org-mode
słuchamyshackle
z trochę więcej Elisp w naszym pliku init. Aby uzyskać*Org Src.*
bufory do śledzeniashackle-rules
:☞ Źródło
Niestety
org-mode
nie zapewnia analogicznego ustawienia*Org todo*
buforów. Ten hack to rekompensuje (i prawdopodobnie sprawia(setq org-src-window-setup 'other-window)
, że zbędne, ale ktoś bardziej kompetentny będzie musiał wejść):☞ Źródło
źródło