From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Anders Lindgren Newsgroups: gmane.emacs.bugs Subject: bug#22169: 25.0.50; File name compiletion doesn't work with non-ASCII characters on OS X Date: Tue, 22 Dec 2015 23:29:16 +0100 Message-ID: References: <83y4cw3kie.fsf@gnu.org> <83twnk3fg1.fsf@gnu.org> <83oads2x99.fsf@gnu.org> <83io3z3drh.fsf@gnu.org> <831tan32q2.fsf@gnu.org> <83r3ikxmis.fsf@gnu.org> <83fuyxt35q.fsf@gnu.org> <8337uwucyt.fsf@gnu.org> <83wps8sc6h.fsf@gnu.org> <83fuyvss0h.fsf@gnu.org> <83poxzqhln.fsf@gnu.org> <838u4mquis.fsf@gnu.org> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/alternative; boundary=001a11440176c6a3890527842298 X-Trace: ger.gmane.org 1450823422 23157 80.91.229.3 (22 Dec 2015 22:30:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 22 Dec 2015 22:30:22 +0000 (UTC) Cc: random832@fastmail.com, 22169@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Dec 22 23:30:14 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1aBVRe-00007j-5m for geb-bug-gnu-emacs@m.gmane.org; Tue, 22 Dec 2015 23:30:14 +0100 Original-Received: from localhost ([::1]:53271 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aBVRd-0001Tw-IL for geb-bug-gnu-emacs@m.gmane.org; Tue, 22 Dec 2015 17:30:13 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:51127) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aBVRY-0001R7-0W for bug-gnu-emacs@gnu.org; Tue, 22 Dec 2015 17:30:10 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aBVRT-0003I2-GN for bug-gnu-emacs@gnu.org; Tue, 22 Dec 2015 17:30:07 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:52624) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aBVRT-0003HS-DB for bug-gnu-emacs@gnu.org; Tue, 22 Dec 2015 17:30:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84) (envelope-from ) id 1aBVRS-0005Qr-Vp for bug-gnu-emacs@gnu.org; Tue, 22 Dec 2015 17:30:03 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Anders Lindgren Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Dec 2015 22:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 22169 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 22169-submit@debbugs.gnu.org id=B22169.145082336420808 (code B ref 22169); Tue, 22 Dec 2015 22:30:02 +0000 Original-Received: (at 22169) by debbugs.gnu.org; 22 Dec 2015 22:29:24 +0000 Original-Received: from localhost ([127.0.0.1]:60226 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aBVQp-0005PX-G6 for submit@debbugs.gnu.org; Tue, 22 Dec 2015 17:29:23 -0500 Original-Received: from mail-vk0-f44.google.com ([209.85.213.44]:33941) by debbugs.gnu.org with esmtp (Exim 4.84) (envelope-from ) id 1aBVQn-0005PK-I9 for 22169@debbugs.gnu.org; Tue, 22 Dec 2015 17:29:22 -0500 Original-Received: by mail-vk0-f44.google.com with SMTP id j66so125205248vkg.1 for <22169@debbugs.gnu.org>; Tue, 22 Dec 2015 14:29:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=bi4v9u2ThZzv3MIqPM0Tx7abTDfEZ7xDR7BZ6bAPL+Q=; b=M+W0tfUMbFEKIbLMJxpgp8lSpUzltLL1U2HgLAbrRS4gXlKDWEizmXkCxLeMGa93L4 vHLh7rXHtNsOOcPofWaJt/fBSGYR70zRf0O0dQNzXX3uLMvCKxJb/WlsYxVfdI0xIYYx qT6xrB9cGUjxpLIIsGQVvnFieT2BPpetFQTi7cQYmC9U1YEo4YYOxZXx3VhdXOIoQc3d YlYnPhyMHCOYwh9BoYeu+RXr1duykH6ggVeYEMzQFIQpet58xJpjCNx01L2JiK9NsEdw 1KCHCKM5LPHm8MTc2w4Qfx9dW2mJmcRRIE2FTzkE5wy1tfqrCGV/+nqzXkEwfNQE9vzi scTg== X-Received: by 10.31.10.199 with SMTP id 190mr18044364vkk.51.1450823356161; Tue, 22 Dec 2015 14:29:16 -0800 (PST) Original-Received: by 10.31.210.133 with HTTP; Tue, 22 Dec 2015 14:29:16 -0800 (PST) In-Reply-To: <838u4mquis.fsf@gnu.org> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:110290 Archived-At: --001a11440176c6a3890527842298 Content-Type: text/plain; charset=UTF-8 Hi! I just tried this and I can confirm that it works. Thanks for your hard work! I will push my patch for using the utf-8-hfs coding system (most likely) tomorrow. -- Anders On Tue, Dec 22, 2015 at 6:10 PM, Eli Zaretskii wrote: > > Date: Tue, 22 Dec 2015 06:42:47 +0100 > > From: Anders Lindgren > > Cc: random832@fastmail.com, 22169@debbugs.gnu.org > > > > > I haven't had time to see what actually happens in the code, > though. > > However, > > > the " if (STRING_MULTIBYTE (file))" looks suspicious as the > decoded value > > needs > > > to be checked even for strings like "a". (However, I don't really > know > > what > > > STRING_MULTIBYTE does.) > > > > Does removing the STRING_MULTIBYTE test make it work? > > > > Yes, it does: > > > > (file-name-all-completions "a" ".") > > ("aaosecond.txt") > > Then please try the final patch below (again against the current > emacs-25 branch), I hope I didn't goof this time. > > Thanks. > > diff --git a/lisp/international/ucs-normalize.el > b/lisp/international/ucs-normalize.el > index 8839b00..6f2fb28 100644 > --- a/lisp/international/ucs-normalize.el > +++ b/lisp/international/ucs-normalize.el > @@ -627,6 +627,10 @@ 'utf-8-hfs > :pre-write-conversion 'ucs-normalize-hfs-nfd-pre-write-conversion > ) > > +;; This is tested in dired.c:file_name_completion in order to reject > +;; false positives due to comparison of encoded file names. > +(coding-system-put 'utf-8-hfs 'decomposed-characters 't) > + > (provide 'ucs-normalize) > > ;; Local Variables: > diff --git a/src/dired.c b/src/dired.c > index 84bf247..89bd908 100644 > --- a/src/dired.c > +++ b/src/dired.c > @@ -467,6 +467,7 @@ file_name_completion (Lisp_Object file, Lisp_Object > dirname, bool all_flag, > well as "." and "..". Until shown otherwise, assume we can't exclude > anything. */ > bool includeall = 1; > + bool check_decoded = false; > ptrdiff_t count = SPECPDL_INDEX (); > > elt = Qnil; > @@ -485,6 +486,28 @@ file_name_completion (Lisp_Object file, Lisp_Object > dirname, bool all_flag, > on the encoded file name. */ > encoded_file = ENCODE_FILE (file); > encoded_dir = ENCODE_FILE (Fdirectory_file_name (dirname)); > + > + Lisp_Object file_encoding = Vfile_name_coding_system; > + if (NILP (Vfile_name_coding_system)) > + file_encoding = Vdefault_file_name_coding_system; > + /* If the file-name encoding decomposes characters, as we do for > + HFS+ filesystems, we need to make an additional comparison of > + decoded names in order to filter false positives, such as "a" > + falsely matching "a-ring". */ > + if (!NILP (file_encoding) > + && !NILP (Fplist_get (Fcoding_system_plist (file_encoding), > + Qdecomposed_characters))) > + { > + check_decoded = true; > + if (STRING_MULTIBYTE (file)) > + { > + /* Recompute FILE to make sure any decomposed characters in > + it are re-composed by the post-read-conversion. > + Otherwise, any decomposed characters will be rejected by > + the additional check below. */ > + file = DECODE_FILE (encoded_file); > + } > + } > int fd; > DIR *d = open_directory (encoded_dir, &fd); > record_unwind_protect_ptr (directory_files_internal_unwind, d); > @@ -637,6 +660,21 @@ file_name_completion (Lisp_Object file, Lisp_Object > dirname, bool all_flag, > if (!NILP (predicate) && NILP (call1 (predicate, name))) > continue; > > + /* Reject entries where the encoded strings match, but the > + decoded don't. For example, "a" should not match "a-ring" on > + file systems that store decomposed characters. */ > + Lisp_Object zero = make_number (0); > + Lisp_Object compare; > + Lisp_Object cmp; > + if (check_decoded && SCHARS (file) <= SCHARS (name)) > + { > + compare = make_number (SCHARS (file)); > + cmp = Fcompare_strings (name, zero, compare, file, zero, compare, > + completion_ignore_case ? Qt : Qnil); > + if (!EQ (cmp, Qt)) > + continue; > + } > + > /* Suitably record this match. */ > > matchcount += matchcount <= 1; > @@ -650,15 +688,13 @@ file_name_completion (Lisp_Object file, Lisp_Object > dirname, bool all_flag, > } > else > { > - Lisp_Object zero = make_number (0); > /* FIXME: This is a copy of the code in Ftry_completion. */ > - ptrdiff_t compare = min (bestmatchsize, SCHARS (name)); > - Lisp_Object cmp > - = Fcompare_strings (bestmatch, zero, > - make_number (compare), > - name, zero, > - make_number (compare), > - completion_ignore_case ? Qt : Qnil); > + compare = min (bestmatchsize, SCHARS (name)); > + cmp = Fcompare_strings (bestmatch, zero, > + make_number (compare), > + name, zero, > + make_number (compare), > + completion_ignore_case ? Qt : Qnil); > ptrdiff_t matchsize = EQ (cmp, Qt) ? compare : eabs (XINT (cmp)) > - 1; > > if (completion_ignore_case) > @@ -1007,6 +1043,7 @@ syms_of_dired (void) > DEFSYM (Qfile_attributes, "file-attributes"); > DEFSYM (Qfile_attributes_lessp, "file-attributes-lessp"); > DEFSYM (Qdefault_directory, "default-directory"); > + DEFSYM (Qdecomposed_characters, "decomposed-characters"); > > defsubr (&Sdirectory_files); > defsubr (&Sdirectory_files_and_attributes); > --001a11440176c6a3890527842298 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi!

I just tried this and I can confirm= that it works.

Thanks for your hard work!

I will push my patch for using the utf-8-hfs coding syste= m (most likely) tomorrow.

=C2=A0 =C2=A0 -- Anders<= /div>


On Tue, Dec 22, 2015 at 6:10 PM, Eli Zaretskii &= lt;eliz@gnu.org> wrote:
> Date: Tue, 22 Dec 2015 = 06:42:47 +0100
> From: Anders Lindgren <andlind@gmail.com>
> Cc: random832@fastmail.com, 22169@debbugs.gnu.org
>
>=C2=A0 =C2=A0 =C2=A0> I haven't had time= to see what actually happens in the code, though.
>=C2=A0 =C2=A0 =C2=A0However,
>=C2=A0 =C2=A0 =C2=A0> the " if (STRING_MULTIBYTE (file))" = looks suspicious as the decoded value
>=C2=A0 =C2=A0 =C2=A0needs
>=C2=A0 =C2=A0 =C2=A0> to be checked even for strings like "a&qu= ot;. (However, I don't really know
>=C2=A0 =C2=A0 =C2=A0what
>=C2=A0 =C2=A0 =C2=A0> STRING_MULTIBYTE does.)
>
>=C2=A0 =C2=A0 =C2=A0Does removing the STRING_MULTIBYTE test make it wor= k?
>
> Yes, it does:
>
> (file-name-all-completions "a" ".")
> ("aaosecond.txt")

Then please try the final patch below (again against the current
emacs-25 branch), I hope I didn't goof this time.

Thanks.

diff --git a/lisp/international/ucs-normalize.el b/lisp/international/ucs-n= ormalize.el
index 8839b00..6f2fb28 100644
--- a/lisp/international/ucs-normalize.el
+++ b/lisp/international/ucs-normalize.el
@@ -627,6 +627,10 @@ 'utf-8-hfs
=C2=A0 =C2=A0:pre-write-conversion 'ucs-normalize-hfs-nfd-pre-write-con= version
=C2=A0 =C2=A0)

+;; This is tested in dired.c:file_name_completion in order to reject
+;; false positives due to comparison of encoded file names.
+(coding-system-put 'utf-8-hfs 'decomposed-characters 't)
+
=C2=A0(provide 'ucs-normalize)

=C2=A0;; Local Variables:
diff --git a/src/dired.c b/src/dired.c
index 84bf247..89bd908 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -467,6 +467,7 @@ file_name_completion (Lisp_Object file, Lisp_Object dir= name, bool all_flag,
=C2=A0 =C2=A0 =C2=A0 well as "." and "..".=C2=A0 Until = shown otherwise, assume we can't exclude
=C2=A0 =C2=A0 =C2=A0 anything.=C2=A0 */
=C2=A0 =C2=A0bool includeall =3D 1;
+=C2=A0 bool check_decoded =3D false;
=C2=A0 =C2=A0ptrdiff_t count =3D SPECPDL_INDEX ();

=C2=A0 =C2=A0elt =3D Qnil;
@@ -485,6 +486,28 @@ file_name_completion (Lisp_Object file, Lisp_Object di= rname, bool all_flag,
=C2=A0 =C2=A0 =C2=A0 on the encoded file name.=C2=A0 */
=C2=A0 =C2=A0encoded_file =3D ENCODE_FILE (file);
=C2=A0 =C2=A0encoded_dir =3D ENCODE_FILE (Fdirectory_file_name (dirname));<= br> +
+=C2=A0 Lisp_Object file_encoding =3D Vfile_name_co= ding_system;
+=C2=A0 if (NILP (Vfile_name_coding_system))
+=C2=A0 =C2=A0 file_encoding =3D Vdefault_file_name_coding= _system;
+=C2=A0 /* If the file-name encoding decomposes characters, as we do for +=C2=A0 =C2=A0 =C2=A0HFS+ filesystems, we need to make an additional compar= ison of
+=C2=A0 =C2=A0 =C2=A0decoded names in order to filter false positives, such= as "a"
+=C2=A0 =C2=A0 =C2=A0falsely matching "a-ring".=C2=A0 */
+=C2=A0 if (!NILP (file_encoding)
+=C2=A0 =C2=A0 =C2=A0 && !NILP (Fplist_get (Fcoding_system_plist (f= ile_encoding),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0Qdecomposed_characters)))
+=C2=A0 =C2=A0 {
+=C2=A0 =C2=A0 =C2=A0 check_decoded =3D true;
+=C2=A0 =C2=A0 =C2=A0 if (STRING_MULTIBYTE (file))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0/* Recompute FILE to make sure any decom= posed characters in
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 it are re-composed by the post-read-conversion.
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Otherwise, any decomposed charac= ters will be rejected by
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the additional check below.=C2= =A0 */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file =3D DECODE_FILE (encoded_file);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0}
+=C2=A0 =C2=A0 }
=C2=A0 =C2=A0int fd;
=C2=A0 =C2=A0DIR *d =3D open_directory (encoded_dir, &fd);
=C2=A0 =C2=A0record_unwind_protect_ptr (directory_files_internal_unwind, d)= ;
@@ -637,6 +660,21 @@ file_name_completion (Lisp_Object file, Lisp_Object di= rname, bool all_flag,
=C2=A0 =C2=A0 =C2=A0 =C2=A0if (!NILP (predicate) && NILP (call1 (pr= edicate, name)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 continue;

+=C2=A0 =C2=A0 =C2=A0 /* Reject entries where the encoded strings match, bu= t the
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0decoded don't.=C2=A0 For example, &q= uot;a" should not match "a-ring" on
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file systems that store decomposed chara= cters. */
+=C2=A0 =C2=A0 =C2=A0 Lisp_Object zero =3D make_number (0);
+=C2=A0 =C2=A0 =C2=A0 Lisp_Object compare;
+=C2=A0 =C2=A0 =C2=A0 Lisp_Object cmp;
+=C2=A0 =C2=A0 =C2=A0 if (check_decoded && SCHARS (file) <=3D SC= HARS (name))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0{
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0compare =3D make_number (SCHARS (file));=
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cmp =3D Fcompare_strings (name, zero, co= mpare, file, zero, compare,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0completion_ignore_case ? Qt : = Qnil);
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!EQ (cmp, Qt))
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0continue;
+=C2=A0 =C2=A0 =C2=A0 =C2=A0}
+
=C2=A0 =C2=A0 =C2=A0 =C2=A0/* Suitably record this match.=C2=A0 */

=C2=A0 =C2=A0 =C2=A0 =C2=A0matchcount +=3D matchcount <=3D 1;
@@ -650,15 +688,13 @@ file_name_completion (Lisp_Object file, Lisp_Object d= irname, bool all_flag,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0else
=C2=A0 =C2=A0 =C2=A0 =C2=A0 {
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Lisp_Object zero =3D make_number (0); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 /* FIXME: This is a copy of the code in = Ftry_completion.=C2=A0 */
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ptrdiff_t compare =3D min (bestmatchsize= , SCHARS (name));
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Lisp_Object cmp
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=3D Fcompare_strings (bestmatch, = zero,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make_number (compare),
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0name, zero,
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make_number (compare),
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0completion_ignore_case ? Qt : Qnil);<= br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0compare =3D min (bestmatchsize, SCHARS (= name));
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cmp =3D Fcompare_strings (bestmatch, zer= o,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make_number (compare),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0name, zero,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make_number (compare),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0completion_ignore_case ? Qt : = Qnil);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ptrdiff_t matchsize =3D EQ (cmp, Qt) ? c= ompare : eabs (XINT (cmp)) - 1;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (completion_ignore_case)
@@ -1007,6 +1043,7 @@ syms_of_dired (void)
=C2=A0 =C2=A0DEFSYM (Qfile_attributes, "file-attributes");
=C2=A0 =C2=A0DEFSYM (Qfile_attributes_lessp, "file-attributes-lessp&qu= ot;);
=C2=A0 =C2=A0DEFSYM (Qdefault_directory, "default-directory"); +=C2=A0 DEFSYM (Qdecomposed_characters, "decomposed-characters");=

=C2=A0 =C2=A0defsubr (&Sdirectory_files);
=C2=A0 =C2=A0defsubr (&Sdirectory_files_and_attributes);

--001a11440176c6a3890527842298--