我喜欢用简单,有品味的文字(甚至是一个很好的unicode字符,如\u2026
省略号)来替换指示截断或包裹线条的丑陋像素箭头。这可能吗?
答案 0 :(得分:2)
不,不是。边缘“位图”实际上是位图,即0/1位的向量,覆盖在边缘上。没有办法直接将任意unicode字符渲染到边缘。
你可以做的是自己将一个unicode字符渲染成0/1位图。任何像样的图像编辑器(例如Gimp,Photoshop,Pixelmator,Paint.net等)都可以做到这一点。然后将此位图转换为条纹位图矢量。边缘位图的格式在Customizing Fringe Bitmaps中描述。
最终,您可以使用这些位图向量替换left-arrow
,right-arrow
(对于截断的行),left-curly-arrow
和right-curly-arrow
(对于续行)位图,函数define-fringe-bitmap
。
然而,我会说这比它的价值更麻烦。边缘是8像素宽,所以你必须将你漂亮的unicode字符挤压成8x8位图。这意味着没有子像素渲染,没有别名,没有字节码渲染,没有什么能使屏幕上的字符变得美观和花哨。它和你所取代的箭一样丑陋。
答案 1 :(得分:0)
lunaryorn的答案是正确的,但它可能超出了新手Emacs用户的范围 - 例如,像我这样的程序员爱好者。
Nikolaj Schumacher在他的图书馆Fringe Helper中编写的函数fringe-helper-convert
- https://github.com/nschum/fringe-helper.el - 让像我这样的Emacs爱好者可以轻松创建一个由函数{{1}使用的向量(在Emacs的C源代码中定义)。我选择了一个pilcrow,但用户可以自由创建任何适合的图像 - 例如,使用大写字母define-fringe-bitmap
和句点X
,用户可以创建一个字母的形状。 / p>
.
以下示例假定;; 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)))
为20个像素 - 这样位图图像的高度与缓冲区中的文本相同。 let-bound代码片段在行尾的右边缘创建了一个pilcrow形状(无论何时点是评估片段的时间点)。该示例假设右边缘至少为11的宽度 - 例如,frame-char-height
转换为字符串的unicode符号 - (add-to-list 'default-frame-alist '(right-fringe . 11))
可能会被(char-to-string ?\uE000)
替换。
" "