2011-12-16 5 views
1

キーバインディングを無効にする例を探していたので、Sz hを押して、実際の結果が "Ж"( Szで始まる他のシーケンスは、 "З"(キリル文字のZe)と、新しいシーケンスを開始したかのようにタイプされた次の文字を、専用モードで挿入します。自己挿入コマンドまたは入力デコードマップをオーバーライド

は、これまでのところ私はこれが見つかりました:http://www.gnu.org/software/emacs/elisp/html_node/Translation-Keymaps.html(ページの一番下に)、私はそれは/本当にこの例では、場合:(

を表示しようとしているのか理解していない何もすることができません私はそれを本当に感謝、自己挿入コマンドまたは上記成し遂げるための他の方法をオーバーライドする簡単な例を書く時間がかかります

EDIT:! (ここでは、私がこれまでにしようとしていたものです)

(defun transliterate() 
    (interactive) 
    (insert (upcase last-input-char))) 

(define-key (current-global-map) 
    [remap self-insert-command] 
    'transliterate) 

EDIT2: http://pastebin.com/uBFmspmf私は希望の効果を得ることができましたが、コードは非常に醜いです:(したがって、提案はまだ歓迎です!

答えて

0

免責事項:たとえば、ここを参照してください:

(defvar zhe-mode-mapping 
    '((?h . ?Ж))) 

(defvar zhe-mode-prefix-key [(meta i)]) 

(defun zhe-mode-insert (n) 
    (interactive "p") 
    (let ((mapping (assq last-input-event zhe-mode-mapping))) 
    (if mapping 
     (apply 'insert (make-list n (string (cdr mapping)))) 
     (if (eq (lookup-key (current-global-map) (single-key-description last-input-event)) 
       'self-insert-command) 
      (progn 
      (insert "З") 
      (self-insert-command n)) 
     (error "%s does not self-insert" (single-key-description last-input-event)))))) 

(defvar zhe-mode-override-map 
    (let ((map (make-sparse-keymap))) 
    (map-keymap (lambda (key def) 
        (when (eq def 'self-insert-command) 
        (nconc map (list (cons key 'zhe-mode-insert))))) 
       (current-global-map)) 
    (keymap-canonicalize map))) 

(define-minor-mode zhe-mode 
    "blah blah" 
    nil 
    "zhe" 
    (let ((map (make-sparse-keymap))) 
    (define-key map zhe-mode-prefix-key zhe-mode-override-map) 
    map)) 

zhe-modeコマンドでマイナーモードをアクティブにします。あなたが望むことを行うにはzhe-mode-key[(super z)]をカスタマイズしてください。私は自分のキーボードにマップされたスーパーを持っていません。楽しい。

+0

私が言ったように、多言語機能は使用しません。私は問題のあなたの記述から私が解析できるものにちょうど行きました。私はpastebinからあなたのコードが上記とはかなり異なることをしているのを見ます。 –

0

あなたはチェコのキーボードは一部の文字(例えばá)の上にアクセントを挿入する=を使用して、たとえば、他のキーボードの定義を見て持つことができますが、文字が続くとき、それをアクセントできませんそれらの両方を印刷します(例:= f)。私はEmacsで多言語機能を使用しないので、これが最善のアプローチではないかもしれない、と私もここにホイールを再発明しているかもしれないが、:

http://stuff.mit.edu/afs/athena/astaff/source/src-8.4/third/emacs/leim/quail/czech.el

関連する問題