時々、ファイル名と行番号を参照してコードの一部を貼り付ける人を目にします。何かのようなもの
;; ----- 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 --------------------------;;;
これは主に、コードに関するコメントをメールで送信する場合に役立ちます。簡単な関数を自分で簡単にラップできますが、誰かがすでにこれをスマートできれいな方法で行っていると確信しています。
ありがとう。
[編集]
この機能はたまにしか必要とされず、1回のコピー/貼り付けアクションでのみ必要になるため、@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 ─