Hintergrundfarbe eines bestimmten Blocks ändern?


7

Ich möchte eine andere Hintergrundfarbe von einer Funktion bis zum Ende beginnen.

So was:

Geben Sie hier die Bildbeschreibung ein

Ich bin mir bewusst, dass Sie Hintergrundfarben aus einigen Gesichtern wie Funktion und Funktionsnamen wie definieren können foobar. Es wirkt sich jedoch nur auf die Hintergrundfarbe der Wörter functionund aus foobar. Ich möchte die Hintergrundfarbe der gesamten Zeile ändern, in der die Funktion angezeigt wird, und damit enden.

Warum, würdest du fragen? Es würde mir viel leichter machen zu unterscheiden, welche Teile zu einer Funktion gehören.

Ich frage mich also, ob es in Emacs einen praktischen Weg gibt, dies zu verwalten. Gibt es ein Lisp-Paket, um so etwas zu erreichen?


Eine Überlagerung mit einem Gesicht wäre meiner Meinung nach am einfachsten - ähnlich wie das Hervorheben einer bestimmten Region - Sie können die Farbe und die Priorität auswählen. Für ein Beispiel, nehmen Sie einen Blick auf die Funktionen isearch-highlightundisearch-dehighlight
lawlist

Antworten:


4
  1. Sie können die Bibliothek Hervorheben verwenden , um einen Bereich mithilfe von Overlay- oder Texteigenschaften hervorzuheben, insbesondere mithilfe einer Eigenschaft face. Verwenden Sie zum Hervorheben des Hintergrunds ein Gesicht, das Attribute verwendet, backgroundjedoch nicht foreground.

    Wenn Sie die Texteigenschaft verwenden face, können Sie auch Eigenschaften aus einem Text kopieren und in einen anderen Text einfügen. Wenn sich Ihre Definition ändert und größer wird, können Sie einfach einen Teil des hervorgehobenen Teils kopieren und dann seine Eigenschaft facein den nicht hervorgehobenen Teil einfügen.

    Sie können auch die in der Bibliothek definierten Funktionen verwenden, um die Hervorhebung eines Defuns automatisch zu erweitern (z. B. als Pufferwechsel-Hook oder regelmäßig auf einem Timer), um Änderungen daran zu berücksichtigen.

    Wenn Sie eine Überlagerung verwenden, können Sie mit den Befehlen zum Löschen von Markierungen (z. B. hlt-eraser) nur das zuletzt hervorgehobene Gesicht entfernen. Ziehen Sie die Maus über den Text, an dem Sie die Hervorhebung entfernen möchten.

  2. Sie können die normale Schriftsperre verwenden. Fügen Sie ein Muster hinzu font-lock-keywords, das eine Funktion verwendet, die den Anfang und das Ende Ihrer Definition erkennt. Weitere Informationen finden Sie im Elisp-Handbuch, im Knoten Anpassen von Schlüsselwörtern sowie im übergeordneten Knoten, im Schriftsperrmodus und in den anderen untergeordneten Knoten .


UPDATE nach deinem Kommentar

Ich denke, Sie möchten vielleicht nicht die Region, sondern die von der Region berührten Linien hervorheben und die Hervorhebung über das Ende des Textes hinaus erweitern (einschließlich über Leerzeichen hinaus). Ist es das? Wenn ja, versuchen Sie Folgendes:

(defun hlt-highlight-lines (start end face msgp)
  "Highlight full lines in region, window-wide."
  (interactive (list (save-excursion (goto-char (region-beginning))
                                     (line-beginning-position))
                     (save-excursion (goto-char (region-end))
                                     (line-beginning-position 2))
                     nil
                     t))
  (hlt-highlight-region start end face msgp))

Drew, danke für deine Antwort. Es dauerte einige Zeit, bis ich auf Ihre Antwort antwortete, da ich diese Anwendungen ausprobieren wollte. Die highlightBibliothek hat für mich jedoch nicht funktioniert. Es wird nur ein Hintergrund darauf angewendet, wo sich der Text befindet. Wenn der Text endet, hört er mit der Hintergrundfarbe auf. Irgendein Vorschlag?
ReneFroger

1. Ich denke, Sie möchten vielleicht die Hervorhebung über das Ende des Textes hinaus erweitern (einschließlich über Leerzeichen hinaus). Ist es das? Wenn ja, versuchen Sie den Befehl, den ich oben hinzugefügt habe. 2. Haben Sie auch die Antwort auf die Schriftsperre versucht? Das sollte auch funktionieren.
Drew

Auf jeden Fall habe ich diesen einfachen Befehl zum hinzugefügt highlight.el. Wenn es dir hilft, gut.
Drew

Beachten Sie, dass dies funktioniert, solange Sie nach der letzten Zeile, die Sie hervorheben möchten, eine neue Zeile haben.
zck
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.