The song that never ends.
Every kid has its own scheme. Through the years I've picked out mine.
The prerequisites:
- You have tuned up xkb and know what key is your X layout switcher. (In the past I've used left Ctrl to toggle en/ru, but recently switched to capslock.)
- You're using xxkb as your X Window indicator of the current layout. Not from Gnome, not from KDE, etc.
We want: use capslock for emacs toggle-input-method too. We don't want to modify xorg system files or hack part of emacs written in C.
The problem is that emacs (under xorg-7.5.1, for example) ignores ISO_Next_Group completely. You cannot bind anything to the key that emits that event.
But there is a clever trick I've googled. You translate ISO_Next_Group to some unused key in emacs, for example Super-A. (Super == left win key on my machine.):
(setf (gethash #xfe08 x-keysym-table) (aref (kbd "s-a") 0))
#xfe08 is ISO_Next_Group code. Then bind Super-A to toggle emacs keyboard layout:
(global-set-key (kbd "s-a") '(lambda () (toggle-input-method)))
OK. Next we need somehow disable system X switcher for all emacs windows. For xxkb this is done by adding this to its configuration file:
XXkb.app_list.wm_class_class.alt_group1: Emacs
And that's all.
As a bonus, I've added another very handy indicator of the current input method in emacs: cursor color.
;; default cursor color for all X frames
(add-to-list 'default-frame-alist '(cursor-color . "black"))
;; toggle the input method and the cursor color in one place
(global-set-key (kbd "s-a") '(lambda ()
(interactive)
(toggle-input-method)
(if window-system
(set-cursor-color
(if current-input-method
"red3"
"black")))
))

0 comments:
Post a Comment