Ich habe eine Spalte in einer Tabelle im Organisationsmodus mit Zahlen in jeder Zelle. Ich möchte die Hintergrundfarbe der Zelle in Rot ändern, wenn die Zahl unter 1 oder über 2 liegt.
Wie kann ich das machen?
org-table
formatting
formula
Trevoke
quelle
quelle
org-table-edit-formulas
akaC-c '
als auchorg-table-toggle-coordinate-overlays
akaC-c }
liefern Hinweise zur Implementierung dieser Art von Hervorhebungsfunktion. Vielleicht liefert ein Elisp-Guru einige zusätzliche Hinweise oder Beispiele.Antworten:
Ich habe eine Formatierung für ganze Tabellen, um mit einigen Elisp zu arbeiten:
Eine Formel wird für den Inhalt der Zellen ausgewertet und mithilfe eines Verlaufs in eine Farbe umgewandelt.
Org-Datei mit Code:
quelle
cs/itpl
Führt eine einfache lineare Interpolation durch undcs/gradient
verwendet diese, um eine Farbe mithilfe einer Liste von Datenpunkten und Farbstopps zu interpolieren. Von dort fügt es nur eine Überlagerung wie in Ihrer Antwort. Das Beispiel ist ein bisschen nicht trivial, da es Daten von anderen Stellen in der Tabelle abfragt.org-table-map-tables
.Mit einem Overlay werde ich es tun wollen. Ich kann mich in org-ctrl-c-ctrl-c-hook einhängen. Dies bedeutet, dass ich Cc Cc drücken kann, um die Prüfung auszuführen.
Ich muss richtig überprüfen, dass ich in einer Tabelle bin und dies für alle Zellen ausführen.
Dann muss ich mich wahrscheinlich in die Ausrichtungsfunktion einhängen, um die Überlagerungen entweder zu wiederholen oder zumindest zu löschen.
Durch diesen Code wird der Zellenhintergrund für die Zelle, in der ich mich befinde, rot, wenn der Wert kleiner als 1 oder größer als 2 ist, wenn ich Cc Cc drücke. t entsprechen den Regeln.
quelle
Dies ist noch keine Antwort, aber ich möchte die Dinge, die ich hier entdecke, im Auge behalten, da sie möglicherweise jemand anderem eine Idee geben.
Es ist möglich, den Wert der Zelle selbst bedingt zu ändern :
Wir können eine Formatierungsfunktion in elisp erstellen und sie dann aus der Formelzeile aufrufen:
Und es kann so verwendet werden:
Ich denke, was ich will, erfordert möglicherweise die Erstellung eines Overlays.
quelle
Emacs bietet die Funktion,
hi-lock-face-buffer
M-s h rdie einen regulären Ausdruck im Puffer während der Eingabe hervorhebt.Alles, was wir brauchen, ist ein regulärer Ausdruck, der mit jeder Zahl übereinstimmt, die nicht 1 oder 2 ist und sich in der Zelle einer Tabelle befindet. Versuche dies:
(Sie können frühere Ausdrücke mit M-nund abrufen M-p.)
quelle