emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: history-delete-duplicates and read-file-name


From: Piet van Oostrum
Subject: Re: history-delete-duplicates and read-file-name
Date: Mon, 20 Dec 2004 09:17:09 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/21.3.50 (darwin)

>>>>> Piet van Oostrum <address@hidden> (PvO) wrote:

PvO> The variable history-delete-duplicates, when non-nil, is supposed to
PvO> suppress duplicates in minibuffer reads with history. However, there is one
PvO> occasion where it fails:

PvO> Calling read-file-name with a default that is somewhere in the
PvO> file-name-history but not the most recent entry, and selecting the default,
PvO> causes read-file-name to add the selected filename, without removing the
PvO> existing entry. This is because it adds the new entry after read_minibuf
PvO> has finished. It should also check history-delete-duplicates.

Here is a patch. Please check it and someone check it in if you agree it is
OK. I don't think I have CVS privileges. I have signed copyright papers.

Index: src/fileio.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/fileio.c,v
retrieving revision 1.521
diff -u -r1.521 fileio.c
--- src/fileio.c        7 Nov 2004 11:07:21 -0000       1.521
+++ src/fileio.c        20 Dec 2004 08:03:48 -0000
@@ -6196,6 +6196,8 @@
   return Qnil;
 }
 
+extern int history_delete_duplicates;
+
 DEFUN ("read-file-name", Fread_file_name, Sread_file_name, 1, 6, 0,
        doc: /* Read file name, prompting with PROMPT and completing in 
directory DIR.
 Value is not expanded---you must call `expand-file-name' yourself.
@@ -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,11 @@
       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;

Index: src/ChangeLog
===================================================================
RCS file: /cvsroot/emacs/emacs/src/ChangeLog,v
retrieving revision 1.4101
diff -u -r1.4101 ChangeLog
--- src/ChangeLog       18 Dec 2004 16:36:29 -0000      1.4101
+++ src/ChangeLog       20 Dec 2004 08:09:28 -0000
@@ -1,3 +1,8 @@
+2004-12-20  Piet van Oostrum  <address@hidden>
+
+       * fileio.c (Fread_file_name): Delele duplicates in
+       file-name-history when history_delete_duplicates is true.
+
 2004-12-18  YAMAMOTO Mitsuharu  <address@hidden>
 
        * macterm.c (endif, x_font_name_to_mac_font_name): Use

-- 
Piet van Oostrum <address@hidden>
URL: http://www.cs.uu.nl/~piet [PGP]
Private email: address@hidden




reply via email to

[Prev in Thread] Current Thread [Next in Thread]