gpt4 book ai didi

emacs - Emacs —如何创建垂直删除线效果

转载 作者:行者123 更新时间:2023-12-01 01:00:42 25 4
gpt4 key购买 nike

我正在寻找有关如何创建垂直strike-through的视觉效果的建议(该字符在垂直条(“ \ u007C”)顶部仍然可见)。如果可以分层,则垂直条应位于其下方,以便字母几乎可见。

我搜索了一种叠加字符,对覆盖层进行分层的方法,然后查看了一些xpm图像,但是,我没有找到任何与我要查找的内容相距遥远的东西。目的是要具有与下图类似的真正的十字线效果-将灰色背景替换为黄色垂直删除线,以使字母仍然可见。

最佳答案

功能请求#17684(十字准线)[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=17684]和功能请求22873(多个假光标)[https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22873]正在开发中。尽管尚不清楚这些功能是否会被纳入正式的Emacs中,但上述两个功能要求中都已发布了有效的证明草案概念。在从master分支(X11,Windows或NS)构建Emacs的GUI版本之前,这些功能需要对C和Lisp内部进行修改。



示例3之1

以下代码段可在某些操作系统上使用某些字体-例如,在Windows上开箱即用;但是,它不适用于OSX 10.6.8 Snow Leopard或Snow Leopard Server 10.6.8上的该作者。 [请参阅编号为20537的错误报告-https://debbugs.gnu.org/cgi/bugreport.cgi?bug=20537-即使Emacs开发团队已正式关闭该错误报告,但在“错误修复”之后,该作者仍无法在Snow Leopard上使用该功能。 :(]用户可能希望试验字形参考点,并且reference-point-alist中的变量composite.el具有与之相关的详细文档字符串,用户也可能希望尝试使用after-string或< cc>显示属性。位于http://www.emacswiki.org/emacs/vline.el的库before-string具有一个名为vline.el的变量,可以将其设置为vline-style'face'compose –后两个设置导致'mixed请使用此代码段的细微变化[请参见所述库的第362至370行]。

(let* (
(point-min (point-min))
(point-max (point-max))
(pt (point))
(pt+1 (1+ pt))
(char (char-after pt))
(line-char (string-to-char "|"))
(str (when char (compose-chars char '(tc . tc) line-char))) )
(overlay-put (make-overlay pt pt+1) 'display str)
(sit-for 2)
(remove-overlays point-min point-max 'display str))




范例2之3:

以下代码段使用一个称为Unicode字符的零间距空格(即 vline)。因为空间不能接收前景色,所以背景颜色用于为零宽度的空间显示一条细的垂直线,该线会延伸整个线的高度。如在此代码段的上下文中所使用的,零宽度空间的宽度为1个像素,并且所连接字符的大小减小了,使得两个组合字符的宽度等于 uFEFF。此片段的测试是在OSX操作系统上使用默认字体 frame-char-width完成的。在此示例中,将光标移了很短的时间,以便可以更清晰地看到覆盖。

(let* (
(point-min (point-min))
(point-max (point-max))
(pt (point))
(pt+1 (1+ pt))
(char (char-after pt))
(char-str (when char (char-to-string char)))
(ln-char-str (char-to-string ?\uFEFF))
(str (when char
(concat
(propertize ln-char-str 'face '(:background "red"))
(propertize char-str 'face '(:height 100))))) )
(internal-show-cursor nil nil)
(overlay-put (make-overlay pt pt+1) 'display str)
(sit-for 2)
(internal-show-cursor nil t)
(remove-overlays point-min point-max 'display str))




示例3之3:

以下是使用xpm图像覆盖的示例,用于支持xpm图像格式的图形Emacs版本。它是11像素宽; 20像素高;并有4种预选颜色。我在运行Snow Leopard 10.6.8的Mac上,使用Emacs时喜欢的字体是 -*-Monaco-normal-normal-normal-*-12-*-*-*-m-0-iso10646-1- -*-Courier-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1是11而 frame-char-width是20。我在左侧添加了一条细的垂直黄线以大写字母“ A”开头,以作为如何绘制自定义图像的示例。可以通过编程方式使用 frame-char-height替换该点处的字符,并采用该数字-在这种情况下为大写字母“ A”为65-并替换相应的变量-例如 (char-after (point))-在重叠式广告展示位置中使用该变量,例如 (cond ((eq (char-after (point)) 65) cap-ltr-a-xpm) . . .。这对于截断缓冲区和自动换行都非常有效,因为单词中间字符上的 (overlay-put (make-overlay (point) (1+ (point))) 'display cap-ltr-a-xpm) overlay属性不会导致自动换行认为单词的第一部分在单词的结尾上一行。自然,创建喜爱的xpm图像的自定义库将需要一些时间。在此示例中,将光标移了很短的时间,以便可以更清晰地看到覆盖。

ImageMagick能够根据特定的字体系列和大小产生特定字符的半准确xpm,但是它不如我所希望的那样精确-这是使用该外部实用程序的说明的链接: https://stackoverflow.com/a/14168154/2112489简而言之,用户应准备好花时间根据自己的喜好自定义xpm图像。

(let* (
(pt (point))
(pt+1 (1+ pt))
(point-min (point-min))
(point-max (point-max))
(cap-ltr-a-xpm `(image :type xpm :mask nil :ascent center :data
"/* XPM */
static char * letters_xpm[] = {
/* columns rows colors chars-per-pixel */
/* columns = 1 pixel in width -- see also (frame-char-width) */
/* rows = 1 pixel in height -- see also (frame-char-height) */
\"11 20 4 1\",
\". c #000000\",
\"+ c #FF0000\",
\"@ c #7F0000\",
\"% c yellow\",
\"%..........\",
\"%....++....\",
\"%....++....\",
\"%..++..++..\",
\"%..++..++..\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++++++++++\",
\"%++++++++++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%++......++\",
\"%..........\"};")) )
(internal-show-cursor nil nil)
(overlay-put (make-overlay pt pt+1) 'display cap-ltr-a-xpm)
(sit-for 2)
(internal-show-cursor nil t)
(remove-overlays point-min point-max 'display cap-ltr-a-xpm))


以下代码段与上面的代码段相似,不同之处在于它使用了 display display属性。在此功能执行过程中,将光标移开一小段时间,以便可以更清晰地看到覆盖。

(let* (
(point-min (point-min))
(point-max (point-max))
(peol (point-at-eol))
(pilcrow `(image :type xpm :mask nil :ascent center :data
"/* XPM */
static char * pilcrow_xpm[] = {
\"11 20 4 1\",
\". c #000000\",
\"+ c orange\",
\"@ c #7F0000\",
\"% c yellow\",
\"%..........\",
\"%..........\",
\"%..........\",
\"%..........\",
\"%..++++++..\",
\"%.++++.+...\",
\"%.++++.+...\",
\"%.++++.+...\",
\"%..+++.+...\",
\"%....+.+...\",
\"%....+.+...\",
\"%....+.+...\",
\"%....+.+...\",
\"%....+.+...\",
\"%..........\",
\"%..........\",
\"%..........\",
\"%..........\",
\"%..........\",
\"%..........\"};"))
(pilcrow-str (propertize " " 'display pilcrow)) )
(overlay-put (make-overlay peol peol) 'after-string pilcrow-str)
(sit-for 2)
(remove-overlays point-min point-max 'after-string pilcrow-str))




以下屏幕截图是使用第二个示例制作的。

关于emacs - Emacs —如何创建垂直删除线效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23744237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com