模式:对文件:行的文本引用
我在Emacs
使用org-mode
来记录我的开发活动。 我必须手工完成的任务之一是描述代码区域。 Emacs
有一个非常好的书签列表:用CTRL-x rm创建一个书签,用CTRL-x rl列出它们。 这是非常有用的,但不是我所需要的。
组织模式具有链接的概念,命令org-store-link
将记录任何文件中当前位置的链接,该链接可以粘贴到组织文件中。 这个问题有两个方面:
file/search
存储,这不是我想要的。 我需要以文本形式提供书签,以便我可以将其粘贴到组织模式中,如果需要,可以使用简单的格式进行编辑:
absolute-file-path:line
这必须从当前点位置获得。 工作流程将如下简单:
position-to-kill-ring
(我将它绑定到键盘快捷键) org-mode
缓冲区。 不幸的是,我的lisp
不存在,所以我不知道如何做到这一点。 有没有简单的解决我的问题?
(defun position-to-kill-ring ()
"Copy to the kill ring a string in the format "file-name:line-number"
for the current buffer's file name, and the line number at point."
(interactive)
(kill-new
(format "%s:%d" (buffer-file-name) (save-restriction
(widen) (line-number-at-pos)))))
你想使用org-create-file-search-functions
和org-execute-file-search-functions
钩子。
例如,如果您需要搜索描述的文本模式文件,请使用以下命令:
(add-hook 'org-create-file-search-functions
'(lambda ()
(when (eq major-mode 'text-mode)
(number-to-string (line-number-at-pos)))))
(add-hook 'org-execute-file-search-functions
'(lambda (search-string)
(when (eq major-mode 'text-mode)
(goto-line (string-to-number search-string)))))
然后, Mx org-store-link RET
将做正确的事(存储行号作为搜索字符串),而Cc Co(即Mx org-open-at-point RET
)将打开文件并转到此行号。
您当然可以检查其他模式和/或条件。
一个elisp初学者我自己虽然它是一个很好的练习,但瞧:
编辑:使用格式方法重写它,但我仍然认为不把它存储到杀死环是不太侵入我的工作流(不知道你)。 此外,我还添加了添加列位置的功能。
(defvar current-file-reference "" "Global variable to store the current file reference")
(defun store-file-line-and-col ()
"Stores the current file, line and column point is at in a string in format "file-name:line-number-column-number". Insert the string using "insert-file-reference"."
(interactive)
(setq current-file-reference (format "%s:%d:%d" (buffer-file-name) (line-number-at-pos) (current-column))))
(defun store-file-and-line ()
"Stores the current file and line oint is at in a string in format "file-name:line-number". Insert the string using "insert-file-reference"."
(interactive)
(setq current-file-reference (format "%s:%d" (buffer-file-name) (line-number-at-pos))))
(defun insert-file-reference ()
"Inserts the value stored for current-file-reference at point."
(interactive)
(if (string= "" current-file-reference)
(message "No current file/line/column set!")
(insert current-file-reference)))
没有广泛测试但为我工作。 只需点击store-file-and-line或store-file-line-and-col即可存储当前位置,并插入文件引用以在存储点插入存储的值。
链接地址: http://www.djcxy.com/p/30631.html