插入点的位置'粘贴后(以编程方式)

时间:2014-05-15 04:16:43

标签: python c++ linux command-line-interface

我希望知道“如何”,在粘贴之后,光标的位置是以编程方式阻止(如同使用zen编码)。

对于'插入点',我打算说:当我们输入时,我们的文字会出现闪烁的东西。

所以,让我说我粘贴它:'<text>%insertion point</text>' 我希望'插入点'位于特定位置(在此示例中为%插入点)。

一些细节:

  1. 我在Linux上工作(Ubuntu / Fluxbox)
  2. 语言并不重要(更喜欢:Python,C,C ++(必须与linux兼容))
  3. 通过粘贴我打算:在任何文本区域(不在终端中)进行简单粘贴
  4. 我'不'寻找的东西:

    1. 一个桌面程序来执行此操作,除非它是可编写脚本的(例如shell) 工具)
    2. 提供此功能的文本编辑器(例如vim模块)
    3. 我也对选择下一个选项感到好奇,即:

      <text>%first</text><detail>%second</detail>
      

      如果互联网上有更好的地方提出我的问题,请告诉我。 任何能指明我正确方向的信息都将受到高度赞赏。

      感谢您考虑我的问题

      编辑: 我应该提一下,粘贴之后没有必要,重要的是操纵'插入点'的位置。

2 个答案:

答案 0 :(得分:2)

您可以使用xvkbd发送粘贴密钥组合 Ctrl V ,后跟一系列&lt; - (左)箭头)键完成模板行为,然后映射Fluxbox键盘快捷方式执行此命令

该命令类似于

xvkbd -text "\Cv\[Left]\[Left]\[Left]\[Left]"

然后将其分配到~/.fluxbox/keys文件中的快捷方式(Mod1是Windows密钥)

Mod1 P :ExecCommand xvkbd -text "\Cv\[Left]\[Left]\[Left]\[Left]"

然而,这需要以某种方式为每个模板进行自定义,并且不适用于 Ctrl V 不是&#34;粘贴&#34的应用程序; (像xterm)。也许对于常见模板,您可以将它们硬编码为不同的快捷方式

Mod1 T :ExecCommand xvkbd -text "<text></text>\[Left]\[Left]\[Left]\[Left]\[Left]\[Left]\[Left]"

如果您只是自定义每个编辑器以单独提供此功能,我怀疑您会有更好的时间。

修改

这是一个Python脚本,它从stdin读取并写入适合xvkbd的输出。它使用百分号作为插入点(例如<text>%</text>),因此您需要使用反斜杠转义任何实际百分号。

#!/usr/bin/env python
import sys
import re

clip = sys.stdin.read()
# split on percent sign not prefixed by backslash
parts = re.split(r'(?<!\\)%', clip, 1)
# un-escape percent sign
parts = [p.replace('\\%', '%') for p in parts]
tail_len = len(parts[-1])

print(''.join(parts) + '\[Left]' * tail_len)

您需要将剪贴板传递给它,然后将结果传递给xvkbd。我在这里使用xclip将X剪贴板输出到stdout

xclip -out | python pastetemplate.py | xargs -0 -I{} xvkbd -text "{}"

它仍然存在需要一段时间来移动光标的问题,但它会自动执行先前的过程。

我真的不认为你会以编程方式移动光标,因为我想你必须使用不同的自动化库,具体取决于目标app的GUI工具包(例如GTK,QT,Flash等)。但是,如果您定位特定的应用程序或工具包,则可以将其解决。

答案 1 :(得分:0)

Vim存储先前被拽/粘贴/更改的文本的位置,其中有两个寄存器,即'[用于起始行,']用于另一端。还有字符寄存器以便知道start&amp; amp;的确切字符虚拟列。结束,请阅读:h '[了解更多信息。