[xyzzy:03646] 小ネタ還元
- Subject: [xyzzy:03646] 小ネタ還元
- From: Hiroshi Saito <HiroshiSaito@xxxxxxx>
- X-mailer: Becky! ver 1.23
サイトウです。
みなさま、いつもお世話になっております。
いつも質問ばかりなのはナニがアレなので、
小マクロを少々。もしかしたら、誰かの役に立つかもしれません。
添削も歓迎です。
;; M-x で ラインをコピー
(defun copy-line ()
(interactive)
(save-excursion
(setq b (point))
(goto-eol)
(setq e (point))
(copy-region-as-kill b e)
(message "line copied")
))
(global-set-key #\M-k 'copy-line)
;; カレントバッファのディレクトリ以外でコマンド実行
(global-set-key #\C-F5 #'(lambda (path cmd)
(interactive "Dpath: \nscmd: ")
(set-default-directory path)
(execute-subprocess cmd)
))
;;== リージョン内の行頭に任意の文字列を挿入 ==
(defun insert-bol-region (from to str)
(interactive "r\nsStr: ")
(if (> from to)
(rotatef from to))
(save-excursion
(save-restriction
(narrow-to-region (point-min) to)
(goto-char from)
(goto-bol)
(insert str)
(while (forward-line 1)
(goto-bol)
(insert str)
t))))
;;== リージョン内の行頭から任意の文字列を削除 ==
(defun delete-bol-region (from to str)
(interactive "r\nsStr: ")
(if (> from to)
(rotatef from to))
(save-excursion
(save-restriction
(setq to (progn (goto-char to) (goto-eol) (point)))
(narrow-to-region from to)
(goto-char from)
;このへんスッキリ書けないものですかね。do while みたいな。
(if (string= (buffer-substring (point) (+ (point) (length str))) str)
(delete-region (point) (+ (point) (length str))))
(while (forward-line 1)
(goto-bol)
(if (string= (buffer-substring (point) (+ (point) (length str))) str)
(delete-region (point) (+ (point) (length str))))
t))))
こいつらは、複数行にまたがったコメントやタブの操作に使ってます。
以上。
-----------------------------------
サイトウ ヒロシ
HiroshiSaito@xxxxxxx