Org-mode: 如何在列视图中使链接可点击?

9
我是一名辅助翻译,以下是您需要翻译的内容:

我尝试使用org文件在Emacs中组织我的事情,但我不太清楚如何在列视图中创建可点击的链接。

目前,我的org文件看起来像这样:

* Main
:PROPERTIES:
:COLUMNS: %10ITEM %20LINK
:END:
** SUB1
:PROPERTIES:
:LINK: [[foo][bar]]
:END:
** SUB2
:PROPERTIES:
:LINK: [[bar][foo]]
:END:

然而,在列视图中,我得到的不是可点击的链接,而是类似于这样的内容:
  ITEM     | LINK         |
* Main     |              |
** SUB1    |[[foo][bar]]  |
** SUB2    |[[bar][foo]]  |

有没有办法使列视图像Org模式中的其他地方一样显示可点击的链接?

我认为这不被支持。 - suvayu
真遗憾。我能自己实现吗?(我没有emacs-lisp的经验,但我认为我可以处理它。) - Tg.
4
就我所理解的,列视图是通过文本覆盖实现的。考虑到在org-mode中链接本身也是作为覆盖层来实现的,这可能有些棘手。我建议您在org-mode邮件列表上咨询,开发社区非常乐于助人。 - suvayu
3个回答

0

我是否误解了你的问题,或者你在.emacs.d中有特殊的org-mode配置?我使用emacs -Q打开了你的org-mode文件,所有链接都是可点击的。

~ » emacs --version                                                                                                                                                                                                                                                       
GNU Emacs 28.0.91

enter image description here


在 Emacs 30.0.50 上使用 emacs -Q,链接对我来说无法点击。 - orgtre
另外,从你的 GIF 看来,似乎你并没有使用 列视图 - orgtre

0

我不知道以前的情况是否有所不同,但在更近期的 Org mode 版本中(我使用的是 9.6),这是相当容易实现的。

已经有了命令 org-columns-open-link,默认情况下在列视图中绑定到 C-c C-o,可以打开链接。因此,要使所有链接可点击,只需执行以下操作:

(org-defkey org-columns-map [mouse-1] #'org-columns-open-link)

然而,每当单击非链接(例如更改点)时,这将显示用户错误消息。

为了获得更好的用户体验,可以按以下方式自定义org-columns-modify-value-for-display-function

(defun my-column-display-value-transformer (column-title value)
  "Modifies the value to display in column view."
  (when (and (string-prefix-p "[[" value)
             (string-suffix-p "]]" value))
    (string-match org-link-bracket-re value)
    (let ((target (match-string 1 value))
          (descr (match-string 2 value)))
      (setq value (or descr target))
      ;; put the suitable faces:
      (put-text-property 0 (length value) 'face 'org-link value)
      (put-text-property 0 (length value) 'mouse-face 'highlight value)
      ;; help echo:
      (put-text-property 0 (length value) 'help-echo
                         (format "LINK: %s" target) value)
      ;; put a local keymap:
      (put-text-property 0 (length value) 'keymap
                         '(keymap (mouse-1 . org-columns-open-link)) value)
      value)))

(setq org-columns-modify-value-for-display-function
      #'my-column-display-value-transformer)

通过在列视图中评估(get-char-property (point) 'org-columns-value),可以检查点上的文本属性是否按预期设置。


0
Org mode 9.6.7
搜索标签为xxx的内容,带有链接:
#+BEGIN: columnview :id local :match "xxx" :format "%ITEM(Title) %ID(Link)"
| Title | Link |                  |
|-------+------+------------------|
| Help  | 7EB  | [[id:7EB][Link]] |
#+TBLFM: $3='(format "\[[id:%s][Link]\]" $2)
#+END: columnview

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接