linux 美国键盘6,Emacs,Linux和国际键盘布局

这是另一种使用OS语言的解决方案,它基于syndikat的答案。

一些关键翻译缺失,但应该很容易添加它们。

;; USAGE:

;; Put in your .emacs:

;;

;; (translate-keystrokes-ru->en)

;; (add-hook 'text-mode-hook

;; (lambda() (literal-insert-mode 1)))

;;

;; Only buffers with literal-insert-mode active will be sensitive to the

;; environment language. Prefixed keybindings will still be usable.

(defun translate-keystrokes-ru->en()

"Make emacs output english characters, regardless whether

the OS keyboard is english or russian"

(flet ((make-key-stroke (prefix char)

(eval `(kbd ,(if (and (string-match "^C-" prefix)

(string-match "[A-Z]" (string char)))

(concat "S-" prefix (string (downcase char)))

(concat prefix (string char)))))))

(let ((case-fold-search nil)

(keys-pairs (mapcar* 'cons

"йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖ\ЭЯЧСМИТЬБЮ№"

"qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>#"))

(prefixes '("" "s-" "M-" "M-s-"

"C-" "C-s-" "C-M-" "C-M-s-")))

(mapc (lambda (prefix)

(mapc (lambda (pair)

(define-key key-translation-map

(make-key-stroke prefix (car pair))

(make-key-stroke prefix (cdr pair))))

keys-pairs))

prefixes))))

(defun literal-insert()

(interactive)

(insert-char last-input-event 1))

(define-minor-mode literal-insert-mode

"Make emacs output characters corresponging to the OS keyboard,

ignoring the key-translation-map"

:keymap (let ((new-map (make-sparse-keymap))

(english-chars "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>#"))

(mapc (lambda (char)

(define-key new-map (string char)

'literal-insert))

english-chars)

new-map))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值