Emacsのウィンドウのサイズを設定するにはどうすればよいですか?


103

私はemacsを開始している画面のサイズを検出し、それに応じてサイズを調整し、それが開始しているウィンドウの位置を調整しようとしています(これはemacs-speakのフレームだと思います)。.emacsを設定して、画面の左上にある左上隅に常に「かなり大きな」ウィンドウが表示されるようにしています。

これは一般的なケースの大きな問題だと思います。少し絞り込むために、私はWindowsと(Debian)Linux上のGNU Emacs 22に最も興味があります。

回答:


89

解像度に応じてサイズを変更したい場合は、次のようにすることができます(特定のニーズに応じて適切な幅と解像度を調整します)。

(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

window-systemは、emacsの新しいバージョンでは非推奨であることに注意してください。適切な代替品は(display-graphic-p)です。emacsがターミナルモードであることを検出する方法についての質問に対するこの回答を参照してくださいもう少し背景について。


私は別の数字が好きなので、(あなたが示唆するように)私は私のものを微調整しました。ただし、これはうまく機能します。ありがとうございました!
lindes

繰り返しになりますが、私は実際にこのバージョンをより気に入っています-はるかにシンプル(読みやすく、微調整も簡単)で、私のニーズによく適合しています。ただし、どちらも良い答えです。+1
lindes

1
少なくともOS XのEmacs 24.2では、高さに注意してください。1行を高すぎる値に設定すると、ウィンドウは、バッファーの最初の行が表示されない状態でスタックします。しかし、ウィンドウはスクロールして表示されません。
グレッグヘンダーショット2013年

2
このメソッド(およびここにリストされている他のメソッド)には小さなアーティファクトがあります。Emacsは特定のサイズで開き、1秒の分割後に設定したサイズにサイズ変更されます。しかし、移行は目に見えます。emacsがt = 0秒から希望のサイズで自分自身を描画するように指示する方法はありますか?
Stathisk 2014

48

私には次のものがあります.emacs

(if (window-system)
  (set-frame-height (selected-frame) 60))

また、機能に見えるかもしれませんset-frame-sizeset-frame-positionset-frame-width。使用C-h f(別名M-x describe-function)をして詳細なドキュメントを表示します。

現在のウィンドウ環境でフレームの最大の高さ/幅を計算する方法があるかどうかはわかりません。


12
わーい! (if (window-system) (set-frame-size (selected-frame) 124 40))勝利のために-とても素晴らしく簡潔であり、私のターミナルのデフォルトのサイズを取得します。:)(もちろん、好みに応じて調整してください。)ありがとうございます!
lindes

1
明確にするために:これを入れるinit.elと、最初のフレームにのみ適用されます。その後、新しいフレームを作成すると、上記の機能は無効になります。新しいフレームには、で設定された設定が含まれdefault-frame-alistます。
David J.

これ(set-frame-size (selected-frame) 80 24)は私にとっては機能しますが、フレームのサイズが161 x 48になります。私は4K hidpi画面を使用していますが、それが文字数に影響を与えるとは思いません。
charliegreen 2017

21

引用元:http : //www.gnu.org/software/emacs/windows/old/faq4.html

(setq default-frame-alist
      '((top . 200) (left . 400)
        (width . 80) (height . 40)
        (cursor-color . "white")
        (cursor-type . box)
        (foreground-color . "yellow")
        (background-color . "black")
        (font . "-*-Courier-normal-r-*-*-13-*-*-*-c-*-iso8859-1")))

(setq initial-frame-alist '((top . 10) (left . 30)))

最初の設定は、起動時にポップアップする最初のものを含むすべてのemacsフレームに適用されます。2番目の設定は、追加の属性を最初のフレームに追加します。これは、emacsを開始する元のフレームを知っておくと良い場合があるためです。


フレームの高さと幅((width . 80) (height . 40))を設定するために長い間この方法を使用しましたが、Xubuntuのバージョンを12.04から13.10にアップグレードした後、何らかの理由で機能が停止しました。起動時のフレームサイズはデフォルトでした。その後、Chris Conwayの回答を使用するように切り替えました。
Teemu Leisti 2014

17

X-Window環境でこれを行うのに最も簡単な方法は、Xリソースを使用することです。私の.Xdefaultsの関連部分は次のようになります。

Emacs.geometry: 80x70

あなたはそれをあなたのディスプレイの左上隅に強制するために+ 0 + 0の位置座標をそれに付けることができるはずです。(私がそれをしない理由は、時々新しいフレームをスポーンするためで、前のフレームとまったく同じ場所に表示されると混乱を招きます)

マニュアルによると、この手法はMS Windowsでも機能し、リソースをキーと値のペアとしてレジストリに保存します。私はそれをテストしたことがありません。それは素晴らしいかもしれません、それは単にファイルを編集することに比べてはるかに不便かもしれません。


1
yeapはWindowsでも機能します。Emacs wikiに詳細が記載されています: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad

17

次のコードを追加してみてください .emacs

(add-to-list 'default-frame-alist '(height . 24))

(add-to-list 'default-frame-alist '(width . 80)) 

12

emacsを起動するときに-geometryパラメータを使用することもできemacs -geometry 80x60+20+30ます。ウィンドウの幅は80文字、高さは60行で、左上隅が右に20ピクセル、背景の左上隅から30ピクセル下にあります。


7

ubuntuでは次のようにします。

(defun toggle-fullscreen ()
  (interactive)
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0))
  (x-send-client-message nil 0 nil "_NET_WM_STATE" 32
                 '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0))
)
(toggle-fullscreen)

5

Windowsでは、この関数を使用してemacsフレームを最大化できます。

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))

1
(setq initial-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                initial-frame-alist))

(setq default-frame-alist
        (append '((width . 263) (height . 112) (top . -5) (left . 5) (font . "4.System VIO"))
                default-frame-alist))

0
(defun set-frame-size-according-to-resolution ()
  (interactive)
  (if window-system
  (progn
    ;; use 120 char wide window for largeish displays
    ;; and smaller 80 column windows for smaller displays
    ;; pick whatever numbers make sense for you
    (if (> (x-display-pixel-width) 1280)
           (add-to-list 'default-frame-alist (cons 'width 120))
           (add-to-list 'default-frame-alist (cons 'width 80)))
    ;; for the height, subtract a couple hundred pixels
    ;; from the screen height (for panels, menubars and
    ;; whatnot), then divide by the height of a char to
    ;; get the height we want
    (add-to-list 'default-frame-alist 
         (cons 'height (/ (- (x-display-pixel-height) 200)
                             (frame-char-height)))))))

(set-frame-size-according-to-resolution)

私はブライアンオークリーの設定を好みます。ただし、'高さは私のGNU Emacs 24.1.1では正しく機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.