Ich würde gerne die hässlichen Pixelpfeile ersetzen, die verkürzte oder umwickelte Zeilen mit einfachem, geschmackvollem Text anzeigen (vielleicht sogar ein nettes Unicode-Zeichen, wie eine \u2026
Ellipse). Ist das möglich?Ist es möglich, Fringe Bitmaps mit Text in Emacs zu ersetzen?
Antwort
Nein, ist es nicht. Fringe "Bitmaps" sind wirklich Bitmaps, das sind Vektoren von 0/1 Bits, die über den Rand gelegt werden. Es gibt keine Möglichkeit, beliebige Unicode-Zeichen direkt in den Rand einzufügen.
Sie können ein Unicode-Zeichen selbst in eine 0/1-Bitmap rendern. Jeder vernünftige Bildeditor (z. B. Gimp, Photoshop, Pixelmator, Paint.net usw.) kann dies tun. Konvertieren Sie dann diese Bitmap in einen Randbitmapvektor. Das Format der Randbitmaps ist in Customizing Fringe Bitmaps beschrieben.
Schließlich kann diese Bitmap-Vektoren verwenden, die left-arrow
, right-arrow
(für trunkierte Linien) zu ersetzen, left-curly-arrow
und right-curly-arrow
(für die weiteren Linien) Bitmaps, mit der Funktion define-fringe-bitmap
.
Allerdings würde ich sagen, dass dies mehr Aufwand als es wert ist. Der Rand ist 8 Pixel breit, also müssten Sie Ihren schönen Unicode-Charakter in eine 8x8 Bitmap pressen. Das bedeutet kein Subpixel-Rendering, kein Aliasing, kein Bytecode-Rendering, nichts, was die Zeichen auf dem Bildschirm schön und schick macht. Es wäre genauso hässlich wie die Pfeile, die du ersetzt hast.
Interessant! Das sieht nicht nach viel Ärger aus, vor allem, weil OP erwähnt, dass er eine Ellipse verwenden möchte. In einer 8x8-Bitmap, die ein 2x2-Pixel-Punkt wäre, der dreimal wiederholt wird, getrennt durch ein leeres Pixel (das wäre 8 Pixel breit). Ich stimme OP zu, dass der Standardpfeil mehr als nur fusselig ist. Wissen Sie, wo wir die Bitmap nach links ändern oder eine eigene Bitmap hinzufügen könnten? – TacticalCoder
@TacticalCoder Sie können Fringe Bitmaps mit einem einfachen Aufruf von 'define-fringe-bitmap' neu definieren, wie [Ich habe es in Flycheck getan] (https://github.com/lunaryorn/flycheck/blob/09a814a4a153e6be0571b5c270d0b46d7fe866e9/flycheck.el#L1821). Und glauben Sie mir, Fringe Bitmaps * sind * ein Ärger. Kenne ich schon. Und hier gibt es keinen Gewinn. Sie können keine großartige Kunst auf einer 8x8 Schwarz/Weiß Bitmap machen, und eine 2x2 Ellipse wäre nicht schöner als die Standardpfeile. Diese Pfeile sind hässlich, gerade weil diese Bitmaps so begrenzt sind. – lunaryorn
Ich schaue mir an, was du beim Flycheck gemacht hast.Ich habe "Pixel Art" in 8x8 Pixel gesehen, die nicht so schlecht aussah, also werde ich es versuchen;) – TacticalCoder
Die Antwort von Lunaryorn ist korrekt, aber es ist vielleicht unerreichbar für unerfahrene Emacs Benutzer - z. B. Programmierer Hobbyisten wie mich.
Die Funktion fringe-helper-convert
von Nikolaj Schumacher in seiner Bibliothek geschrieben Fringe Helper - https://github.com/nschum/fringe-helper.el - macht es für Emacs Bastler wie ich einfach einen Vektor zu erstellen, die von der die Funktion define-fringe-bitmap
verwendet wird (die in der C-Quelle definiert ist, Code von Emacs). Ich wählte eine pilcrow, aber der Benutzer ist frei, jedes Bild zu erstellen, das passt - z. B. unter Verwendung des Großbuchstabens X
und der Periode .
, könnte der Benutzer die Form eines Briefes erstellen.
;; AUTHOR: Nikolaj Schumacher -- https://github.com/nschum/fringe-helper.el
(defun fringe-helper-convert (&rest strings)
"Convert STRINGS into a vector usable for `define-fringe-bitmap'.
Each string in STRINGS represents a line of the fringe bitmap.
Periods (.) are background-colored pixel; Xs are foreground-colored. The
fringe bitmap always is aligned to the right. If the fringe has half
width, only the left 4 pixels of an 8 pixel bitmap will be shown.
For example, the following code defines a diagonal line.
\(fringe-helper-convert
\"XX......\"
\"..XX....\"
\"....XX..\"
\"......XX\"\)"
(unless (cdr strings)
;; only one string, probably with newlines
(setq strings (split-string (car strings) "\n")))
(apply 'vector
(mapcar
(lambda (str)
(let ((num 0))
(dolist (c (string-to-list str))
(setq num (+ (* num 2) (if (eq c ?.) 0 1))))
num))
strings)))
Das folgende Beispiel nimmt ein frame-char-height
von 20 Pixel - so dass das Bitmap-Bild auf die gleiche Höhe wie der Text in dem Puffer ist. Das gebundene Snippet erstellt eine Pilcrow-Form im rechten Rand am Ende der Zeile (wo auch immer der Punkt bewertet wird, an dem der Snippet ausgewertet wird). In dem Beispiel wird angenommen, dass der rechte Rand mindestens eine Breite von elf aufweist - z. B. (add-to-list 'default-frame-alist '(right-fringe . 11))
. Das in Zeichenfolge konvertierte Unicode-Symbol - (char-to-string ?\uE000)
könnte wahrscheinlich durch " "
ersetzt werden.
(define-fringe-bitmap 'pilcrow (fringe-helper-convert
"......."
"......."
"......."
"......."
"......."
".XXXXXX"
"XXXX.X."
"XXXX.X."
"XXXX.X."
".XXX.X."
"...X.X."
"...X.X."
"...X.X."
"...X.X."
"...X.X."
"...X.X."
"......."
"......."
"......."
"......."))
(let ((peol (point-at-eol)))
(overlay-put (make-overlay peol peol) 'after-string
(propertize (char-to-string ?\uE000) 'display
'(right-fringe pilcrow font-lock-keyword-face))))
- 1. Ist es möglich, Ropemacs mit TRAMP in Emacs zu verwenden?
- 2. Emacs abfrage ersetzen mit Text Transformation
- 3. Ist es möglich, Emacs mit einer Remote-Konfigurationsdatei zu starten?
- 4. createjs: Ist es möglich, Text zu rechtfertigen?
- 5. Ist es möglich, Minibuffer und Echobereich in Emacs zu trennen?
- 6. Ist es möglich, in Visual Studio in Großbuchstaben zu ersetzen?
- 7. Ist es möglich, Text von einer anderen Anwendung in den aktuellen Puffer von Emacs zu schieben?
- 8. Ist es möglich, Enums zu Text in Posgresql zu konvertieren
- 9. Ist es möglich, Semantic (Emacs) alle Dateien automatisch zu besuchen?
- 10. Ist es möglich, einen Ausdruck durch einen Text in PHP zu ersetzen?
- 11. Ist es möglich, eine Notiz mit Emacs-Puffern hinzuzufügen?
- 12. Ist es möglich, den globalen "Operator new()" überall zu ersetzen?
- 13. (Emacs) Text ist schreibgeschützt?
- 14. Ist es möglich, den Mac-Anmeldebildschirm zu ersetzen?
- 15. Warum ist es möglich, diese Typen zu ersetzen?
- 16. Ist es möglich, spiegelnden Text in R zu plotten?
- 17. Ist es möglich, Text in der Auswahlbox zu zentrieren?
- 18. Ist es möglich, Groovy-Methode für bestehendes Objekt zu ersetzen?
- 19. Ist es möglich zu machen Regex ersetzen nicht gierig?
- 20. Ist es möglich, URLEncoder.encode nicht zu ersetzen = zeichen?
- 21. Emacs Lisp: Ist es möglich (mit Lisp), Befehl in einer Eshell in anderen Puffer zu laufen?
- 22. Ist schnell (wiederholt) in Emacs möglich?
- 23. Latex - Ist es möglich, Text oben auf Bildern zu haben?
- 24. Emacs regexp ersetzen Situation
- 25. Emacs Experten: ist es möglich, f # Intellisense Kommandozeilen-Tool mit Emacs verbinden?
- 26. Ist es möglich, das Fenster "Suchen/Ersetzen" in Eclipse anzudocken?
- 27. ist es möglich, UIButton Titel/Text programmatisch zu aktualisieren?
- 28. Ist es möglich, Text innerhalb des Bootstrap-Frameworks zu rechtfertigen?
- 29. Ist es möglich, mit Boost.Hana zu deserialisieren?
- 30. Möglich, sscanf Argumente mit Array zu ersetzen
Sie können durch 'fringe.el' schauen, wo die Randbitmaps eingerichtet werden. –