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

[xyzzy:06354] Re: 変更行のマーク



亀井さん、こんにちは。名古屋の金子です。

Version 0.2.1.186 ChangeLog.html より
> post-buffer-modified-hookとか。

 実装いただきまして、本当にありがとうございます。\(^^)/
いやぁ、本当にすばらしいです。

# ちょっと、興奮気味です。

 と、言うことで何となく作ってみました。添削などありましたらお願
いします。ちなみに、アンドゥで戻しても、マークまでは戻りません。

;------------------------------
; 編集された行にマークを付ける
;------------------------------
; フックを有効にする。バッファごとに行う必要があります。
;(enable-post-buffer-modified-hook t)

; text-attribute のセット。色等は適当に。
(defun set-modified-line-mark (pos)
  (set-text-attribute pos pos 'modified-line
                      :foreground 0 :background 2
                      :prefix #\* :extend t))

; フック関数。
(defun buffer-modified-hook (buffer operation from to undo-p)
; (message "ope:~A  undo:~A from:~d to:~d" operation undo-p from to)
  (let ((pos from))
    (save-excursion
      (goto-char pos)
      (while (<= pos to)
        (progn
          (goto-bol)
          (set-modified-line-mark (point))
          (if (not (next-virtual-line))
              (return))
          (setq pos (point))
        )))))

; フックの登録。
(add-hook 'post-buffer-modified-hook 'buffer-modified-hook)

; 編集行を前方に検索する。
(defun search-mofdified-line-forward ()
  (interactive)
  (goto-char (or (find-text-attribute
                  'modified-line
                  :start (+ 1 (save-excursion (goto-eol) (point))))
                 (plain-error "編集された行はありません"))))

; 編集行を後方に検索する。
(defun search-mofdified-line-backward ()
  (interactive)
  (goto-char (or (find-text-attribute
                  'modified-line
                  :end (- (save-excursion (goto-bol) (point)) 1)
                  :from-end t)
                 (plain-error "編集された行はありません"))))

; 編集行マークの削除
(defun delete-modified-line-mark ()
  (interactive)
  (delete-text-attributes 'modified-line))
   

(global-set-key #\M-Down 'search-mofdified-line-forward)
(global-set-key #\M-Up 'search-mofdified-line-backward)



== 金子 真昭 <kaneko@xxxxxxxxxxxx>

Index Home