Làm cách nào để đặt kích thước cửa sổ Emacs?


103

Tôi đang cố gắng phát hiện kích thước của màn hình mà tôi đang bật emacs và điều chỉnh kích thước và vị trí cửa sổ mà nó đang bắt đầu (tôi đoán đó là khung trong emacs-speak) cho phù hợp. Tôi đang cố gắng thiết lập .emac của mình để tôi luôn nhận được cửa sổ "lớn hợp lý" với góc trên cùng bên trái gần phía trên bên trái của màn hình.

Tôi đoán đây là một yêu cầu lớn đối với trường hợp chung, vì vậy để thu hẹp mọi thứ lại một chút, tôi quan tâm nhất đến GNU Emacs 22 trên Windows và (Debian) Linux.

Câu trả lời:


89

Nếu bạn muốn thay đổi kích thước theo độ phân giải, bạn có thể làm như sau (điều chỉnh độ rộng và độ phân giải ưu tiên theo nhu cầu cụ thể của bạ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)

Lưu ý rằng window-system không còn được dùng trong các phiên bản emac mới hơn. Một sự thay thế phù hợp là (display-graphic-p). Xem câu trả lời này cho câu hỏi Làm cách nào để phát hiện emacs đang ở chế độ đầu cuối? để biết thêm một chút nền tảng.


Tôi thích những con số khác nhau, vì vậy (như bạn đề xuất) tôi đã điều chỉnh của tôi. Điều này hoạt động tốt, mặc dù; cảm ơn bạn!
lindes

Sau đó, một lần nữa, tôi thực sự thích phiên bản này hơn - đơn giản hơn nhiều (dễ đọc và tinh chỉnh) và phù hợp với nhu cầu của tôi. Tuy nhiên, cả hai đều là câu trả lời tốt! +1
lindes

1
Hãy cẩn thận với chiều cao, ít nhất là trên Emacs 24.2 trên OS X. Nếu bạn đặt nó một hàng quá cao, các cửa sổ sẽ bị kẹt ở trạng thái không nhìn thấy hàng đầu tiên của bộ đệm - điểm có thể điều hướng lên đó, nhưng cửa sổ sẽ không cuộn để hiển thị nó.
Greg Hendershott

2
Có một tạo tác nhỏ với phương pháp này (và với những phương pháp khác được liệt kê ở đây). Emacs sẽ mở ra với một kích thước nhất định và sau một tích tắc sẽ thay đổi kích thước thành kích thước w / e mà chúng tôi đặt. Nhưng sự chuyển đổi có thể nhìn thấy được. Có cách nào để nói với emacs tự vẽ ở kích thước mong muốn từ t = 0 giây?
stathisk

48

Tôi có những thứ sau đây trong của tôi .emacs:

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

Bạn cũng có thể xem xét các chức năng set-frame-size, set-frame-positionset-frame-width. Sử dụng C-h f(hay còn gọi là M-x describe-function) để hiển thị tài liệu chi tiết.

Tôi không chắc liệu có cách nào để tính chiều cao / chiều rộng tối đa của khung trong môi trường cửa sổ hiện tại hay không.


12
Yay! (if (window-system) (set-frame-size (selected-frame) 124 40))để giành chiến thắng - thật hay và ngắn gọn, và giúp tôi có được kích thước mà Terminal của tôi mặc định, thật đẹp và quen thuộc. :) (Điều chỉnh theo sở thích, tất nhiên.) Cảm ơn!
lindes

1
Chỉ cần làm rõ: nếu bạn đặt điều này vào init.elnó chỉ áp dụng cho khung ban đầu. Nếu bạn tạo một khung mới sau đó, chức năng trên sẽ không có hiệu lực; khung mới sẽ có cài đặt default-frame-alist.
David J.

Điều này phù hợp với tôi ngoại trừ điều đó (set-frame-size (selected-frame) 80 24)mang lại cho tôi khung 161 x 48; Tôi đang sử dụng màn hình 4K hidpi, nhưng tôi sẽ không mong đợi điều đó ảnh hưởng đến số lượng ký tự.
charliegreen

21

Lấy từ: 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)))

Cài đặt đầu tiên áp dụng cho tất cả các khung emac bao gồm cả khung đầu tiên bật lên khi bạn bắt đầu. Cài đặt thứ hai thêm các thuộc tính bổ sung vào khung hình đầu tiên. Điều này là do đôi khi rất hay khi biết khung ban đầu mà bạn bắt đầu sử dụng emacs.


Tôi đã sử dụng phương pháp đó trong một thời gian dài để thiết lập chiều cao và chiều rộng của khung ( (width . 80) (height . 40)), nhưng vì một số lý do, nó ngừng hoạt động sau khi tôi nâng cấp phiên bản Xubuntu của mình từ 12.04 lên 13.10: khi khởi chạy, kích thước khung là mặc định. Sau đó tôi chuyển sang sử dụng câu trả lời của Chris Conway, câu trả lời phù hợp với tôi.
Teemu Leisti

17

Cách đơn giản nhất tôi đã tìm thấy để làm điều đó trong một môi trường X-Window là thông qua các nguồn tài nguyên X . Phần có liên quan của .Xdefaults của tôi trông như thế này:

Emacs.geometry: 80x70

Bạn sẽ có thể gắn nó với tọa độ vị trí + 0 + 0 để buộc nó ở góc trên bên trái của màn hình. (lý do tôi không làm điều đó là tôi thỉnh thoảng tạo ra các khung hình mới và điều đó khiến mọi thứ trở nên khó hiểu nếu chúng xuất hiện ở cùng một vị trí như khung hình trước đó)

Theo hướng dẫn, kỹ thuật này cũng hoạt động trên MS Windows , lưu trữ các tài nguyên dưới dạng các cặp khóa / giá trị trong sổ đăng ký. Tôi chưa bao giờ thử nghiệm điều đó. Nó có thể là tuyệt vời, nó có thể bất tiện hơn nhiều so với việc chỉ đơn giản là chỉnh sửa một tệp.


1
yeap cũng hoạt động cho các cửa sổ. Emacs wiki cho biết thêm chi tiết: emacswiki.org/emacs/MsWindowsRegistry
Sa'ad

17

Hãy thử thêm mã sau vào .emacs

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

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

12

Bạn cũng có thể tham số -geometry khi kích hoạt emacs: emacs -geometry 80x60+20+30sẽ cung cấp cho bạn một cửa sổ rộng 80 ký tự, cao 60 hàng, với góc trên cùng bên trái 20 pixel bên phải và 30 pixel xuống từ góc trên cùng bên trái của nền.


7

Trên ubuntu làm:

(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

Trên windows, bạn có thể tăng tối đa khung emacs bằng chức năng này:

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

Tôi thích cài đặt của Bryan Oakley hơn. Tuy nhiên , chiều cao ' không hoạt động đúng trong GNU Emacs 24.1.1 của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.