Gedit 的片段:如何更改占位符中的文本以使字母大写?

Snippets for Gedit: how to change the text in a placeholder to make the letters uppercase?

我正在尝试改进 Gedit 的一个片段,它可以帮助我编写 shell 脚本。

目前,该代码段将变量名称括在双引号中,大括号前面是美元符号。但是要使字母大写,我必须切换到大写锁定模式或在输入单词时按住 shift 键。这是该片段的代码:

"${}"

我希望该代码段让我的字母大写。为此,我需要知道如何将文本变为大写并更改占位符的内容。

我仔细阅读了以下文章:

https://wiki.gnome.org/Apps/Gedit/Plugins/Snippets

https://blogs.gnome.org/jessevdk/2009/12/06/about-snippets/

https://www.marxists.org/admin/volunteers/gedit-sed.htm

How do you create a date snippet in gedit?

但我仍然不知道如何实现我想要的——将字母变成大写。我尝试使用 shell 程序的输出,一个 Python 脚本,正则表达式——占位符中的初始文本没有改变。最后一次尝试如下(为清楚起见,我删除了周围的双引号和带美元的大括号——只处理字母大小写):

$<[1]: return .upper()>

但我得到的不是 MY_VARIABLE my_variableMY_VARIABLE

也许,解决方案很明显,但我无法得到它。

我做到了!已找到解决方案!

首先,我不得不说,我不认为这个解决方案是正确的,也不符合 Gedit 编辑器的想法。当然,这是一个肮脏的黑客。但是,奇怪的是,无法更改代码段中占位符的初始内容——我不是刚刚找到了一种标准方法吗?

所以。如果他们不允许我们更改占位符中的文本,让我们要求系统这样做。

我第一个想到的是打印退格字符。有两种方法可以做到这一点:shell 脚本和 python 脚本。第一种方法可能看起来像:$(printf '\b') 第二种方法应该做同样的事情:$<[1]: return '\b'> 但是它们都不起作用 — Gedit 打印代理方块而不是真正的退格字符。

因此,xdotool是我们的朋友!元编程也是如此!您不会相信 — 在片段内的 shell 脚本中进行元编程 — sed 将为 xdotool 编写场景。此外,我还添加了一项功能,可以将空格更改为下划线,以便于打字。这是该片段的最终代码:

$(
    eval \
        xdotool key \
            --delay 5 \
            `echo "" | sed "s/./ BackSpace/g;"`
    echo "\"${}\"" \
        | tr '[a-z ]' '[A-Z_]'
)[=10=]

这里有一些解释。

通常,由于一些麻烦和不兼容,我从不在我的脚本中使用反引号。但现在不是这样了!嵌套时 Gedit 似乎无法正确解释 $(...) 结构,所以我在这里使用反引号。

关于使用 xdotool 命令的几句话。最关键的部分是 --delay 选项。默认情况下,它是 12 毫秒。如果我保持原样,当占位符中的文本长度很长时会出现错误。更不用说片段处理变慢了。但是如果我把时间间隔设置得太小,一些模拟的击键有时会被某处吞掉。因此,5 毫秒是我系统的最佳延迟。

最后,由于我使用退格键擦除键入的文本,因此无法使用占位符之外的模板部分。因此,此类转换必须在脚本内部。 echo命令后的复杂堆就是模板部分。

最后一个 tr 命令的作用是这一切 activity 的动机。

事实证明,Gedit 片段可能是一个强大的工具。祝你好运!