changeset 59050:1ee6d4f5d727

(Fread_file_name): Delete duplicates in file-name-history when history_delete_duplicates is true.
author Richard M. Stallman <rms@gnu.org>
date Tue, 21 Dec 2004 11:33:16 +0000
parents a38c7bcb8e1a
children a5dd77dcb82e
files src/fileio.c
diffstat 1 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c	Tue Dec 21 11:32:07 2004 +0000
+++ b/src/fileio.c	Tue Dec 21 11:33:16 2004 +0000
@@ -228,6 +228,8 @@
 
 extern int minibuffer_auto_raise;
 
+extern int history_delete_duplicates;
+
 /* These variables describe handlers that have "already" had a chance
    to handle the current operation.
 
@@ -6383,7 +6385,13 @@
   if (replace_in_history)
     /* Replace what Fcompleting_read added to the history
        with what we will actually return.  */
-    XSETCAR (Fsymbol_value (Qfile_name_history), double_dollars (val));
+    {
+       Lisp_Object val1 = double_dollars (val);
+       tem = Fsymbol_value (Qfile_name_history);
+       if (history_delete_duplicates) 
+	 XSETCDR (tem, Fdelete (val1, XCDR(tem)));
+       XSETCAR (tem, val1);
+    }
   else if (add_to_history)
     {
       /* Add the value to the history--but not if it matches
@@ -6391,8 +6399,10 @@
       Lisp_Object val1 = double_dollars (val);
       tem = Fsymbol_value (Qfile_name_history);
       if (! CONSP (tem) || NILP (Fequal (XCAR (tem), val1)))
-	Fset (Qfile_name_history,
-	      Fcons (val1, tem));
+	{
+	  if (history_delete_duplicates) tem = Fdelete (val1, tem);
+	  Fset (Qfile_name_history, Fcons (val1, tem));
+	}
     }
 
   return val;