- Вопрос или проблема
- Ключевые моменты (только для новых читателей):
- ̦Alt Number v0.1 для LibreOffice Writer
- Ответ или решение
- 1. Использование клавиши составителя (Compose Key)
- Настройка клавиши составителя:
- Примеры использования:
- 2. Использование кодов Unicode с клавишами Shift + Ctrl + u
- 3. Использование макросов в LibreOffice
- Шаги по созданию макроса:
- Пример использования макроса:
- Заключение
Вопрос или проблема
Иногда мне нужно набирать “альт-коды” для получения символов, и в 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.
Настройка клавиши составителя:
- Откройте "Настройки" вашего рабочего окружения.
- Перейдите в раздел "Клавиатура".
- Найдите вкладку "Дополнительно" и установите клавишу составителя. Чаще всего для этой цели используется правый 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, просто введя его код в шестнадцатеричном формате. Например, для ввода символа "§", вы должны ввести:
- Нажмите
Shift
+Ctrl
+u
. - Введите
00a7
. - Нажмите
Enter
.
Этот метод пригоден, если вам нужно ввести символ, отсутствующий в клавиатурной раскладке.
3. Использование макросов в LibreOffice
Если вы работаете с текстовыми процессорами, такими как LibreOffice Writer, вы можете создать макрос, который будет имитировать поведение "alt-кодов" в LibreOffice. При помощи написанного вами кода, вы сможете использовать Alt
+ 0
, чтобы вводить символы, как и в Windows.
Шаги по созданию макроса:
- Откройте LibreOffice Writer.
- Перейдите в меню
Инструменты
→Макросы
→Организовать макросы
→Basic
. - Создайте новый модуль и вставьте предоставленный код макроса.
- Сохраните изменения и выполните макрос.
Пример использования макроса:
После установки макроса:
- Нажмите
Alt
+0
, затем введя номера (например,169
), символ будет автоматически вставлен в документ.
Заключение
Хотя в Linux нет прямой аналогии функции "alt-кодов" Windows, вышеуказанные методы, такие как клавиша составителя и использование макросов в LibreOffice, могут значительно облегчить ввод специальных символов. Рекомендуется протестировать каждый из методов и выбрать тот, который вам более комфортен.