Rofimoji: 一个用于 rofi 的字符选择器
你想使用那些花哨的表情符号吗?或者 Unicode 提供的其他有趣字符?但你还没找到一个好用的选择器?
不用担心,rofimoji
借助 rofi(以及其他 dmenu 衍生工具)的力量,为你提供一个你一直想要的选择器。
主要特性
- 直接插入选定的字符,或将其复制到剪贴板。
- 可以通过关键词模糊搜索字符(尤其是表情符号)。
- 它会记住你最常用的字符,并优先显示它们。
- 默认为表情符号,但你可以选择任何 Unicode 字符块 - 甚至可以使用自定义的字符!
它看起来如何?
默认样式
使用网格主题
使用方法
独立运行
将 rofimoji
作为独立工具调用。
- 运行
rofimoji
- 搜索你想要的字符
- (可选)使用
shift+enter
选择多个表情符号 - 按
enter
执行默认操作,或使用快捷键执行其他操作。
alt+1
直接选择最近使用的字符(alt+2
选择第二常用的字符,以此类推) - 可能需要选择肤色
- 🦾
作为 rofi 模式
将 rofimoji
集成为 rofi 的一种模式。
- 使用
rofi -modi "emoji:rofimoji" -show emoji
调用 rofi - 搜索你想要的字符
- 按
enter
执行默认操作;
Alt+Shift+1
复制到剪贴板
Alt+Shift+3
使用"剪贴板"插入方法
alt+1
插入最近使用的字符(alt+2
插入第二常用的字符,以此类推) - 可能需要选择肤色
- 🐉
将 rofimoji
作为 rofi 模式运行的注意事项
这种方法有一些限制: 作为 rofi 模式运行有几个无法改变的缺点:
- 由于
rofi
是主进程,rofimoji
无法直接向任何窗口输入。只能复制字符,所以要相应地设置--action
。 - 一次只能选择一个字符。
- 自定义键盘快捷键仍然存在,但映射到
Alt+Shift+1
(在 Qwerty 键盘上)等。
配置仍然按照描述的方式工作。例如,你可以在 combi
中设置多个模式以用于不同的字符集,或设置默认操作和肤色。
配置
你可以通过命令行参数或配置文件 $XDG_CONFIG_HOME/rofimoji.rc
来配置 rofimoji
。对于配置文件,使用不带双横线的长选项名称。
选项
长选项 | 短选项 | 可能的值 | 默认值 | 描述 |
---|---|---|---|---|
--action | -a | type , copy , clipboard , unicode , copy-unicode , print , menu | type | 选择 rofimoji 应该对所选字符执行的操作。详见下方的操作部分。 |
--files | -f | all 、<yourfile> 或 data 目录中的任何文件 | emojis | 定义从哪些文件加载字符。对于已分发的文件或 ${XDG_DATA_HOME}/rofimoji/data 中的文件,不带扩展名的文件名(如 emojis_smileys_emotion )就足够了。可以使用 * 进行通配。all 是一次性加载所有默认文件的快捷方式。谨慎使用,这会加载大量文件。 |
--skin-tone | -s | light , medium-light , moderate , dark brown , black ,以及 neutral 和 ask | ask | 定义支持肤色的表情符号的肤色。ask 将始终询问用户。 |
--max-recent | 0-10 | 10 | 最多显示这么多最近选择的字符。数量上限为 10。设为 0 可禁用此功能。 | |
--no-frecency (配置文件中为 no-frecency=True ) | - | <false> | 默认情况下,rofimoji 会首先显示常用项目。启用此选项后,它们将按文件中的顺序显示。 | |
--hidden-descriptions (配置文件中为 hidden-descriptions=True ) | - | <false> | 仅列出字符,不显示其描述。这对 rofi 的网格主题很有用。请注意,即使不显示描述,仍然可以搜索到它们。不适用于其他选择器。 | |
--use-icons | false | 在 rofi 中将字符显示为图标。不适用于其他选择器。 | ||
--prompt | -r | 任意字符串 | 😀 | 定义 rofimoji 的提示文本。 |
--selector-args | 定义 rofimoji 将传递给选择器的参数。请注意,由于 argparse 中的一个 bug,您需要将其指定为 --selector-args="<selector-args>" 或 --selector-args " <selector-args>" | |||
--selector | rofi , wofi , fuzzel , dmenu , tofi , bemenu , wmenu | (自动选择) | 使用此应用程序显示选择对话框。 | |
--clipboarder | xsel , xclip , wl-copy | (自动选择) | 使用此应用程序访问剪贴板。 | |
--typer | xdotool , wtype | (自动选择) | 使用此应用程序输入字符。 | |
--keybinding-copy , --keybinding-type , --keybinding-clipboard , --keybinding-unicode , --keybinding-copy-unicode | Alt+c , Alt+t , Alt+p , Alt+u , Alt+i | 选择不同于默认值的键绑定。 |
示例配置文件
~/.config/rofimoji.rc
:
action = copy
files = [emojis, math]
skin-tone = moderate
操作
--action
(-a
)选项定义选择字符时要执行的操作。可以用空格分隔指定多个操作(例如:-a type copy
)。
选项如下:
名称 | 快捷键 | 描述 |
---|---|---|
type | alt+t | 直接将字符输入到最后活动的窗口中。这是默认操作 |
copy | alt+c | 将字符复制到剪贴板。 |
clipboard | alt+p | 通过从剪贴板粘贴来插入所选字符,而不是直接输入。参见插入方法。 |
unicode | alt+u | 输入所选字符的 Unicode 码点。 |
copy-unicode | alt+i | 将码点复制到剪贴板。 |
print | 将选择的字符打印到 stdout 。 |
插入方法
默认情况下,rofimoji
使用 xdotool
或 wtype
输入字符(参见显示服务器支持)。您可以使用 --action type
(-a type
)强制执行此行为。
对于某些应用程序(例如Firefox),这种方法可能不太可靠。为了解决这个问题,rofimoji
可以将表情复制到剪贴板,然后通过shift+insert
从剪贴板插入。之后,它会恢复之前的剪贴板内容。
不幸的是,接收应用程序是否使用剪贴板或主选择取决于应用程序本身。
因此,rofimoji
同时使用两者,并恢复两者。
要使用这种解决方法,你可以使用快捷键alt+p
或者以rofimoji --action clipboard
(-a clipboard
)的方式启动。
如果你想直接输入而不是复制,即使以--action clipboard
启动,你也可以按alt+t
。请注意,你可以更改快捷键。
最后,使用--action copy
(或-a copy
)可以让rofimoji
只将选定的字符复制到剪贴板。
显示服务器支持
rofimoji
通过使用适合每种环境的正确工具来支持X11和Wayland(参见支持的选择器)。它会尝试自动为当前运行的会话选择正确的工具。
如果你想手动覆盖此设置,请查看--selector
、--clipboarder
和--typer
选项上文。
最近使用的字符
默认情况下,rofimoji
会单独显示最近使用的十个字符;你可以使用alt+1
、alt+2
等插入它们。它将使用默认的插入方法。
如果你不想要这个功能,可以将--max-recent
设置为0
。
此外,rofimoji
还会记住哪些字符使用频率更高,并相应地对列表进行排序。你可以使用--no-frecency
禁用此行为。
Rofi主题
默认情况下,rofimoji
重用现有的rofi配置,但你可以使用--selector-args
传递自己的配置(例如--selector-args="-theme ~/your-rofi-theme.rasi"
)。
如果你想要一个更注重字符的主题,可以使用打包的grid.rasi
与--hidden-descriptions
参数一起使用。这个主题仍然导入现有的rofi
配置,但将条目移到一个网格中。当然,你也可以基于此创建自己的主题。(如果你有改进,请开启PR!)
要在rofi
中仅使用方向键控制网格而非查询,请传递这些-selector-args
:-kb-row-left Left -kb-row-right Right -kb-move-char-back Control+b -kb-move-char-forward Control+f
。
支持的字符
- Unicode表情符号,带有官方描述和标签。还支持肤色和性别变体。
- 所有其他Unicode字符,按官方块分类
- Unicode中的CJK字符集
- Font Awesome 6
- Nerd Fonts
- Gitmoji
- 颜文字,来自w33ble
如果你发现缺少什么,请开启一个issue!
自定义字符文件和描述
如果预定义的不够用,你可以定义额外的字符文件,并使用-f
加载它们(参见选项)。每行可以定义一个"字符",后跟一个空格字符(
)。之后,你可以写任何你想要的描述。
如果字符也在其他选定的文件中,所有描述将被合并。如果你给它与rofimoji
包含的文件相同的名称,你的文件将被优先使用。
为了增加便利性,rofimoji
会自动加载预定义文件的"附加"文件。这个文件需要命名为<filename>.additional.csv
并位于${XDG_DATA_DIR}/rofimoji/data/
中。例如,如果你想扩展emojis_smileys_emotion
,将文件命名为emojis_smileys_emotions.additional.csv
。这对于添加额外描述很有帮助:你可以定义这样一个附加字符文件,添加字符和你的描述,然后你的描述也会被显示。
如果你认为你的文件对其他人有用,请开启PR将其包含在rofimoji
的未来版本中。
安装
从发行版仓库
从PyPI
rofimoji
在PyPI上。你可以使用pipx install rofimoji
(或sudo pipx install rofimoji
)安装它。
从Github
下载最新发布版本的wheel文件,并使用sudo pip install $filename
安装它(或者你可以使用pip install --user $filename
仅为本地用户安装)。
之后,你的$PATH
中应该有一个rofimoji
。
这也会安装Python依赖configargparse
。
依赖项
你还需要什么:
- Python 3.8 或更高版本
- 能够显示你的脚本的字体(对于表情符号,EmojiOne 或 Noto Emoji 可用)
- 可选:用于将字符以编程方式输入应用程序的工具。X11 系统可用
xdotool
,Wayland 系统可用wtype
- 可选:用于将字符复制到剪贴板的工具。X11 系统可用
xsel
和xclip
;Wayland 系统可用wl-copy
支持的选择器
请注意,目前只有 rofi
(在 X 和 Wayland 上都支持)支持自定义键盘快捷键、最近使用的文件或网格主题。对于其他选择器,仅基本功能可用。