2012-06-08 1 views
5

Ich benutze Emacs auf einem kleinen Netbook, um Code zu schreiben, und ich habe die Schriftgröße so eingestellt, dass etwa Füll-Spalte (79) Zeichen füllen Breite eines einzelnen maximierten Fensters (dh ziemlich große Schriftgröße). Wenn ich jedoch zwei Fenster nebeneinander öffne, möchte ich, dass die Schriftgröße in diesen Fenstern automatisch verkleinert wird, sodass die Breite jedes Fensters mindestens 79 Zeichen umfasst.Emacs dynamisch Schriftgröße basierend auf Fensterbreite und Füllspalte ändern

Bevor ich mich näher damit beschäftige (ich bin nicht gut in Lisp), ist es möglich, die Breite des Fensters auf jeder Größe zu erhalten, durch Spalten zu teilen und auf der Grundlage dieses Ergebnisses eine Schriftart mit einem festen Abstand zu wählen ?

+0

Es sollte möglich sein, obwohl Ihre Schriftart-Präferenz eine Rolle bei der Bestimmung der Höhe der Schriftart nach jeder Aufteilung spielt und ungeteilt ist. Betrachte diese Funktionen 'frame-pixel-width'' frame-char-width' 'set-face-attribute' – kindahero

Antwort

2

Es scheint mir, den richtigen Ort, dies zu tun wäre window-size-change-functions:

Funktionen vor redisplay genannt, wenn Fenstergrößen haben geändert. Der Wert sollte eine Liste von Funktionen sein, die ein Argument nehmen. Wenn vor dem erneuten Anzeigen für jedes Bild eines seiner Fenster seine Größe seit der letzten Neuanzeige geändert hat oder geteilt wurde oder gelöscht wurde, werden alle Funktionen in der Liste mit dem Rahmen als Argument aufgerufen.

Insbesondere bleiben so etwas in Ihrem .emacs:

(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

Vielleicht face-remap+.el, einen Blick auf Bibliothek nehmen, die im Wesentlichen das Gegenteil tut: Wenn Sie die Textgröße der Größe entsprechend schrumpft Fenster schrumpfen, so Es gibt keinen verschwenderischen zusätzlichen Raum um den Text herum. Weiß nicht, ob dieser Code hilft, aber es könnte dir ein paar Ideen geben.