* elisp question:keyboard-translate with hyper fail? @ 2011-03-11 11:00 Xah Lee 2011-03-11 12:01 ` Deniz Dogan [not found] ` <mailman.6.1299844900.14178.help-gnu-emacs@gnu.org> 0 siblings, 2 replies; 17+ messages in thread From: Xah Lee @ 2011-03-11 11:00 UTC (permalink / raw) To: help-gnu-emacs when i try to do this: (keyboard-translate ?\H-3 ?•) ; set Hyper+3 to type unicode bullet char i got this error Debugger entered--Lisp error: (wrong-type-argument characterp 16777332) keyboard-translate(16777332 8226) eval((keyboard-translate 16777332 8226)) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) anyone know why? using Ctrl works fine, e.g. (keyboard-translate ?\C-3 ?•) i double checked and the syntax for hyper ?\H- seems correct. Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-11 11:00 elisp question:keyboard-translate with hyper fail? Xah Lee @ 2011-03-11 12:01 ` Deniz Dogan [not found] ` <mailman.6.1299844900.14178.help-gnu-emacs@gnu.org> 1 sibling, 0 replies; 17+ messages in thread From: Deniz Dogan @ 2011-03-11 12:01 UTC (permalink / raw) To: Xah Lee; +Cc: help-gnu-emacs 2011/3/11 Xah Lee <xahlee@gmail.com>: > when i try to do this: > > (keyboard-translate ?\H-3 ?•) ; set Hyper+3 to type unicode bullet > char > > i got this error > > Debugger entered--Lisp error: (wrong-type-argument characterp > 16777332) > keyboard-translate(16777332 8226) > eval((keyboard-translate 16777332 8226)) > eval-last-sexp-1(nil) > eval-last-sexp(nil) > call-interactively(eval-last-sexp nil nil) > > anyone know why? using Ctrl works fine, e.g. > > (keyboard-translate ?\C-3 ?•) > > i double checked and the syntax for hyper ?\H- seems correct. > (keyboard-translate ?\C-3 ?•) does not work for me. Debugger entered--Lisp error: (wrong-type-argument characterp 67108915) keyboard-translate(67108915 8226) eval((keyboard-translate 67108915 8226)) eval-last-sexp-1(nil) eval-last-sexp(nil) call-interactively(eval-last-sexp nil nil) `keyboard-translate' only works with characters and neither C-3 nor H-3 make up characters as far as I know. -- Deniz Dogan ^ permalink raw reply [flat|nested] 17+ messages in thread
[parent not found: <mailman.6.1299844900.14178.help-gnu-emacs@gnu.org>]
* Re: elisp question:keyboard-translate with hyper fail? [not found] ` <mailman.6.1299844900.14178.help-gnu-emacs@gnu.org> @ 2011-03-11 22:11 ` Xah Lee 2011-03-12 0:26 ` Tim X 2011-03-12 2:54 ` Stefan Monnier 0 siblings, 2 replies; 17+ messages in thread From: Xah Lee @ 2011-03-11 22:11 UTC (permalink / raw) To: help-gnu-emacs On Mar 11, 4:01 am, Deniz Dogan <deniz.a.m.do...@gmail.com> wrote: > > i double checked and the syntax for hyper ?\H- seems correct. > > (keyboard-translate ?\C-3 ?•) does not work for me. > > Debugger entered--Lisp error: (wrong-type-argument characterp 67108915) > keyboard-translate(67108915 8226) > eval((keyboard-translate 67108915 8226)) > eval-last-sexp-1(nil) > eval-last-sexp(nil) > call-interactively(eval-last-sexp nil nil) > > `keyboard-translate' only works with characters and neither C-3 nor > H-3 make up characters as far as I know. that's strange. i have the following and they work. ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout (keyboard-translate ?\C-t ?\C-x) (keyboard-translate ?\C-x ?\C-t) the ?\C-3 doesn't work (my mistake), but this works (keyboard-translate ?\C-t ?•) so maybe with a letter char it works, however, the following still doesn't work (keyboard-translate ?\H-t ?•) Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-11 22:11 ` Xah Lee @ 2011-03-12 0:26 ` Tim X 2011-03-12 2:54 ` Stefan Monnier 1 sibling, 0 replies; 17+ messages in thread From: Tim X @ 2011-03-12 0:26 UTC (permalink / raw) To: help-gnu-emacs Xah Lee <xahlee@gmail.com> writes: > On Mar 11, 4:01 am, Deniz Dogan <deniz.a.m.do...@gmail.com> wrote: >> > i double checked and the syntax for hyper ?\H- seems correct. >> >> (keyboard-translate ?\C-3 ?•) does not work for me. >> >> Debugger entered--Lisp error: (wrong-type-argument characterp 67108915) >> keyboard-translate(67108915 8226) >> eval((keyboard-translate 67108915 8226)) >> eval-last-sexp-1(nil) >> eval-last-sexp(nil) >> call-interactively(eval-last-sexp nil nil) >> >> `keyboard-translate' only works with characters and neither C-3 nor >> H-3 make up characters as far as I know. > > that's strange. > > i have the following and they work. > > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout > (keyboard-translate ?\C-t ?\C-x) > (keyboard-translate ?\C-x ?\C-t) > > the ?\C-3 doesn't work (my mistake), but this works > (keyboard-translate ?\C-t ?•) > > so maybe with a letter char it works, however, the following still > doesn't work > (keyboard-translate ?\H-t ?•) > > Xah Are you sure your keyboard is actually generating the keycode you think it is? I remember on some (unix) based systems, I had to used xmodmap in order to get the hyper key working. -- tcross (at) rapttech dot com dot au ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-11 22:11 ` Xah Lee 2011-03-12 0:26 ` Tim X @ 2011-03-12 2:54 ` Stefan Monnier 2011-03-12 4:51 ` Le Wang 2011-03-12 7:07 ` Xah Lee 1 sibling, 2 replies; 17+ messages in thread From: Stefan Monnier @ 2011-03-12 2:54 UTC (permalink / raw) To: help-gnu-emacs > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout > (keyboard-translate ?\C-t ?\C-x) > (keyboard-translate ?\C-x ?\C-t) There are 32 Ctrl+letter combinations which are characters, and the above two are among them. These are exceptional special cases due to history. My general recommendation is to not use keyboard-translate but key-translation-map or function-key-map, which work on arbitrary key sequences rather only on single-char events. Stefan ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 2:54 ` Stefan Monnier @ 2011-03-12 4:51 ` Le Wang 2011-03-12 21:16 ` Stefan Monnier 2011-03-12 7:07 ` Xah Lee 1 sibling, 1 reply; 17+ messages in thread From: Le Wang @ 2011-03-12 4:51 UTC (permalink / raw) To: Stefan Monnier; +Cc: help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 1141 bytes --] On Sat, Mar 12, 2011 at 10:54 AM, Stefan Monnier <monnier@iro.umontreal.ca>wrote: > > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout > > (keyboard-translate ?\C-t ?\C-x) > > (keyboard-translate ?\C-x ?\C-t) > > There are 32 Ctrl+letter combinations which are characters, and the > above two are among them. These are exceptional special cases due > to history. My general recommendation is to not use keyboard-translate > but key-translation-map or function-key-map, which work on arbitrary > key sequences rather only on single-char events. > I got these exact keyboard-translate lines from Xah's blog. They don't work reliably on Windows. Sometimes after switching back to Emacs from another program, and my first input to Emacs is C-j, C-j still registers instead of C-x. How would I use key-translation-map to do the swap? (define-key key-translation-map [(control x)] [(control j)]) (define-key key-translation-map [(control j)] [(control x)]) C-j seems regixter as C-x. But C-x acting like a prefix key, waiting for the next input. > > Stefan > > -- Le [-- Attachment #2: Type: text/html, Size: 1733 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 4:51 ` Le Wang @ 2011-03-12 21:16 ` Stefan Monnier 2011-03-13 4:31 ` Le Wang 0 siblings, 1 reply; 17+ messages in thread From: Stefan Monnier @ 2011-03-12 21:16 UTC (permalink / raw) To: Le Wang; +Cc: help-gnu-emacs > I got these exact keyboard-translate lines from Xah's blog. They don't work > reliably on Windows. Sometimes after switching back to Emacs from another > program, and my first input to Emacs is C-j, C-j still registers instead of > C-x. Sounds like a bug (even sounds like one that's already been reported but that we're having trouble tracking down). But I can't find it in the bug database, so maybe it's something different. So please M-x report-emacs-bug an include as much info as possible to help us reproduce the bug. > How would I use key-translation-map to do the swap? > (define-key key-translation-map [(control x)] [(control j)]) > (define-key key-translation-map [(control j)] [(control x)]) Yes. > C-j seems regixter as C-x. But C-x acting like a prefix key, waiting for > the next input. I think that's because of function-key-map's remapping of C-x @ S <key> to S-<key>. If you add (define-key function-key-map [?\C-x] nil), it might work (it does for me). Stefan ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 21:16 ` Stefan Monnier @ 2011-03-13 4:31 ` Le Wang 0 siblings, 0 replies; 17+ messages in thread From: Le Wang @ 2011-03-13 4:31 UTC (permalink / raw) To: Stefan Monnier; +Cc: help-gnu-emacs [-- Attachment #1: Type: text/plain, Size: 1475 bytes --] On Sun, Mar 13, 2011 at 5:16 AM, Stefan Monnier <monnier@iro.umontreal.ca>wrote: > > I got these exact keyboard-translate lines from Xah's blog. They don't > work > > reliably on Windows. Sometimes after switching back to Emacs from > another > > program, and my first input to Emacs is C-j, C-j still registers instead > of > > C-x. > > Sounds like a bug (even sounds like one that's already been reported but > that we're having trouble tracking down). But I can't find it in the > bug database, so maybe it's something different. So please M-x > report-emacs-bug an include as much info as possible to help us > reproduce the bug. > I filed http://debbugs.gnu.org/cgi/bugreport.cgi?bug=8237 > > How would I use key-translation-map to do the swap? > > > (define-key key-translation-map [(control x)] [(control j)]) > > (define-key key-translation-map [(control j)] [(control x)]) > > Yes. > > > C-j seems regixter as C-x. But C-x acting like a prefix key, waiting for > > the next input. > > I think that's because of function-key-map's remapping of C-x @ S <key> > to S-<key>. If you add (define-key function-key-map [?\C-x] nil), it > might work (it does for me). > These 3 lines seem to do the swapping I want. (define-key key-translation-map [(control x)] [(control j)]) (define-key key-translation-map [(control j)] [(control x)]) (define-key function-key-map [(control x)] nil) Hopefully this will work reliably. Thanks! > > Stefan > -- Le [-- Attachment #2: Type: text/html, Size: 2437 bytes --] ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 2:54 ` Stefan Monnier 2011-03-12 4:51 ` Le Wang @ 2011-03-12 7:07 ` Xah Lee 2011-03-12 7:22 ` Xah Lee 2011-03-12 11:59 ` Deniz Dogan 1 sibling, 2 replies; 17+ messages in thread From: Xah Lee @ 2011-03-12 7:07 UTC (permalink / raw) To: help-gnu-emacs On Mar 11, 6:54 pm, Stefan Monnier <monn...@iro.umontreal.ca> wrote: > > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout > > (keyboard-translate ?\C-t ?\C-x) > > (keyboard-translate ?\C-x ?\C-t) > > There are 32 Ctrl+letter combinations which are characters, and the > above two are among them. These are exceptional special cases due > to history. My general recommendation is to not use keyboard-translate > but key-translation-map or function-key-map, which work on arbitrary > key sequences rather only on single-char events. > > Stefan thanks to all. perhaps the doc can be improved. i just read up the elisp doc and it actually gives a C- example. -- Function: keyboard-translate from to This function modifies `keyboard-translate-table' to translate character code FROM into character code TO. It creates the keyboard translate table if necessary. Here's an example of using the `keyboard-translate-table' to make `C-x', `C-c' and `C-v' perform the cut, copy and paste operations: (keyboard-translate ?\C-x 'control-x) (keyboard-translate ?\C-c 'control-c) (keyboard-translate ?\C-v 'control-v) (global-set-key [control-x] 'kill-region) (global-set-key [control-c] 'kill-ring-save) (global-set-key [control-v] 'yank) also note it uses the syntax 「'control-x」. I don't quite understand it... should it be a bug report? Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 7:07 ` Xah Lee @ 2011-03-12 7:22 ` Xah Lee 2011-03-14 14:17 ` Stefan Monnier 2011-03-12 11:59 ` Deniz Dogan 1 sibling, 1 reply; 17+ messages in thread From: Xah Lee @ 2011-03-12 7:22 UTC (permalink / raw) To: help-gnu-emacs ugh, just tried this and still doesn't work. (define-key key-translation-map [?\H-8] ?\◇) am giving up at this point. in case anyone's interested, i'm trying to make hyper key do unicode symbols. Ι have it all working by (global-set-key (kbd "H-3") (lambda () (interactive) (insert "•"))) ; bullet but yesterday i got smart and thought i'll re-write them using keyboard-translate instead. (just had a major refactoring of my .emacs.) possibly i'll file a bug report. Thanks for the helpful answers. Xah On Mar 11, 11:07 pm, Xah Lee <xah...@gmail.com> wrote: > On Mar 11, 6:54 pm, Stefan Monnier <monn...@iro.umontreal.ca> wrote: > > > > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout > > > (keyboard-translate ?\C-t ?\C-x) > > > (keyboard-translate ?\C-x ?\C-t) > > > There are 32 Ctrl+letter combinations which are characters, and the > > above two are among them. These are exceptional special cases due > > to history. My general recommendation is to not use keyboard-translate > > but key-translation-map or function-key-map, which work on arbitrary > > key sequences rather only on single-char events. > > > Stefan > > thanks to all. > > perhaps the doc can be improved. > > i just read up the elisp doc and it actually gives a C- example. > > -- Function: keyboard-translate from to > This function modifies `keyboard-translate-table' to translate > character code FROM into character code TO. It creates the > keyboard translate table if necessary. > > Here's an example of using the `keyboard-translate-table' to make > `C-x', `C-c' and `C-v' perform the cut, copy and paste operations: > > (keyboard-translate ?\C-x 'control-x) > (keyboard-translate ?\C-c 'control-c) > (keyboard-translate ?\C-v 'control-v) > (global-set-key [control-x] 'kill-region) > (global-set-key [control-c] 'kill-ring-save) > (global-set-key [control-v] 'yank) > > also note it uses the syntax 「'control-x」. I don't quite understand > it... > > should it be a bug report? > > Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 7:22 ` Xah Lee @ 2011-03-14 14:17 ` Stefan Monnier 2011-03-14 20:32 ` Xah Lee 0 siblings, 1 reply; 17+ messages in thread From: Stefan Monnier @ 2011-03-14 14:17 UTC (permalink / raw) To: help-gnu-emacs > ugh, just tried this and still doesn't work. > (define-key key-translation-map [?\H-8] ?\◇) key-translation-map maps key sequences to key sequences, so try (define-key key-translation-map [?\H-8] [?\◇]) > Ι have it all working by > (global-set-key (kbd "H-3") (lambda () (interactive) (insert "•"))) ; > bullet You can also do (global-set-key (kbd "H-3") "•") Stefan ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-14 14:17 ` Stefan Monnier @ 2011-03-14 20:32 ` Xah Lee 2011-03-18 13:56 ` Xah Lee 0 siblings, 1 reply; 17+ messages in thread From: Xah Lee @ 2011-03-14 20:32 UTC (permalink / raw) To: help-gnu-emacs On Mar 14, 7:17 am, Stefan Monnier <monn...@iro.umontreal.ca> wrote: > > ugh, just tried this and still doesn't work. > > (define-key key-translation-map [?\H-8] ?\◇) > > key-translation-map maps key sequences to key sequences, so try > > (define-key key-translation-map [?\H-8] [?\◇]) Thanks! That worked. Xah > > Ι have it all working by > > (global-set-key (kbd "H-3") (lambda () (interactive) (insert "•"))) ; > > bullet > > You can also do > > (global-set-key (kbd "H-3") "•") > > Stefan ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-14 20:32 ` Xah Lee @ 2011-03-18 13:56 ` Xah Lee 2011-03-19 16:09 ` rusi 0 siblings, 1 reply; 17+ messages in thread From: Xah Lee @ 2011-03-18 13:56 UTC (permalink / raw) To: help-gnu-emacs just wrote up a little blog on why i wanted to use key-translation in this thread. Might be interesting. 〈Emacs: Remapping Keys Using key-translation-map〉 http://xahlee.org/emacs/emacs_key-translation-map.html ──────────────────── Emacs: Remapping Keys Using key-translation-map Xah Lee, 2011-03-17 This page shows you how to remap keys to input unicode symbols using the elisp function “key-translation-map”, and discuss some related issues. Recently i wrote a article on How to Create a APL or Math Symbols Keyboard Layout. In the article, i described several ways to remap keys on keyboard to input symbols for Mac, Windows, Linux. Some are OS- wide thru OS's user-configurable mechanisms. Some are using key-macro software for that OS. And there's emacs for just within emacs. I've used them all in the past 2 decades, but in the past few years, i find the most practical and flexible way is just emacs. Because: ① 99% of my typing are done in emacs. So, i don't really need them to be OS- wide. ② Each method of remapping keys all have their own limitations (e.g. on Mac and Windows, there's no way to remap some key combinations.), but within emacs it has the most support on remapping keys that has less restrictions than using OS's methods. Here's interesting thing i discovered recently. ──────────────────── Using “global-set-key” or “key-translation-map” to Insert Unicode Char If you want to define a key combo for typing a unicode char such as math symbol λ, you can do it using “global-set-key” or “key- translation-map”. Example of using “global-set-key”: (global-set-key (kbd "H-3") (lambda () (interactive) (insert "λ"))) ; 【Hyper+3】 insert λ char (global-set-key (kbd "H-3") "λ") ; 【Hyper+3】 insert λ char. This is a builtin macro for above. (In this example we use Hyper key, but Ctrl or Meta works too. You can make the Win key or the Menu key act as Hyper. To set up, see: Emacs: How to define Hyper & Super Keys.) Example of using “key-translation-map”: (define-key key-translation-map (kbd "H-3") (kbd "λ")) ; 【Hyper+3】 insert λ char There are some advantage and disadvantages in either way. ──────────────────── Problem with “global-set-key” If you use “global-set-key”, then when you do interactive search 【Ctrl +s】, then when you type 【Hyper+3】, it'll exit the search. So this means, if you use unicode heavily in your files, then you lose the ability to isearch them. (you can work-around by typing it in the buffer first, put cursor on it, start isearch, 【C-w】 to select the char. Then when done, delete that symbol you inserted for this purpose.) Using “key-translation-map” doesn't have this problem. ──────────────────── Problem with “key-translation-map” The problem with “key-translation-map” is this: Suppose you don't type the backtick (`) char often, and you press 【C-x o】 “delete-other- windows” ~50 times more often. So, to increase the efficiency of key use on keyboard, you remap backtick to do “delete-other-windows” and set 【Hyper+`】 for inputting the backtick. The elisp code looks like this: (global-set-key (kbd "`") 'someCommand) ; set ` to someCommand (define-key key-translation-map (kbd "H-`") (kbd "`")) ; insert backtick char by 【Hyper+`】 The problem is, when you type 【Hyper+`】, it'll actually call the command bound to backtick. So, this means, the “key-translation-map” is great for symbol input but is not good if you want to use it as a way to remap buttons. Note: there's the function “keyboard-translate”. However, it is designed to translate character only. So, key combination isn't a character and you can't use it for Hyper combination. Using (define- key key-translation-map …) is more versatile. (Due to historical reasons, “keyboard-translate” does work for some Ctrl combination key. (thanks to Stefan Monnier and Deniz Dogan for this tip. (Source groups.google.com))) ──────────────────── Who Need to Use Unicode That Often? Well, i do, a lot, all over, in my writings, as well in coding. For example, bullet (•), “curly quote”, dash (—), angle bracket for 〈article title〉 and 《book title》 (See: Intro to Chinese Punctuation with Computer Language Syntax Perspectives.), and i use 【lenticular bracket】 to mark key combinations, 「corner bracket」 to mark computer code, and i use FULLWIDTH AMPERSAND (&) for avoid html entity complexity (See: HTML Entities, Ampersand, Unicode, Semantics.) , and lots others. Using proper symbols decreases ambiguity at syntax level. For example, the asterisk (*) can mean lots of things. But a dedicated bullet “•” carries a precise semantics. For coding, some languages heavily use math symbols (e.g. APL, Mathematica). For functional languages such as Haskell, Scheme Lisp, you can setup for example “λ” to mean “lambda”, “≠” to mean “!=”, “⊕” for user-defined operators, etc. You can also use symbols for variable names in emacs lisp, Javascript, Java (e.g. “α”). See: * Unicode Support in Ruby, Perl, Python, javascript, Java, Emacs Lisp, Mathematica * Problems of Symbol Congestion in Computer Languages (ASCII Jam; Unicode; Fortress) * How Mathematica does Unicode? * Unicode Popularity On Web Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-18 13:56 ` Xah Lee @ 2011-03-19 16:09 ` rusi 2011-03-20 0:31 ` Xah Lee 0 siblings, 1 reply; 17+ messages in thread From: rusi @ 2011-03-19 16:09 UTC (permalink / raw) To: help-gnu-emacs On Mar 18, 6:56 pm, Xah Lee <xah...@gmail.com> wrote: > just wrote up a little blog on why i wanted to use key-translation in > this thread. Might be interesting. > > 〈Emacs: Remapping Keys Using key-translation-map〉http://xahlee.org/emacs/emacs_key-translation-map.html > > ──────────────────── > Emacs: Remapping Keys Using key-translation-map > > Xah Lee, 2011-03-17 > > This page shows you how to remap keys to input unicode symbols using > the elisp function “key-translation-map”, and discuss some related > issues. > > Recently i wrote a article on How to Create a APL or Math Symbols > Keyboard Layout. In the article, i described several ways to remap > keys on keyboard to input symbols for Mac, Windows, Linux. Some are OS- > wide thru OS's user-configurable mechanisms. Some are using key-macro > software for that OS. And there's emacs for just within emacs. I've > used them all in the past 2 decades, but in the past few years, i find > the most practical and flexible way is just emacs. Because: ① 99% of > my typing are done in emacs. So, i don't really need them to be OS- > wide. ② Each method of remapping keys all have their own limitations > (e.g. on Mac and Windows, there's no way to remap some key > combinations.), but within emacs it has the most support on remapping > keys that has less restrictions than using OS's methods. > > Here's interesting thing i discovered recently. > > ──────────────────── > Using “global-set-key” or “key-translation-map” to Insert Unicode Char > > If you want to define a key combo for typing a unicode char such as > math symbol λ, you can do it using “global-set-key” or “key- > translation-map”. > > Example of using “global-set-key”: > > (global-set-key (kbd "H-3") (lambda () (interactive) (insert "λ"))) ; > 【Hyper+3】 insert λ char > (global-set-key (kbd "H-3") "λ") ; 【Hyper+3】 insert λ char. This is a > builtin macro for above. > > (In this example we use Hyper key, but Ctrl or Meta works too. You can > make the Win key or the Menu key act as Hyper. To set up, see: Emacs: > How to define Hyper & Super Keys.) > > Example of using “key-translation-map”: > > (define-key key-translation-map (kbd "H-3") (kbd "λ")) ; 【Hyper+3】 > insert λ char > > There are some advantage and disadvantages in either way. > > ──────────────────── > Problem with “global-set-key” > > If you use “global-set-key”, then when you do interactive search 【Ctrl > +s】, then when you type 【Hyper+3】, it'll exit the search. So this > means, if you use unicode heavily in your files, then you lose the > ability to isearch them. (you can work-around by typing it in the > buffer first, put cursor on it, start isearch, 【C-w】 to select the > char. Then when done, delete that symbol you inserted for this > purpose.) > > Using “key-translation-map” doesn't have this problem. > > ──────────────────── > Problem with “key-translation-map” > > The problem with “key-translation-map” is this: Suppose you don't type > the backtick (`) char often, and you press 【C-x o】 “delete-other- > windows” ~50 times more often. So, to increase the efficiency of key > use on keyboard, you remap backtick to do “delete-other-windows” and > set 【Hyper+`】 for inputting the backtick. The elisp code looks like > this: > > (global-set-key (kbd "`") 'someCommand) ; set ` to someCommand > (define-key key-translation-map (kbd "H-`") (kbd "`")) ; insert > backtick char by 【Hyper+`】 > > The problem is, when you type 【Hyper+`】, it'll actually call the > command bound to backtick. > > So, this means, the “key-translation-map” is great for symbol input > but is not good if you want to use it as a way to remap buttons. > > Note: there's the function “keyboard-translate”. However, it is > designed to translate character only. So, key combination isn't a > character and you can't use it for Hyper combination. Using (define- > key key-translation-map …) is more versatile. (Due to historical > reasons, “keyboard-translate” does work for some Ctrl combination key. > (thanks to Stefan Monnier and Deniz Dogan for this tip. (Source > groups.google.com))) > > ──────────────────── > Who Need to Use Unicode That Often? > > Well, i do, a lot, all over, in my writings, as well in coding. > > For example, bullet (•), “curly quote”, dash (—), angle bracket for > 〈article title〉 and 《book title》 (See: Intro to Chinese Punctuation > with Computer Language Syntax Perspectives.), and i use 【lenticular > bracket】 to mark key combinations, 「corner bracket」 to mark computer > code, and i use FULLWIDTH AMPERSAND (&) for avoid html entity > complexity (See: HTML Entities, Ampersand, Unicode, Semantics.) , and > lots others. Xah your unicode has not worked out -- at least in this post :-) [Though you probably cant see that I cant see (most of) your characters] > > Using proper symbols decreases ambiguity at syntax level. For example, > the asterisk (*) can mean lots of things. But a dedicated bullet “•” > carries a precise semantics. > > For coding, some languages heavily use math symbols (e.g. APL, > Mathematica). For functional languages such as Haskell, Scheme Lisp, > you can setup for example “λ” to mean “lambda”, “≠” to mean “!=”, “⊕” > for user-defined operators, etc. You can also use symbols for variable > names in emacs lisp, Javascript, Java (e.g. “α”). See: > > * Unicode Support in Ruby, Perl, Python, javascript, Java, Emacs > Lisp, Mathematica > * Problems of Symbol Congestion in Computer Languages (ASCII Jam; > Unicode; Fortress) > * How Mathematica does Unicode? > * Unicode Popularity On Web > > Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-19 16:09 ` rusi @ 2011-03-20 0:31 ` Xah Lee 2011-03-20 2:51 ` rusi 0 siblings, 1 reply; 17+ messages in thread From: Xah Lee @ 2011-03-20 0:31 UTC (permalink / raw) To: help-gnu-emacs α λ — “ ” • … ≠ ⊕ ① ② ─ 〈 〉 《 》 「 」 【 】 & > Xah your unicode has not worked out -- at least in this post :-) > [Though you probably cant see that I cant see (most of) your > characters] do a screenshot. I'd love to see it. if you use Google Chrome, and view in google groups here http://groups.google.com/group/gnu.emacs.help/msg/0e5cb199a07c1235 i think all char will show. as you know... you'll need the font, and the app will need to support unicode, and the news server didn't screw up the encoding... i have on my site a blog of a selection of fonts i found to be best for unicode. For linux, that's DejaVu. Xah ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-20 0:31 ` Xah Lee @ 2011-03-20 2:51 ` rusi 0 siblings, 0 replies; 17+ messages in thread From: rusi @ 2011-03-20 2:51 UTC (permalink / raw) To: help-gnu-emacs On Mar 20, 5:31 am, Xah Lee <xah...@gmail.com> wrote: > α λ — “ ” • … ≠ ⊕ ① ② ─ 〈 〉 《 》 「 」 【 】 & > > > Xah your unicode has not worked out -- at least in this post :-) > > [Though you probably cant see that I cant see (most of) your > > characters] > > do a screenshot. I'd love to see it. Seems ok now -- must have been a transient problem with googlegroups) These【 】were showing as unicode boxes IIRC ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: elisp question:keyboard-translate with hyper fail? 2011-03-12 7:07 ` Xah Lee 2011-03-12 7:22 ` Xah Lee @ 2011-03-12 11:59 ` Deniz Dogan 1 sibling, 0 replies; 17+ messages in thread From: Deniz Dogan @ 2011-03-12 11:59 UTC (permalink / raw) To: Xah Lee; +Cc: help-gnu-emacs 2011/3/12 Xah Lee <xahlee@gmail.com>: > On Mar 11, 6:54 pm, Stefan Monnier <monn...@iro.umontreal.ca> wrote: >> > ;; Swap “Ctrl+x” and “Ctrl+t”, so it's easier to type on Dvorak layout >> > (keyboard-translate ?\C-t ?\C-x) >> > (keyboard-translate ?\C-x ?\C-t) >> >> There are 32 Ctrl+letter combinations which are characters, and the >> above two are among them. These are exceptional special cases due >> to history. My general recommendation is to not use keyboard-translate >> but key-translation-map or function-key-map, which work on arbitrary >> key sequences rather only on single-char events. >> >> Stefan > > thanks to all. > > perhaps the doc can be improved. > > i just read up the elisp doc and it actually gives a C- example. > > -- Function: keyboard-translate from to > This function modifies `keyboard-translate-table' to translate > character code FROM into character code TO. It creates the > keyboard translate table if necessary. > > Here's an example of using the `keyboard-translate-table' to make > `C-x', `C-c' and `C-v' perform the cut, copy and paste operations: > > (keyboard-translate ?\C-x 'control-x) > (keyboard-translate ?\C-c 'control-c) > (keyboard-translate ?\C-v 'control-v) > (global-set-key [control-x] 'kill-region) > (global-set-key [control-c] 'kill-ring-save) > (global-set-key [control-v] 'yank) > > also note it uses the syntax 「'control-x」. I don't quite understand > it... > > should it be a bug report? > The examples with C-x, C-c and C-v are valid. The keys C-a up to C-z and probably a few others (Stefan said there are 32 of them) are all characters. C-3 however is not a character. I don't think it's a bug in the documentation, but maybe it should clarify this matter? -- Deniz Dogan ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2011-03-20 2:51 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-03-11 11:00 elisp question:keyboard-translate with hyper fail? Xah Lee 2011-03-11 12:01 ` Deniz Dogan [not found] ` <mailman.6.1299844900.14178.help-gnu-emacs@gnu.org> 2011-03-11 22:11 ` Xah Lee 2011-03-12 0:26 ` Tim X 2011-03-12 2:54 ` Stefan Monnier 2011-03-12 4:51 ` Le Wang 2011-03-12 21:16 ` Stefan Monnier 2011-03-13 4:31 ` Le Wang 2011-03-12 7:07 ` Xah Lee 2011-03-12 7:22 ` Xah Lee 2011-03-14 14:17 ` Stefan Monnier 2011-03-14 20:32 ` Xah Lee 2011-03-18 13:56 ` Xah Lee 2011-03-19 16:09 ` rusi 2011-03-20 0:31 ` Xah Lee 2011-03-20 2:51 ` rusi 2011-03-12 11:59 ` Deniz Dogan
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).