Есть ли приложение или команда, которая позволяет вставлять специальные символы, умляуты и иностранные буквы

Я пишу и работаю на нескольких языках: немецком, испанском, французском, греческом, английском. В Mac, когда вы нажимаете клавишу более 2 секунд, вы можете выбирать между специальными символами, производными от основного символа. В Windows есть программное обеспечение под названием Holdkey, которое делает то же самое. Есть ли что-нибудь подобное в Linux. Я еще не нашел его.

3
задан 1 June 2019 в 22:10

3 ответа

Вы можете использовать юникод для ввода специальных символов в Linux.

Чтобы ввести специальный символ, сначала нажмите клавишу CTRL + SHIFT + U

Затем введите шестнадцатеричный код для символа, который вы хотите вставить, а затем нажмите ENTER

Шестнадцатеричный код для «ü» - 00fc.

Нажмите здесь, чтобы увидеть страницу Википедии для символов Юникода.

Нажмите здесь, чтобы увидеть страницу Википедии с математическими символами Юникода.

0
ответ дан 1 June 2019 в 22:10

У меня есть два совета:

  1. Используйте подходящую раскладку клавиатуры, то есть раскладку с мертвыми клавишами. Если у вас есть английская клавиатура, выберите, например, английский (США, международный, с мертвыми клавишами) . Но есть несколько других вариантов.
  2. Определите составную клавишу . Таким образом, вы сможете набирать много символов, которые не включены в используемую раскладку клавиатуры. (Клавиша Compose - это функция XKB, поэтому она доступна в Kubuntu, но вам нужно выяснить, как ее определить.)
0
ответ дан 1 June 2019 в 22:10

Если Вы не боитесь настроить (указания должны быть четкими), ниже мог бы дать Вам альтернативу для быстрой вставки часто используемого специального символа (-альтернативы).

Доступный для редактирования инструмент специального символа

Сценарий ниже является гибким инструментом (окно для вставки символов от в щелчке), чтобы часто использовать символы, доступные за секунду:

enter image description here

Как это работает

  • Назовите окно с ярлыком
  • Для вставки символа просто нажмите на него, и это вставит символ в окно, в котором Вы работали.
  • Для добавления ряда символов нажмите +, окно текстового редактора откроется, добавить имя "семейства" на первой строке, связанные специальные символы на следующих строках, один символ на строку, например:

    a
    å
    ä
    ã
    â
    á
    à
    ª
    

    (из изображения). Закройте файл, специальные символы будут доступны с этого времени со следующего раза, когда Вы называете окно.

  • для удаления ряда доступных символов нажмите x

Как настроить

  1. Необходимо удовлетворить несколько зависимостей:

    • 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
      

    Выйдите из системы и въезжайте задним ходом.

  2. Скопируйте сценарий ниже в пустой файл, сохраните его как 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()
    
  3. Настройте сочетание клавиш для выполнения:

    python3 /path/to/specialchars.py
    

На первом показе Вы будете только видеть + кнопка. Начните Добавлять свои символьные "семейства" и перезапуск (-вызов) окно для имения всех в наличии в щелчке.

Именно...

2
ответ дан 1 June 2019 в 22:10

Другие вопросы по тегам:

Похожие вопросы: