Chèn liên kết Org-id tại điểm thông qua hoàn thành đường dẫn phác thảo


11

Hiện tại để chèn các liên kết org-id nội bộ, tôi điều hướng đến một tiêu đề hoặc kéo nó lên trong chế độ xem chương trình nghị sự (RET tìm kiếm kiểm tra tiêu đề của Ca), lưu trữ liên kết với Cl (org-store-link), quay trở lại nơi Tôi muốn chèn liên kết, sau đó chèn liên kết với Cc Cl (org-insert-link).

Thay vào đó, tôi muốn ánh xạ một khóa cho phép tôi chèn một liên kết tại điểm hiện tại bằng cách sử dụng hoàn thành tab tương tự như org-refile (Cc Cw). Kết quả dự định sẽ là một liên kết nội bộ org-id trong biểu mẫu:

[[id:d7534b2f-c221-4dea-8566-d5ce3e4e1b78][Example Link]]

Nhìn qua org-id.el, có vẻ như org-id-get-with-phác thảo-hoàn thành đường dẫn được thiết kế cho mục đích này. Tôi đã thử:

(global-set-key "\C-ci" (lambda () (interactive) (org-id-get-with-outline-path-completion)))

nhưng nó không hoạt động như dự định.

Tôi có các mục sau trong tệp init.el của mình:

;; Use global IDs
(require 'org-id)
(setq org-id-link-to-org-use-id t)

;; Update ID file .org-id-locations on startup
(org-id-update-id-locations)

;; Refile options
(setq org-refile-targets (quote ((nil :maxlevel . 9) (org-agenda-files :maxlevel . 9))))
(setq org-refile-use-outline-path 'file)
(setq org-outline-path-complete-in-steps t)
(setq org-refile-allow-creating-parent-nodes t)

Bạn đang thiếu một "-" trong org-id-get-with outline-path-completion. Có phải đó là vấn đề?
erikstokes

Thật không may là không - đó chỉ là một lỗi đánh máy. Tôi đã cập nhật câu hỏi.
sk8ingdom

Quá tệ. Làm thế nào là nó thất bại? Nó hoạt động khi tôi thử nó.
erikstokes

Các chức năng chắc chắn được gọi. Nó nhắc tôi về mục nhập, cho phép tôi điều hướng thông qua hoàn thành tab (rất tuyệt và hoạt động như dự định), nhưng khi tôi nhấn enter, thay vì dán liên kết, nó chỉ di chuyển con trỏ đến tiêu đề hiện tại, tương tự như Cc Cu (phác thảo-tiêu đề).
sk8ingdom

Tôi nghĩ rằng điều này có thể đã được gây ra bởi một phiên bản org lỗi thời, nhưng đã thử phiên bản gần đây nhất trong Emacs 24.5 vì vậy nó phải là một cái gì đó trong cấu hình của tôi. Bất cứ ai cũng có thể xác nhận rằng mã của tôi ở trên thực sự chèn một liên kết cho họ?
sk8ingdom

Câu trả lời:


6

Tôi chọc vào nguồn chế độ org và tìm thấy một tính năng tài liệu tối thiểu . Nếu bạn xác định một chức năng org-TYPE-complete-link, nó sẽ được sử dụng để cung cấp hoàn thành cho các liên kết loại TYPE. Vì vậy, chúng ta chỉ cần xác định một hàm org-id-complete-linkthực hiện hoàn thành và trả về liên kết (bao gồm tiền tố "id:").

(defun org-id-complete-link (&optional arg)
  "Create an id: link using completion"
  (concat "id:"
          (org-id-get-with-outline-path-completion)))

Chèn liên kết theo cách thông thường (với C-c C-l), chọn "id:" làm loại và chức năng hoàn thành sẽ kích hoạt.

EDIT: Kể từ org-modephiên bản 9.0, chỉ cần xác định chức năng như trên ở trên không còn hoạt động ( ref ). Thay vào đó, bạn phải thêm chức năng hoàn thành để org-link-parameterssử dụng

(org-link-set-parameters "id"
                         :complete 'org-id-complete-link)

Điều này là tuyệt vời và hoạt động như dự định! Việc sửa đổi duy nhất tôi đã thực hiện là thêm org-refile-Target làm đối số cho org-id-get-with-phác thảo-đường dẫn-hoàn thành. Bằng cách đó, tôi có thể lấy các liên kết từ BẤT K of tệp org nào của mình. Cảm ơn bạn đã giúp đỡ!
sk8ingdom 15/05/2015

@ sk8ingdom Bạn có thể cập nhật câu hỏi để đưa vào giải pháp cuối cùng của mình không? Tôi không chắc tài liệu có nghĩa là gìTARGETS may be a setting for ‘org-refile-targets’ to define eligible headlines.
kshenoy

Giải pháp cuối cùng là chỉ để xác định các chức năng trên và cũng gọi org-link-set-parametersnếu bạn đang sử dụng org-mode9. Luận điểm thêm để org-id-get-with-outline-path-completioncho phép của bạn hạn chế các tiêu đề mà bạn đã chọn từ giống như org-refile-targetslàm khi bạn gửi lại thông báo. Xem trợ giúp cho tất cả mọi thứ, nhưng một cài đặt phổ biến là ((org-agenda-files :maxlevel . 3) (nil :maxlevel . 2))giới hạn ở 3 cấp độ sâu trong các tệp chương trình nghị sự và 2 trong bộ đệm hiện tại.
erikstokes
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.