org-refile đến một vị trí cố định đã biết


11

Tôi đang cố gắng viết một hàm sẽ lấy tiêu đề và lọc lại nó đến một vị trí cụ thể. Các tài liệu cho org-refile

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

RFLOC

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

nhưng tôi không biết "một cách khác" sẽ như thế nào và tôi đã googling trong nửa ngày và không thấy bất kỳ ví dụ nào. Tôi biết tệp và tôi biết tiêu đề cho mục tiêu nhưng tôi không biết cú pháp để tạo thành tệp theo ý muốn. Gần nhất tôi đã nhận được là:

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

sau đó sẽ nhắc tôi về tiêu đề, nhưng tất nhiên tôi không muốn nó nhắc tôi, tôi muốn cung cấp nó.

Tôi mới sử dụng elisp và tôi đã đoán được mọi cú pháp tôi có thể nghĩ ra. Có ai biết làm thế nào để cụm từ này?


Phải có một cách để làm những gì bạn thực sự muốn ở đây, nhưng nếu bạn không tìm thấy nó, đây là một cách giải quyết: stackoverflow.com/questions/7681326/ Lỗi
Brian Z

Tôi sử dụng đoạn mã sau để làm những gì bạn đang tìm kiếm: (let* ( (org-archive-location "/path/to/org-file::* NAME_OF_HEADING") (org-archive-save-context-info nil)) (org-archive-subtree)) Tôi có thể sẽ không đưa câu trả lời này vào câu trả lời kể từ khi bạn hỏi org-refile, nhưng đoạn trích thực hiện công việc khá độc đáo. Hai dấu hai chấm cần thiết. Tôi sử dụng điều này mọi lúc và thậm chí đã tạo một phiên bản tùy chỉnh org-archive-subtreeđể chặn tin nhắn để tôi không có hàng trăm trong số chúng khi tôi tự động sắp xếp lại toàn bộ tệp org của mình.
luật

Cảm ơn danh sách luật, đây là một đoạn hay và tôi có thể sẽ sử dụng điều này trong bối cảnh khác. Tốt để có tài liệu ở đây.
jtgd 8/2/2015

Câu trả lời:


9

Tôi đã tự hỏi RFLOC sẽ trông như thế nào trước đây, nhưng chưa bao giờ điều tra. Nhìn vào mã nguồn org, nó phải là một danh sách bao gồm:

  • tiêu đề
  • tập tin
  • lại (biểu thức chính quy)
  • pos (vị trí của mục tiêu)

Tôi chưa thử nghiệm với rephần tử này, nhưng đây là một chức năng đơn giản sẽ gọi org-refilevới RFLOC được xây dựng từ một TẬP TIN và TÌM KIẾM cụ thể:

(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))))

Thao tác này sẽ mở tệp đích và sử dụng hàm org để tìm vị trí của tiêu đề đích, sau đó xây dựng danh sách RFLOC để chuyển đến org-refile.


5

Cảm ơn nhiều @glucas, tôi đã đưa giải pháp của bạn vào giải pháp cuối cùng của tôi. Thông tin chính là định dạng của RFLOC. Tôi đã thử nghiệm với việc cung cấp một danh sách tên tệp và văn bản tiêu đề, nhưng tôi đã thiếu các yếu tố khác và không có thêm. Đây là những gì tôi đã kết thúc với:

(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))

Tài liệu cho save-excursioncác tiểu bang rằng chúng tôi sẽ được đưa trở lại vị trí mà chúng tôi đã bắt đầu, nhưng dường như nó không hoạt động theo cách đó. Nó đưa tôi đến đích đích, có thể phù hợp với vị tướng refile-to, nhưng tôi muốn chỉ cần nó di chuyển dòng và giữ nguyên vị trí của tôi để tôi lưu và khôi phục lại bên trong refile-to-bookmark.

Quy trình làm việc này có nghĩa là tôi bắt đầu với một danh sách các liên kết HTML xuất phát từ tập lệnh của tôi để đọc các nguồn cấp RSS. Ban đầu tôi có tập lệnh tạo tập tin maildir cho mu4e, nhưng tôi thấy mình chỉ theo các liên kết đến trình duyệt và sau đó đánh dấu các mục ưa thích, vì vậy bây giờ tôi chỉ cần tạo một danh sách các ** [[uri][title]]dòng. Sau khi tôi theo liên kết từ emacs đến trình duyệt uzbl, thay vì đánh dấu trang (tạo ra cùng một dòng), tôi sử dụng lệnh này để di chuyển liên kết đến bookmark.org của mình sau khi đặt thẻ. Chỉ nhanh hơn một chút vì tôi cũng sử dụng các lệnh tốc độ org, tđể gắn thẻ và bcho lệnh này. Bây giờ tôi đang hạnh phúc và thích học hỏi nhiều hơn nữa!


Một vài chi tiết, không liên quan trực tiếp đến những gì bạn đang làm ở đây: yếu tố đầu tiên của RFLOC thực sự có thể là bất kỳ chuỗi nào. Nó chỉ được sử dụng làm tên logic cho vị trí đích, được hiển thị trong thông báo "refiled to xxx". Vị trí thực sự chỉ được xác định bởi tệp và vị trí đánh dấu. Các reyếu tố của RFLOC sẽ bị bỏ qua, như xa như tôi có thể nói. Nó được sử dụng trong một vài chức năng khác trong org.el liên quan đến các vị trí đích.
glucas 8/2/2015

1
Vì những lý do tôi không hiểu, tôi đã có thể đưa refile-tochức năng của bạn trở về vị trí ban đầu bằng cách thêm vào cuối, sau let: (switch-to-buffer (current-buffer)). Điều này có vẻ như nó không nên làm bất cứ điều gì, nhưng nó làm việc cho tôi.
glucas 8/2/2015

Cảm ơn một lần nữa @glucas. Vâng, điều đó dường như có tác dụng và tôi đã thay thế tôi -push-gotobằng điều đó. Có vẻ lạ khi bạn bị bỏ lại trong một bộ đệm khác và nó coi bộ đệm hiện tại là bộ đệm trước đó.
jtgd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.