- Вопрос или проблема
- Ответ или решение
- Как удобно вводить специальные символы UTF-8 в Linux (Cinnamon)
- 1. Использование экранной клавиатуры Onboard
- 2. Использование сочетания клавиш для ввода символов (Ctrl+Shift+U)
- 3. Доступ к эмодзи
- 4. IBus для поиска символов
- 5. HTML-сущности в качестве вспомогательного инструмента
- 6. Специальные символы через Emacs
- 7. Хардварные решения
- Заключение
Вопрос или проблема
Все в моей системе (что требует этого) поддерживает UTF-8 без проблем.
Это все хорошо, когда вы хотите вывод…
Но что, если вы хотите легкий ввод?
На данный момент единственными символами, которые я могу легко вводить, являются такие символы, как é, используя AtlGr.
Но для символов, таких как ₂ ² ≈ √ π 😀 в данный момент мне нужно:
- Открыть браузер
- Зайти на https://www.utf8icons.com или подобный сайт
- Кликнуть, ввести и много искать на сайте, чтобы попасть на страницу, содержащую нужный мне символ
- Скопировать его
- Вставить в программу, где он мне нужен
- (По желанию) закрыть браузер
Что я ищу, так это программу, которая может делать что-то вроде этого:
- Работать в фоновом режиме в современном рабочем окружении (в моем случае Cinnamon)
- Выходить на передний план, чтобы показать целый список разумно популярных символов UTF-8 после нажатия чего-то вроде F1
- Позволять мне кликнуть на символ, после чего он будет отправлен в последнюю используемую мною программу, как если бы это было нажатие клавиши
- Предоставить мне возможность настроить его так, чтобы он оставался видимым после этого “фальшивого нажатия клавиши” или возвращался в фон
Короче говоря: существуют ли программы виртуальной клавиатуры с поддержкой небуквенно-ASCII UTF-8?
На самом деле… Меня уже устраивает любой метод, который улучшит мой.
Правка: Для других, кто попал сюда и не хочет читать все ответы самостоятельно (или добавлять ответ, который уже дан):
Это варианты, уже упомянутые + ссылки на ответы + плюсы и минусы.
Не стесняйтесь добавлять дополнительные решения ниже (после предоставления их как подробного ответа):
ibus
(обычно с CtrlShiftE) → Не работает в Cinnamononboard
→ плюс: Кажется, делает все, что мне нужно + поддерживает фрагменты, минус: Единственная (по умолчанию) включенная раскладка, не имеющая латинской основы, предназначена для математики, другие раскладки с популярными символами UTF-8 должны создаваться вручнуюgucharmap
→ плюс: Много символов и легко искать минус: Не легко переключаться между передним и фоновым планом (возможно, это можно решить с помощью обхода в самом Cinnamon)kcharselect
→ То же самое, что иgucharmap
- Решения от самих программ (например, Ctrl. для некоторых из них) → плюс: Идеально для этой конкретной программы минус: Большинство программ, включая те, где это нужно больше всего, не имеют одной + это не унифицировано
- https://www.unicodeit.net/ → плюс: Хорошо для длинных математических формул. минус: Та же проблема, которую я изначально обозначил + бесполезно для не математических символов
- Клавиатура с дополнительными символами → плюс: Легко минус: Небольшое количество символов + нужна дополнительная клавиатура для каждой системы
- Сочетания клавиш для наиболее часто используемых символов с помощью
xcompose
→ плюс: Легко минус: В зависимости от вашей памяти (как человека, а не как компьютера) это работает только для ограниченного количества символов - HTML-сущности для составления – плюс/минус: Слишком много всего, см. ответ
- Используйте CtrlShiftU, Hexcode,Space: плюс/минус: То же самое, что и выше
Вы можете использовать Onboard Onscreen Keyboard, который доступен в большинстве дистрибутивов.
Он позволяет создать пользовательскую раскладку с необходимыми вам символами, например.
Если вы не хотите создавать новую раскладку, он предлагает функцию под названием “Фрагменты”, где у вас есть возможность вводить различные символы или даже текст.
Для его отображения просто создайте сочетание клавиш в вашем рабочем окружении, которое будет просто выполнять onboard
или dbus-send --type=method_call --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.Show
Чтобы скрыть его, создайте сочетание клавиш для dbus-send --type=method_call --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.Hide
Или вы можете переключить видимость с помощью dbus-send --type=method_call --dest=org.onboard.Onboard /org/onboard/Onboard/Keyboard org.onboard.Onboard.Keyboard.ToggleVisible
На самом деле… Меня уже устраивает любой метод, который улучшит мой.
Если вы часто используете символы, чтобы запомнить их шестнадцатеричные коды:
GTK-приложения с графическим интерфейсом (т.е. подавляющее большинство из них) позволяют вам нажимать Ctrl+Shift+U, а затем вводить шестнадцатеричный код Unicode, нажав пробел, чтобы указать, что вы закончили вводить шестнадцатеричный код.
Например, из памяти:
[ctrl+shift+u] 3c0 [пробел]
даст вам π (U+03C0 ГРЕЧЕСКАЯ МАЛЕНЬКАЯ БУКВА ПИ),
[ctrl+shift+u] 1f431 [пробел]
даст вам 🐱 (U+1F431 ЛИЦО КОШКИ), и
[ctrl+shift+u] 2014 [пробел]
даст вам — (U+2014 ДАШ).
В приложениях, основанных на Qt, EFL или любом другом, что в конечном итоге не использует GTK, это не сработает, но не слишком сложно открыть приложение на базе GTK, такое как текстовый редактор, и использовать интерфейс ctrl+shift+u, а затем скопировать его.
Большинство современных операционных систем имеют выбор символов для ввода эмодзи, каомодзи и специальных символов. Например, в Ubuntu и многих других дистрибутивах Linux вы используете Ctrl+. для его открытия
В зависимости от ваших настроек и дистрибутива вам может потребоваться установить дополнительные пакеты или использовать другой ярлык, например Ctrl+Shift+E или Ctrl+Alt+E. См.
- Как вставить эмодзи в текст в Ubuntu 18.04 и новее?
- Что произошло с выбором эмодзи в Linux Mint 19?
- Ускорьте ввод эмодзи в Fedora 28 Workstation
- Emote
Что касается Windows, вы активируете его, нажав Windows+. или Windows+;, а затем ищете по имени
В macOS это ^+⌘+Space
Для математических задач, если вы знаете латех, тогда я настоятельно рекомендую (и, если вы не знаете латех, я бы рекомендовал изучить подмножество, необходимое для использования):
Введите в латех слева и вы получите копируемый и вставляемый Юникод справа (по крайней мере, до той степени, до которой Юникод может поддерживать латех). Хорошо для подстрочных, надстрочных, всех видов математических операторов и т.д.
Например, ввод:
\hat{u} = \Pi_i\cdot\hat{v}\times\int_af(\theta)d\theta
даст
û = Πᵢ⋅v̂×∫ₐf(θ)dθ
(обратите внимание, математика в этом примере, конечно, ерунда).
Я не знаю, поставляется ли Cinnamon с IBus, но я знаю, что IBus работает в несколько рабочих окружениях (я использую его в XFCE, раньше использовал в LXDE, и я видел, как его использовали в GNOME).
С помощью IBus вы можете настроить сочетание клавиш (Ctrl+Shift+e
по умолчанию) для ввода “эмодзи”. Когда вы набираете это сочетание, вы можете ввести слово, связанное с символом, который вы ищете, а затем дважды нажать Space
, и оно выведет оверлей с несколькими символами, в описании которых есть это слово.
Несмотря на название функции, это не ограничивается эмодзи. Например, ввод Ctrl+Shift+e
“math” Space
Space
вызывает оверлей с несколькими эмодзи и другими символами Юникода, которые содержат “math” в их аннотациях. Вы можете нажать Escape
один раз, чтобы выйти из оверлея, Escape
еще раз, чтобы изменить ключевое слово для поиска, и Escape
снова, чтобы отменить ввод специального символа и вернуться к обычному вводу.
Мое любимое решение — это преобразование HTML-ссылок символов в пользовательские последовательности клавиш Compose, а затем использование их.
Как это сделать:
- Убедитесь, что ваш метод ввода поддерживает клавишу ⎄ Compose, и эта клавиша включена и назначена в вашей раскладке клавиатуры на физическую клавишу.
- Скачайте
entities.json
. - Запустите его через скрипт ниже, перенаправив стандартный вывод в путь, например
~/.local/share/entities.Compose
. - Добавьте директиву, например
include "%H/.local/share/entities.Compose"
к~/.XCompose
. - Настройка должна вступить в силу, когда вы перезапустите демон вашего метода ввода и/или приложения X11.
Скрипт:
#!/usr/bin/env python3
import sys
import json
import unicodedata
for entity, value in json.load(open('entities.json', 'r')).items():
if not (entity.startswith('&') and entity.endswith(';')):
print(f'Пропуск {entity}', file=sys.stderr)
continue
entsyms=" ".join(f'<{c}>' for c in entity[1:-1])
chars=""
codepoints = value.get("codepoints")
if codepoints is None:
codepoints = [ord(c) for c in value["characters"]]
print()
for oc in codepoints:
print(f'# {f"U+{oc:04X}":<7} {unicodedata.name(chr(oc), "<???>")}')
if oc == ord('\"') or oc == ord('\\') or 0x00 <= oc <= 0x1f:
chars += f'\\{oc:o}'
else:
chars += chr(oc)
keysym = ''
if len(codepoints) == 1:
keysym = f'U{codepoints[0]:04x}'
print(f'<Multi_key> <ampersand> {entsyms} <semicolon> : "{chars}" {keysym}')
Преимущества этого подхода:
-
Низкие технологии: Должно работать практически во всех клиентах X11, которые поддерживают X методы ввода.
-
Универсальность (относительно): Позволяет вводить акцентизированные латинские буквы, кириллицу, греческий алфавит, стрелки, математические символы, буквы для рисования и даже некоторые управляющие символы.
-
Легкость запоминания (относительно): HTML-сущности относительно легко запомнить: гораздо легче, чем номера кодовых точек, при этом имена часто следуют запоминающимся шаблонам:
- Кириллические буквы доступны под их английскими транслитерациями, за которыми следует
cy
; - Греческие буквы доступны под названиями букв;
- стрелки имеют вид
&⟨направление⟩{A|a}rr;
; - буквы для рисования доступны под
&box⟨направления⟩;
- двойные математические буквы имеют суффикс
opf
; - каллиграфические математические буквы имеют суффикс
scr
; - черletter (Fraktur) математические буквы имеют суффикс
fr
; - заглавная буква обозначает удвоенную линию, удвоенную стрелку или заглавную букву и т.д.
Вы можете посмотреть на список в спецификации и сами придумать некоторые мнемоники.
- Кириллические буквы доступны под их английскими транслитерациями, за которыми следует
-
Переносимые знания (и я думаю, что это ключевая особенность): запомненные имена сущностей могут быть полезны даже когда вы не работаете в среде, настроенной по вашему желанию.
- Имена сущностей могут быть использованы прямо при авторстве Markdown или HTML в текстовом редакторе. В худшем случае вы можете открыть браузер и перейти по
data:
URI, напримерdata:text/html,∃
, чтобы получить символ, который хотите, в копируемом виде. - Символы математической нотации часто доступны под теми же именами, что и их управляющие последовательности в TeX (с некоторыми исключениями), поэтому знание TeX поможет вам изучить имена сущностей и наоборот (хотя есть несколько исключений, таких как
ċ
, который соответствует “ċ”, вместо “⋅”, что является\cdot
в TeX, но⋅
в HTML).
- Имена сущностей могут быть использованы прямо при авторстве Markdown или HTML в текстовом редакторе. В худшем случае вы можете открыть браузер и перейти по
Недостатки:
- Хотя относительно разнообразные, именованные HTML-ссылки символов не охватывают все — хотя ничто не мешает вам создать, по аналогии, последовательности Compose на основе других назначений имен символов:
- Шорткоды для эмодзи (⎄
:poop:
↦ “💩”) - Коды ISO 3166 для флаговых эмодзи (⎄
#eu#
↦ “🇪🇺”) - X-SAMPA для IPA (⎄
$S$
↦ “ʃ”) - X-символы клавиш (⎄
<kana_E>
↦ エ)
- Шорткоды для эмодзи (⎄
- В XIM последовательности клавиш Compose ограничены восемью символами, поэтому сущности с названиями длиннее 6 символов будут недоступны. Другие методы ввода могут снять это ограничение (IBus – да).
- Некоторые имена сущностей довольно длинные (хотя предыдущий пункт делает это бессмысленным)
- В XIM, если вы сделаете опечатку в названии, вы не получите обратной связи и должны будете начать набирать имя сущности с самого начала (IBus предоставляет хотя бы визуальную обратную связь)
- Я бы предположил, что последовательности Compose вообще не были портированы в Wayland.
Вы рассматривали аппаратное решение? Может быть, настраиваемую вторую клавиатуру?
Art Lebedev Optimus Popularis:
https://www.artlebedev.com/optimus/popularis/
Или даже Elgato Stream Deck XL:
https://www.elgato.com/en/stream-deck-xl
Я не верю в это … Все эти предыдущие ответы, и никто, ни один, ни единственный человек не предложил … Emacs.
Emacs делает это очень-очень просто, проще, чем любое из вышеперечисленных решений.
Наберите C-x 8 <RET>
(или M-x insert-char
), а затем начните набирать описание вашего выбранного символа юникода. Обычный emacs предложит автозавершение ваших частичных описаний, но большинство людей, использующих emacs, используют расширение, такое как ivy
, edo
, helm
или icicles
, которые динамически представляют кандидатов на завершение по мере ввода.
Например, если вы начнете вводить строку calc
, вам будут предложены варианты runic letter calc
и pocket calculator
. Некоторые из упомянутых выше расширений emacs также предоставляют предварительные просмотры символов, которые будут вставлены.
Как только вы вставите символы в буфер emacs, вы -можете- скопировать и вставить их в желаемое вами приложение, но так же вы можете заменить это приложение на сам emacs. Например, emacs имеет несколько версий оболочек и терминальных эмуляторов, так что вы можете M-x ansi-term
, чтобы получить экземпляр терминала, а затем использовать M-x insert-char
непосредственно в его командной строке.
ПРАВКА: С установленным пакетом ivy
ввод C-h u
запускает M-x counsel-unicode-char
, что также довольно удобно.
Ответ или решение
Как удобно вводить специальные символы UTF-8 в Linux (Cinnamon)
UTF-8 — это стандарт кодирования, который позволяет использовать множество символов, включая нелатинские, математические и эмодзи. Несмотря на то что вывод символов в UTF-8 не вызывает проблем, их ввод может быть затруднительным. Ниже представлены эффективные способы ввода специальных символов UTF-8 на системе с десктопной средой Cinnamon для Linux.
1. Использование экранной клавиатуры Onboard
Onboard — это мощный инструмент, который может работать в фоновом режиме и предоставлять доступ к любимым символам в любое время.
- Установка: Она доступна в большинстве дистрибутивов Linux. Убедитесь, что Onboard установлен.
- Создание настраиваемого макета: Вы можете создать макет клавиатуры с необходимыми символами. Это позволяет иметь под рукой только те символы, которые вы часто используете.
- Функция "Сниппеты": Позволяет сохранять часто использующиеся фразы или символы, чтобы ускорить ввод.
Настройка горячих клавиш:
- Чтобы показать клавиатуру, создайте ярлык в вашем окружении рабочего стола для команды
onboard
или используйтеdbus-send
.
Преимущества:
- Возможность редактирования макета под свои нужды.
- Сниппеты позволяют быстро вставлять заранее подготовленные фразы.
2. Использование сочетания клавиш для ввода символов (Ctrl+Shift+U)
В приложениях, использующих интерфейс GTK, вы можете вводить символы по их шестнадцатеричным кодам:
- Нажмите
Ctrl+Shift+U
, затем введите шестнадцатеричный код символа, например,03C0
для π. - Завершите ввод, нажав
Space
.
Этот метод прост и не требует установки дополнительных приложений.
3. Доступ к эмодзи
Современные ОС часто имеют встроенные инструменты для ввода эмодзи:
- В Ubuntu и многих других дистрибутивах используйте комбинацию клавиш
Ctrl+.
для открытия выбора эмодзи.
4. IBus для поиска символов
IBus — это система ввода, которая поддерживает множество языков и символов.
- Поиск символов: Нажмите
Ctrl+Shift+E
, введите текст, связанный с нужным символом, и нажмитеSpace
дважды, чтобы открыть меню выбора символов, связанных с вашим запросом.
5. HTML-сущности в качестве вспомогательного инструмента
Вы можете создать пользовательские последовательности для ввода HTML-сущностей, таких как π
для π, с помощью кнопки Compose
(если поддерживается).
6. Специальные символы через Emacs
Если вы используете Emacs:
- Нажмите
C-x 8 RET
илиM-x insert-char
и начните вводить описание нужного символа. Например, "pi" покажет символ π.
7. Хардварные решения
Помимо программных решений, можно рассмотреть использование аппаратных клавиатур, например, Optimus Popularis или Elgato Stream Deck XL, которые позволяют программировать клавиши под специфические символы.
Заключение
Ввод специальных символов UTF-8 на Linux не должен быть затруднительным. Возможности включают в себя использование экранных клавиатур, сниппетов, сочетаний клавиш и даже аппаратных решений. Эти методы помогут упростить процесс ввода и сделают его более удобным для повседневного использования. Выбирайте метод, который наилучшим образом соответствует вашим потребностям и рабочему процессу.