Emacs--删除带有变量值的字符串`后的覆盖

Emacs--删除带有变量值的字符串`后的覆盖,emacs,elisp,Emacs,Elisp,请问,在字符串与变量值重叠后删除的正确方法是什么 当使用C-u C-x=时,它只在字符串之后显示为,而不说明值是什么 例如,一旦我在字符串我的连接字符串之后使用(overlay put(make overlay(point)(point))”放置一个覆盖层,我希望能够在不编程Emacs的情况下将其删除,以记住以前在缓冲区中使用的每一个我的串联字符串——每一行上可能有一些不同的字符串 在字符串后使用?:(删除覆盖(窗口开始)(窗口结束))”是否足够? 或者,在字符串t之后使用?:(删除覆盖(窗口开

请问,在字符串与变量值重叠后删除
的正确方法是什么

当使用
C-u C-x=
时,它只在字符串之后显示为
,而不说明值是什么

例如,一旦我在字符串我的连接字符串之后使用
(overlay put(make overlay(point)(point))”放置一个覆盖层
,我希望能够在不编程Emacs的情况下将其删除,以记住以前在缓冲区中使用的每一个
我的串联字符串
——每一行上可能有一些不同的字符串

在字符串后使用?:
(删除覆盖(窗口开始)(窗口结束))”是否足够?

或者,在字符串t之后使用?:
(删除覆盖(窗口开始)(窗口结束))。

或者,有没有其他方法可以全部获得它们


编辑(2014年3月17日):我的困惑显然来自于对象和属性之间的误解

通常,覆盖特性的创建如下所示:

(overlay-put (make-overlay (point) (point)) 'my-property 'property-number-one )
(overlay-put (make-overlay (point) (+ (point) 1))
  'face '(:background "gray50" :foreground "black"))
通常,覆盖对象的创建如下所示:

(overlay-put (make-overlay (point) (point)) 'my-property 'property-number-one )
(overlay-put (make-overlay (point) (+ (point) 1))
  'face '(:background "gray50" :foreground "black"))
这里有一种独特的情况,即字符串后的
闻起来像一个对象。我的假设是:如果它闻起来像一个对象,那么在尝试删除它时可能需要包含一个值,这样我就不会在字符串后留下一个断开连接的

(保存短途旅行)
(行尾)
(let((下线浮动列(+(当前列)10)))
(叠加放置(制作叠加(点)(点))
“在字符串之后
(康卡特)
(属性化(字符到字符串?\uE001)
"展示,
`((空间:对齐到,下线浮动列)
(空格:宽度0)))
(属性化(字符到字符串?\u00B6)
“面”(:背景“灰色50”:前景“黑色”)
'光标(t)))

按照编写代码的方式,如果省略最后一个参数,则仅当值为“nil”(在您的示例中似乎不是这样)时,才会删除覆盖

由于您不知道该属性的值,我认为您无法使用该函数。但是,您可以简单地编写如下内容(假设字符串
之后的
值从不为零):


还要注意,如果从post命令挂钩执行此操作,
windowend
可能不会反映真实值。为了安全起见,您可以执行
(window end nil t)
,但是这可能会稍微慢一点。

放置覆盖时,添加另一个属性(例如
(overlay put ol'lawlist t)
,然后可以使用
(remove overlays BEG end'lawlist t)
(defun lawlist remove overlawlist(结束名称val)
“移除覆盖层。”
调试
;;;(除非(和beg end name val)
;(消息“错误--beg:%s |结束:%s |名称:%s | val:%s”beg结束名称val))
(让我们*(
(最大点(最大点))
(最小点(最小点))
(缩小p(不相等(-point max point min)(缓冲区大小)))
(beg(如果beg point min))
(完)
(续)
((及
(未缩小-p)
(完)
(完)
((及
(未缩小-p)
(空端)
点(最大值)
((及
窄-p
结束
(<终点最大值))
(完)
((及
窄-p
结束
(=终点最大值))
(一加完)
((及
窄-p
(空端)
(1+最大点数)
(何时(和beg结束名称val)
(叠加重新居中端)
(dolist(o(beg端的覆盖层))
(当(eq(叠加获得o名称)val)
(删除叠加o(()()())))
(描述)`(
,fci预限制字符串
,fci预限制活动区域字符串
,限位字符串处的fci
,fci后置限制字符串
,fci包装限制字符串
,fci光标位于下线字符串处
,fci选项卡文本左侧
,fci选项卡文本右侧
,fci标签夹在中间)
(法律列表删除字符串描述后的覆盖零零)
另请参见此相关线程,该线程处理带有包含文本属性的值的目标覆盖:


删除<代码>法律列表t
会在我的连接字符串之后保持断开连接的<代码>吗,或者它会在字符串之后去除<代码>吗…
?在本周早些时候,我有越来越多的断开连接的覆盖层,因为我使用的是
删除覆盖层
而不是
删除覆盖层s
--我想完全删除字符串后的
而不仅仅是断开连接。请阅读有关覆盖的Elisp手册。
删除覆盖
,就像
删除覆盖
对覆盖而不是其属性进行操作。删除/删除覆盖时,它保留其所有属性,但不应用它们再添加到文本(即,它的所有属性都从文本中“删除”)
remove overlay
调用
delete overlay
(除非它移动了一端),所以使用它不会得到任何好处。谢谢Stefan和@Lindydancer——我将在本周末研究它,看看我是否能更好地理解断开
后字符串
对象与删除
后字符串
对象的关系。我的假设是
后字符串我的连接字符串
是一个对象ect(例如,一个带有背景和前景的可见矩形条),而不是属性。我的假设是,
delete overlay
断开一个对象的连接,但不删除它;而,
remove overlays
完全删除该对象(而不是仅仅断开它,它将永远消失)没有“后处理”这样的事情