Bagaimana cara menyetel ukuran jendela Emacs?

103

Saya mencoba mendeteksi ukuran layar tempat saya memulai emacs, dan menyesuaikan ukuran serta posisi jendela itu dimulai (saya rasa itu adalah bingkai di emacs-speak) yang sesuai. Saya mencoba menyiapkan .emacs saya sehingga saya selalu mendapatkan jendela "cukup besar" dengan pojok kiri atas di dekat kiri atas layar saya.

Saya kira ini adalah permintaan besar untuk kasus umum, jadi untuk mempersempit sedikit, saya paling tertarik pada GNU Emacs 22 di Windows dan (Debian) Linux.

Tom Dunham
sumber

Jawaban:

89

Jika Anda ingin mengubah ukuran menurut resolusi, Anda dapat melakukan sesuatu seperti ini (menyesuaikan lebar dan resolusi yang diinginkan sesuai dengan kebutuhan spesifik Anda):

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

Perhatikan bahwa sistem jendela tidak lagi digunakan di versi emacs yang lebih baru. Pengganti yang cocok adalah (display-graphic-p). Lihat jawaban ini untuk pertanyaan Bagaimana cara mendeteksi emacs dalam mode terminal? untuk sedikit lebih banyak latar belakang.

Bryan Oakley
sumber
Saya suka nomor yang berbeda, jadi (seperti yang Anda sarankan) saya menyesuaikan nomor saya. Ini bekerja dengan baik; Terima kasih!
lindes
Kemudian lagi, saya sebenarnya lebih menyukai versi ini - jauh lebih sederhana (mudah dibaca dan diubah), dan sesuai dengan kebutuhan saya. Keduanya adalah jawaban yang bagus! +1
lindes
1
Hati-hati dengan ketinggian, setidaknya pada Emacs 24.2 di OS X. Jika Anda mengaturnya satu baris terlalu tinggi, jendela akan macet dalam keadaan di mana baris pertama buffer tidak terlihat - titik dapat mengarah ke sana, tetapi jendela tidak akan menggulir untuk menampilkannya.
Greg Hendershott
2
Ada artefak kecil dengan metode ini (dan dengan yang lain yang tercantum di sini). Emacs akan terbuka dengan ukuran tertentu dan setelah sepersekian detik akan mengubah ukuran ke ukuran yang kita tetapkan. Tetapi transisi terlihat. Adakah cara untuk mengetahui emacs menggambar sendiri pada ukuran yang diinginkan dari t = 0 detik?
stathisk
48

Saya punya yang berikut di saya .emacs:

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

Anda mungkin juga melihat fungsi set-frame-size, set-frame-positiondan set-frame-width. Gunakan C-h f(alias M-x describe-function) untuk memunculkan dokumentasi terperinci.

Saya tidak yakin apakah ada cara untuk menghitung tinggi / lebar maksimum bingkai di lingkungan jendela saat ini.

Chris Conway
sumber
12
Yay! (if (window-system) (set-frame-size (selected-frame) 124 40))untuk kemenangan - sangat bagus dan ringkas, dan memberi saya ukuran standar Terminal saya, yang bagus dan familier. :) (Sesuaikan per preferensi, tentu saja.) Terima kasih!
lindes
1
Hanya untuk memperjelas: jika Anda memasukkan ini ke init.eldalamnya hanya berlaku untuk bingkai awal. Jika Anda membuat bingkai baru setelah itu, fungsi di atas tidak akan berpengaruh; bingkai baru akan memiliki pengaturan yang ditetapkan default-frame-alist.
David J.
Ini bekerja untuk saya kecuali yang (set-frame-size (selected-frame) 80 24)memberi saya bingkai 161 kali 48; Saya menggunakan layar 4K hidpi, tetapi saya tidak berharap hal itu memengaruhi jumlah karakter.
charliegreen
21

Diambil dari: 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)))

Pengaturan pertama berlaku untuk semua bingkai emacs termasuk yang pertama yang muncul saat Anda memulai. Pengaturan kedua menambahkan atribut tambahan ke bingkai pertama. Ini karena terkadang menyenangkan mengetahui bingkai asli tempat Anda memulai emacs.


sumber
Saya telah menggunakan metode itu untuk waktu yang lama untuk mengatur tinggi dan lebar bingkai ( (width . 80) (height . 40)), tetapi untuk beberapa alasan, itu berhenti berfungsi setelah saya memutakhirkan versi Xubuntu saya dari 12.04 ke 13.10: saat diluncurkan, ukuran bingkai adalah default. Saya kemudian beralih menggunakan jawaban Chris Conway, yang cocok untuk saya.
Teemu Leisti
17

Cara termudah saya telah menemukan untuk melakukan itu dalam lingkungan X-Window adalah melalui sumber daya X . Bagian yang relevan dari .Xdefaults saya terlihat seperti ini:

Emacs.geometry: 80x70

Anda harus dapat mencadangkannya dengan + 0 + 0 koordinat lokasi untuk memaksanya ke sudut kiri atas layar Anda. (alasan saya tidak melakukannya adalah karena saya kadang-kadang menelurkan bingkai baru, dan itu membuat hal-hal membingungkan jika muncul di lokasi yang sama persis dengan yang sebelumnya)

Menurut manual, teknik ini bekerja pada MS Windows juga , menyimpan sumber daya sebagai pasangan kunci / nilai di registri. Saya tidak pernah mengujinya. Ini mungkin bagus, itu mungkin jauh lebih merepotkan dibandingkan dengan hanya mengedit file.

JB.
sumber
1
yeap bekerja untuk windows juga. Emacs wiki memberikan detail lebih lanjut: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad
17

Coba tambahkan kode berikut ke .emacs

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

(add-to-list 'default-frame-alist '(width . 80)) 
norbux.dll
sumber
12

Anda juga dapat menggunakan parameter -geometry saat mengaktifkan emacs: emacs -geometry 80x60+20+30akan memberi Anda jendela dengan lebar 80 karakter, tinggi 60 baris, dengan sudut kiri atas 20 piksel ke kanan dan 30 piksel ke bawah dari sudut kiri atas latar belakang.

Graeme Perrow
sumber
7

Di ubuntu lakukan:

(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)
ftravers
sumber
5

Di windows, Anda dapat memaksimalkan bingkai emacs menggunakan fungsi ini:

(defun w32-maximize-frame ()
  "Maximize the current frame"
  (interactive)
  (w32-send-sys-command 61488))
Jérôme Radix
sumber
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))
NN
sumber
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)

Saya lebih suka pengaturan Bryan Oakley. Namun, 'ketinggian tidak berfungsi dengan baik di GNU Emacs 24.1.1 saya.

WisdomFusion
sumber