Emacs penceresinin boyutunu nasıl ayarlarım?


103

Emacs yapmaya başladığım ekranın boyutunu tespit etmeye ve buna göre başlattığı pencerenin boyutunu ve konumunu ayarlamaya çalışıyorum (sanırım bu emacs-speak'daki çerçeve). .Emac'lerimi, her zaman ekranımın sol üst köşesine yakın sol üst köşesiyle "makul derecede büyük" bir pencere olacak şekilde ayarlamaya çalışıyorum.

Sanırım bu genel durum için büyük bir talep, bu yüzden işleri biraz daraltmak için en çok Windows ve (Debian) Linux üzerinde GNU Emacs 22 ile ilgileniyorum.

Yanıtlar:


89

Boyutu çözünürlüğe göre değiştirmek istiyorsanız, şu şekilde bir şey yapabilirsiniz (tercih ettiğiniz genişliği ve çözünürlükleri özel ihtiyaçlarınıza göre ayarlayın):

(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)

Pencere sisteminin daha yeni emacs sürümlerinde kullanımdan kaldırıldığını unutmayın. Uygun bir yedek (display-graphic-p). Bkz bu cevabı soruya nasıl olduğunu emacs'ı algılamak için terminal modundayken? biraz daha arka plan için.


Farklı sayıları severim, bu yüzden (önerdiğiniz gibi) benimkini değiştirdim. Yine de bu harika çalışıyor; teşekkür ederim!
lindes

Yine de, aslında bu sürümü daha çok seviyorum - çok daha basit (okuması ve ayarlaması kolay) ve ihtiyaçlarıma iyi uyuyor. Her ikisi de iyi cevaplar! +1
lindes

1
Yükseklik konusunda dikkatli olun, en azından OS X'te Emacs 24.2'de. Bir satır çok yükseğe ayarlarsanız, pencereler tamponun ilk satırının görünmediği bir durumda kalacaktır - nokta oraya gidebilir, ancak pencere onu göstermek için kaydırılmayacaktır.
Greg Hendershott

2
Bu yöntemle (ve burada listelenen diğerleriyle) küçük bir artefakt var. Emacs belirli bir boyutta açılacak ve bir saniye sonra belirlediğimiz w / e boyutuna yeniden boyutlandırılacaktır. Ancak geçiş görülebilir. Emacs'in kendisini t = 0 sn'den istenen boyutta çizmesini söylemenin bir yolu var mı?
stathisk

48

Bende aşağıdakiler var .emacs:

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

Ayrıca fonksiyonlar bakmak olabilir set-frame-size, set-frame-positionve set-frame-width. Ayrıntılı dokümantasyonu getirmek için C-h f(aka M-x describe-function) kullanın .

Mevcut pencereleme ortamında bir çerçevenin maksimum yüksekliğini / genişliğini hesaplamanın bir yolu olup olmadığından emin değilim.


12
Yaşasın! (if (window-system) (set-frame-size (selected-frame) 124 40))galibiyet için - çok güzel ve öz ve bana Terminalimin varsayılan olarak ayarladığı boyutu getiriyor, ki bu hoş ve tanıdık. :) (Elbette tercihlere göre ayarlayın.) Teşekkürler!
lindes

1
Sadece açıklığa kavuşturmak için: eğer bunu içine koyarsanız init.el, sadece ilk çerçeve için geçerlidir. Bundan sonra yeni bir çerçeve oluşturursanız, yukarıdaki işlevin etkisi olmayacaktır; yeni çerçeve ayarlara sahip olacaktır default-frame-alist.
David J.

Bu benim için çalışıyor, ancak (set-frame-size (selected-frame) 80 24)bana 161'e 48'lik bir çerçeve veriyor; 4K hidpi ekranındayım, ancak bunun karakter sayılarını etkilemesini beklemem.
charliegreen

21

Şuradan alınmıştır: 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)))

İlk ayar, başladığınızda açılan ilk ayar dahil olmak üzere tüm emacs çerçeveleri için geçerlidir. İkinci ayar, ilk kareye ek nitelikler ekler. Bunun nedeni, bazen boşaltmaya başladığınız orijinal çerçeveyi bilmek güzeldir.


Çerçevenin yüksekliğini ve genişliğini ( (width . 80) (height . 40)) ayarlamak için bu yöntemi uzun bir süre kullandım , ancak bazı nedenlerden dolayı Xubuntu sürümümü 12.04'ten 13.10'a yükselttikten sonra çalışmayı durdurdu: başlatıldığında çerçeve boyutu varsayılan değerdi. Daha sonra benim için uygun olan Chris Conway'in cevabına geçtim.
Teemu Leisti

17

Bunu bir X-Window ortamında yapmanın en kolay yolu, X kaynaklarıdır . .Xdefault'larımın ilgili kısmı şuna benzer:

Emacs.geometry: 80x70

Ekranınızın sol üst köşesine zorlamak için + 0 + 0 konum koordinatlarını ekleyebilmelisiniz. (bunu yapmamamın nedeni, ara sıra yeni çerçeveler üretmem ve öncekiyle tam olarak aynı konumda görünmeleri işleri kafa karıştırıcı hale getiriyor)

Kılavuza göre, bu teknik MS Windows üzerinde de çalışır ve kaynakları kayıt defterinde anahtar / değer çiftleri olarak depolar. Bunu hiç test etmedim. Harika olabilir, bir dosyayı düzenlemeye kıyasla çok daha fazla rahatsızlık yaratabilir.


1
yeap pencereler için de çalışır. Emacs wiki daha fazla ayrıntı verir: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad

17

Aşağıdaki kodu eklemeyi deneyin .emacs

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

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

12

Emac'leri çalıştırırken -geometry parametresini de kullanabilirsiniz: emacs -geometry 80x60+20+30size 80 karakter genişliğinde, 60 sıra yüksekliğinde, sol üst köşesi arka planın 20 piksel sağında ve 30 piksel aşağıda olan bir pencere verecektir.


7

Ubuntu'da şunları yapın:

(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'ta, bu işlevi kullanarak emacs çerçevesini büyütebilirsiniz:

(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)

Bryan Oakley'in ayarlarını tercih ederim. Ancak 'yükseklik GNU Emacs 24.1.1'imde düzgün çalışmıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.