Mercurial > hg > xemacs-beta
view src/balloon-x.c @ 5679:a81a739181dc
Add command remapping, a more robust alternative to #'substitute-key-definition
src/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* keymap.c:
Add command remapping, a more robust equivalent to
#'substitute-key-definition.
* keymap.c (CHECK_REMAPPING_POSITION): New.
* keymap.c (keymap_equal): Correct a comment here.
* keymap.c (Fdefine_key): Document the command remapping syntax.
* keymap.c (Fremap_command): New.
* keymap.c (command_remapping): New.
* keymap.c (Fcommand_remapping): New.
* keymap.c (commands_remapped_to_mapper): New.
* keymap.c (commands_remapped_to_traverser): New.
* keymap.c (Fcommands_remapped_to): New.
* keymap.c (get_relevant_keymaps): Take a new POSITION argument.
* keymap.c (Fcurrent_keymaps, event_binding):
Supply the new POSITION argument to get_relevant_keymaps.
* keymap.c (Fkey_binding):
Add new arguments, NO-REMAP and POSITION.
* keymap.c (map_keymap_mapper):
* keymap.c (Fwhere_is_internal):
* keymap.c (where_is_to_char):
* keymap.c (where_is_recursive_mapper):
Don't expose the key remapping in these functions. This conflicts
with GNU, but is more sane for our callers. Access to command
remapping is with the functions #'command-remapping,
#'commands-remapped-to, and #'remap-command, not with the general
keymap functions, apart from the compatibility hack in #'define-key.
* keymap.c (syms_of_keymap):
* keymap.c (vars_of_keymap):
* keymap.c (complex_vars_of_keymap):
* lisp.h: New CHECK_COMMAND macro.
man/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* lispref/keymaps.texi (Keymaps):
* lispref/keymaps.texi (Changing Key Bindings):
* lispref/keymaps.texi (Scanning Keymaps):
* lispref/keymaps.texi (Remapping commands):
* lispref/keymaps.texi (XEmacs): New.
* lispref/keymaps.texi (Other Keymap Functions):
Document the new command remapping functionality in this file.
lisp/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* help.el (describe-function-1):
Document any command remapping that has been done in this function.
tests/ChangeLog addition:
2012-09-02 Aidan Kehoe <kehoea@parhasard.net>
* automated/keymap-tests.el:
Test the new command remapping functionality.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Sun, 02 Sep 2012 14:31:40 +0100 |
parents | 308d34e9f07d |
children |
line wrap: on
line source
/* Copyright (c) 1997 Douglas Keller This file is part of XEmacs. XEmacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. XEmacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with XEmacs. If not, see <http://www.gnu.org/licenses/>. */ /* Synched up with: Not in FSF. */ #include <config.h> #include "lisp.h" #include "device-impl.h" #include "console-x-impl.h" #include "balloon_help.h" /* #### start of hack */ static unsigned long alloc_color (Display* dpy, const char* colorname, int light) { Colormap cmap = DEVICE_X_COLORMAP (XDEVICE (get_default_device (Qx))); unsigned long pixel = 0; XColor color; if (XParseColor(dpy, cmap, colorname, &color) && XAllocColor(dpy, cmap, &color)) { pixel = color.pixel; } else { if (light) { printf ("Warning: could not allocate color \"%s\", using \"white\"\n", colorname); pixel = alloc_color (dpy, "white", True); } else { printf ("Warning: could not allocate color \"%s\", using \"black\"\n", colorname); pixel = alloc_color (dpy, "black", True); } } return pixel; } static XFontStruct * open_font (Display* dpy, const char* font_name) { XFontStruct* fontStruct = NULL; fontStruct = XLoadQueryFont (dpy, font_name ? font_name : "fixed"); if (fontStruct == NULL) { printf ("Warning: could not load font \"%s\", using \"fixed\".\n", font_name); fontStruct = XLoadQueryFont (dpy, "fixed"); assert (fontStruct != NULL); } return fontStruct; } static void init (void) { static int init_p = 0; if (!init_p) { Pixel fg, bg, shine, shadow; XFontStruct* font; Display *dpy = DEVICE_X_DISPLAY (XDEVICE (get_default_device (Qx))); fg = alloc_color (dpy, "grey60", 1); bg = alloc_color (dpy, "black", 0); shine = alloc_color (dpy, "grey80", 1); shadow = alloc_color (dpy, "grey40", 0); font = open_font (dpy, "-adobe-helvetica-medium-r-normal--12-*"); balloon_help_create (dpy, bg, fg, shine, shadow, font); init_p = 1; } } /* #### end of hack */ DEFUN ("show-balloon-help", Fshow_balloon_help, 1, 1, 0, /* Show balloon help. */ (string)) { char *p; CHECK_STRING (string); p = (char *) XSTRING_DATA (string); init (); balloon_help_show (p); return Qnil; } DEFUN ("hide-balloon-help", Fhide_balloon_help, 0, 0, 0, /* Hide balloon help. */ ()) { init (); balloon_help_hide (); return Qnil; } DEFUN ("balloon-help-move-to-pointer", Fballoon_help_move_to_pointer, 0, 0, 0, /* Move the balloon help to the place where the pointer currently resides. */ ()) { init (); balloon_help_move_to_pointer (); return Qnil; } /************************************************************************/ /* initialization */ /************************************************************************/ void syms_of_balloon_x (void) { DEFSUBR (Fshow_balloon_help); DEFSUBR (Fhide_balloon_help); DEFSUBR (Fballoon_help_move_to_pointer); } void vars_of_balloon_x (void) { Fprovide (intern ("c-balloon-help")); }