* src/keymap.c (Fmake_composed_keymap): Move to subr.el.
* lisp/subr.el (make-composed-keymap): Move from C. Change calling convention, and improve docstring to bring attention to a subtle point. * lisp/minibuffer.el (completing-read-default): Adjust accordingly.
This commit is contained in:
parent
8a10d76c87
commit
640c8776f6
5 changed files with 85 additions and 76 deletions
|
@ -1,3 +1,9 @@
|
|||
2011-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* subr.el (make-composed-keymap): Move from C. Change calling
|
||||
convention, and improve docstring to bring attention to a subtle point.
|
||||
* minibuffer.el (completing-read-default): Adjust accordingly.
|
||||
|
||||
2011-08-03 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* net/tramp-sh.el (tramp-open-connection-setup-interactive-shell)
|
||||
|
|
|
@ -2754,15 +2754,12 @@ See `completing-read' for the meaning of the arguments."
|
|||
base-keymap
|
||||
;; Layer minibuffer-local-filename-completion-map
|
||||
;; on top of the base map.
|
||||
;; Use make-composed-keymap so that set-keymap-parent
|
||||
;; doesn't modify minibuffer-local-filename-completion-map.
|
||||
(let ((map (make-composed-keymap
|
||||
minibuffer-local-filename-completion-map)))
|
||||
;; Set base-keymap as the parent, so that nil bindings
|
||||
;; in minibuffer-local-filename-completion-map can
|
||||
;; override bindings in base-keymap.
|
||||
(set-keymap-parent map base-keymap)
|
||||
map)))
|
||||
(make-composed-keymap
|
||||
minibuffer-local-filename-completion-map
|
||||
;; Set base-keymap as the parent, so that nil bindings
|
||||
;; in minibuffer-local-filename-completion-map can
|
||||
;; override bindings in base-keymap.
|
||||
base-keymap)))
|
||||
(result (read-from-minibuffer prompt initial-input keymap
|
||||
nil hist def inherit-input-method)))
|
||||
(when (and (equal result "") def)
|
||||
|
|
14
lisp/subr.el
14
lisp/subr.el
|
@ -526,6 +526,20 @@ but optional second arg NODIGITS non-nil treats them like other chars."
|
|||
(define-key map (char-to-string loop) 'digit-argument)
|
||||
(setq loop (1+ loop))))))
|
||||
|
||||
(defun make-composed-keymap (maps &optional parent)
|
||||
"Construct a new keymap composed of MAPS and inheriting from PARENT.
|
||||
When looking up a key in the returned map, the key is looked in each
|
||||
keymap of MAPS in turn until a binding is found.
|
||||
If no binding is found in MAPS, the lookup continues in PARENT, if non-nil.
|
||||
As always with keymap inheritance, a nil binding in MAPS overrides
|
||||
any corresponding binding in PARENT, but it does not override corresponding
|
||||
bindings in other keymaps of MAPS.
|
||||
MAPS can be a list of keymaps or a single keymap.
|
||||
PARENT if non-nil should be a keymap."
|
||||
`(keymap
|
||||
,@(if (keymapp maps) (list maps) maps)
|
||||
,@parent))
|
||||
|
||||
(defun define-key-after (keymap key definition &optional after)
|
||||
"Add binding in KEYMAP for KEY => DEFINITION, right after AFTER's binding.
|
||||
This is like `define-key' except that the binding for KEY is placed
|
||||
|
|
114
src/ChangeLog
114
src/ChangeLog
|
@ -1,3 +1,7 @@
|
|||
2011-08-03 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* keymap.c (Fmake_composed_keymap): Move to subr.el.
|
||||
|
||||
2011-08-03 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* fontset.c (dump_fontset) [FONTSET_DEBUG]: Declare EXTERNALLY_VISIBLE
|
||||
|
@ -19,8 +23,8 @@
|
|||
non-zero.
|
||||
|
||||
* bidi.c (bidi_fetch_char): Accept an additional argument
|
||||
DISP_PROP_P, and pass it to compute_display_string_pos. Only
|
||||
handle text covered by a display string if DISP_PROP_P is returned
|
||||
DISP_PROP_P, and pass it to compute_display_string_pos.
|
||||
Only handle text covered by a display string if DISP_PROP_P is returned
|
||||
non-zero. All callers of bidi_fetch_char changed.
|
||||
|
||||
2011-08-02 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
@ -366,8 +370,8 @@
|
|||
|
||||
* xdisp.c (move_it_in_display_line_to): Record the best matching
|
||||
position for TO_CHARPOS while scanning the line, and restore it on
|
||||
exit if none of the characters scanned was an exact match. Fixes
|
||||
vertical-motion and pos-visible-in-window-p under bidi redisplay
|
||||
exit if none of the characters scanned was an exact match.
|
||||
Fixes vertical-motion and pos-visible-in-window-p under bidi redisplay
|
||||
when exact match is impossible due to invisible text, and the
|
||||
lines are truncated.
|
||||
|
||||
|
@ -552,8 +556,8 @@
|
|||
(reseat_to_string): Initialize bidi_it->string.s and
|
||||
bidi_it->string.schars.
|
||||
(Fcurrent_bidi_paragraph_direction): Initialize itb.string.s to
|
||||
NULL (avoids a crash in bidi_paragraph_init). Initialize
|
||||
itb.string.lstring.
|
||||
NULL (avoids a crash in bidi_paragraph_init).
|
||||
Initialize itb.string.lstring.
|
||||
(init_iterator): Call bidi_init_it only of a valid
|
||||
buffer position was specified. Initialize paragraph_embedding to
|
||||
L2R.
|
||||
|
@ -569,12 +573,12 @@
|
|||
(init_iterator, reseat_1, reseat_to_string): Initialize the
|
||||
string.bufpos member to 0 (zero, for compatibility with IT_CHARPOS
|
||||
when iterating on a string not from display properties).
|
||||
(compute_display_string_pos, compute_display_string_end): Fix
|
||||
calculation of the object to scan. Fixes an error when using
|
||||
(compute_display_string_pos, compute_display_string_end):
|
||||
Fix calculation of the object to scan. Fixes an error when using
|
||||
arrow keys.
|
||||
(next_element_from_buffer): Don't abort when IT_CHARPOS is before
|
||||
base_level_stop; instead, set base_level_stop to BEGV. Fixes
|
||||
crashes in vertical-motion.
|
||||
base_level_stop; instead, set base_level_stop to BEGV.
|
||||
Fixes crashes in vertical-motion.
|
||||
(next_element_from_buffer): Improve commentary for when
|
||||
the iterator is before prev_stop.
|
||||
(init_iterator): Initialize bidi_p from the default value of
|
||||
|
@ -587,8 +591,8 @@
|
|||
(next_element_from_string): Support bidi reordering of Lisp
|
||||
strings.
|
||||
(handle_stop_backwards): Support Lisp strings as well.
|
||||
(display_string): Support display of R2L glyph rows. Use
|
||||
IT_STRING_CHARPOS when displaying from a Lisp string.
|
||||
(display_string): Support display of R2L glyph rows.
|
||||
Use IT_STRING_CHARPOS when displaying from a Lisp string.
|
||||
(init_iterator): Don't initialize it->bidi_p for strings
|
||||
here.
|
||||
(reseat_to_string): Initialize it->bidi_p for strings here.
|
||||
|
@ -670,8 +674,8 @@
|
|||
displayed in margins. (Bug#8133) (Bug#8867)
|
||||
Return MOVE_POS_MATCH_OR_ZV only if iterator position is past
|
||||
TO_CHARPOS.
|
||||
(pos_visible_p): Support positions in bidi-reordered lines. Save
|
||||
and restore bidi cache.
|
||||
(pos_visible_p): Support positions in bidi-reordered lines.
|
||||
Save and restore bidi cache.
|
||||
|
||||
* bidi.c (bidi_level_of_next_char): clen should be EMACS_NT, not int.
|
||||
(bidi_paragraph_info): Delete unused struct.
|
||||
|
@ -691,8 +695,8 @@
|
|||
`len' according to what STRING_CHAR_AND_LENGTH expects.
|
||||
(bidi_paragraph_init, bidi_resolve_explicit_1)
|
||||
(bidi_resolve_explicit, bidi_resolve_weak)
|
||||
(bidi_level_of_next_char, bidi_move_to_visually_next): Support
|
||||
iteration over a string.
|
||||
(bidi_level_of_next_char, bidi_move_to_visually_next):
|
||||
Support iteration over a string.
|
||||
(bidi_set_sor_type, bidi_resolve_explicit_1)
|
||||
(bidi_resolve_explicit, bidi_type_of_next_char): ignore_bn_limit
|
||||
can now be zero (for strings); special values 0 and -1 were
|
||||
|
@ -723,20 +727,20 @@
|
|||
(bidi_cache_fetch_state, bidi_cache_search)
|
||||
(bidi_cache_find_level_change, bidi_cache_ensure_space)
|
||||
(bidi_cache_iterator_state, bidi_cache_find)
|
||||
(bidi_find_other_level_edge, bidi_cache_start_stack): All
|
||||
variables related to cache indices are now EMACS_INT.
|
||||
(bidi_find_other_level_edge, bidi_cache_start_stack):
|
||||
All variables related to cache indices are now EMACS_INT.
|
||||
|
||||
* dispextern.h (struct bidi_string_data): New structure.
|
||||
(struct bidi_it): New member `string'. Make flag members be 1-bit
|
||||
fields, and put them last in the struct.
|
||||
(compute_display_string_pos, compute_display_string_end): Update
|
||||
prototypes.
|
||||
(compute_display_string_pos, compute_display_string_end):
|
||||
Update prototypes.
|
||||
(bidi_push_it, bidi_pop_it): Add prototypes.
|
||||
(struct iterator_stack_entry): New members bidi_p,
|
||||
paragraph_embedding, and from_disp_prop_p.
|
||||
(struct it): Member bidi_p is now a bit field 1 bit wide.
|
||||
(bidi_shelve_cache, bidi_unshelve_cache): Declare
|
||||
prototypes.
|
||||
(bidi_shelve_cache, bidi_unshelve_cache):
|
||||
Declare prototypes.
|
||||
|
||||
* .gdbinit (xvectype, xvector, xcompiled, xchartable, xboolvector)
|
||||
(xpr, xfont, xbacktrace): Use "header.size" when accessing vectors
|
||||
|
@ -1018,7 +1022,7 @@
|
|||
(char_table_set_range): Adjuted for the above change.
|
||||
(map_sub_char_table): Delete args default_val and parent. Add arg
|
||||
top. Give decoded values to a Lisp function.
|
||||
(map_char_table): Adjusted for the above change. Give decoded
|
||||
(map_char_table): Adjust for the above change. Give decoded
|
||||
values to a Lisp function. Gcpro more variables.
|
||||
(uniprop_table_uncompress)
|
||||
(uniprop_decode_value_run_length): New functions.
|
||||
|
@ -1035,10 +1039,10 @@
|
|||
and Sput_unicode_property_internal. Defvar_lisp
|
||||
char-code-property-alist.
|
||||
|
||||
* composite.c (CHAR_COMPOSABLE_P): Adjusted for the change of
|
||||
* composite.c (CHAR_COMPOSABLE_P): Adjust for the change of
|
||||
Vunicode_category_table.
|
||||
|
||||
* font.c (font_range): Adjusted for the change of
|
||||
* font.c (font_range): Adjust for the change of
|
||||
Vunicode_category_table.
|
||||
|
||||
2011-07-07 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
@ -1067,14 +1071,14 @@
|
|||
(store_monospaced_changed): Add comment. Call dpyinfo_valid.
|
||||
(struct xsettings): Move font inside HAVE_XFT.
|
||||
(GSETTINGS_TOOL_BAR_STYLE, GSETTINGS_FONT_NAME): New defines.
|
||||
(GSETTINGS_MONO_FONT): Renamed from SYSTEM_MONO_FONT.
|
||||
(GSETTINGS_MONO_FONT): Rename from SYSTEM_MONO_FONT.
|
||||
Move inside HAVE_XFT.
|
||||
(something_changed_gsettingsCB): Renamed from something_changedCB.
|
||||
(something_changed_gsettingsCB): Rename from something_changedCB.
|
||||
Check for changes in GSETTINGS_TOOL_BAR_STYLE and GSETTINGS_FONT_NAME
|
||||
also.
|
||||
(GCONF_TOOL_BAR_STYLE, GCONF_FONT_NAME): New defines.
|
||||
(GCONF_MONO_FONT): Renamed from SYSTEM_MONO_FONT. Move inside HAVE_XFT.
|
||||
(something_changed_gconfCB): Renamed from something_changedCB.
|
||||
(GCONF_MONO_FONT): Rename from SYSTEM_MONO_FONT. Move inside HAVE_XFT.
|
||||
(something_changed_gconfCB): Rename from something_changedCB.
|
||||
Check for changes in GCONF_TOOL_BAR_STYLE and GCONF_FONT_NAME also.
|
||||
(parse_settings): Move check for font inside HAVE_XFT.
|
||||
(read_settings, apply_xft_settings): Add comment.
|
||||
|
@ -1087,8 +1091,8 @@
|
|||
(init_gconf): Add comment. Get values for GCONF_TOOL_BAR_STYLE
|
||||
and GCONF_FONT_NAME. Move check for fonts within HAVE_XFT.
|
||||
(xsettings_initialize): Call init_gsettings last.
|
||||
(xsettings_get_system_font, xsettings_get_system_normal_font): Add
|
||||
comment.
|
||||
(xsettings_get_system_font, xsettings_get_system_normal_font):
|
||||
Add comment.
|
||||
|
||||
2011-07-05 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
|
@ -1271,7 +1275,7 @@
|
|||
(syms_of_xsettings): Initialize gsettings_client, gsettings_obj
|
||||
to NULL.
|
||||
|
||||
* Makefile.in (SETTINGS_CFLAGS, SETTINGS_LIBS): Renamed from
|
||||
* Makefile.in (SETTINGS_CFLAGS, SETTINGS_LIBS): Rename from
|
||||
GCONF_CFLAGS/LIBS.
|
||||
|
||||
2011-06-29 Martin Rudalics <rudalics@gmx.at>
|
||||
|
@ -2018,7 +2022,7 @@
|
|||
|
||||
* character.c, coding.c, doprnt.c, editfns.c, eval.c:
|
||||
All uses of STRING_BYTES_MAX replaced by STRING_BYTES_BOUND.
|
||||
* lisp.h (STRING_BYTES_BOUND): Renamed from STRING_BYTES_MAX.
|
||||
* lisp.h (STRING_BYTES_BOUND): Rename from STRING_BYTES_MAX.
|
||||
|
||||
* character.c (string_escape_byte8): Fix nbytes/nchars typo.
|
||||
|
||||
|
@ -2127,8 +2131,8 @@
|
|||
Qclone_number. Remove external declaration of Qdelete_window.
|
||||
(Fbuffer_list): Rewrite doc-string. Minor restructuring of
|
||||
code.
|
||||
(Fget_buffer_create, Fmake_indirect_buffer, Frename_buffer): Run
|
||||
Qbuffer_list_update_hook if allowed.
|
||||
(Fget_buffer_create, Fmake_indirect_buffer, Frename_buffer):
|
||||
Run Qbuffer_list_update_hook if allowed.
|
||||
(Fother_buffer): Rewrite doc-string. Major rewrite for new
|
||||
buffer list implementation.
|
||||
(other_buffer_safely): New function.
|
||||
|
@ -2139,8 +2143,8 @@
|
|||
(record_buffer): Inhibit quitting and rewrite using quittable
|
||||
functions. Run Qbuffer_list_update_hook if allowed.
|
||||
(Frecord_buffer, Funrecord_buffer): New functions.
|
||||
(switch_to_buffer_1, Fswitch_to_buffer): Remove. Move
|
||||
switch-to-buffer to window.el.
|
||||
(switch_to_buffer_1, Fswitch_to_buffer): Remove.
|
||||
Move switch-to-buffer to window.el.
|
||||
(bury-buffer): Move to window.el.
|
||||
(Vbuffer_list_update_hook): New variable.
|
||||
|
||||
|
@ -2168,8 +2172,8 @@
|
|||
(select_window_norecord, select_frame_norecord): Move in front
|
||||
of run_window_configuration_change_hook. Remove now obsolete
|
||||
declarations.
|
||||
(Fset_window_buffer): Rewrite doc-string. Call
|
||||
Qrecord_window_buffer.
|
||||
(Fset_window_buffer): Rewrite doc-string.
|
||||
Call Qrecord_window_buffer.
|
||||
(keys_of_window): Move binding for other-window to window.el.
|
||||
|
||||
2011-06-11 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
@ -2251,8 +2255,8 @@
|
|||
orig_total_lines.
|
||||
(Fdelete_window, delete_window): Remove. Window deletion is
|
||||
handled by window.el.
|
||||
(window_loop): Remove DELETE_OTHER_WINDOWS case. Replace
|
||||
Fdelete_window calls with calls to Qdelete_window.
|
||||
(window_loop): Remove DELETE_OTHER_WINDOWS case.
|
||||
Replace Fdelete_window calls with calls to Qdelete_window.
|
||||
(Fdelete_other_windows): Remove. Deleting other windows is
|
||||
handled by window.el.
|
||||
(window_fixed_size_p): Remove. Fixed-sizeness of windows is
|
||||
|
@ -2275,8 +2279,8 @@
|
|||
(grow_mini_window, shrink_mini_window): Implement by calling
|
||||
Qresize_root_window_vertically, resize_window_check and
|
||||
resize_window_apply.
|
||||
(saved_window, Fset_window_configuration, save_window_save): Do
|
||||
not handle orig_top_line, orig_total_lines, and
|
||||
(saved_window, Fset_window_configuration, save_window_save):
|
||||
Do not handle orig_top_line, orig_total_lines, and
|
||||
resize_proportionally.
|
||||
(window_min_height, window_min_width): Move to window.el.
|
||||
(keys_of_window): Move bindings for delete-other-windows,
|
||||
|
@ -2296,8 +2300,8 @@
|
|||
* xdisp.c (init_xdisp): Don't use set_window_height but set
|
||||
heights directly.
|
||||
|
||||
* xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines): Use
|
||||
resize_frame_windows instead of change_window_heights and run
|
||||
* xfns.c (x_set_menu_bar_lines, x_set_tool_bar_lines):
|
||||
Use resize_frame_windows instead of change_window_heights and run
|
||||
run_window_configuration_change_hook.
|
||||
|
||||
* w32fns.c (x_set_tool_bar_lines): Use resize_frame_windows
|
||||
|
@ -2319,8 +2323,8 @@
|
|||
(Frun_window_configuration_change_hook, make_parent_window)
|
||||
(resize_window_check, resize_window_apply, Fresize_window_apply)
|
||||
(resize_frame_windows, Fsplit_window_internal)
|
||||
(Fdelete_window_internal, Fresize_mini_window_internal): New
|
||||
functions.
|
||||
(Fdelete_window_internal, Fresize_mini_window_internal):
|
||||
New functions.
|
||||
(syms_of_window): New variables Vwindow_splits and Vwindow_nest.
|
||||
|
||||
2011-06-08 Martin Rudalics <rudalics@gmx.at>
|
||||
|
@ -2340,8 +2344,8 @@
|
|||
(Fwindow_nest, Fset_window_nest, Fwindow_new_total)
|
||||
(Fwindow_normal_size, Fwindow_new_normal, Fwindow_prev_buffers)
|
||||
(Fset_window_prev_buffers, Fwindow_next_buffers)
|
||||
(Fset_window_next_buffers, Fset_window_clone_number): New
|
||||
functions.
|
||||
(Fset_window_next_buffers, Fset_window_clone_number):
|
||||
New functions.
|
||||
(Fwindow_hscroll, Fwindow_at, Fwindow_point, Fwindow_start)
|
||||
(Fwindow_end, Fwindow_line_height, Fset_window_dedicated_p):
|
||||
Doc-string fixes.
|
||||
|
@ -2367,10 +2371,10 @@
|
|||
(Fwindow_top_line, window_body_lines, Fwindow_body_size)
|
||||
(Fwindow_list_1): New functions.
|
||||
(window_box_text_cols): Replace with window_body_cols.
|
||||
(Fwindow_width, Fscroll_left, Fscroll_right): Use
|
||||
window_body_cols instead of window_box_text_cols.
|
||||
(delete_window, Fset_window_configuration): Call
|
||||
delete_all_subwindows with window as argument.
|
||||
(Fwindow_width, Fscroll_left, Fscroll_right):
|
||||
Use window_body_cols instead of window_box_text_cols.
|
||||
(delete_window, Fset_window_configuration):
|
||||
Call delete_all_subwindows with window as argument.
|
||||
(delete_all_subwindows): Take a window as argument and not a
|
||||
structure. Rewrite.
|
||||
(window_loop): Remove handling of GET_LRU_WINDOW and
|
||||
|
@ -2381,8 +2385,8 @@
|
|||
window_box_text_cols. delete_all_subwindows now takes a
|
||||
Lisp_Object as argument.
|
||||
|
||||
* indent.c (compute_motion, Fcompute_motion): Use
|
||||
window_body_cols instead of window_box_text_cols.
|
||||
* indent.c (compute_motion, Fcompute_motion):
|
||||
Use window_body_cols instead of window_box_text_cols.
|
||||
|
||||
* frame.c (delete_frame): Call delete_all_subwindows with root
|
||||
window as argument.
|
||||
|
|
12
src/keymap.c
12
src/keymap.c
|
@ -150,17 +150,6 @@ in case you use it as a menu with `x-popup-menu'. */)
|
|||
return Fcons (Qkeymap, Qnil);
|
||||
}
|
||||
|
||||
DEFUN ("make-composed-keymap", Fmake_composed_keymap, Smake_composed_keymap,
|
||||
0, MANY, 0,
|
||||
doc: /* Construct and return a new keymap composed of KEYMAPS.
|
||||
When looking up a key in the returned map, the key is looked in each
|
||||
keymap in turn until a binding is found.
|
||||
usage: (make-composed-keymap &rest KEYMAPS) */)
|
||||
(ptrdiff_t nargs, Lisp_Object *args)
|
||||
{
|
||||
return Fcons (Qkeymap, Flist (nargs, args));
|
||||
}
|
||||
|
||||
/* This function is used for installing the standard key bindings
|
||||
at initialization time.
|
||||
|
||||
|
@ -3761,7 +3750,6 @@ be preferred. */);
|
|||
defsubr (&Sset_keymap_parent);
|
||||
defsubr (&Smake_keymap);
|
||||
defsubr (&Smake_sparse_keymap);
|
||||
defsubr (&Smake_composed_keymap);
|
||||
defsubr (&Smap_keymap_internal);
|
||||
defsubr (&Smap_keymap);
|
||||
defsubr (&Scopy_keymap);
|
||||
|
|
Loading…
Add table
Reference in a new issue