2011/01/24

Re:frame-arrange.el

現状ちょこちょこ書き換えたりしてるので、新しいのを持ってこないと動かないことがあるかもしれません。

key-chord.el を使わない場合の設定例

例えば下記の設定だと、C-c f q で左上端、C-c f c で右下端。
それと、C-Shift-矢印で矢印の方向にフレームを1ずつズラします。
(require 'frame-arrange)

;; key-map
(define-key global-map [(C shift down)]
  'frange:increment-position-top/current-frame)
(define-key global-map [(C shift up)]
  'frange:increment-position-bottom/current-frame)
(define-key global-map [(C shift left)]
  'frange:increment-position-right/current-frame)
(define-key global-map [(C shift right)]
  'frange:increment-position-left/current-frame)

(define-key global-map (kbd "C-c f q") 'frange:arrange/top-left-most/current-frame)
(define-key global-map (kbd "C-c f w") 'frange:arrange/top-most/current-frame)
(define-key global-map (kbd "C-c f e") 'frange:arrange/top-right-most/current-frame)
(define-key global-map (kbd "C-c f a") 'frange:arrange/left-most/current-frame)
(define-key global-map (kbd "C-c f d") 'frange:arrange/right-most/current-frame)
(define-key global-map (kbd "C-c f z") 'frange:arrange/bottom-left-most/current-frame)
(define-key global-map (kbd "C-c f x") 'frange:arrange/bottom-most/current-frame)
(define-key global-map (kbd "C-c f c") 'frange:arrange/bottom-right-most/current-frame)

マクロの使用例

上記の設定で、C-Shift-矢印では1ずつしかズレません。
下記のようにすると5ずつズラす関数が生成されます。

この場合生成される関数は、frange:arrange/increment-top5 と frange:arrange/increment-top5/current-frame です。
(def:frange/current-frame arrange/increment-top5
  (nil top #'(lambda (v frame)
               (+ v 5))))

(frange:arrange/increment-top5/current-frame)

例をもう一つ。
この場合、画面上部からの相対位置だけを指定する関数が生成されます。
生成される関数は、frange:arrange/top と frange:arrange/top/current-frame です。
(defun frange:identity (v frame)
  v)

(def:frange/current-frame arrange/top
  (top top #'frange:identity))

(frange:arrange/top/current-frame 3)

逆に画面下部からの相対位置だけを指定するのであればこんな感じ。
(def:frange/current-frame arrange/bottom-most
  (bottom top #'(lambda (v frame)
                  (- v))))

(frange:arrange/bottom-most/current-frame 15)
で、これを書いていて思ったのは、マクロの引数リストの第一要素・・・イラナイかもしれません。
マクロ自体も汚いので、そのうちごっそり修正するかもです。かも、です。

関数

マクロは関数呼び出しを行なう関数に名前をつけて生成しているだけなので、実はマクロ使わなくても関数使えばそれで済みます。

このように。
(frange:arrange/f (selected-frame)
                  (frange:arrange-partial-gen '(top left)'(0 0)))
(frange:arrange/alist (selected-frame) '((top . 30)))
(frange:arrange (selected-frame) :y 0)

で、結局最終的に Emacs 組み込みの set-frame-parameter を呼んでるだけです。

今後

実はフレームの位置とサイズに名前を付けて保存しておいて、あとで復元することが当初の目的でした。
位置やサイズをインタラクティブに動かしたり、マクロを書いたりというのは副産物です。

そのわりに、設定を書き出す機能は未実装です。
ということで、近いうちに設定をシリアライズできるようにします。

追記

設定のシリアライズ機能他を追加しました。

Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

0 件のコメント:

コメントを投稿