Альтернативы кодам alt+numpad в Linux

Вопрос или проблема

Иногда мне нужно набирать “альт-коды” для получения символов, и в Linux может быть неэффективно использовать shift+ctrl+u, а затем вводить код, например, shift+ctrl+u+00a7 для §, когда в Windows это alt+21.

Поэтому я спрашиваю, есть ли способ использовать alt+… для этих символов, так как мне не очень нравится использовать shift+ctrl+u, и это не работает в некоторых местах.

Я использую xfce4 в качестве своего рабочего окружения, и в настройках клавиатуры я видел что-то под названием “составная клавиша”. Поскольку я не знал, что это такое, я поискал информацию и узнал, что это связано с этими юникодными символами.

Я также видел что-то вроде клавиш уровней 1, 2, 3 и 4, но я не совсем понимаю, как это работает, поэтому было бы замечательно, если бы кто-то мог объяснить это тоже.

(Я использую arch (более конкретно manjaro, если это поможет))

Вы можете использовать Compose s o (а также несколько других синонимичных последовательностей) для получения символа §. Это короче и проще запоминается, чем Shift+Ctrl+u a7 enter (вы не упомянули нажатие Enter, но мне пришлось это сделать, чтобы это заработало для меня). Последовательности составной клавиши предназначены для легкого запоминания, например + - для ± или e ' для é. На мой взгляд, это определенно лучше, чем запоминание чисел кодов Юникода!

Вы можете найти список последовательностей составной клавиши в различных файлах Compose в /usr/share/X11/locale. Особенно обратите внимание на /usr/share/X11/locale/en_US.UTF-8/Compose, который, похоже, содержит одну из самых больших коллекций. Обратите внимание, что в этом файле вы увидите Multi_key, который является “официальным” X11 названием клавиши, более известной как Compose.

Извините, я ничего не знаю о alt+…, о которых вы упоминаете. Лично мне хватает последовательностей составной клавиши для ввода английского, французского и иногда специальных символов (но не японских, конечно).

Я также видел что-то вроде уровней 1, 2, 3 и 4

Я не знаю, что это означает, но возможно, это относится к длине последовательности на составной клавише? Не все последовательности состоят из двух символов. Некоторые из них состоят из 3 символов: Compose - - - возвращает — (ассоциация: 3 дефиса, потому что длинное тире очень широкое), и, похоже, некоторые из них даже длиннее (хотя я не знаю никаких из них наизусть).

Ключевые моменты (только для новых читателей):

  • Alt + Number, Alt+Numeric или Alt+Code – это функция Windows, не Linux/Office
  • Десятичные коды (Alt + Numeric codes) не обязательно совпадают между Windows/Linux, поэтому Unicode(Hex) следует предпочесть
  • Это может использоваться в качестве drop-in замены для Windows Alt + Codes, но для Linux, т.е. для запуска LibreOffice Writer
  • Убедитесь, что нет никаких ярлыков, назначенных на Alt+0, Alt+1 … Alt+9, ни в LibreOffice, ни в LibreWriter перед установкой макроса – Дальнейшее чтение
  • Код макроса может быть не оптимизирован

Макрос выполнялся на: Версия: 7.4.7.2 / LibreOffice Community
ID сборки: 40(Сборка:2)
Потоки ЦП: 4; ОС: Linux 6.1; Рендеринг UI: по умолчанию; VCL: gtk3
Язык: en-US (en_US.UTF-8); UI: en-US
Версия Debian пакета: 4:7.4.7-1


̦Alt Number v0.1 для LibreOffice Writer

основанный на (LO Basic): https://ask.libreoffice.org/t/how-To-add-shortcut-key-combinations-To-keyboard-customization/27914/

О: Этот макрос имитирует поведение Alt + Number в Linux Libre Office Writer

Работа: Нажатие Alt+0 начинает захват нажатых цифр до тех пор, пока “AutoEnterOnceMaxDigitsReached” не будет достигнуто (по умолчанию: 3) или если это “0”, тогда должна быть нажата клавиша Spacebar, после чего, наконец, печатается юникодный символ, представленный введенным десятичным числом, что похоже на Windows, который запускает Office

Примеры:

  • Случай #1: AutoEnterOnceMaxDigitsReached = 3

    • Нажмите Alt+0 вместе, тогда 169 напечатает © знак авторского права в большинстве шрифтов
    • Нажмите Alt+0 вместе, тогда 069 напечатает E символ в большинстве шрифтов
  • Случай #2 AutoEnterOnceMaxDigitsReached = 0

    • Нажмите Alt+0 вместе, затем 128128, за которым следует клавиша Spacebar, напечатает 💀 череп эмодзи
    • Нажмите Alt+0 вместе, затем 69, за которым следует клавиша Spacebar, напечатает E символ в большинстве шрифтов
  • Шаг 1: В верхнем меню нажмите Инструменты > Макросы > Организовать макросы > Основной.

  • Шаг 2: Нажмите кнопку Новый, которая находится справа в только что открывшемся диалоговом окне

  • Шаг 3: В диалоговом окне имени нового модуля введите точное название “AltNumber” и нажмите Ок

  • Шаг 4: Скопируйте и вставьте весь код в этот новый модуль и нажмите Файл > Сохранить в меню макросов

  • Шаг 5: В меню Запустить > Запустить выберите Мои макросы… > Стандартные > AltNumber > InstallAltNumber и нажмите Запустить

    • Вы должны получить диалоговое окно с сообщением Установлено в…

Чтобы удалить/деинсталлировать этот Alt+Number, повторите Шаг 5, но выберите …RemoveAltNumber вместо этого и нажмите Запустить


REM ********** BASIC **********

' #### Пожалуйста, не стесняйтесь изменять этот скрипт макроса, чтобы он соответствовал вашим потребностям
Const AutoEnterOnceMaxDigitsReached As Integer = 3 'Укажите это "0" и используйте клавишу "Spacebar" для ввода

Global oKeyHandler As Object
Global numKeysPressed As String
Global keysPressedCount As Integer

Sub Main
    InstallAltNumber
End Sub

Sub InstallAltNumber
    ModifyAltNumber(True)
End Sub

Sub RemoveAltNumber
    ModifyAltNumber(False)
End Sub

Const title$ = "Alt Number v0.1 для LibreOffice Writer"
Sub ModifyAltNumber(bInstall As Boolean)
    On Local Error Resume Next
    Const strCommandURL$ = "vnd.sun.star.script:Standard.AltNumber.StartKeyHandler?language=Basic&location=application"
    Dim oKeyEvent As New com.sun.star.awt.KeyEvent 'Событие клавиши, представляющее ALT + 0
    oKeyEvent.Modifiers = com.sun.star.awt.KeyModifier.MOD2
    oKeyEvent.KeyCode = com.sun.star.awt.Key.NUM0
    Dim oUIConfigurationManager As Object
    Dim oUIConfigurationManagerSupplier As Object
    oUIConfigurationManagerSupplier = getDefaultContext().getByName("/singletons/com.sun.star.ui.theModuleUIConfigurationManagerSupplier")
    oUIConfigurationManager = oUIConfigurationManagerSupplier.getUIConfigurationManager("com.sun.star.text.TextDocument")
    Dim oShortcutManager As Object
    oShortcutManager = oUIConfigurationManager.getShortCutManager()
    Dim bAdded As Boolean
    bAdded = False
    If bInstall Then
        oShortcutManager.removeCommandFromAllKeyEvents(strCommandURL)
        oShortcutManager.setKeyEvent(oKeyEvent, strCommandURL)
        bAdded = True
    Else
        oShortcutManager.removeCommandFromAllKeyEvents(strCommandURL)
    End If
    oShortcutManager.store()
    If bAdded Then
        MsgBox("Установлено в LibreOffice Writer... 🎉", 64, title)
    Else
        MsgBox("Удалено из LibreOffice Writer! 😢", 64, title)
    End If
End Sub

Sub StartKeyHandler
    numKeysPressed = ""
    keysPressedCount = 0
    oController = ThisComponent.getCurrentController()
    If IsNull(oKeyHandler) Then
        oKeyHandler = CreateUnoListener("KeyHandler_", "com.sun.star.awt.XKeyHandler")
        oController.addKeyHandler(oKeyHandler)
    End If
End Sub

Sub StopKeyHandler
    oController = ThisComponent.getCurrentController()
    If Not IsNull(oKeyHandler) Then
        oController.removeKeyHandler(oKeyHandler)
        oKeyHandler = Nothing
    End If
    decimalUnicode = cLng(numKeysPressed)
    If 1114112 > decimalUnicode And decimalUnicode > 32 Then
        TypeCharacter(decimalUnicode)
    Else
        Const errorMsg$ = " Нажатие клавиш NumKeys, но число должно быть "
        MsgBox(numKeysPressed + errorMsg + "1114112 > " + decimalUnicode + " > 32!", 48, "ОШИБКА: " + title)
    End If
End Sub

Sub TypeCharacter(lUnicode As Long)
    Dim unicodeChar As String
    Dim oFunctionAccess As Variant
    Dim oDocument, oText, oCursor As Object
    oFunctionAccess = createUnoService("com.sun.star.sheet.FunctionAccess") 'Требуется LibreOffice Calc
    unicodeChar = oFunctionAccess.CallFunction("UNICHAR", Array(lUnicode))
    'MsgBox(numKeysPressed + " ➩ " + lUnicode + " ➩ " + unicodeChar, 64, "DEBUG: " + title) 'Раскомментируйте для отладки
    oDocument = ThisComponent
    oText = oDocument.Text
    oCursor = oDocument.CurrentController.getViewCursor()
    oText.insertString(oCursor, unicodeChar, False)
End Sub

Function KeyHandler_keyPressed(oEvent) As Boolean
    KeyHandler_keyPressed = True
End Function

Function KeyHandler_disposing(oEvent)
    KeyHandler_disposing = True
End Function

Function KeyHandler_keyReleased(oEvent) As Boolean
    If oEvent.KeyCode > 255 And oEvent.KeyCode < 266 Then
        numKeysPressed = numKeysPressed + oEvent.KeyChar
    End If
    keysPressedCount = keysPressedCount + 1
    If AutoEnterOnceMaxDigitsReached > 0 And keysPressedCount > AutoEnterOnceMaxDigitsReached Then
        StopKeyHandler()
    ElseIf oEvent.KeyCode = com.sun.star.awt.Key.SPACE Or keysPressedCount > 7 Then
        StopKeyHandler()
    End If
    KeyHandler_keyReleased = True
End Function

Ответ или решение

Вопрос, который вы подняли, действительно часто встречается у пользователей Linux, которые ранее использовали Windows с его функциональностью "alt-кодов". В Linux, и особенно в дистрибутивах, подобных Manjaro с рабочей средой XFCE, есть несколько удобных альтернатив.

1. Использование клавиши составителя (Compose Key)

Одним из наиболее удобных способов ввода специальных символов в Linux является использование клавиши составителя. Эта функция позволяет вам набирать символы с помощью последовательности клавиш, что зачастую проще, чем запоминать коды Unicode.

Настройка клавиши составителя:

  1. Откройте "Настройки" вашего рабочего окружения.
  2. Перейдите в раздел "Клавиатура".
  3. Найдите вкладку "Дополнительно" и установите клавишу составителя. Чаще всего для этой цели используется правый Alt или Menu.

Примеры использования:

После настройки клавиши составителя, вы можете набирать специальные символы. Например:

  • Для символа "§" нажмите Compose + s + o.
  • Для символа "±" используйте Compose + + + -.
  • Для символа "é" воспользуйтесь Compose + e + '.

Вы можете просмотреть и отредактировать доступные последовательности символов в файлах, расположенных по пути /usr/share/X11/locale, например, в файле /usr/share/X11/locale/en_US.UTF-8/Compose.

2. Использование кодов Unicode с клавишами Shift + Ctrl + u

Хотя вы упомянули, что не хотите использовать Shift + Ctrl + u, это всё же важно отметить. Этот метод позволяет вводить любые символы Unicode, просто введя его код в шестнадцатеричном формате. Например, для ввода символа "§", вы должны ввести:

  1. Нажмите Shift + Ctrl + u.
  2. Введите 00a7.
  3. Нажмите Enter.

Этот метод пригоден, если вам нужно ввести символ, отсутствующий в клавиатурной раскладке.

3. Использование макросов в LibreOffice

Если вы работаете с текстовыми процессорами, такими как LibreOffice Writer, вы можете создать макрос, который будет имитировать поведение "alt-кодов" в LibreOffice. При помощи написанного вами кода, вы сможете использовать Alt + 0, чтобы вводить символы, как и в Windows.

Шаги по созданию макроса:

  1. Откройте LibreOffice Writer.
  2. Перейдите в меню ИнструментыМакросыОрганизовать макросыBasic.
  3. Создайте новый модуль и вставьте предоставленный код макроса.
  4. Сохраните изменения и выполните макрос.

Пример использования макроса:

После установки макроса:

  • Нажмите Alt + 0, затем введя номера (например, 169), символ будет автоматически вставлен в документ.

Заключение

Хотя в Linux нет прямой аналогии функции "alt-кодов" Windows, вышеуказанные методы, такие как клавиша составителя и использование макросов в LibreOffice, могут значительно облегчить ввод специальных символов. Рекомендуется протестировать каждый из методов и выбрать тот, который вам более комфортен.

Оцените материал
Добавить комментарий

Капча загружается...