Re-file pohon garis besar menjadi file mode-org baru?

13

Saya baru saja mulai dengan mode-org dan bayangkan alur kerja di mana saya menangkap tugas dan catatan baru dalam file "kotak masuk" mode-org. Untuk tugas-tugas yang berkembang menjadi proyek, saya akan membayangkan mengubah mereka menjadi file mode-org baru yang kemudian ditambahkan ke agenda saya.

The pengguna org-mode menjelaskan refiling pohon sebagian besar cara saya mencari, kecuali bahwa itu hanya tampaknya memungkinkan refiling bagian dalam file yang sama. Yang ingin saya lakukan, adalah mengambil pohon itu, dan mengubahnya menjadi file baru (dan kemudian lebih disukai menambahkan file ke daftar agenda).

Saya dapat menyalin-tempelkan ke buffer baru, dan kemudian menambahkan buffer baru ke dalam agenda, tetapi sepertinya ini adalah jenis hal yang akan dimiliki pintasan mode dewa.

Peter
sumber
Mengapa Anda ingin membuat file baru untuk setiap proyek? Ada proyek-proyek kecil dan besar, sehingga Anda dapat memiliki file projects.org sebagai semacam file inkubasi yang berisi semua proyek pada awalnya dan jika sebuah proyek tumbuh begitu besar sehingga layak untuk file sendiri maka Anda dapat membuatnya secara manual.
Tom
Terima kasih, Tom. Itu pemikiran saya. Hal-hal besar pindah ke file mereka sendiri ketika mereka menjadi terlalu besar. Saya menemukan bendera yang memungkinkan saya refile ke file lain di daftar agenda saya, tetapi hanya di bawah tajuk yang ada. Saya akan melakukan sedikit lebih banyak penggalian untuk melihat apakah saya bisa menambahkan pohon ke file org kosong baru ...
Peter
1
@Peter Anda dapat refile pohon apa pun ke file lain. tetapi pertama-tama Anda perlu menambahkan file tujuan keorg-agenda-files
kindahero
@kindahero: Apakah itu opsi default? Saya memiliki file "test1.org" dengan pohon yang ingin saya pindahkan ke file kosong "test2.org" yang telah disimpan dan ditambahkan ke agenda dengan Cc [. Satu-satunya target refile yang diberikannya kepada saya sebagai opsi penyelesaian berasal dari "test1.org."
Peter

Jawaban:

1

Berikut adalah fungsi elisp yang cepat dan kotor yang dapat dimodifikasi sesuai keinginan.

(defun subtree-to-new-file ()
  (interaktif)
  "Sloppyily membantu dalam memindahkan subtree org ke file baru"
  (org-copy-subtree nil t)
;;; Pernyataan setq panjang ini mendapatkan judul tajuk pertama, untuk digunakan sebagai nama file default untuk file .org baru.
(setq judul pertama
  (dengan-temp-buffer
    (merenggut)
    (awal penyangga)
    (search-forward "" nil nil 1)
    (setq judul-mulai (titik))
    (end-of-visual-line)
    (setq judul-akhir (titik))
    (setq judul pertama (judul judul penyangga-mulai judul-akhir))
  ))
(setq def-filename (judul pertama concat ".org"))
(let ((masukkan-direktori-default t))
  (cari-file-lain-jendela)  
    (baca-file-nama "Pindahkan subtree ke file:" def-filename)
  ))
(org-tempel-subtree)
;;; perintah terakhir ini menambahkan file .org baru ke dalam agenda
(org-agenda-file-ke-depan)
)

Anda dapat mencoba kode ini dengan cepat dengan menempelkan ke *scratch*buffer dan menekan Ctrl+ j. Lalu buka subtree dalam file mode-org dan tekan Alt+ xke M-x subtree-to-new-file.

Jika Anda ingin itu ada di tempat setiap kali Anda menggunakan emacs dan sama sekali tidak mirip dengan elisp, hal yang paling mudah adalah menempelkan kode ini di suatu tempat ke dalam .emacsfile konfigurasi Anda dan menyimpannya. Anda juga dapat menambahkan baris sebelum atau setelah fungsi untuk memberikannya pengikat tombol. Cara termudah untuk melakukan itu (tapi mungkin bukan yang terbaik) akan menjadi sesuatu seperti: (global-set-key "\C-xw" 'subtree-to-new-file).

Brian Z
sumber
Yah, saya benar-benar pindah ke arah lain dari sini, tetapi ini berhasil. Saya menanyakan hal ini sejak lama, dan senang melihat jawabannya. Terima kasih telah memposting ini - ini berfungsi seperti pesona. Mungkin saya akan mencoba mengingat apa yang ingin saya capai di sini, dan mulai menggunakan ini.
Peter
5

Juga menambahkan buffer mode-org lain ke daftar refile, Anda perlu menambahkan baris seperti berikut ke file .emacs Anda. Saya mengambil ini dari konfigurasi Brent Hansen (Lihat di sini )

; Targets include this file and any file contributing to the agenda - up to 9 levels deep
(setq org-refile-targets (quote ((nil :maxlevel . 9)
                                 (org-agenda-files :maxlevel . 9))))

Hanya (org-agenda-files :maxlevel .9)diperlukan sebenarnya, bagian lain menetapkan jumlah level maksimum untuk refile.

Jonathan Leech-Pepin
sumber
1
Ini memungkinkan saya menambahkan pohon ke pohon yang ada di file baru, tetapi tidak ke file kosong yang baru ditambahkan tanpa konten yang ada. Saya pikir ini mungkin sedekat yang saya dapatkan.
Peter
Anda mungkin juga dapat menambahkan (setq org-refile-allow-creating-parent-nodes (quote confirm))sebagaimana dirujuk dalam blok kode yang sama dari Bernt (lihat tautan di atas). Ini akan memungkinkan Anda untuk menambahkannya sebagai simpul induk, bukan hanya sebagai subjudul. Saya tidak yakin apakah Anda dapat menambahkan file baru saat bepergian dengan cara itu.
Jonathan Leech-Pepin
1
Bahkan dengan baris itu, file dalam agenda tidak muncul sebagai target refile. Tampaknya saya hanya dapat melakukan refile ke header yang ada.
Peter
1
Bagaimana dengan (setq org-refile-use-outline-path 'file)? Ini dapat menjadikan file sebagai target.
Brady Trainor