4

前回の保存以降に変更された行だけに対していくつかの操作を実行できる before-save-hook を追加したいと思います。たとえば、末尾の空白の削除、インデントのチェックなどです。ファイル全体に対してこれを実行したくありません。また、これらのそれぞれに個別のオプションがあることを認識しています (変更されたすべての行の末尾の空白を削除するだけで、など)、しかし、もっと多くのものを追加できるように、一般的なものが欲しいです。変更された行番号のリスト、または get-first-changed-line()、get-next-changed-line() タイプの関数を取得できるものがあると思います。

4

1 に答える 1

3

ハイライト変更モードの機械を使用する

を使用して、それによって設定されhighlight-changes-modeたテキストプロパティを繰り返し処理できます。hilit-chgnext-single-property-change

例えば、

(with-current-buffer "my-buffer-name"
  (let ((beg (point-min)) end)
    (while (setq end (next-single-property-change beg 'hilit-chg))
      (setq beg (next-single-property-change end 'hilit-chg))
      (message "[[%s]]" (buffer-substring-no-properties end beg)))))

次のようになります。

[[
these are my changes

]]
[[ and here]]
[[
here are more changes
]]

バッファ内*Messages*(およびエコー領域内)。

完全な実装例

ws-butlerはこのメカニズムを使用して、変更された行を保存するときにEOLのスペースをトリミングします。

于 2013-01-03T18:09:43.630 に答える