T : bagaimana saya bisa mengontrol di mana org
buffer kata kunci todo muncul?
Memasukkan todo
kata kunci dengan C-c C-t
( org-todo
) membuka buffer baru dengan opsi kata kunci dan kemudian menutupnya lagi setelah saya memilih satu. Sejauh ini bagus. Namun, dibutuhkan jendela lain untuk melakukannya, yang kurang bagus, terutama karena itu benar-benar hanya perlu menampilkan satu atau dua baris dengan kata kunci.
Jadi, dengan tata letak berikut, menekan C-c C-t
saat berada di jendela kiri ( some-org-buffer
) akan terbuka *Org todo*
di jendela kanan:
+---------------------+---------------------+
| | |
| | |
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
| | |
| | |
+---------------------+---------------------+
Sebagai gantinya, saya ingin memiliki jendela kecil yang muncul sebagai pemisahan vertikal, seperti di bawah ini:
+---------------------+---------------------+
| | |
| | |
| some-org-buffer | some-other-buffer |
| | |
| | |
+---------------------+ |
| | |
| *Org todo* | |
| | |
+---------------------+---------------------+
Merujuk dari
jawaban ini , saya menulis sebuah fungsi untuk dimasukkan ke dalam 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))
Namun, itu gagal berfungsi. Mendesah. Apa yang salah dengan saya display-buffer-alist
? Lebih penting lagi, bagaimana cara mendapatkan todo
buffer kata kunci saya
muncul di tempat yang saya inginkan?
org-switch-to-buffer-other-window
untuk melakukan apa yang Anda inginkan - Anda dapat menciptakan kondisi yang melakukan apa pun yang Anda inginkan.org-switch-to-buffer-other-window
dan sejumlahorg
jeroan jelek lainnya . Lihat jawaban untuk "solusi" yang memalukan.win
. Apakah ada alasan mengapa Anda tidak bisa menggunakan di(selected-window)
sini saja?Jawaban:
Mendesah. Saya menemukan "solusi," tapi itu salah satu yang jelek yang membutuhkan menimpa
org
fungsi yang ada . Saya lebih suka yang tidak memerlukan modifikasiorg
kode sumber, tetapi saya menempatkan hasil penggalian arkeologis saya di sini kalau-kalau ada orang lain yang dapat menggunakannya.Seperti yang saya perhatikan di masa lalu dengan
org
fungsi - fungsi lain ,org-mode
agak berpendapat tentang bagaimana menangani windows.Terkubur jauh di dalam kode sumber
org-todo
adalah panggilan ke fungsiorg-fast-todo-selection
. Fungsi itu, pada gilirannya, memanggilorg-switch-to-buffer-other-window
, yang doktringnya berbunyi, sebagian:Uh oh.
Oke, saya akan gigit: mari kita lihat
org-switch-to-buffer-other-window
. Ini menggunakanorg-no-popups
makro. Dokumennya berbunyi, sebagian:Ternyata itu
display-buffer-alist
adalah salah satu variabel-let
terikat kenil
.( Kepala meledak. )
Pada akhirnya, kita bisa membuatnya tidak mengabaikan
display-buffer-alist
dengan mengeditorg-fast-todo-selection
dan menggantiorg-switch-to-buffer-other-window
baris dengan yang lamaswitch-to-buffer-other-window
:sumber
flet
sini untuk rebindorg-switch-to-buffer-other-window
? Ingin tahu apakah Anda dapat menyarankan atau membungkusorg-fast-todo-selection
daripada menimpanya.org-switch-to-buffer-other-window
menjadi adil(switch-to-buffer-other-window args)
. Saya juga menghapus&rest
argumen fungsi.Baru-baru ini saya menemukan cara membuat pengambilan mode-Org dalam bingkai baru . Memodifikasi kode untuk menggunakan fungsi Anda cukup mudah. Begini cara saya melakukannya:
Demi kelengkapan, inilah definisi
my/with-advice
makro dari jawaban lain:sumber
Melihat konfigurasi orang lain , saya menemukan cara untuk mengontrol di mana
*Org Src.*
dan*Org todo*
buffer muncul. Sekarang ketika saya menekanC-c C-t
atauC-c '
buffer ini ditampilkan di jendela baru di bagian bawah tata letak jendela saya saat ini, dan memilih status TODO atau menekanC-c '
(org-edit-src-exit
) mengembalikan konfigurasi jendela saya ke tata letak aslinya.Solusi ini melibatkan penggunaan belenggu dan beberapa Elisp:
Langkah 1
Unduh
shackle
dari MELPA. Inilah cara saya mengaturnyause-package
di file init saya:Pengaturan penting di sini adalah:
☞ Sumber
Perhatikan terutama ruang antara
"
dan*Org
di garis bawah. Saya belum menguji pengaturan:align
ke lokasi lain, tetapishackle
tampaknya cukup fleksibel, jadi ada baiknya membaca dokumentasi dan bereksperimen dengannya.Langkah 2
Sekarang kita buat
org-mode
mendengarkanshackle
dengan Elisp lagi di file init kita. Untuk mendapatkan*Org Src.*
buffer untuk diikutishackle-rules
:☞ Sumber
Sayangnya
org-mode
tidak menyediakan pengaturan analog untuk*Org todo*
buffer. Retasan ini menebus (dan mungkin membuat(setq org-src-window-setup 'other-window)
berlebihan, tetapi seseorang yang lebih berpengetahuan harus berpadu):☞ Sumber
sumber