2012-06-08 4 views
5

Tôi đang sử dụng Emac trên một netbook nhỏ để viết mã và tôi đã đặt kích thước phông chữ sao cho các ký tự điền vào cột (79) chiều rộng của một cửa sổ 'tối đa hóa' duy nhất (nghĩa là kích thước phông chữ khá lớn). Tuy nhiên, nếu tôi mở hai cửa sổ cạnh nhau, tôi muốn kích thước phông chữ trong các cửa sổ đó sẽ tự động co lại sao cho chiều rộng của mỗi cửa sổ chứa ít nhất 79 ký tự.Emacs tự động thay đổi kích thước phông chữ dựa trên chiều rộng cửa sổ và điền vào cột

Trước khi tôi bắt đầu tìm hiểu sâu về điều này (tôi không giỏi ở Lisp), có thể lấy chiều rộng của cửa sổ trên mỗi kích thước, chia cho các cột điền và dựa trên kết quả đó. ?

+0

Điều này có thể xảy ra, mặc dù tùy chọn phông chữ của bạn có vai trò nào đó trong việc xác định chiều cao của phông chữ sau mỗi lần chia nhỏ và không được phép. xem các hàm này 'khung-pixel-width'' frame-char-width' 'set-face-attribute' – kindahero

Trả lời

2

Dường như với tôi đúng nơi để làm điều này sẽ window-size-change-functions:

Chức năng gọi trước khi hiển thị lại, nếu kích thước cửa sổ có thay đổi. Giá trị phải là danh sách các hàm có một đối số . Ngay trước khi hiển thị lại, đối với mỗi khung, nếu bất kỳ cửa sổ nào của nó đã thay đổi kích thước kể từ lần hiển thị lại cuối cùng hoặc đã bị tách hoặc bị xóa, tất cả các chức năng trong danh sách được gọi, với khung là đối số .

Cụ thể, dính vào một cái gì đó như thế này trong .emacs của bạn:

(defun window-width-to-font-size (window-width) 
    ;; Insert a calculation to turn window width into 79 chars. 
) 

(add-to-list 
'window-size-change-functions 
(lambda (frame) 
    (dolist (window (window-list frame)) 
    (set-face-attribute 
     'default nil 
     :width (window-width-to-font-size (window-body-width window)))))) 
0

Có lẽ có một cái nhìn tại thư viện face-remap+.el, trong đó chủ yếu làm điều ngược lại: Khi bạn thu nhỏ kích thước văn bản kích thước cửa sổ co lại cho phù hợp, để không có thêm không gian lãng phí xung quanh văn bản. Dunno liệu mã đó có giúp ích hay không, nhưng nó có thể cung cấp cho bạn một số ý tưởng.