Open tkf opened 12 years ago
ありがとうございます。1のcurrent-bufferと3はそのとおりだと思いました。 2は引数を変えて非互換にしてもいいかなと思っているのですが、 具体的な変更後の形がちょっとよく分からなかったのでもう少し教えてもらってもいいでしょうか?
こんな感じ↓で使うイメージです。特に let 内がシンプルになります。 e2wm:current-window-name を新しく dynamical binding 変数として導入することを想定してみました。
(setq e2wm:c-recordable-buffer-p
'(progn ; quote された、 eval 可能な式を入れる (2)
(let* ((name (buffer-name)) ; 引数なしで呼べる (1)
(wname e2wm:current-window-name)) ; dynamical binding (2)
(and
;; record only if shown in "non-sub" window
(not (memq wname '(sub)))
(or
;; specify some recordable buffers
(equal "*Ibuffer*" name)
(string-match "\\*Python\\[.*\\]*" name)
(equal "*IPython*" name)
(equal "*info*" name)
(equal "*Help*" name)
(equal "*Simplenote*" name)
;; specify some recordable major modes
(memq major-mode ; buffer-local-value 省略可 (1)
'(dired-mode))
;; support org indirect buffers
(and (equal major-mode 'org-mode) ; buffer-local-value 省略可 (1)
(string-match "\\.org-[0-9]*$" name))
(and
;; buffer is associated with a file
buffer-file-name ; buffer-local-value 省略可 (1)
;; buffer name is not something like "*BUFFER-NAME*"
(not (string-match "^ *\\*.*\\* *$" name))
;; buffer does not end with ".org_archive"
(not (string-match "\\.org_archive$" name))))))))
よく見たら progn 必要ないですね...
コード例示ありがとうございます。 dynamic bind で自由変数を束縛するという事にして、 quote ではなくて引数なしの lambda でもいいですか? 結局同じなんですが、関数はlambdaというふうに統一したほうがわかりやすいかなと思っている人なので。すいません。
いえ、lambdaでも良いと思います。最近 el-get で似たような変更があってそちらで progn を使っていたのでそれを提案してみました。
ちなみに、他の場所で prev-selected-buffer っていう dynamic bind 変数使ってますが、これは e2wm: プレフィックス付けて defvar しておいたほうが良くないですか? warning 減らせますし。あと、そういう予定があるかは知りませんが、 lexical scope で動かすには defvar が必要だったと思います。
いろいろ情報ありがとうございます! lexical scopeにそんな制限があるとはしりませんでした。defvar つけます。
e2wm:c-recordable-buffer-p に以下のような設定をして使っています。 window 情報 (
wm
,wname
) をとるために長々とコードを書かなければいけないので、 window 関連の変数にアクセス可能だと、大変楽になります。あと、関連していくつか提案があります:
e2wm:pst-get-wm
を呼ぶときにいつでも(e2wm 管理下になくても)エラーが出ないようにして欲しいです。 以下のコードでは e2wm:pst-get-instance で条件分けてますが、これがないと e2wm をスタートするときに、まだe2wm管理下にないので、エラーでこけてしまいます。