Emacsを最大化する

emacs起動時にコマンドライン引数に「--fullscreen」オプションをつけるとemacsが最大化して起動されますが、それを起動してからできないか調べてみました。
使用しているEmacsのバージョンは、23.1.50.2です。OSは、Debian GNU Linux sidを使っています。



どうやら、フレームのパラメータfullscreenに特定の値を渡してあげれば良いようです。

(set-frame-parameter nil 'fullscreen 'fullboth)   ; ウインドウマネージャの枠もなくなる完全な最大化(--fullscreenオプションをつけた場合と同じ)
(set-frame-parameter nil 'fullscreen 'maximized)  ; いわゆる右上の最大化するボタンを押しての最大化
(set-frame-parameter nil 'fullscreen 'nil)        ; 最大化してあった場合、元に戻す

1行目、もしくは、2行目の式を評価すると、現在のフレームが最大化されます。
ただ、emacsのバージョンが、22.3.2で試してみたところ、maximizedを使ったものは動きませんでした。
# fullbothの場合は動きます。
どうせなので現在のフレームを最大化する関数をでっちあげてみました。
# 今思うとset-frame-paramterの部分をまとめた方が綺麗な気がするなあ…。まあいいか。

(defun my-fullscreen ()
  (interactive)
  (let ((fullscreen (frame-parameter (selected-frame) 'fullscreen)))
    (cond
     ((null fullscreen)
      (set-frame-parameter (selected-frame) 'fullscreen 'fullboth))
     (t
      (set-frame-parameter (selected-frame) 'fullscreen 'nil))))
  (redisplay))

(global-set-key [f11] 'my-fullscreen)

関数を実行する度に、カレントフレームの最大化(fullboth)/最大化解除が行われます。
自分は、C-x 5 2等を使って、複数のフレームを起動して作業、ということをほとんど行わないので、カレントフレームのみにしかこの関数は対応していません。
# 前置引数を取って、複数フレームあった場合、どのフレームを最大化するかを選ぶ処理を書くのが面倒なだけとも言いいます。
また、fullbothではなく、maximizedの方が好み、という場合は、my-fullscreen関数中のfullbothの部分をmaximizedに置き換えれば、そのまま動作するはずです。


デフォルトで何か関数が用意されてそうな気がするのですが、自分がざっと調べたところでは見付けられませんでした。
それでは、そんなこんなで。

追記

ふと、普通にEmacsWikiに書いてあるんじゃないか……とか思って検索してみたらあった。

まー、色々と方法があるみたいですね。

追記


ちょっと関数をいじってみた。どういう風に最大化をするか選べるようにしただけやけどー。

(defvar my-fullscreen-default 'fullboth)
(defun my-fullscreen (arg)
  (interactive "P")
  (let* ((state (frame-parameter (selected-frame) 'fullscreen))
         (my-fullscreen-default
          (cond
           (arg
            (intern (completing-read (format "method (now:%s): " state)
                                     '("fullboth" "maximized" "nil")
                                     nil
                                     t)))
           (t
            my-fullscreen-default))))
    (cond
     ((or arg (null state))
      (setq state my-fullscreen-default))
     (t
      (setq state nil)))
    (set-frame-parameter (selected-frame) 'fullscreen state))
  (redisplay))

更新時刻

  • 2009/07/12/01:30
  • 2009/07/12/02:20
  • 2009/08/09/20:38