help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: emacs keybinding syntaxes bewilderment


From: B. T. Raven
Subject: Re: emacs keybinding syntaxes bewilderment
Date: Fri, 14 Dec 2007 17:15:57 -0600
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

Xah Lee wrote:
> recently i took some time to study the various syntax variations for
> keybinding in emacs.
> Here's a list:
> 
>  ; equivalent code for a single keystroke
>  (global-set-key "b" 'func-name)
>  (global-set-key [98] 'func-name)
>  (global-set-key [?b] 'func-name)
>  (global-set-key [(?b)] 'func-name)
>  (global-set-key (kbd "b") 'func-name)
> 
>  ; equivalent code for a named special key: Enter
>  (global-set-key "\r" 'func-name)
>  (global-set-key [?\r] 'func-name)
>  (global-set-key [13] 'func-name)
>  (global-set-key [(13)] 'func-name)
>  (global-set-key [return] 'func-name)
>  (global-set-key [?\^M] 'func-name)
>  (global-set-key [?\^m] 'func-name)
>  (global-set-key [?\C-M] 'func-name)
>  (global-set-key [?\C-m] 'func-name)
>  (global-set-key [(?\C-m)] 'func-name)
>  (global-set-key (kbd "RET") 'func-name)
>  (global-set-key (kbd "<return>") 'func-name)
> 
>  ; equivalent code for binding 1 mod key + 1 letter key: Meta+b
>  (global-set-key "\M-b" 'func-name)
>  (global-set-key [?\M-b]  'func-name)
>  (global-set-key [(meta 98)]    'func-name)
>  (global-set-key [(meta b)]    'func-name)
>  (global-set-key [(meta ?b)]    'func-name)
>  (global-set-key (kbd "M-b") 'func-name)
> 
>  ; equivalent code for binding 1 mod key + 1 special key: Meta+Enter
>  (global-set-key [M-return]    'func-name)
>  (global-set-key [\M-return]    'func-name)
>  (global-set-key [(meta return)]    'func-name)
>  (global-set-key (kbd "M-<return>") 'func-name)
> 
> ; equivalent code for binding Meta + cap letter key: Meta Shift b
>  (global-set-key (kbd "M-B") 'kill-this-buffer)
>  (global-set-key "\M-\S-b" 'backward-word)
>  (global-set-key "\S-\M-b" 'backward-word)
>  (global-set-key "\M-B" 'forward-word)
> 
>  (global-set-key [?\M-S-b] 'backward-word) ; invalid-read-syntax
>  (global-set-key [?\M-?\S-b] 'forward-word) ; invalid-read-syntax
>  (global-set-key [?\M-\S-b] 'forward-word) ; compile but no effect
> 
>  (global-set-key [?\M-B] 'forward-word)
>  (global-set-key [\M-B] 'backward-word) ; compile but no effect
> 
>  (global-set-key [(meta shift b)] 'func-name)
>  (global-set-key [(shift meta b)] 'func-name)
> 
>  (global-set-key (kbd "M-B") 'backward-word)
>  (global-set-key (kbd "M-S-b") 'forward-word) ; compile but no effect
> 
> ; Meta + shifted symbol key.
>  (global-set-key (kbd "M-@") 'backward-word) ; good
>  (global-set-key (kbd "M-S-2") 'forward-word) ; compile but no effect
> 
> What the hell!
> 
> Note: this study is not complete. I have yet to add examplary
> variations for key sequences. Also, i don't fully yet understand why
> some of them does not work.
> 
> Also, a question: recently i learned that to make Mac keyboard's
> Option key to be hyper, i can use (setq mac-option-modifier 'hyper).
> Is there something similar on Windows Emacs to make the WindowKey
> hyper? Thanks.
> 
>   Xah
>   xah@xahlee.org
> \xAD\xF4 http://xahlee.org/


Yes. I have the following in my .emacs:

(setq w32-pass-lwindow-to-system nil
      w32-pass-rwindow-to-system nil
      w32-pass-apps-to-system    nil
      w32-lwindow-modifier       'super   ;; Left Windows
      w32-rwindow-modifier       'super   ;; Right Windows
      w32-apps-modifier          'hyper)  ;; App-Menu (key to right of Right
Windows)

In addition I have used Keytweak (on w2000 or better (later,
whatever)changes registry scancode interpretations) to make the order of the
modifiers in bottom row super alt control spacebar control alt super hyper.
For this to work you need a keyboard where all the modifier keycaps can be
swapped around. Since I used the Dvorak layout, even with these hacks, the
best I can do to be able to touch type keychords and get any ergonomic
effect is to redefine these keys:

;; Single char cursor movement on Dvorak layout
(global-set-key [(meta h)] 'backward-char)
(global-set-key [(meta n)] 'forward-char)
(global-set-key [(meta c)] 'previous-line)
(global-set-key [(meta t)] 'next-line)

;;substitute for stolen metakeychords
(global-set-key [(control p)] 'mark-paragraph)
(global-set-key [(control b)] 'capitalize-word)
(global-set-key [(control f)] 'find-function-at-point)
(global-set-key [(shift control f)] 'find-variable-at-point)

What I really want is for those first four bindings to be used with the Ctrl
modifier rather than Meta, but the C-h and C-c prefixes preclude that
possibility.

Ed



reply via email to

[Prev in Thread] Current Thread [Next in Thread]