GNU/Linux >> Linux の 問題 >  >> Linux

Emacs、Linux、および国際キーボード レイアウト

入力方法を設定できます (称賛は kindahero に行きます) ) 入力する

M-x set-input-method RET cyrillic-yawerty RET

または

M-x set-input-method RET cyrillic-jcuken RET

永続的に保存するには、

を追加します
(setq default-input-method "cyrillic-yawerty")

~/.emacs へ config (および C-\ を使用) キーボード レイアウトを切り替えることができます)。


キリル文字キーボードに次のスニペットを使用していますが、問題なく動作します:

(defun reverse-input-method (input-method)
  "Build the reverse mapping of single letters from INPUT-METHOD."
  (interactive
   (list (read-input-method-name "Use input method (default current): ")))
  (if (and input-method (symbolp input-method))
      (setq input-method (symbol-name input-method)))
  (let ((current current-input-method)
        (modifiers '(nil (control) (meta) (control meta))))
    (when input-method
      (activate-input-method input-method))
    (when (and current-input-method quail-keyboard-layout)
      (dolist (map (cdr (quail-map)))
        (let* ((to (car map))
               (from (quail-get-translation
                      (cadr map) (char-to-string to) 1)))
          (when (and (characterp from) (characterp to))
            (dolist (mod modifiers)
              (define-key local-function-key-map
                (vector (append mod (list from)))
                (vector (append mod (list to)))))))))
    (when input-method
      (activate-input-method current))))

(reverse-input-method 'russian-computer)

例外:

<ブロック引用>

私が知っている唯一の問題は、OrgTable 式の再計算がロシア語レイアウトで機能しないことです。これは、C-c-* にマップされ、* その場所を変更するためです.

ソース


syndikat の回答に基づく、OS 言語を使用する代替ソリューションを次に示します。

一部の重要な翻訳が欠落していますが、簡単に追加できるはずです。

;; 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))

サボフが 1500 億をどこで手に入れたのかはわかりません。このコードを実行しました (EmacsWiki から引用した Yuri Khan のおかげです):

(loop
 for from across "йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖ\ЭЯЧСМИТЬБЮ№"
 for to   across "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>#"
 do
 (eval `(define-key key-translation-map (kbd ,(concat "C-" (string from))) (kbd ,(concat     "C-" (string to)))))
 (eval `(define-key key-translation-map (kbd ,(concat "M-" (string from))) (kbd ,(concat     "M-" (string to))))))

組み合わせはたったの128通り。残念ながら、C-x b のような 1 文字の組み合わせ 働かないでください。私はまだより良い解決策を見つけようとしています.


Linux
  1. LinuxとRaspberryPi間でキーボードとマウスを共有する

  2. Linux で Win、Ctrl、および Alt キーを再マップする

  3. タッチパッドとキーボードを一時的に無効にします。つまり、Linux ラップトップをベビープルーフします。

  1. Linuxコマンド:jobs、bg、およびfg

  2. Linux – Rawキーボードモード?

  3. Linux – SysfsとDevtmpfs?

  1. 私の機能豊富で最小限のLinuxターミナル

  2. sedを使用してファイル内の文字列を検索および置換する方法

  3. Linux – Unix / linux Osesの標準および/または共通ディレクトリ?