Frage

Wie ändern Sie das Standard-Gesicht, der Emacs-Stil Text auf einer Pro-Modus Basis verwendet?

Zum Beispiel, sagen, dass ich bin schon zufrieden mit dem Gesicht von Anpassungen, die ich habe, zu denen eine Standard-Schriftart mit fester Breite. Jedoch in einem bestimmten Modus (markdown-mode.el, sagen), ich möchte die Standardschriftart mit variabler Breite sein.

Es zu Stil-Header einfach, Links usw. eindeutig für Abschlags-Modus. Einfach mit der Maus auf dem formatierten Text und M-x describe-face, dann auf den Link klicken, um es anpassen

Allerdings ist die Standard-Gesicht der verwendete Gesicht, wenn kein anderes Gesicht angegeben ist, so ist es nicht spezifisch für Abschlags-Modus und wenn geändert werden alle anderen Modi beeinflussen.

Welche Magie kann ich in der markdown-mode-hook setze die Standardseite für Puffer mit diesem Modus zu setzen?

War es hilfreich?

Lösung

Wie wäre es etwa so:

(add-hook 'markdown-mode-hook (lambda () (variable-pitch-mode t))

Sie können dann das variable-pitch Gesicht anpassen, und die anderen Gesichter im Puffer werden von diesem anstelle der Standardseite erben.

Lesen Sie die Dokumentation für buffer-face-mode für weitere individuelle Details. (BufFace wird auch verwendet für text-scale-increase und text-scale-decrease ... sehr nützlich.)

Andere Tipps

Ich habe eine teilweise Antwort zu geben, weil dies zu kompliziert ist an Ort und Stelle, um herauszufinden, und ich blies schon mein Zeitbudget.

Face ist eine Frame-Eigenschaft. Ein Rahmen kann mehrere Puffer zur gleichen Zeit angezeigt werden soll. Mode ist ein Puffer-Eigenschaft. Sie fragen, wie das Gesicht zu verändern, auf einer Pro-Modus Basis. Die Kombination all dieser, so scheint es, dass die Frage kann vollständig richtige Antwort nicht keine einzige haben.

Sie können die gewünschte Antwort annähern, wenn Sie davon ausgehen, dass ein gegebener Rahmen wird nie mehr als ein Puffer angezeigt werden soll. Sie können tatsächlich erreichen, dass mit so etwas, aber für besondere Display-regexps und einen Satz von regulären Ausdrücken zu verwenden, modifiziert, dass Ihre Abschlags-Modus Puffer-Namen entsprechen.

(append special-display-buffer-names
        '("*VC-log*"
          "*Help*"
          ("*Completions*" 
           (height . 25)
           (font . "8x13"))))

Dies ist jedoch wahrscheinlich nicht das, was Sie wollen. Ihre Frage scheint die Gesichtseigenschaften eines einzelnen Rahmens zu implizieren, zu ändern.

unter der Annahme wieder, dass ein Rahmen wird nie zu einem Zeitpunkt mehr als einen Puffer angezeigt wird, können Sie versuchen, Switch-to-Buffer zu beraten. Aber das ist vielleicht nicht ausreichend niedriges Niveau sein und es könnte zu langsam sein. (Ungetestet)

(defadvice switch-to-buffer (after switch-to-buffer activate compile)
  "change the frame's default face after switch-to-buffer"
  (doSomethingToChangePropertiesOfDefaultFace))

Und jetzt meine eigentliche (unvollständigen) Antwort ...

Ein besserer, wenn auch komplizierter Ansatz würde Abschlags-Modus anweisen, für alle Regionen ein neues Gesicht zu verwenden, die nicht bereits eine der eingebauten in Flächen zugeordnet sind. Sie können ein neues Gesicht mit Kopie-Gesicht erstellen und geben Sie es interessante Objekte mit Set-Gesicht- *.

Ändern Abschlags-Modus des font-lock-defaults die Standardschriftart-Lock-fontify-Region-Funktion außer Kraft zu setzen, wie in dem Kommentarblock in der Nähe von Linie 946 von font-lock.el beschrieben, die "Fontification Funktionen" beginnt. Sie können sich wahrscheinlich eine sehr leicht modifizierte font-lock-default-fontify-Region verwenden, die unmittelbar nur einen zusätzlichen Schritt tut, nachdem es tut:

  (unless font-lock-keywords-only
    (font-lock-fontify-syntactically-region beg end loudly))

Der zusätzliche Schritt analysiert die Region ähnlich ist, was font-lock-fontify-syntaktisch-Region der Fall ist, die Region in „interessant“ Unterregionen zu brechen. Aber dieses Mal sind Sie Subregionen finden, die die Standard Gesicht haben und Sie setzen Text-Eigenschaft diese Teilbereiche in das neue Gesicht, die Sie zuvor erstellt haben.

Bei alledem fühlt sich an wie es nur ein paar Zeilen von elisp in Ihrer .emacs-Datei sein sollte, sowie eine Kopie von font-lock-default-fontify-Region, die man nur eine geringe diff von der ursprünglichen (Aufruf neu hat Funktion) sowie eine Kopie der font-lock-fontify-syntaktisch-Region machen und ändern sie Ihre Gebote zu tun (der schwierigste Teil).

Eigentlich, wenn Sie "nach" advise font-lock-fontify-syntaktisch-Region dann brauchen Sie wahrscheinlich nicht einmal font-lock-defaults oder font-lock-default-fontify-Region.

ändern

Der variable-pitch-Modus ist genial. Ich fand heraus, über sie durch diesen Thread. Aber es kann noch mehr genial gemacht werden:

(dolist (hook '(erc-mode-hook
        LaTeX-mode-hook
        org-mode-hook
        edit-server-start-hook
        markdown-mode-hook))
  (add-hook hook (lambda () (variable-pitch-mode t))))

Fügen Sie einfach, was Sie Modus serifenlose Schriften wollen in der Liste hinzu.

Es ist eigentlich einfach, auch für Emacs Version 22.3.1 ...

Versuchen Sie einfach folgendes:

(progn 
  (set-buffer "your buffer name here")
  (overlay-put (make-overlay 0 (buffer-size)) 'face 'your-face))

Es gibt einen Code-Block, den ich sehr praktisch finden, von EmacsWiki. Der Vorteil hierbei ist, dass Sie nicht nur Schriftart einstellen können, aber bequem :height konfigurieren, :width usw. als auch

;; Use variable width font faces in current buffer
(defun my-buffer-face-mode-variable ()
  "Set font to a variable width (proportional) fonts in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
  (buffer-face-mode))
;; Use monospaced font faces in current buffer
(defun my-buffer-face-mode-fixed ()
  "Sets a fixed width (monospace) font in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "Consolas" :height 100))
  (buffer-face-mode))
;; Set default font faces for Info and ERC modes
(add-hook 'erc-mode-hook 'my-buffer-face-mode-variable)
(add-hook 'Info-mode-hook 'my-buffer-face-mode-variable)

In Kombination mit load-theme-buffer-local Paket können Sie auch das Farbthema für den Puffer angeben leicht:

(defun my-buffer-face-mode-variable ()
  "Set font to a variable width (proportional) fonts in current buffer"
  (interactive)
  (setq buffer-face-mode-face '(:family "DejaVu Sans" :height 100 :width semi-condensed))
  (buffer-face-mode)
  (load-theme-buffer-local 'leuven (current-buffer)))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top