画面上の最初の行とか最後の行をオーバレイしてみる

なんとなくやってみた. 意外と簡単だった.
これで画面上の最初の行にメッセージを表示したりとかもそんなに苦労せずに作れるはず.

画面上の最初の行をオーバレイ

まずは画面上の最初の行をオーバレイする.
本当の意味での最初の行じゃなくて, 画面上の最初の行. 今見えている範囲における最初の行をオーバレイする

(let ((face 'highlight)
      ep ol)
  (save-excursion
    (goto-char (window-start))
    (forward-line 1)
    (setq ep (point)))
  (setq ol (make-overlay (window-start) ep))
  (overlay-put ol 'face face)
  (unwind-protect (read-key-sequence-vector
                   "Please push some keys to delete the overlay : ")
    (delete-overlay ol)))

一応unwind-protectってやってみたけど意味あるんかね, これ.
(*追記*)overlay-putも含めてunwind-protectやってやらないと意味ないかな?

画面上の最後の行をオーバレイ

次ー. 画面上の最後の行. 今見えている範囲での最後の行.
とりあえず今見えている範囲における一番下に表示……のはずが, 画面の最終行よりも先に最終行がきちゃうと止まっちゃうっぽ.
まあそれはしゃーないかなと. そこまでやる気は今んとこなかったし.

(let ((face 'highlight)
      sp ol)
  (save-excursion
    (goto-char (window-end))
    (forward-line -1)
    (setq sp (point)))
  (setq ol (make-overlay sp (window-end)))
  (overlay-put ol 'face face)
  (unwind-protect (read-key-sequence-vector
                   "Please push some keys to delete the overlay : ")
    (delete-overlay ol)))

ほとんど最初の行に表示すんのと同じ. epがspだったり, window-endになってたり, forward-lineが-1になってたりとかそんなもん.

両方

画面上の最初の行と最後の行, 両方に表示してみる.

(let ((face 'highlight)
      ep sp bol eol)
  (save-excursion
    (goto-char (window-end))
    (forward-line -1)
    (setq sp (point))
    (goto-char (window-start))
    (forward-line 1)
    (setq ep (point)))
  (setq bol (make-overlay (window-start) ep))
  (setq eol (make-overlay sp (window-end)))
  (overlay-put bol 'face face)
  (overlay-put eol 'face face)
  (unwind-protect (read-key-sequence-vector
                   "Please push some keys to delete the overlay : ")
    (delete-overlay bol)
    (delete-overlay eol)))

似たような記述あるけど気にしなーい. とりあえずはテストでやっただけなので動くこと優先で.


気をつける点を挙げるなら, ちゃんとdelete-overlayしないと残っちゃうよーってぐらいか?
オーバレイは面白いね.

更新時刻

  • 1かいめ 2008年, 5月30日, 22:57
  • 2かいめ 2008年, 5月30日, 23:25