2013-04-19 6 views

Antwort

2

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.

+0

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

+0

@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

+0

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

0

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)))) 
Verwandte Themen