組織モードでリンクを手動で設定するにはどうすればよいですか?


7

したがって、私は「オートリンクモード」を作成して、Tomboy Notesやnotes.vimなどのノート作成ソフトウェアの機能をエミュレートして、ノートのタイトルとなるテキストを自動的にリンクするようにしています。しかし、私はEmacsとElispにまったく新しいです。これは私がこれまで持ってきたものです(これは私がこれまで書いた最初のelispのようなもので、優しくしてください)。

;; Set directory of files to search for *.org files 
(setq autolinks-mode-dir "~/Dropbox/Org/")

;; Get all .org files in this directory. 
(setq autolinks-mode-files (directory-files autolinks-mode-dir t "[.]org\\'"))

;; Convert it to a list of just the filenames, without paths.
(setq autolinks-mode-files-bare
      (mapcar 'file-name-nondirectory autolinks-mode-files))

;; Strip extensions
(setq autolinks-mode-topics
      (mapcar 'file-name-sans-extension autolinks-mode-files-bare))

ここまでは順調ですね。これでIIにはトピックのリストと対応するファイルのリストがあります。たとえば、トピック「James」は「/path/to/notes/James.org」にある組織ファイルに対応します。ここで、特定のバッファの組織のリンクリストをこのトピックのリストで手動で更新します。これにより、このモードをオンにすると、組織のバッファ内の「James」という単語のインスタンスが強調表示され、リンクされます。/path/to/notes/James.org。「ヘンリージェームス」のような、複数の単語からなるorgファイルでも同じ/path/to/notes/Henry James.orgです。すべてのインスタンスJames[[James]]やで置き換えようとしているのではなく<James>、それらのテキストスニペットをリンクとして動作させようとしていることに注意してください。

私はorg.elを閲覧していて、この変数を確認しました。

(defvar org-link-re-with-space nil
  "Matches a link with spaces, optional angular brackets around it.")

私のシステムには、おそらくorg-refやその他の理由により、あらゆる種類のものが含まれています。

org-link-re-with-space is a variable defined in ‘org.el’.
Its value is
"<?\\(A\\(?:cp?\\|utocite[*s]?\\)\\|Cite\\(?:a\\(?:l[pt]\\|uthor\\*?\\)\\|[pst]\\)?\\|Gls\\(?:pl\\)?\\|Notecite\\|P\\(?:arencites?\\|notecite\\)\\|Smartcites?\\|Textcites?\\|a\\(?:c\\(?:p\\|r\\(?:full\\|long\\|short\\)\\)?\\|ddbibresource\\|uto\\(?:cite[*s]?\\|ref\\)\\)\\|b\\(?:bdb\\|ib\\(?:entry\\|liography\\(?:style\\)?\\|tex\\)\\)\\|cite\\(?:a\\(?:l\\(?:[pt]\\*\\|[pt]\\)\\|uthor\\*?\\)\\|date\\*?\\|num\\|p\\*\\|t\\(?:\\*\\|ext\\|itle\\*?\\)\\|url\\|year\\*?\\|[*pst]\\)?\\|do\\(?:cview\\|i\\)\\|e\\(?:l\\(?:feed\\|isp\\)\\|qref\\)\\|f\\(?:ile\\(?:\\+\\(?:\\(?:emac\\|sy\\)s\\)\\)?\\|notecite\\|oot\\(?:cite\\(?:s\\|texts?\\)?\\|fullcite\\)\\|tp\\|ullcite\\)\\|g\\(?:ls\\(?:desc\\|link\\|\\(?:p\\|symbo\\)l\\)?\\|nus\\)\\|h\\(?:elp\\|ttps?\\)\\|i\\(?:n\\(?:dex\\|fo\\)\\|pynb\\|rc\\)\\|l\\(?:abel\\|ist-of-\\(?:\\(?:figur\\|tabl\\)es\\)\\)\\|m\\(?:ailto\\|\\(?:essag\\|h\\|u4\\)e\\)\\|n\\(?:ameref\\|ews\\|o\\(?:bibliography\\|\\(?:te\\)?cite\\)\\)\\|orgit\\(?:-\\(?:log\\|rev\\)\\)?\\|p\\(?:a\\(?:geref\\|rencite[*s]?\\)\\|notecite\\|rint\\(?:bibliography\\|index\\)\\)\\|r\\(?:ef\\|mail\\)\\|s\\(?:hell\\|martcites?\\|upercites?\\)\\|textcites?\\|w3m\\):\\([^]    

したがって、Orgにはプレーンテキストをリンクとして強調表示する機能があるようです。私はそれを行うための最良の方法を知りません。リンクワードのリストをに追加できると思いますorg-link-re-with-spaceか?しかし、どうすれば彼らの目標を設定できますか?どんな助けでも大歓迎です。


これにはおそらく組織リンクを使用できません。font-lockを使用して必要な動作を取得したいようです。ここでいくつかのインスピレーションを見つけるかもしれませんkitchingroup.cheme.cmu.edu/blog/2015/06/22/…。特に、button-lock-set-buttonを使用して、一部のパターンをクリック可能にします。
ジョン・キチン

私は確かに私は何をしようとする完全に理解していないですが、なぜただのすべての出現箇所代わるものではありませJames付きを[[file:/path/to/notes/James.org][James]]バッファに。バッファがorg-modeメジャーモードの場合、リンクとして表示されます。
ホーコンHægland

1
新しいリンクを作成するのではなく、任意のファイル名のリンクを自動的にエミュレートするのが目的です。そうすれば、James.orgを削除して名前を変更でき、リンクの更新について心配する必要がなくなります。ハードリンクは、自動リンクと比較してばかげています。
ジョナサン

回答:


1

私はこれが本質的にあなたが望むものだと信じています:

;; Set directory of files to search for *.org files
(setq autolinks-mode-dir "/Users/jkitchin/vc/journal/2018/08/07/")

;; Get all .org files in this directory.
(setq autolinks-mode-files (directory-files autolinks-mode-dir t "[.]org\\'"))

;; Convert it to a list of just the filenames, without paths.
(setq autolinks-mode-files-bare
      (mapcar 'file-name-nondirectory autolinks-mode-files))

;; Strip extensions
(setq autolinks-mode-topics
      (mapcar 'file-name-sans-extension autolinks-mode-files-bare))

(button-lock-set-button
 (regexp-opt autolinks-mode-topics)
 (lambda (event)
   (interactive "e")
   (let ((click-pos (posn-point (event-end event))))
     (save-mark-and-excursion
      (save-match-data
    ;; This is clunky, but with grouping the properties may not extend to
    ;; the whole regexp, e.g. if you set properties on a subgroup.
    (goto-char (previous-single-property-change click-pos
                            'button-lock))
    ;; now make sure we see it again to get the match-data
    (while (not (looking-at (regexp-opt autolinks-mode-topics)))
      (backward-char))
    (find-file (expand-file-name
            (concat (match-string 0) ".org")
            autolinks-mode-dir))))))
 :face (list 'org-link))

これを関数に埋め込んで、org-mode-hookで呼び出し、ボタンロックモードをオンにすることができます。これにより、トピックがリンクのように表示され、リンクをクリックするとファイルが開きます。考えられる問題の1つは、トピックが検索される順序です。"Henry James"がJamesより先に検索されることを確認したい場合、長さなどで並べ替える必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.