LINUX.ORG.RU

xkbswitch.nvim - умное автоматическое переключение раскладки в 120 LOC

 , ,


1

1

Мой первый опенсорсный проект.

У меня не работает langmap, keymap. vim-xkbswitch невероятно блоутнутый (1000 строк), непонятно зачем дублирующий каждый биндинг на каждую из неанглийских раскладок, требует огромную ручную конфигурацию. Полгода назад пробовал подключить, не вышло.

Написал свой. Использую автокоманды для реагирование на вход/выход в/из Insert мода и libcall’ы для смены раскладки. Вы можете писать комментарии/заметки/документы на любом языке, нажать Esc и английская раскладка уже будет активна. Плагин сохраняет вашу настоящую раскладку перед переключением в English. В следующий раз когда вы войдете в Insert у вас сразу же будет активна ваша последняя сохраненная раскладка. Так же работает и с фокусом. Когда Неовим теряет (вы кликаете на другое окно) плагин меняет вашу раскладку на последнюю сохраненную. Когда Неовим получает фокус, плагин сохраняет вашу раскладку, которую вы могли поменять в другом окне/чате и включает English только если это необходимо (у вас активен Normal либо вариации Visual’а)

Судите строго, спасибо!

Судите строго

К иксам гвоздями прибить илитакже работает и в вяленом и ядерной консоли?

Зачем что-то делать с фокусом? Если юзер хочет, чтобы в разных окнах были разные раскладки, для этого есть более общие решения.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

Не уверен насчет вэйленда. Он использует XKB, так что возможно будет работать, но я тестировал только на иксах. Насчет фокуса: у меня была цель сделать плагин подключаемый одной строчкой и полностью решающий проблему необходимости переключения раскладок для работы команд. Переключение фокуса этим плагином физически не может создать ситуацию при которой оно вам помешает, ибо

  1. При фокусе на вим раскладка меняется на Eng только если активен Normal или Visual (вы бы и так это сделали руками)
  2. Перед фокусом ваша настоящая раскладка сохраняется и если вы сфокусировали вим случайно и ушли в другое окно, то вам вернется ваша раскладка

Лично я не пользуюсь функцией отдельного лэйаута под каждое окно, мне это при работе создавало большие неудобства, но именно с вимом это поведение очень необходимо. Если будут желающие, то без проблем добавлю настройку отключения момента с фокусом.

ivanesmantovich
() автор топика
Ответ на: комментарий от ivanesmantovich

Тогда и критики не будет — я не могу смотреть код под GPLv3. (=

И пользоваться не смогу — я свалил обратно на Vim, потому что сборка NeoVim во FreeBSD это какая-то гребля с препятствиями. А чтобы завести nvim-плагин в Vim — ещё большая гребля с препятствиями, и то далеко не все можно завести.

Впрочем, я не любитель обмазываться плагинами. Помимо Plug у меня установлено всего ≈15 плагинов, большинство из которых — подсветка синтаксиса.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

я не могу смотреть код под GPLv3

Я извиняюсь, но читал что ты на BSD ушёл не дождавшись включения в ядро Линукс ZFS. Это рациональная причина, я её понимаю, тебе видимо важно именно ZFS, так бывает.

А теперь я читаю что ты код под GPLv3 смотреть не можешь. Это что то религиозно-психическое, типа «я не могу есть пищу если её цвет красный», или есть какие то рациональные причины таких вот самоограничений?

Jameson ★★★★★
()
Последнее исправление: Jameson (всего исправлений: 1)
Ответ на: комментарий от Jameson

А теперь я читаю что ты код под GPLv3 смотреть не можешь. Это что то религиозно-психическое, типа «я не могу есть пищу если её цвет красный», или есть какие то рациональные причины таких вот самоограничений?

Я придерживался этого принципа ещё когда был линуксоидом. Как пользователю мне не принципиально какая лицензия, если она не обязывает меня приносить в жертву детей и заниматься прочим непотребством; как программиста меня напрягает любая несвобода. Запрет на закрытие собственного кода это тоже несвобода. Причём я ничего не имею против тех, кто выбрал GPL — это исключительно их право. Это никак не мешает мне пользоваться софтом под GPL (по крайней мере пока она не запрещает использовать софт под GPL вне GNU).

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

ушёл не дождавшись включения в ядро Линукс ZFS

Совсем не так. CDDL и GPL не совместимы, потому включение ZFS в Linux в принципе невозможно.

Я задолбался бороться с проблемами на ровном месте. Намеренное вредительство со стороны разработчиков, мешающее собрать модули ядра zfs. И вдвойне вредительство потому что аналогов нет (Btrfs как минимум менее надёжна; у меня она однажды без видимых причин просто превратилась в тыкву, утащив в /dev/null все данные).

Грег послал пользователей ZFS в пешее эротическое на FreeBSD, я и ушёл. Тем более опыт был, пусть и не на десктопе.

mord0d ★★★★★
()
Ответ на: комментарий от ivanesmantovich

Твой код я не запускал, но я решал сходную задачу для Gnome+Wayland и иксовые переключалки не работали. В частности, xkb-switch из репов Федоры не работает.

В Гноме своя переключалка, которая переключается обращением к dbus. Но в какой-то версии Гнома запретили напрямую обращаться к dbus, поэтому нужно писать расширение-прокладку, которая позволит это сделать.

Im_not_a_robot ★★★★★
()

Спасибо за желание обновить древний vim-xkkbswitch!

Под MacOS Vetura ошибка: Error detected while processing /Users/USER/.config/nvim/init.lua: E5113: Error while calling lua chunk: …/site/pack/packer/start/xkbswitch.nvim/lua/xkbswitch.lua:50: (xkbswitch.lua) Error occured: could not find the English layout. Check your layout list. (xkb-switch -l) stack traceback: [C]: in function ‘error’ …/site/pack/packer/start/xkbswitch.nvim/lua/xkbswitch.lua:50: in main chunk [C]: in function ‘require’ /Users/USER/.config/nvim/init.lua:133: in main chunk Press ENTER or type command to continue

в plugins.lua (вызывается из init.lua) через mason и packer установил плагин: use { «ivanesmantovich/xkbswitch.nvim» }

в init.lua добавил строки: vim.cmd «let g:XkbSwitchLib = ‘/usr/local/lib/libInputSourceSwitcher.dylib’» require(‘xkbswitch’).setup()

ОШИБКУ даёт именно последняя строка. Спасибо!

Zzzz
()
Ответ на: комментарий от Zzzz

Не запускался xkb-switch -l

  1. Из input-source-switcher % issw com.apple.keylayout.ABC % issw -l com.apple.keylayout.ABC com.apple.keylayout.Russian com.apple.CharacterPaletteIM com.apple.inputmethod.EmojiFunctionRowItem com.apple.PressAndHold

  2. Из xkbswitch-macosx скопировал в /usr/local/bin xkbswitch, переименовал его xkb-switch и запустил xkb-switch -l. Там English нет - есть из этого только: US USExtended USInternational-PC

  3. XKB-SWITCH под MacOS не собирается - просит X11

Куда бечь?

Zzzz
()
Ответ на: комментарий от Zzzz

Спасибо за отзыв! Сегодня человек, тоже маковод, открыл первый issue, у него тоже не работает. Проблема решается очень легко, исправлю ее сразу же как доберусь до компьютера (В течение трех дней). Сегодня делали операцию по исправлению носовой перегородки, печатаю это одним пальцем на телефончике Не перемещайте файлы, не добавляйте глобальные переменные, когда исправлю всë будет работать по старому ридми. На всякий случай добавлю возможность передавать в setup руками путь до .lib/.dylib файла. Спасибо ещё раз!

ivanesmantovich
() автор топика
Ответ на: комментарий от ivanesmantovich

Жалею Вам успешно решить вопросы со здоровьем!

Сейчас попытаться использовать на macos с issw или Libxkbswitch-macosx без модификации кода - работать не будет, т.к. просто код их не вызывает, а использует libInputSourceSwitcher.dylib. Для себя пока вышел из положения из комбинации из issw и libInputSourceSwitcher.dylib, с жёстким определением issw дефолтной расскладки (а не поиском подходящей с US). В остальном Ваши код для меня работают хорошо. Ждём Ваш окончательный вариант!

Может поскажете как делать интерактивную отладку плагинов lua в vimspector или dap а то с помощью print() одня возня…

Zzzz
()
Ответ на: комментарий от ivanesmantovich

Для Вашей информации:

  1. расскладки, которые показыает issw (они у меня установлены) % issw -l com.apple.keylayout.ABC com.apple.keylayout.Russian com.apple.CharacterPaletteIM com.apple.inputmethod.EmojiFunctionRowItem com.apple.PressAndHold

  2. расскладки, которые показывает xkbswitch-macosx: % xkbswitch -l 2SetHangul 390Hangul 3SetHangul AfghanDari AfghanPashto AfghanUzbek Anjal Arabic Arabic-QWERTY ArabicPC Armenian-HMQWERTY Armenian-WesternQWERTY Australian Austrian Azeri Bangla Bangla-QWERTY Belgian Brazilian British British-PC Bulgarian Bulgarian-Phonetic Byelorussian Canadian Canadian-CSA CangjieKeyboard Cherokee-Nation Cherokee-QWERTY Colemak Croatian Croatian-PC Czech Czech-QWERTY DVORAK-QWERTYCMD Danish Devanagari Devanagari-QWERTY Dutch Dvorak Dvorak-Left Dvorak-Right Estonian Faroese Finnish FinnishExtended FinnishSami-PC French French-numerical GJCRomaja Georgian-QWERTY German Greek GreekPolytonic Gujarati Gujarati-QWERTY Gurmukhi Gurmukhi-QWERTY HNCRomaja Hawaiian Hebrew Hebrew-PC Hebrew-QWERTY Hungarian Icelandic Inuktitut-Nunavut Inuktitut-Nutaaq Inuktitut-QWERTY InuttitutNunavik Irish IrishExtended Italian Italian-Pro Jawi-QWERTY KANA Kannada Kannada-QWERTY Kazakh Khmer Kurdish-Sorani Latvian Lithuanian Macedonian Malayalam Malayalam-QWERTY Maltese Maori Myanmar-QWERTY Nepali NorthernSami Norwegian NorwegianExtended NorwegianSami-PC Oriya Oriya-QWERTY Persian Persian-ISIRI2901 Persian-QWERTY Polish PolishPro Portuguese Romanian Romanian-Standard Russian Russian-Phonetic RussianWin Sami-PC Serbian Serbian-Latin Sinhala Sinhala-QWERTY Slovak Slovak-QWERTY Slovenian Spanish Spanish-ISO Swedish Swedish-Pro SwedishSami-PC SwissFrench SwissGerman Tamil99 Telugu Telugu-QWERTY Thai Thai-PattaChote Tibetan-QWERTY Tibetan-Wylie TibetanOtaniUS Turkish Turkish-QWERTY Turkish-QWERTY-PC US USExtended USInternational-PC Ukrainian UnicodeHexInput Urdu Uyghur Vietnamese Welsh WubihuaKeyboard WubixingKeyboard ZhuyinBopomofo ZhuyinEten

Zzzz
()
Ответ на: комментарий от mord0d

Херня, тогда ты смотришь код под MIT/BSD/Apache иные, а потом пишешь свой то что что сразу украл у них? По твоей логике ты вообще никакой код смотреть не должен ибо если посмотрел то всё, копирайт автора навеки стобою =) Не копируй чужой код и делов то.

Запрет на закрытие собственного кода это тоже несвобода.

Чиво? Я как автор выпустивший проект под GPL беру и выпускаю версию с закрытым кодом под EULA и всё, какие проблемы то. Кто автор тот и рулит балом. Это запрет другим закрывать твой код.

Ну, а если хочется нужно писать закрытый код, то просто не используй GPL библиотеки или используй LGPL и всё, делов то, есть правда нюансы с v2 и v3 и порой дебильные типа прошивка под микроконтроллер прожигаемый 1 раз идёт под GPLv3 в которой запрещена тивоизация, а прожиг одноразовой микрухи это она и есть по сути. И вот хоть стой хоть плакай. Всё имеет свои разумные рамки применения, фатанизм GPL такой же плохой как и фанатизм MIT всяких.

Хотя если на душе от этого перфекционизма тепло то ладно, почему нет то. Понять можно. Но наверняка у тебя были глупые случаи когда есть баг, ты даже никуда не смотря понимаешь как его пофиксить, но не делаешь этого ибо принял обет несмотрения в гпл =)))

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)