GNU/Linux >> Tutoriels Linux >  >> Linux

Dispositions de clavier Emacs, Linux et internationales

Vous pouvez définir la méthode de saisie (merci à kindahero ) en tapant

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

ou

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

Pour le stocker de manière permanente, ajoutez

(setq default-input-method "cyrillic-yawerty")

vers ~/.emacs config (et utilisez C-\ pour basculer entre les dispositions de clavier).


J'utilise l'extrait de code suivant pour le clavier cyrillique et cela fonctionne bien pour moi :

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

Sauf :

Le seul problème que je connaisse est que le recalcul des formules OrgTable ne fonctionne pas dans la mise en page russe car il est mappé sur C-c-* et * change son emplacement.

sources


Voici une solution alternative qui utilise le langage du système d'exploitation, basée sur la réponse de syndikat.

Certaines traductions clés manquent, mais il devrait être facile de les ajouter.

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

Je ne sais pas où sabof a obtenu 150 milliards. J'ai couru ce code (merci à Yuri Khan, tiré d'EmacsWiki):

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

C'est seulement 128 combinaisons. Malheureusement, les combinaisons avec des lettres simples comme C-x b ne fonctionne pas. J'essaie toujours de trouver une meilleure solution.


Linux
  1. Commandes Linux :jobs, bg et fg

  2. Partagez votre clavier et votre souris entre Linux et Raspberry Pi

  3. Linux – Mode clavier brut ?

  4. Linux - Sysfs et Devtmpfs ?

  5. Linux – Répertoires standard et/ou communs sur les systèmes Unix/linux ?

Installer et configurer Jenkins sous Linux

Secrets du plasma :langues et configurations de clavier supplémentaires

Linux recherche une chaîne dans des dossiers et des fichiers avec ack

Comment installer et lancer emacs Editor sur Debian / Ubuntu Linux

Comment installer et utiliser GNU Emacs sur les distributions Linux

Cedilla sous C (ç) dans la disposition du clavier 'US international with dead keys' sous Linux