emacs: переключить привязку строки чисел к эквиваленту <shift>
В emacs я хотел бы перепривязать верхний ряд моей клавиатуры [1...0], чтобы при нажатии неизмененной клавиши получился ее смещенный эквивалент. То есть ввод 1234567890 приведет к вставке в буфер!"£$%^&*().
Я использую emacs 24.1.1 в Windows Vista с включенным режимом viper. Я занимаюсь программированием на Common Lisp с использованием slime. Я использую viper, чтобы избежать слишком частого использования Ctrl и Shift, так как могу получить немного emacs pinkie (RSI). Начав программировать на lisp, я обнаружил, что нажатие клавиш S-9 и S-0 для открытия и закрытия скобок начинает сказываться.
Включив следующее в мой файл запуска, я могу связать "9" с "(" и наоборот.
(defvar my-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "(")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "9")))
map))
(viper-modify-major-mode
'lisp-mode
'insert-state
my-key-map)
Это работает достаточно хорошо и легко распространяется на остальную часть строки, за исключением того, что я хотел бы иметь возможность переключаться между двумя режимами без необходимости удерживать нажатой клавишу Shift (скажем, путем переключения Caps Lock).
Есть ли способ сделать это, или я все это неправильно?
Спасибо
В
1 ответ
Вот пример, который я быстро взломал вместе, протестировал его в Emacs24 для Linux:
(setq viper-mode-key-mapping "custom")
(defvar custom-viper-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "(")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "9")))
map))
(defvar default-viper-keymap
(let ((map (make-sparse-keymap)))
(define-key map (kbd "9") '(lambda () (interactive) (insert "9")))
(define-key map (kbd "(") '(lambda () (interactive) (insert "(")))
map))
(defun switch-viper-mode-custom-keymap ()
(interactive)
(if (string= viper-mode-key-mapping "default")
(progn (setq viper-mode-key-mapping "custom")
(viper-modify-major-mode 'lisp-mode 'insert-state custom-viper-keymap))
(progn (setq viper-mode-key-mapping "default")
(viper-modify-major-mode 'lisp-mode 'insert-state default-viper-keymap))))
(global-set-key [(control f1)] 'switch-viper-mode-custom-keymap)
Когда у меня активирован режим viper, нажатие CTRL-F1 переключает раскладку клавиатуры с обычного на обычное.