gpt4 book ai didi

emacs - 如何使用行 + 文件引用从 emacs 缓冲区复制/粘贴区域?

转载 作者:行者123 更新时间:2023-12-02 20:52:28 25 4
gpt4 key购买 nike

我有时会看到人们引用文件名和行号粘贴部分代码。类似的东西

 ;; ----- line:3391   file: simple.el.gz -----;;; 

(if (eq last-command 'kill-region)
(kill-append (filter-buffer-substring beg end) (< end beg))
(kill-new (filter-buffer-substring beg end)))

;; ----- line:3394 --------------------------;;;

这主要用于通过邮件发送代码注释。我可以轻松地为自己包装一个简单的函数,但我确信有人已经以一种聪明而漂亮的方式做到了这一点。

谢谢。

[编辑]

由于此功能仅偶尔需要,并且仅用于一次复制/粘贴操作,因此我最终使用了 @thisirs 提出的切换版本的替代解决方案。

(defun kill-with-linenum (beg end)
(interactive "r")
(save-excursion
(goto-char end)
(skip-chars-backward "\n \t")
(setq end (point))
(let* ((chunk (buffer-substring beg end))
(chunk (concat
(format "╭──────── #%-d ─ %s ──\n│ "
(line-number-at-pos beg)
(or (buffer-file-name) (buffer-name))
)
(replace-regexp-in-string "\n" "\n│ " chunk)
(format "\n╰──────── #%-d ─"
(line-number-at-pos end)))))
(kill-new chunk)))
(deactivate-mark))

它基于 unicode 并产生以下输出:

╭──────── #3557 ─ /usr/share/emacs/24.1.50/lisp/simple.el.gz ──
│ (if (eq this-command t)
│ (setq this-command 'yank))
│ nil)
╰──────── #3559 ─

最佳答案

我想出了这个,使用包装钩子(Hook):

(defun filter-buffer-substring-add-line (func beg end delete)
(concat
(format ";; line:%5d file: %s\n"
(line-number-at-pos beg)
(or (buffer-file-name) (buffer-name)))
(funcall func beg end delete)
(format "\n;; line:%5d" (line-number-at-pos end))))

(defun kill-add-line-toggle ()
(interactive)
(if (memq 'filter-buffer-substring-add-line
filter-buffer-substring-functions)
(progn
(setq filter-buffer-substring-functions
(delq 'filter-buffer-substring-add-line
filter-buffer-substring-functions))
(message "Add line is off!"))
(push 'filter-buffer-substring-add-line
filter-buffer-substring-functions)
(message "Add line is on!")))

关于emacs - 如何使用行 + 文件引用从 emacs 缓冲区复制/粘贴区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com