view doc/lispref/maps.texi @ 107984:bef5d1738c0b

Make variable forwarding explicit rather the using special values. Basically, this makes the structure of buffer-local values and object forwarding explicit in the type of Lisp_Symbols rather than use special Lisp_Objects for that. This tends to lead to slightly more verbose code, but is more C-like, simpler, and makes it easier to make sure we handled all cases, among other things by letting the compiler help us check it. * lisp.h (enum Lisp_Misc_Type, union Lisp_Misc): Removing forwarding objects. (enum Lisp_Fwd_Type, enum symbol_redirect, union Lisp_Fwd): New types. (struct Lisp_Symbol): Make the various forms of variable-forwarding explicit rather than hiding them inside Lisp_Object "values". (XFWDTYPE): New macro. (XINTFWD, XBOOLFWD, XOBJFWD, XKBOARD_OBJFWD): Redefine. (XBUFFER_LOCAL_VALUE): Remove. (SYMBOL_VAL, SYMBOL_ALIAS, SYMBOL_BLV, SYMBOL_FWD, SET_SYMBOL_VAL) (SET_SYMBOL_ALIAS, SET_SYMBOL_BLV, SET_SYMBOL_FWD): New macros. (SYMBOL_VALUE, SET_SYMBOL_VALUE): Remove. (struct Lisp_Intfwd, struct Lisp_Boolfwd, struct Lisp_Objfwd) (struct Lisp_Buffer_Objfwd, struct Lisp_Kboard_Objfwd): Remove the Lisp_Misc_* header. (struct Lisp_Buffer_Local_Value): Redefine. (BLV_FOUND, SET_BLV_FOUND, BLV_VALUE, SET_BLV_VALUE): New macros. (struct Lisp_Misc_Any): Add filler to get the right size. (struct Lisp_Free): Use struct Lisp_Misc_Any rather than struct Lisp_Intfwd. (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL, DEFVAR_INT) (DEFVAR_KBOARD): Allocate a forwarding object. * data.c (do_blv_forwarding, store_blv_forwarding): New macros. (let_shadows_global_binding_p): New function. (union Lisp_Val_Fwd): New type. (make_blv): New function. (swap_in_symval_forwarding, indirect_variable, do_symval_forwarding) (store_symval_forwarding, swap_in_global_binding, Fboundp) (swap_in_symval_forwarding, find_symbol_value, Fset) (let_shadows_buffer_binding_p, set_internal, default_value) (Fset_default, Fmake_variable_buffer_local, Fmake_local_variable) (Fkill_local_variable, Fmake_variable_frame_local) (Flocal_variable_p, Flocal_variable_if_set_p) (Fvariable_binding_locus): * xdisp.c (select_frame_for_redisplay): * lread.c (Fintern, Funintern, init_obarray, defvar_int) (defvar_bool, defvar_lisp_nopro, defvar_lisp, defvar_kboard): * frame.c (store_frame_param): * eval.c (Fdefvaralias, Fuser_variable_p, specbind, unbind_to): * bytecode.c (Fbyte_code) <varref, varset>: Adapt to the new symbol value structure. * buffer.c (PER_BUFFER_SYMBOL): Move from buffer.h. (clone_per_buffer_values): Only adjust markers into the current buffer. (reset_buffer_local_variables): PER_BUFFER_IDX is never -2. (Fbuffer_local_value, set_buffer_internal_1) (swap_out_buffer_local_variables): Adapt to the new symbol value structure. (DEFVAR_PER_BUFFER): Allocate a Lisp_Buffer_Objfwd object. (defvar_per_buffer): Take a new arg for the fwd object. (buffer_lisp_local_variables): Return a proper alist (different fix for bug#4138). * alloc.c (Fmake_symbol): Use SET_SYMBOL_VAL. (Fgarbage_collect): Don't handle buffer_defaults specially. (mark_object): Handle new symbol value structure rather than the old special Lisp_Misc_* objects. (gc_sweep) <symbols>: Free also the buffer-local-value objects. * term.c (set_tty_color_mode): * bidi.c (bidi_initialize): Don't access the ->value field directly. * buffer.h (PER_BUFFER_VAR_OFFSET): Don't bother with a buffer_local_flags. * print.c (print_object): Get rid of impossible forwarding objects.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 19 Apr 2010 21:50:52 -0400
parents 1d1d5d9bd884
children e2da1d33db95
line wrap: on
line source

@c -*-texinfo-*-
@c This is part of the GNU Emacs Lisp Reference Manual.
@c Copyright (C) 1990, 1991, 1992, 1993, 1999, 2001, 2002, 2003, 2004,
@c   2005, 2006, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
@c See the file elisp.texi for copying conditions.
@setfilename ../../info/maps
@node Standard Keymaps, Standard Hooks, Standard Buffer-Local Variables, Top
@appendix Standard Keymaps
@cindex standard keymaps

The following symbols are used as the names for various keymaps.
Some of these exist when Emacs is first started, others are
loaded only when their respective mode is used.  This is not
an exhaustive list.

Several keymaps are used in the minibuffer.  @xref{Completion Commands}.

Almost all of these maps are used as local maps.  Indeed, of the modes
that presently exist, only Vip mode and Terminal mode ever change the
global keymap.

@table @code
@item apropos-mode-map
@vindex apropos-mode-map
A sparse keymap for @code{apropos} buffers.

@item Buffer-menu-mode-map
@vindex Buffer-menu-mode-map
A full keymap used by Buffer Menu mode.

@item c-mode-map
@vindex c-mode-map
A sparse keymap used by C mode.

@item command-history-map
@vindex command-history-map
A full keymap used by Command History mode.

@item ctl-x-4-map
A sparse keymap for subcommands of the prefix @kbd{C-x 4}.

@item ctl-x-5-map
A sparse keymap for subcommands of the prefix @kbd{C-x 5}.

@item ctl-x-map
A full keymap for @kbd{C-x} commands.

@item custom-mode-map
A full keymap for Custom mode.

@item debugger-mode-map
@vindex debugger-mode-map
A full keymap used by Debugger mode.

@item dired-mode-map
@vindex dired-mode-map
A full keymap for @code{dired-mode} buffers.

@item edit-abbrevs-map
@vindex edit-abbrevs-map
A sparse keymap used in @code{edit-abbrevs}.

@item edit-tab-stops-map
@vindex edit-tab-stops-map
A sparse keymap used in @code{edit-tab-stops}.

@item electric-buffer-menu-mode-map
@vindex electric-buffer-menu-mode-map
A full keymap used by Electric Buffer Menu mode.

@item electric-history-map
@vindex electric-history-map
A full keymap used by Electric Command History mode.

@item emacs-lisp-mode-map
@vindex emacs-lisp-mode-map
A sparse keymap used by Emacs Lisp mode.

@item esc-map
A full keymap for @kbd{ESC} (or @kbd{Meta}) commands.

@item facemenu-menu
@vindex facemenu-menu
The sparse keymap that displays the Text Properties menu.

@item facemenu-background-menu
@vindex facemenu-background-menu
The sparse keymap that displays the Background Color submenu of the Text
Properties menu.

@item facemenu-face-menu
@vindex facemenu-face-menu
The sparse keymap that displays the Face submenu of the Text Properties menu.

@item facemenu-foreground-menu
@vindex facemenu-foreground-menu
The sparse keymap that displays the Foreground Color submenu of the Text
Properties menu.

@item facemenu-indentation-menu
@vindex facemenu-indentation-menu
The sparse keymap that displays the Indentation submenu of the Text
Properties menu.

@item facemenu-justification-menu
@vindex facemenu-justification-menu
The sparse keymap that displays the Justification submenu of the Text
Properties menu.

@item facemenu-special-menu
@vindex facemenu-special-menu
The sparse keymap that displays the Special Props submenu of the Text
Properties menu.

@item local-function-key-map
The keymap for translating key sequences to preferred alternatives.@*
If there are none, then it contains an empty sparse keymap.
@xref{Translation Keymaps}.

@item fundamental-mode-map
@vindex fundamental-mode-map
The sparse keymap for Fundamental mode.@*
It is empty and should not be changed.

@item global-map
The full keymap containing default global key bindings.@*
Modes should not modify the Global map.

@item grep-mode-map
@vindex grep-mode-map
The keymap for @code{grep-mode} buffers.

@item help-map
The sparse keymap for the keys that follow the help character @kbd{C-h}.

@item help-mode-map
@vindex help-mode-map
The sparse keymap for Help mode.

@item Helper-help-map
@vindex Helper-help-map
A full keymap used by the help utility package.@*
It has the same keymap in its value cell and in its function
cell.

@item Info-edit-map
@vindex Info-edit-map
A sparse keymap used by the @kbd{e} command of Info.

@item Info-mode-map
@vindex Info-mode-map
A sparse keymap containing Info commands.

@item input-decode-map
The keymap for translating keypad and function keys.@*
If there are none, then it contains an empty sparse keymap.
@xref{Translation Keymaps}.

@item isearch-mode-map
@vindex isearch-mode-map
A keymap that defines the characters you can type within incremental
search.

@item key-translation-map
A keymap for translating keys.  This one overrides ordinary key
bindings, unlike @code{local- function-key-map}.  @xref{Translation
Keymaps}.

@item kmacro-map
@vindex kmacro-map
A sparse keymap for keys that follows the @kbd{C-x C-k} prefix
search.

@item lisp-interaction-mode-map
@vindex lisp-interaction-mode-map
A sparse keymap used by Lisp Interaction mode.

@item lisp-mode-map
@vindex lisp-mode-map
A sparse keymap used by Lisp mode.

@item menu-bar-edit-menu
@vindex menu-bar-edit-menu
The keymap which displays the Edit menu in the menu bar.

@item menu-bar-files-menu
@vindex menu-bar-files-menu
The keymap which displays the Files menu in the menu bar.

@item menu-bar-help-menu
@vindex menu-bar-help-menu
The keymap which displays the Help menu in the menu bar.

@item menu-bar-mule-menu
@vindex menu-bar-mule-menu
The keymap which displays the Mule menu in the menu bar.

@item menu-bar-search-menu
@vindex menu-bar-search-menu
The keymap which displays the Search menu in the menu bar.

@item menu-bar-tools-menu
@vindex menu-bar-tools-menu
The keymap which displays the Tools menu in the menu bar.

@item mode-specific-map
The keymap for characters following @kbd{C-c}.  Note, this is in the
global map.  This map is not actually mode specific: its name was chosen
to be informative for the user in @kbd{C-h b} (@code{display-bindings}),
where it describes the main use of the @kbd{C-c} prefix key.

@item multi-query-replace-map
A sparse keymap that extends @code{query-replace-map} for multi-buffer
replacements.  @xref{Search and Replace, query-replace-map}.

@item occur-mode-map
@vindex occur-mode-map
A sparse keymap used by Occur mode.

@item query-replace-map
A sparse keymap used for responses in @code{query-replace} and related
commands; also for @code{y-or-n-p} and @code{map-y-or-n-p}.  The functions
that use this map do not support prefix keys; they look up one event at a
time.

@item search-map
A sparse keymap that provides global bindings for search-related
commands.

@item text-mode-map
@vindex text-mode-map
A sparse keymap used by Text mode.

@item tool-bar-map
The keymap defining the contents of the tool bar.

@item view-mode-map
@vindex view-mode-map
A full keymap used by View mode.
@end table

@ignore
   arch-tag: b741253c-7e23-4a02-b3fa-cffd9e4d72b9
@end ignore