Cuối buổi tiệc (và bài viết đầu tiên của tôi ở đây), nhưng tôi nghĩ điều này cũng có thể hữu ích cho những người khác. Câu trả lời được chấp nhận hoạt động hoàn hảo khi kéo lại bên trong emacs, nhưng văn bản thực tế được sao chép vào bảng tạm hệ thống vẫn là cú pháp chế độ org đầy đủ. Tôi muốn một cái gì đó có thể sao chép một liên kết ra khỏi cả chế độ org và emacs. Các trường hợp sử dụng: Gần đây tôi đã làm rất nhiều nhà phát triển web và tôi thường sử dụng nhiều trình duyệt. Chỉ một trong số chúng có thể là mặc định cho C-c c-o
phím tắt và đôi khi tôi muốn mở một liên kết trong một liên kết không mặc định. Ngoài ra, dán liên kết đến đồng nghiệp trên Slack, et cetera.
Tóm lại, tôi đã đưa ra giải pháp này bằng cách trộn và kết hợp câu trả lời được chấp nhận :
(defun my-org-export-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(string-match org-bracket-link-regexp text)
(kill-new (substring text (match-beginning 1) (match-end 1))))))
Điều này sẽ sao chép vào clipboard chỉ là một phần của liên kết chế độ org.
Trên thực tế, tôi đã tích hợp cả giải pháp của câu trả lời trước và chức năng mới này bên trong tôi .emacs
, mỗi chức năng có khóa phím riêng. Mã đầy đủ ở đây:
(defun my-yank-org-link (text)
(if (derived-mode-p 'org-mode)
(insert text)
(string-match org-bracket-link-regexp text)
(insert (substring text (match-beginning 1) (match-end 1)))))
(defun my-org-copy-smart-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(add-text-properties 0 (length text) '(yank-handler (my-yank-org-link)) text)
(kill-new text))))
(global-set-key (kbd "C-c c") 'my-org-copy-smart-url)
(defun my-org-export-url ()
(interactive)
(let* ((link-info (assoc :link (org-context)))
(text (when link-info
(buffer-substring-no-properties (or (cadr link-info) (point-min))
(or (caddr link-info) (point-max))))))
(if (not text)
(error "Not in org link")
(string-match org-bracket-link-regexp text)
(kill-new (substring text (match-beginning 1) (match-end 1))))))
(global-set-key (kbd "C-c e") 'my-org-export-url)
Tôi đã chọn C-c e
và C-c c
keybindings vì chúng là những bản ghi nhớ tốt cho e
xport và c
opy và chúng không được sử dụng trong chế độ org. Chúng cũng bằng cách nào đó phù hợp với các liên kết phím đã có sẵn C-c C-o
cho o
các liên kết bút.
if
, vì khi sử dụng GUI Emacs, nó luôn sao chép toàn bộ liên kết ([[a]][b]]
) thay vì phần URL (a
)