我尝试制作一些 org 文件来在 emacs 中组织我的东西,但我不太明白如何在列视图中创建可点击的链接。
目前,我的组织文件如下所示:
* 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 模式版本中(我使用的是 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)
来检查该点的文本属性是否按预期设置。
组织模式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