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 片段可能是一个强大的工具。祝你好运!
我正在尝试改进 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 片段可能是一个强大的工具。祝你好运!