【分享】跳转到法律中的某一条款

阅读法律条文时,文中经常会引用到其他条款,搜索了一圈,没找到能方便跳转的包。自己写了个不太完美的,如有更好的,麻烦各位告知下。

效果如下:

law

(defvar lld-search-radio-regexp "^[》]*第\\([一二三四五六七八九十百千万]+条\\)")
(defvar lld-search-radio-match-string-begin "^[[:blank:]]*")
(defvar lld-search-radio-match-string "")

(defun lld-reg-search-radio-advice (fn link &rest arg)
  (let* ((type (org-element-property :type link))
         (end (org-element-property :end link))
         (eol (save-excursion
                (goto-char end)
                (move-end-of-line 1)
                (point))))
    (when (equal type "radio")
      (setq lld-search-radio-match-string "")
      (save-excursion
        (save-restriction
          (narrow-to-region end eol)
          (when (re-search-forward lld-search-radio-regexp  eol t)
            (setq lld-search-radio-match-string (concat "第" (match-string 1))))))))
  (apply fn link arg))

(defun lld-radio-goto-match-advice (fn target)
  (let ((str target)
        (old (point))
        origin)
    (funcall fn target)
    (setq origin (point))
    (when (not (= origin old))
      (save-restriction
        (org-narrow-to-subtree)
        (unless (re-search-forward (concat lld-search-radio-match-string-begin
                                           lld-search-radio-match-string)
                                   nil t)
          (goto-char origin))))))

(advice-add 'org-link-open :around 'lld-reg-search-radio-advice)
(advice-add 'org-link--search-radio-target :around 'lld-radio-goto-match-advice)

使用时只需要把某个法律放到org-mode的一个headline下,然后在此 headline 下创建一个 Radio Targets 。比如:<<<民法典>>>。保存后,revert-buffer 就能跳转了。

6 个赞

好家伙,之前我在知乎上看到一个用 vim 的医生,现在看到一个用 emacs 的律师 :rofl:

1 个赞

不是律师,只是最近在看一些法律,想到在emacs中边看边笔记。 :grinning:

自己写出来能用就行了,不过要改进“光标要移上去”这点的话,可以看看lint-hint,它本身对url和help/manual里的链接都能工作

谢谢提示。一直在找个能方便看法律条文的现成的,期望有各篇、章、条的高亮,加上能跳转到条款。

是不是link-hint?没搜索到lint-hint

是link-hint,干活lint打多了……