[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:03646] 小ネタ還元



サイトウです。
みなさま、いつもお世話になっております。
いつも質問ばかりなのはナニがアレなので、
小マクロを少々。もしかしたら、誰かの役に立つかもしれません。
添削も歓迎です。

;; 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

Index Home