答案1
Wayland 即将重新成为 Ubuntu 21.04 的默认设置,但我早就改用了埃斯潘索作为我的文本扩展工具。
答案2
我受 Dmtri Popov 的启发创建了一个自定义 bash 脚本“snippy” 脚本刊登在 Linux Magazine(2014 年)上。此脚本允许我将输入的缩写扩展为全文。
我将所有代码片段保存在专用目录中的单独文本文件中
$HOME/.local/share/snippy
。每个文件都根据我想要用于插入代码片段的缩写命名。要插入代码片段,我只需输入其缩写并按Ctrl+ ,。脚本 1) 根据光标前的单词识别缩写;2) 在目录中找到相应的代码片段文件
snippy
;3) 用文件的完整内容替换输入的缩写。
这种方法可以快速有效地插入常用的文本片段,同时保持它们井然有序且易于访问。
设置
步骤 1.安装脚本snippy
a) 将以下代码复制到名为 的文本文件中snippy
。
#!/bin/bash
# Dependencies: wl-clipboard (Wayland) or xclip (x11); dotool (https://sr.ht/~geb/dotool/)
sleep_time=0.2
snippets_dir=$HOME/.local/share/snippy
f_saved_clipboard=$(mktemp)
flag_gnome_copied_files=0
if [ -z ${XDG_SESSION_TYPE+x} ] ; then
echo "XDG_SESSION_TYPE is not set. Please set to 'x11' or 'wayland'" ; exit
else
if [ "$XDG_SESSION_TYPE" = 'x11' ] ; then
copy_to_clip="xsel -bi"
paste_from_clip="xsel -bo"
else
copy_to_clip="wl-copy -n"
paste_from_clip="wl-paste -n"
fi
fi
# Select word before cursor and read name of clip from primary clipboard
echo key ctrl+shift+left | dotoolc
sleep 0.1
selected_clip="$snippets_dir/$(wl-paste -n -p)"
# Load and paste selected clip if it is valid
echo "$selected_clip" > ~/debug.txt
if [ -f "$selected_clip" ] ; then
# Save the current clipboard
if [[ $(wl-paste --list-types | grep x-special/gnome-copied-files) == "x-special/gnome-copied-files" ]] ; then
flag_gnome_copied_files=1
$paste_from_clip --type x-special/gnome-copied-files > "$f_saved_clipboard"
else
$paste_from_clip > "$f_saved_clipboard"
fi
# Load and paste the selected clip
$copy_to_clip < "$selected_clip"
sleep $sleep_time
echo key ctrl+v | dotoolc
# Restore the clipboard
sleep 0.4
if [ $flag_gnome_copied_files = "1" ] ; then
$copy_to_clip --type x-special/gnome-copied-files < "$f_saved_clipboard"
else
$copy_to_clip < "$f_saved_clipboard"
fi
rm $f_saved_clipboard
else
echo key ctrl+right | dotoolc
fi
b)将脚本移至~/.local/bin
. 如果目录尚不存在,则创建该目录。
如果您必须创建目录,请先注销,然后重新登录 Ubuntu,然后再继续。这样,新创建的目录将包含在 PATH 中。
C)使脚本可执行:
您可以使用终端执行此操作:chmod +x ~/.local/bin/snippy
。否则,在文件管理器中找到该文件,右键单击该文件并选择“属性”,然后选中“可作为程序执行”复选标记。
步骤2.安装剪贴板操作工具
安装wl-clipboard
,这是一个用于在 wayland 上操作剪贴板的命令行工具。如果在 Xorg 上,则安装xclip
。
sudo apt install wl-clipboard # If you run Wayland
sudo apt install xclip # If you run Xorg
步骤 3. 安装键盘自动化工具
安装dotool
。dotool
(https://sr.ht/~geb/dotool/) 不幸在 Ubuntu 软件库中不可用。但是,根据网站上的说明,很容易编译和安装它。
A)下载包含源代码的存档文件:在网站的“来源”标签上https://sr.ht/~geb/dotool/,下载.tar.gz
发布版本的存档(目前为 1.4,https://git.sr.ht/~geb/dotool/archive/1.4.tar.gz)。
b)提取档案文件在 Ubuntu 标准版中,您可以通过右键单击存档并选择“在此处提取”来执行此操作。这将创建一个与存档文件同名的目录,但没有扩展名.tar.gz
(当前为:dotool-1.4)。
C)在该目录中打开终端。使用“文件”,您可以右键单击步骤 b) 中创建的目录并选择“在终端中打开”。或者,打开终端并使用命令cd
切换到创建的目录,例如cd ~/Downloads/dotool-1.4
。
d)安装要求:go
,libxkbcommon-dev
和scdoc
sudo apt install golang-go
sudo apt install libxkbcommon-dev
sudo apt install scdoc
e)编译并安装:
./build.sh && sudo ./build.sh install
F)触发 udev 规则
sudo udevadm control --reload && sudo udevadm trigger
笔记:您可以改用ydotool
。原则上,此工具可以更轻松地安装,因为它位于 Ubuntu 软件存储库中。但是,Ubuntu 22.04 附带的版本已经过时了。更新的版本也必须被编译。显然,dotoolc
脚本中的命令必须用等效ydotool
命令替换。
步骤 4. 设置dotool
您现在应该可以访问手册了:man dotool
。这表明您可能需要将自己添加到组input
。在 Ubuntu 上,这是必需的。执行以下命令创建组(如果尚不存在)并将您的用户添加到其中。
sudo groupadd -f input
sudo usermod -a -G input $USER
现在重新启动系统以确保更改已正确实施。
重新登录后,测试是否dotool
有效。打开终端并执行
echo type hello | dotool
如果您看到终端上输入了dotool
该单词,则表示您已成功安装。每次运行时,它都需要创建一个虚拟键盘。这会导致一些延迟。为了避免这种延迟,我们将自动启动守护进程,并使用守护进程进行键盘自动化。hello
dotool
dotoold
dotoolc
步骤 5. 设置 systemd 用户服务
A)安装用户服务文件
在终端运行以下代码即可自动安装用户服务文件:
cat > ~/.config/systemd/user/dotool.service << EOF
[Unit]
Description=dotool keyboard automation daemon
[Service]
ExecStart=/usr/local/bin/dotoold
[Install]
WantedBy=default.target
EOF
b)启用服务
systemctl --user enable dotool
注销然后重新登录(或者直接手动启动服务:systemctl --user start dotool
。使用以下命令检查服务是否成功加载:
echo type hello | dotoolc
请注意我们现在如何使用dotoolc
而不是。并注意现在输入dotool
速度有多快。hello
步骤6.设置快捷键
设置使用桌面环境功能触发脚本的快捷键。在标准 Ubuntu 中:
- 前往“设置”-“键盘”。
- 在“键盘快捷键”下,点击“查看和自定义快捷键”。出现“键盘快捷键”对话框。
- 选择“自定义快捷方式”。出现“自定义快捷方式”对话框。
- 单击“+”,在“自定义快捷方式”对话框中输入:名称:“Snippy”,命令:“snippy”,然后单击“设置快捷方式”。现在按下您要使用的快捷方式。我使用Ctrl+ ,。点击绿色的“完成”按钮并关闭对话框。
第 7 步:设置代码片段
创建一个目录~/.local/share/snippy
。在该目录中,存储您的文本片段,即根据要使用的缩写名称命名的文本文件。例如,我们创建一个名为的文本文件,dt
其中包含以下文本:
“dotool 从 stdin 读取操作并使用 Linux 的 uinput 模块模拟键盘/鼠标输入。它在整个系统范围内运行并支持键盘布局。”
步骤8.测试
打开文本编辑器并输入dt
。现在按下快捷键。如果缩写没有正确展开,您可能需要编辑脚本以增加到sleep_time=0.2
eg 0.3
(0.3 秒)。但是,您也可以尝试减少那时。在我的系统上,我可以将其设置为 0。
不幸的是,在不同于 wlroots 的 Wayland 实现上,wl-clipboard
需要创建一个(透明)窗口才能访问剪贴板。这会导致闪烁。使用 dock 时,这会导致短暂创建和显示应用程序图标。