#### 未だに見つからないレベルに関わりなくMarkdownで見出しと本文をコピーするプラグイン,以前作成した,不完全なEmacs-Lispのコマンド Last update 2020-05-22_2329

:CATEGORIES: Markdown,Emacs,Emacs-Lisp

 すでにご紹介しているVimエディタのVOomプラグインではレベル3までの見出しのコピー,切り取りが出来ます。Atom,SublimeText,VSCodeという多機能エディタだけではなく,その他のアプリを試しても普通に見出しのコピーが出来るものが見つからないのです。

 Markdownの見出しレベルに関わりのない現在の見出しのコピーは早い段階で,EmacsEmacs-Lisp関数で出来るものを作っています。処理は単純で,先頭行に半角の#の記号があることが全ての条件になります。次がそのEmacs-Lispのコードになります。


(defun h-markdown-region-copy ()
(interactive)
(save-excursion
(let *1
(re-search-backward "^#.+" nil t)
(setq bsp (point))
(forward-line 1)
(if (re-search-forward "^#.+" nil t)
(progn
(forward-line -1)
(setq bep (point)))
(progn
(goto-char (point-max))
(setq bep (point))))
(message (format "%s TEXT copy! %s" bsp bep))
(copy-region-as-kill bsp bep)
)))
;; (defun h-markdown-region-copy ()
;; (interactive)
;; (save-excursion
;; (let *2
;; (re-search-backward "^#.+" nil t)
;; (setq bsp (point))
;; (setq title (buffer-substring (point-at-bol) (point-at-eol)))
;; (string-match "^\\(#+\\) .+" title)
;; (setq len (length (match-string 1 title)))
;; (forward-line 1)
;; (setq p (format "^#\\\\{1,%d\\\\}? .+" len))
;; (if (re-search-forward p nil t)
;; (progn
;; (forward-line -1)
;; (setq bep (point)))
;; (progn
;; (goto-char (point-max))
;; (setq bep (point))))
;; (message (format "%s TEXT copy! %s" bsp bep))
;; (message title)
;; (copy-region-as-kill bsp bep)
;; )))

 コメントアウトで無効化したコードを残していますが,これは見出しのレベルを判別して下位の階層を含めてコピーしようとしたものです。つまりレベル2をコピーするとき含まれるレベル3,そのしたのレベル4もまとめてコピーしようとしたものです。

 繰り返しになりますが,これはVimエディタのVOomというプラグインを使うことで,レベル3までの階層を,その下位の階層を含めてコピー,切り取りできるようになっています。

 常に下位を含まない直近の見出しの範囲のコピーになります。間違って行頭に半角の#を置かないようにすれば問題ないのですが,これまでもプログラムのコードのコピペに,コードのコメントアウトを意味する半角の#が含まれていて,意図しない操作になることはありました。

*1:bsp nil) (bep nil

*2:bsp nil) (bep nil) (title nil