ฉันจะกำหนดขนาดหน้าต่างของ Emacs ได้อย่างไร?


103

ฉันกำลังพยายามตรวจจับขนาดของหน้าจอที่ฉันเริ่มใช้ emac และปรับขนาดและตำแหน่งของหน้าต่างที่กำลังเริ่มต้น (ฉันเดาว่านั่นคือกรอบใน emacs-speak) ตามนั้น ฉันกำลังพยายามตั้งค่า. emac ของฉันเพื่อให้ได้หน้าต่างที่ "ใหญ่พอสมควร" โดยที่มันอยู่มุมบนซ้ายใกล้กับมุมบนซ้ายของหน้าจอ

ฉันเดาว่านี่เป็นเรื่องใหญ่สำหรับกรณีทั่วไปดังนั้นเพื่อ จำกัด สิ่งต่างๆให้แคบลงฉันสนใจ GNU Emacs 22 บน Windows และ (Debian) Linux มากที่สุด

คำตอบ:


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)

โปรดทราบว่าระบบหน้าต่างเลิกใช้งานใน emac เวอร์ชันใหม่กว่า (display-graphic-p)ทดแทนที่เหมาะสม ดูคำตอบสำหรับคำถามนี้จะตรวจสอบได้อย่างไรว่า emac อยู่ในโหมดเทอร์มินัล สำหรับพื้นหลังเพิ่มเติมเล็กน้อย


ฉันชอบตัวเลขที่แตกต่างกันดังนั้น (ตามที่คุณแนะนำ) ฉันปรับแต่งของฉัน วิธีนี้ใช้งานได้ดีแม้ว่า; ขอบคุณ!
lindes

จากนั้นอีกครั้งฉันชอบเวอร์ชันนี้มากกว่า - ง่ายกว่ามาก (อ่านง่ายและปรับแต่งได้) และเหมาะกับความต้องการของฉันดี ทั้งสองเป็นคำตอบที่ดี แต่! +1
ลินเดส

1
ระวังความสูงอย่างน้อยที่สุดใน Emacs 24.2 บน OS X หากคุณตั้งค่าหนึ่งแถวสูงเกินไปหน้าต่างจะติดอยู่ในสถานะที่มองไม่เห็นแถวแรกของบัฟเฟอร์ - จุดสามารถเลื่อนขึ้นไปที่นั่นได้ แต่หน้าต่างจะไม่เลื่อนเพื่อแสดง
Greg Hendershott

2
มีสิ่งประดิษฐ์เล็ก ๆ น้อย ๆ ด้วยวิธีนี้ (และมีรายการอื่น ๆ อยู่ที่นี่) Emac จะเปิดขึ้นพร้อมกับขนาดที่แน่นอนและหลังจากผ่านไปเสี้ยววินาทีจะปรับขนาดเป็นขนาดที่เราตั้งไว้ แต่การเปลี่ยนแปลงจะมองเห็นได้ มีวิธีบอก emacs วาดตัวเองตามขนาดที่ต้องการจาก t = 0 sec หรือไม่?
stathisk

48

ฉันมีสิ่งต่อไปนี้ใน.emacs:

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

นอกจากนี้คุณยังอาจมีลักษณะที่ฟังก์ชั่นset-frame-size, และset-frame-position set-frame-widthใช้C-h f(aka 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 คูณ 48; ฉันใช้หน้าจอ 4K hidpi แต่ฉันไม่คาดหวังว่าสิ่งนั้นจะส่งผลต่อการนับจำนวนอักขระ
charliegreen

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

การตั้งค่าแรกใช้กับเฟรม emac ทั้งหมดรวมถึงเฟรมแรกที่ปรากฏขึ้นเมื่อคุณเริ่ม การตั้งค่าที่สองจะเพิ่มแอตทริบิวต์เพิ่มเติมให้กับเฟรมแรก นี่เป็นเพราะบางครั้งมันก็เป็นเรื่องดีที่ได้รู้จักเฟรมดั้งเดิมที่คุณเริ่มใช้ emac


ฉันใช้วิธีนี้มานานแล้วในการตั้งค่าความสูงและความกว้างของเฟรม ( (width . 80) (height . 40)) แต่ด้วยเหตุผลบางอย่างมันหยุดทำงานหลังจากที่ฉันอัปเกรด Xubuntu เวอร์ชันจาก 12.04 เป็น 13.10: เมื่อเปิดตัวขนาดเฟรมเป็นค่าเริ่มต้น จากนั้นฉันก็เปลี่ยนมาใช้คำตอบของ Chris Conway ซึ่งเหมาะกับฉัน
Teemu Leisti

17

วิธีที่ง่ายที่สุดที่ฉันได้พบที่จะทำในสภาพแวดล้อมที่ X-หน้าต่างผ่านทรัพยากร X ส่วนที่เกี่ยวข้องของ. Xdefaults ของฉันมีลักษณะดังนี้:

Emacs.geometry: 80x70

คุณควรจะสามารถต่อท้ายด้วย + 0 + 0 พิกัดตำแหน่งเพื่อบังคับให้ไปที่มุมซ้ายบนของจอแสดงผลของคุณ (เหตุผลที่ฉันไม่ทำก็คือบางครั้งฉันวางไข่เฟรมใหม่และมันทำให้หลาย ๆ อย่างสับสนหากพวกมันปรากฏในตำแหน่งเดียวกันกับเฟรมก่อนหน้านี้)

ตามคู่มือเทคนิคนี้ใช้ได้กับ MS Windows เช่นกันโดยจัดเก็บทรัพยากรเป็นคู่คีย์ / ค่าในรีจิสทรี ฉันไม่เคยทดสอบสิ่งนั้น มันอาจจะดีมาก แต่อาจมีความไม่สะดวกมากกว่าเมื่อเทียบกับการแก้ไขไฟล์


1
ยีปใช้ได้กับ 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

คุณยังสามารถใช้พารามิเตอร์ -geometry เมื่อเริ่มใช้ emacs: 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 frame ขยายใหญ่สุดได้โดยใช้ฟังก์ชันนี้:

(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 มากกว่า อย่างไรก็ตาม'ความสูงไม่ทำงานอย่างถูกต้องใน GNU Emacs 24.1.1 ของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.