パーティーに遅刻しました(そして、私の最初の投稿です)が、これは他の人にも役立つと思います。emacsを再度ヤンクすると受け入れられた答えは完全に機能しますが、システムクリップボードにコピーされる実際のテキストは、まだ完全な組織モード構文です。org-mode と emacsの両方からリンクをコピーできるものが欲しかった。使用例:最近、多くのWeb開発を行ってきましたが、複数のブラウザーをよく使用します。そのうちの1つだけがC-c c-o
ショートカットのデフォルトになり、デフォルトではないリンクを開きたい場合があります。また、同僚へのリンクをSlackなどに貼り付けます。
長い話を簡単に言えば、受け入れられた答えを混ぜ合わせることでこの解決策を思いつきました:
(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))))))
これにより、組織モードリンクの一部のみのリンクがクリップボードにコピーされます。
実際、以前の回答のソリューションとこの新しい関数の両方をmy内に統合し.emacs
、それぞれに独自のキーバインディングがあります。完全なコードはこちら:
(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)
C-c e
とC-c c
キーバインドを選択しました。これらはe
xportとc
opyのニーモニックであり、org-modeでは使用されないためです。また、リンクC-c C-o
をo
ペニングするための既存のキーバインドにも何らかの形で適合します。
if
GUIのEmacsを使用しているとき、それは常にリンク全体を(コピーされたので、[[a]][b]]
代わりにURLの一部(の)a
)