我写作和工作时会使用多种语言:德语、西班牙语、法语、希腊语、英语。在 Mac 上,按下一个键超过 2 秒时,您可以选择从主角衍生的特殊字符。在 Windows 上,有一款名为 Holdkey 的软件可以实现相同的功能。Linux 上有没有类似的东西?我还没有找到。
答案1
我有两条建议:
- 使用合适的键盘布局,即带有死键的布局。如果你有英文键盘,例如选择英语(美国,国际,带死键)。但还有其他几种变体。
- 定义一个撰写键。这样,您将能够输入许多您使用的键盘布局中未包含的字符。(Compose 键是 XKB 功能,因此在 Kubuntu 上可用,但您需要弄清楚如何在那里定义它。)
答案2
如果您不怕设置(说明应该很清楚),下面可以为您提供一种快速插入经常使用的特殊字符(-alternatives)的替代方法。
可编辑特殊字符工具
下面的脚本是一个灵活的工具(单击即可从中插入字符的窗口),可以在一秒钟内提供常用字符:
怎么运行的
- 使用快捷方式调用窗口
- 要插入一个字符,只需单击它,它就会将该字符粘贴到您正在工作的窗口中。
要添加一组字符,请按下+ 将打开的文本编辑器窗口,在第一行添加您的“家族”名称,在接下来的几行添加相关的特殊字符,每行一个字符,例如:
a å ä ã â á à ª
(来自图片)。关闭文件,从下次调用窗口时,特殊字符将可用。
- 要删除一组可用字符,请按x
如何设置
您需要满足一些依赖关系:
python3-xlib
sudo apt install python3-xlib
pyautogui:
pip3 install pyautogui
pyperclip:
sudo apt install python3-pyperclip xsel xclip
您可能需要安装 Wnck:
python3-gi gir1.2-wnck-3.0
注销并重新登录。
将以下脚本复制到一个空文件中,另存为
specialchars.py
并使其可执行#!/usr/bin/env python3 import os import gi gi.require_version("Gtk", "3.0") gi.require_version('Wnck', '3.0') from gi.repository import Gtk, Wnck, Gdk import subprocess import pyperclip import pyautogui css_data = """ .label { font-weight: bold; color: blue; } .delete { color: red; } """ fpath = os.environ["HOME"] + "/.specialchars" def create_dirs(): try: os.mkdir(fpath) except FileExistsError: pass def listfiles(): files = os.listdir(fpath) chardata = [] for f in files: f = os.path.join(fpath, f) chars = [s.strip() for s in open(f).readlines()] try: category = chars[0] members = chars[1:] except IndexError: os.remove(f) else: chardata.append([category, members, f]) chardata.sort(key=lambda x: x[0]) return chardata def create_newfamily(button): print("yay") n = 1 while True: name = "charfamily_" + str(n) file = os.path.join(fpath, name) if os.path.exists(file): n = n + 1 else: break open(file, "wt").write("") subprocess.Popen(["xdg-open", file]) class Window(Gtk.Window): def __init__(self): Gtk.Window.__init__(self) self.set_decorated(False) # self.set_active(True) self.set_keep_above(True); self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) self.connect("key-press-event", self.get_key) self.set_default_size(0, 0) self.provider = Gtk.CssProvider.new() self.provider.load_from_data(css_data.encode()) self.maingrid = Gtk.Grid() self.add(self.maingrid) chardata = listfiles() # get the currently active window self.screendata = Wnck.Screen.get_default() self.screendata.force_update() self.curr_subject = self.screendata.get_active_window().get_xid() row = 0 for d in chardata: bbox = Gtk.HBox() fambutton = Gtk.Button(d[0]) fambutton_cont = fambutton.get_style_context() fambutton_cont.add_class("label") fambutton.connect("pressed", self.open_file, d[2]) Gtk.StyleContext.add_provider( fambutton_cont, self.provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION, ) fambutton.set_tooltip_text( "Edit special characters of '" + d[0] + "'" ) bbox.pack_start(fambutton, False, False, 0) for c in d[1]: button = Gtk.Button(c) button.connect("pressed", self.replace, c) button.set_size_request(1, 1) bbox.pack_start(button, False, False, 0) self.maingrid.attach(bbox, 0, row, 1, 1) deletebutton = Gtk.Button("X") deletebutton_cont = deletebutton.get_style_context() deletebutton_cont.add_class("delete") Gtk.StyleContext.add_provider( deletebutton_cont, self.provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION, ) deletebutton.connect("pressed", self.delete_file, d[2], bbox) deletebutton.set_tooltip_text("Delete family") self.maingrid.attach(deletebutton, 100, row, 1, 1) row = row + 1 addbutton = Gtk.Button("+") addbutton.connect("pressed", create_newfamily) addbutton.set_tooltip_text("Add family") self.maingrid.attach(addbutton, 100, 100, 1, 1) self.maingrid.attach(Gtk.Label("- Press Esc to exit -"), 0, 100, 1, 1) self.show_all() Gtk.main() def get_key(self, button, val): # keybinding to close the previews if Gdk.keyval_name(val.keyval) == "Escape": Gtk.main_quit() def replace(self, button, char, *args): pyperclip.copy(char) subprocess.call(["wmctrl", "-ia", str(self.curr_subject)]) pyautogui.hotkey('ctrl', 'v') Gtk.main_quit() def open_file(self, button, path): subprocess.Popen(["xdg-open", path]) def delete_file(self, button, path, widget): os.remove(path) widget.destroy() button.destroy() self.resize(10, 10) create_dirs() Window()
设置运行的快捷键:
python3 /path/to/specialchars.py
首次运行时,您只会看到一个+按钮。开始添加您的角色“家族”,然后重新启动(-call)窗口,单击即可获得所有内容。
就是这样...
答案3
您可以使用unicode在Linux上输入特殊字符。
要输入特殊字符,请先按下CTRL+ SHIFT+ U,然后松开按键。
接下来,输入要插入字符的十六进制代码,然后按ENTER
“ü”的十六进制代码是00fc
。