Mercurial > emacs
comparison src/keyboard.c @ 30051:70d9d51a864c
(show_help_echo): New function, extracted from read_char.
Feval its `msg' argument if it's a cons cell.
(read_char): Use it.
(follow_key): Pass `autoload' to get_keyelt.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 05 Jul 2000 14:01:15 +0000 |
parents | 6863a9ae42d6 |
children | 5bfb859adb13 |
comparison
equal
deleted
inserted
replaced
30050:ed1979c6dfb9 | 30051:70d9d51a864c |
---|---|
1893 c |= (upper & ~ctrl_modifier); | 1893 c |= (upper & ~ctrl_modifier); |
1894 | 1894 |
1895 return c; | 1895 return c; |
1896 } | 1896 } |
1897 | 1897 |
1898 /* Display a help message in the echo area. */ | |
1899 void | |
1900 show_help_echo (msg) | |
1901 Lisp_Object msg; | |
1902 { | |
1903 int count = specpdl_ptr - specpdl; | |
1904 | |
1905 specbind (Qmessage_truncate_lines, Qt); | |
1906 if (CONSP (msg)) | |
1907 msg = Feval (msg); | |
1908 | |
1909 if (!NILP (Vshow_help_function)) | |
1910 call1 (Vshow_help_function, msg); | |
1911 else if (/* Don't overwrite minibuffer contents. */ | |
1912 !MINI_WINDOW_P (XWINDOW (selected_window)) | |
1913 /* Don't overwrite a keystroke echo. */ | |
1914 && NILP (echo_message_buffer) | |
1915 /* Don't overwrite a prompt. */ | |
1916 && !cursor_in_echo_area) | |
1917 { | |
1918 if (STRINGP (msg)) | |
1919 message3_nolog (msg, XSTRING (msg)->size, STRING_MULTIBYTE (msg)); | |
1920 else | |
1921 message (0); | |
1922 } | |
1923 | |
1924 unbind_to (count, Qnil); | |
1925 } | |
1926 | |
1898 | 1927 |
1899 | 1928 |
1900 /* Input of single characters from keyboard */ | 1929 /* Input of single characters from keyboard */ |
1901 | 1930 |
1902 Lisp_Object print_help (); | 1931 Lisp_Object print_help (); |
2637 reread_first: | 2666 reread_first: |
2638 | 2667 |
2639 /* Display help if not echoing. */ | 2668 /* Display help if not echoing. */ |
2640 if (CONSP (c) && EQ (XCAR (c), Qhelp_echo)) | 2669 if (CONSP (c) && EQ (XCAR (c), Qhelp_echo)) |
2641 { | 2670 { |
2642 Lisp_Object msg; | 2671 show_help_echo (XCDR (XCDR (c))); |
2643 int count = specpdl_ptr - specpdl; | |
2644 | |
2645 specbind (Qmessage_truncate_lines, Qt); | |
2646 msg = XCDR (XCDR (c)); | |
2647 | |
2648 if (!NILP (Vshow_help_function)) | |
2649 call1 (Vshow_help_function, msg); | |
2650 else if (/* Don't overwrite minibuffer contents. */ | |
2651 !MINI_WINDOW_P (XWINDOW (selected_window)) | |
2652 /* Don't overwrite a keystroke echo. */ | |
2653 && NILP (echo_message_buffer) | |
2654 /* Don't overwrite a prompt. */ | |
2655 && !cursor_in_echo_area) | |
2656 { | |
2657 if (STRINGP (msg)) | |
2658 message3_nolog (msg, XSTRING (msg)->size, STRING_MULTIBYTE (msg)); | |
2659 else | |
2660 message (0); | |
2661 } | |
2662 | |
2663 unbind_to (count, Qnil); | |
2664 goto retry; | 2672 goto retry; |
2665 } | 2673 } |
2666 | 2674 |
2667 if (this_command_key_count == 0 || ! reread) | 2675 if (this_command_key_count == 0 || ! reread) |
2668 { | 2676 { |
6264 = XCAR (item); | 6272 = XCAR (item); |
6265 start = item; | 6273 start = item; |
6266 item = XCDR (item); | 6274 item = XCDR (item); |
6267 } | 6275 } |
6268 | 6276 |
6269 /* Maybee key binding cache. */ | 6277 /* Maybe key binding cache. */ |
6270 if (CONSP (item) && CONSP (XCAR (item)) | 6278 if (CONSP (item) && CONSP (XCAR (item)) |
6271 && (NILP (XCAR (XCAR (item))) | 6279 && (NILP (XCAR (XCAR (item))) |
6272 || VECTORP (XCAR (XCAR (item))))) | 6280 || VECTORP (XCAR (XCAR (item))))) |
6273 { | 6281 { |
6274 cachelist = XCAR (item); | 6282 cachelist = XCAR (item); |
7368 if (did_meta) | 7376 if (did_meta) |
7369 map = defs[i]; | 7377 map = defs[i]; |
7370 else | 7378 else |
7371 map = current[i]; | 7379 map = current[i]; |
7372 | 7380 |
7373 defs[i] = get_keyelt (access_keymap (map, key, 1, 0), 0); | 7381 defs[i] = get_keyelt (access_keymap (map, key, 1, 0), 1); |
7374 if (! NILP (defs[i])) | 7382 if (! NILP (defs[i])) |
7375 first_binding = i; | 7383 first_binding = i; |
7376 } | 7384 } |
7377 else | 7385 else |
7378 defs[i] = Qnil; | 7386 defs[i] = Qnil; |