bilinen bir sabit konuma org-refile


11

Ben bir başlık almak ve belirli bir konuma yeniden dolduracak bir işlev yazmaya çalışıyorum. İçin doc org-refileDİR

(org-refile &optional GOTO DEFAULT-BUFFER RFLOC MSG)

ve RFLOColduğu

RFLOC can be a refile location obtained in a different way.

ama "farklı bir yol" ne olacağına dair hiçbir fikrim yok ve yarım gündür çalışıyorum ve herhangi bir örnek görmedim. Dosyayı biliyorum ve hedefin başlığını biliyorum ama sözdizimini istediğini oluşturmak için bilmiyorum. Aldığım en yakın şey:

(org-refile nil #("~/Org/bookmarks.org")

bu da beni başlık için yönlendirecek, ama elbette benden istemesini istemiyorum, vermek istiyorum.

Elisp'te yeniyim ve aklıma gelen her sözdiziminde tahmin ettim. Bunu nasıl ifade edeceğini bilen var mı?


Burada gerçekten yapmak istediğiniz şeyi yapmanın bir yolu olmalı, ancak bulamazsanız, işte bir çözüm var: stackoverflow.com/questions/7681326/…
Brian Z

Aradığınızı yapmak için aşağıdaki snippet'i kullanıyorum: (let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree)) Sizden bu yana muhtemelen bir cevaba org-refilekoymayacağım, ancak snippet işi oldukça iyi yapıyor. İki nokta üst üste vardır edilir gerekli. Bunu her zaman kullanıyorum org-archive-subtreeve iletiyi bastırmak için özel bir sürümünü bile oluşturdum , böylece tüm org dosyamı otomatik olarak yeniden düzenlediğimde yüzlerce yok.
hukukçu

Teşekkürler hukukçu, bu güzel bir snippet ve muhtemelen başka bir bağlamda kullanacağım. Burada belgelenmesi güzel.
jtgd

Yanıtlar:


9

RFLOC'un daha önce nasıl görünmesi gerektiğini merak ettim, ama asla araştırmadım. Kuruluş kaynak koduna bakıldığında, aşağıdakilerden oluşan bir liste olmalıdır:

  • başlığı
  • dosya
  • re (normal ifade)
  • konum (hedef başlığın konumu)

reÖğeyi denemedim , ancak burada org-refilebelirli bir DOSYA ve BAŞLIK'tan oluşturulmuş bir RFLOC ile çalışacak basit bir işlev var :

(defun my/refile (file headline)
  (let ((pos (save-excursion
               (find-file file)
               (org-find-exact-headline-in-buffer headline))))
    (org-refile nil nil (list headline file nil pos))))

Bu, hedef dosyayı açar ve hedef başlığının konumunu bulmak için bir org işlevi kullanır, ardından geçilecek RFLOC listesini oluşturur org-refile.


5

@Glucas'a çok teşekkürler, çözümünüzü son çözümümde çalıştım. Anahtar bilgi RFLOC formatını bilmekti. Dosya adı ve başlık metninin bir listesini sağlamayı denedim, ancak bu diğer öğeleri ve ekstra nil eksikti. Ben ne ile sonuçlandı:

(defun jay/refile-to (file headline)
    "Move current headline to specified location"
    (let ((pos (save-excursion
                 (find-file file)
                 (org-find-exact-headline-in-buffer headline))))
      (org-refile nil nil (list headline file nil pos))))

(defun jay/refile-to-bookmarks ()
    "Move current headline to bookmarks"
    (interactive)
    (org-mark-ring-push)
    (jay/refile-to "~/Org/bookmarks.org" "New")
    (org-mark-ring-goto))

Doktor, save-excursionbaşladığımız yere geri döneceğimizi belirtiyor, ancak bu şekilde çalışmıyor gibi görünüyor. Beni hedef hedefe bırakıyor, bu da general için uygun olabilir refile-to, ama sadece çizgiyi hareket ettirmesini ve bulunduğum yerde kalmasını istedim, böylece kaydedip geri yükledim refile-to-bookmark.

Bunun için iş akışı, RSS beslemelerini okumak için komut dosyamdan gelen HTML bağlantılarının bir listesiyle başlamamdır. Ben aslında mu4e için maildir dosyaları üretmek için komut dosyası vardı, ama kendimi zaten bir tarayıcıya bağlantıları takip ve sonra ilgi olanlar yer imi bulundu, bu yüzden şimdi sadece bir ** [[uri][title]]satır listesi oluşturmak . Yer imi (aynı satır formunu oluşturur) yerine emacs uzbl tarayıcıya bağlantıyı takip ettikten sonra ben bu komutu kullanarak etiketleri ayarladıktan sonra benim bookmarks.org bağlantı taşımak için kullanın. Sadece org speed-komutlarını tkullanarak etiketlemek ve bbu komutu kullanmak için biraz daha hızlıyım . Şimdi mutluyum ve daha fazla elisp öğrenmeyi çok seviyorum!


Burada yaptığınız şeyle doğrudan ilgili olmayan birkaç ayrıntı: RFLOC'un ilk öğesi aslında herhangi bir dize olabilir. Yalnızca "xxx için yeniden dolduruldu" iletisinde gösterilen hedef konum için mantıksal bir ad olarak kullanılır. Konum gerçekten sadece dosya ve konum işaretçisi tarafından tanımlanır. reRFLOC unsuru bildiğim kadarıyla söyleyebilirim, göz ardı edilecektir. Org.el dosyasında hedef konumlarla ilgilenen birkaç başka işlevde kullanılır.
glucas

1
Anlamadığım nedenlerden dolayı, ben senin elde edebildi refile-tosonra, sonunda bu ekleyerek orijinal konumuna geri dönüşü işlevi let: (switch-to-buffer (current-buffer)). Bu hiçbir şey yapmamalı gibi görünüyor, ama benim için çalışıyor.
glucas

Tekrar teşekkürler @glucas. Evet o işe görünüyor ve ben benim değiştirilmesi ettik -pushve -gotobununla. Başka bir arabellekte kalmanız garip görünüyor ve yine de geçerli arabellek bir öncekidir.
jtgd
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.