changeset 67720:477912b55071

(Fdisplay_completion_list): Use XCAR/XCDR. (Fminibuffer_completion_help): Remove duplicates before display.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 21 Dec 2005 17:33:40 +0000
parents 5e88f41fd520
children d372bc6eff1d
files src/ChangeLog src/minibuf.c
diffstat 2 files changed, 34 insertions(+), 18 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Dec 21 15:37:25 2005 +0000
+++ b/src/ChangeLog	Wed Dec 21 17:33:40 2005 +0000
@@ -1,3 +1,8 @@
+2005-12-21  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+	* minibuf.c (Fdisplay_completion_list): Use XCAR/XCDR.
+	(Fminibuffer_completion_help): Remove duplicates before display.
+
 2005-12-21  L$,1 q(Brentey K,Aa(Broly  <lorentey@elte.hu>
 
 	* print.c (print_preprocess): Don't loose print_depth levels while
@@ -61,15 +66,15 @@
 	(x_use_underline_position_properties): Undo 2005-07-13 change.
 	(syms_of_macterm) <x-use-underline-position-properties>: Likewise.
 	(mac_use_core_graphics, mac_wheel_button_is_mouse_2)
-	(mac_pass_command_to_system, mac_pass_control_to_system): New
-	boolean variables renamed from Lisp_Object ones
+	(mac_pass_command_to_system, mac_pass_control_to_system):
+	New boolean variables renamed from Lisp_Object ones
 	Vmac_use_core_graphics, Vmac_wheel_button_is_mouse_2,
-	Vmac_pass_command_to_system, and Vmac_pass_control_to_system.  All
-	uses changed.
+	Vmac_pass_command_to_system, and Vmac_pass_control_to_system.
+	All uses changed.
 	(syms_of_macterm): DEFVAR_BOOL them.  Remove previous DEFVAR_LISPs.
 	Make them user options.
-	(mac_handle_command_event, mac_store_services_event): Call
-	create_apple_event_from_event_ref without 5th argument.
+	(mac_handle_command_event, mac_store_services_event):
+	Call create_apple_event_from_event_ref without 5th argument.
 	(backtranslate_modified_keycode): Mask off modifier keys that are
 	mapped to some Emacs modifiers before passing it to KeyTranslate.
 	(syms_of_macterm): Make variables `mac-emulate-three-button-mouse',
@@ -77,8 +82,8 @@
 	Fix docstrings of `mac-*-modifier'.
 
 	* mac.c (create_apple_event_from_event_ref): Remove arg `types'.
-	(do_applescript): Change argument types to Lisp_Object.  All uses
-	changed.
+	(do_applescript): Change argument types to Lisp_Object.
+	All uses changed.
 
 	* macterm.h (create_apple_event_from_event_ref): Remove 5th
 	argument from extern.
@@ -121,9 +126,9 @@
 
 	* xfns.c (compute_tip_xy): Handle negative dx and dy.
 
-	* w32fns.c (compute_tip_xy): Ditto
-
-	* macfns.c (compute_tip_xy): Ditto
+	* w32fns.c (compute_tip_xy): Ditto.
+
+	* macfns.c (compute_tip_xy): Ditto.
 
 2005-12-14  Chong Yidong  <cyd@stupidchicken.com>
 
@@ -201,8 +206,7 @@
 	* mac.c (Qundecoded_file_name): New variable.
 	(syms_of_mac): Initialize it.
 	(mac_aelist_to_lisp, mac_aedesc_to_lisp): New functions.
-	[TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): New
-	function.
+	[TARGET_API_MAC_CARBON] (create_apple_event_from_event_ref): New fun.
 	(Fmac_coerce_ae_data): New defun.
 	(syms_of_mac): Defsubr it.
 
--- a/src/minibuf.c	Wed Dec 21 15:37:25 2005 +0000
+++ b/src/minibuf.c	Wed Dec 21 17:33:40 2005 +0000
@@ -2404,7 +2404,7 @@
   else
     {
       write_string ("Possible completions are:", -1);
-      for (tail = completions, i = 0; !NILP (tail); tail = Fcdr (tail), i++)
+      for (tail = completions, i = 0; CONSP (tail); tail = XCDR (tail), i++)
 	{
 	  Lisp_Object tem, string;
 	  int length;
@@ -2412,7 +2412,7 @@
 
 	  startpos = Qnil;
 
-	  elt = Fcar (tail);
+	  elt = XCAR (tail);
 	  if (SYMBOLP (elt))
 	    elt = SYMBOL_NAME (elt);
 	  /* Compute the length of this element.  */
@@ -2588,9 +2588,21 @@
       temp_echo_area_glyphs (build_string (" [No completions]"));
     }
   else
-    internal_with_output_to_temp_buffer ("*Completions*",
-					 display_completion_list_1,
-					 Fsort (completions, Qstring_lessp));
+    {
+      /* Sort and remove duplicates.  */
+      Lisp_Object tmp = completions = Fsort (completions, Qstring_lessp);
+      while (CONSP (tmp))
+	{
+	  if (CONSP (XCDR (tmp))
+	      && !NILP (Fequal (XCAR (tmp), XCAR (XCDR (tmp)))))
+	    XSETCDR (tmp, XCDR (XCDR (tmp)));
+	  else
+	    tmp = XCDR (tmp);
+	}
+      internal_with_output_to_temp_buffer ("*Completions*",
+					   display_completion_list_1,
+					   completions);
+    }
   return Qnil;
 }