local-window-flag

http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=set-local-window-flags で設定する行番号とかのやつ。

  • フラグは on か off か未設定か
  • window と buffer がそれぞれにフラグを覚えてる
  • 優先順位は buffer > window > (グローバルな設定)
  • `get-local-window-flags` は多値で on のフラグと off のフラグを返す
;; 現在の buffer/window で flag が on なのか off なのか
(defun window-flag (flag)
  (labels ((on? (x) (plusp (logand flag x))))
    (multiple-value-bind (buffer-on buffer-off)
        (get-local-window-flags (selected-buffer))
      (cond ((on? buffer-on) t)
            ((on? buffer-off) nil)
            (t (multiple-value-bind (window-on window-off)
                   (get-local-window-flags (selected-window))
                 (cond
                  ((on? window-on) t)
                  ((on? window-off) nil)
                  (t (on? (get-window-flags))))))))))
=> window-flag

たぶん合ってる。もうちょっとスッキリ書けても良さそうなもんなんだが・・・。