Re: alt-space switch
On 2016-01-19, sergio wrote:
> Хочу переключать раскладку по alt-space:
> ralt-space: русский, latl-space: английский.
Я реализовал так (вроде важен порядок меджу setxkbmap и kbdd):
$ cat ~/.xinitrc
#!/bin/bash
# Under Cygwin I prefer '-multiwindow' option, so it needn't to setup WM.
if [[ -z $COMSPEC ]]; then
{
setxkbmap us,ru,ua
kbdd
if [[ -f ~/.xmodmaprc ]]; then
xmodmap ~/.xmodmaprc &
fi
} &
fi
! To load this config run:
! $ xmodmap .xmodmaprc
$ cat ~/.xmodmaprc
! Win key.
clear mod3
clear mod4
keycode 133 = Super_L
! keycode 134 = Multi_key
! keycode 134 = Super_R
keycode 134 = Hyper_R
add mod3 = Super_L
add mod4 = Hyper_R
Использую 3 языка, LWin делаю модфикатором Super.
kbdd сохраняет раскладку индивидуально по приложениям и доступен по DBus:
$ dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:0
$ dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:1
$ dbus-send --dest=ru.gentoo.KbddService /ru/gentoo/KbddService ru.gentoo.kbdd.set_layout uint32:2
В своем оконном менеджере добавил:
$ cat ~/.fvwm/config
# Run at sturtup and after each restart.
# All fvwm modules exit after restart Fvwm, so you must put they there.
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Module FvwmKbdd.pl
# Switch input method.
Key 1 A 3 SendToModule FvwmKbdd.pl kbdd 0
Key 2 A 3 SendToModule FvwmKbdd.pl kbdd 1
Key 3 A 3 SendToModule FvwmKbdd.pl kbdd 2
$ cat ~/.fvwm/FvwmKbdd.pl
#!/usr/bin/perl -w
use lib `fvwm-perllib dir`;
use FVWM::Module;
use General::Parse;
use Net::DBus;
# Net::DBus
my $bus = Net::DBus->session();
# Net::DBus::RemoteService
my $service = $bus->get_service("ru.gentoo.KbddService");
# Net::DBus::RemoteObject
my $object = $service->get_object("/ru/gentoo/KbddService");
my $module = new FVWM::Module(
Name => "FvwmKbdd",
Mask => M_STRING,
Debug => 1,
);
sub kbdd {
my ($module, $event) = @_;
my ($action, @args) = get_tokens($event->_text);
if ($action eq "hello") {
$module->send("Echo Hello from Kbdd...");
} elsif ($action eq "hel") {
$module->send("Echo xxx...");
} elsif ($action eq "kbdd") {
my $no = $args[0];
if ((0 <= $no) && ($no < 4)) {
$object->set_layout(Net::DBus::dbus_uint32($no));
} else {
$module->send("Echo Error: Kbdd no " . $no . "is not in 1..4 range");
}
} elsif ($action eq "stop") {
$module->send("Echo Kbdd exit...");
$module->terminate;
} else {
$module->send("Echo Kbdd unknown action: " . $action);
}
}
$module->addHandler(M_STRING, \&kbdd);
$module->send("Echo Kbdd loaded...");
$module->event_loop;
================================================================
Так живу несколько лет. По итогу переключение по:
LWin+1, LWin+2, LWin+3
Получить настройки в файлах:
http://hg.defun.work/skel/file/tip
У решения есть проблемы с всплывающими окнами.
Вообще у X11 какой то особый статус всплывающих окон, Они эксклюзивно забирают
фокус, так что события с клавиатуры не попадают в Fvwm. Я даже не знаю какими
словами это гуглить.
================================================================
Для Emacs есть интересное решение:
;; cyrillic-jis-russian for 567 is :,.
;; cyrillic-jcuken for SHIFT 567 is :,.
;; russian-computer for SHIFT 567 is %^&
(setq my-russian-input-method 'russian-computer)
(setq my-ukranian-input-method 'ukrainian-computer)
(setq my-ipa-input-method 'ipa-x-sampa)
(when (<= emacs-major-version 21)
(setq my-russian-input-method 'cyrillic-jcuken)
(setq my-ukranian-input-method 'cyrillic-jcuken))
(setq default-input-method my-russian-input-method)
(defun my-toggle-input-method (&optional arg)
(interactive "P")
(if (numberp arg)
(cond
((eq arg 1)
(activate-input-method nil))
((eq arg 2)
(activate-input-method my-russian-input-method))
((eq arg 3)
(activate-input-method my-ukranian-input-method))
((eq arg 4)
(activate-input-method my-ipa-input-method))
((eq arg 5)
(activate-input-method 'TeX)) )
(toggle-input-method arg)) )
(global-set-key (kbd "C-\\") 'my-toggle-input-method)
По C-4 C-\ ввожу IPA символы (ранее пользовался методом ipa, но ipa-x-sampa
полнее, понятней и распространен в другом софте), по C-5 C-\ ввожу всякие
типографические кавычки и стрелочки.
================================================================
Безусловное переключение - хорошо.
Если у Вас получится с .xkbrc - отпишите в рассылку. Разобраться хочется, но
времени нету, а там много концепций и доки.
--
http://defun.work/
Reply to: