Обсуждение: C locale sort in src/tools/make_ctags
Greetings, Attached is a simple one-liner for src/tools/make_ctags. If tags are sorted in locale other than C, vim complains: E432: Tags file not sorted: tags Solution is to set LANG variable to C before calling sort. Regards, Nicolai Tufar
Вложения
Nicolai Tufar wrote: > Greetings, > > Attached is a simple one-liner for src/tools/make_ctags. > If tags are sorted in locale other than C, vim complains: > > E432: Tags file not sorted: tags > > Solution is to set LANG variable to C before calling sort. That should be LC_ALL.
> -----Original Message----- > From: Peter Eisentraut [mailto:peter_e@gmx.net] > > Nicolai Tufar wrote: > > Greetings, > > > > Attached is a simple one-liner for src/tools/make_ctags. > > If tags are sorted in locale other than C, vim complains: > > > > E432: Tags file not sorted: tags > > > > Solution is to set LANG variable to C before calling sort. > > That should be LC_ALL. Sounds fair. Both could be done. It worked for me just with LANG. Should I submit a new patch?
Nicolai Tufar wrote: > > -----Original Message----- > > From: Peter Eisentraut [mailto:peter_e@gmx.net] > > > > Nicolai Tufar wrote: > > > Greetings, > > > > > > Attached is a simple one-liner for src/tools/make_ctags. > > > If tags are sorted in locale other than C, vim complains: > > > > > > E432: Tags file not sorted: tags > > > > > > Solution is to set LANG variable to C before calling sort. > > > > That should be LC_ALL. > > Sounds fair. Both could be done. It worked for me just with LANG. > Should I submit a new patch? Patch applied to do both. Thanks. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 Index: src/tools/make_ctags =================================================================== RCS file: /cvsroot/pgsql-server/src/tools/make_ctags,v retrieving revision 1.7 diff -c -c -r1.7 make_ctags *** src/tools/make_ctags 18 Jan 2003 06:06:51 -0000 1.7 --- src/tools/make_ctags 1 Feb 2004 23:10:42 -0000 *************** *** 10,15 **** --- 10,17 ---- find `pwd`/ \( -name _deadcode -a -prune \) -o \ -type f -name '*.[chyl]' -print|xargs ctags "$FLAGS" -a -f tags + LANG=C + LC_ALL=C sort tags >/tmp/$$ && mv /tmp/$$ tags find . -name 'CVS' -prune -o -type d -print |while read DIR
Bruce Momjian wrote: > Nicolai Tufar wrote: > > > -----Original Message----- > > > From: Peter Eisentraut [mailto:peter_e@gmx.net] > > > > > > Nicolai Tufar wrote: > > > > Greetings, > > > > > > > > Attached is a simple one-liner for src/tools/make_ctags. > > > > If tags are sorted in locale other than C, vim complains: > > > > > > > > E432: Tags file not sorted: tags > > > > > > > > Solution is to set LANG variable to C before calling sort. > > > > > > That should be LC_ALL. > > > > Sounds fair. Both could be done. It worked for me just with LANG. > > Should I submit a new patch? > > Patch applied to do both. Thanks. LC_ALL overrides LANG, so please just one.
> -----Original Message----- > From: Peter Eisentraut [mailto:peter_e@gmx.net] > > LC_ALL overrides LANG, so please just one. Don't do it! I just tried it with only LC_ALL and it did not work. Same "tags file is not sorted" error message from vi. Maybe sort does not honor LC_* variables, or something. My system is linux fedora core 1, by the way. Better leave both of them in place. Regards, Nicolai Tufar
Nicolai Tufar wrote: > > -----Original Message----- > > From: Peter Eisentraut [mailto:peter_e@gmx.net] > > > > LC_ALL overrides LANG, so please just one. > > Don't do it! I just tried it with only LC_ALL and it did not > work. Same "tags file is not sorted" error message from vi. On second look, the patch is completely wrong anyway, because it does not export the variables; it depends on the user having exported them beforehand. The correct answer is to remove the LANG assignment and add LC_ALL=C export LC_ALL instead.
Peter Eisentraut <peter_e@gmx.net> writes:
> Nicolai Tufar wrote:
>> Don't do it! I just tried it with only LC_ALL and it did not
>> work. Same "tags file is not sorted" error message from vi.
> On second look, the patch is completely wrong anyway, because it does
> not export the variables; it depends on the user having exported them
> beforehand.
I saw that, but it seemed a non-problem to me: if the variables have not
been exported then they won't affect the sort program anyway.
I tried to reproduce Nicolai's statement about LC_ALL not being
sufficient, but AFAICT Fedora Core 1 handles this as expected:
$ cat /etc/redhat-release
Fedora Core release 1 (Yarrow)
$ LANG=en_US LC_ALL=en_GB locale
LANG=en_US
LC_CTYPE="en_GB"
LC_NUMERIC="en_GB"
LC_TIME="en_GB"
LC_COLLATE="en_GB"
LC_MONETARY="en_GB"
LC_MESSAGES="en_GB"
LC_PAPER="en_GB"
LC_NAME="en_GB"
LC_ADDRESS="en_GB"
LC_TELEPHONE="en_GB"
LC_MEASUREMENT="en_GB"
LC_IDENTIFICATION="en_GB"
LC_ALL=en_GB
$ cat zzz
abc DEF
ABC DEF
$ LANG=C sort zzz
ABC DEF
abc DEF
$ LANG=en_US sort zzz
abc DEF
ABC DEF
$ LANG=en_US LC_ALL=C sort zzz
ABC DEF
abc DEF
What I suspect is that Nicolai's environment supplies an explicit value
for LC_COLLATE, overriding both LC_ALL and LANG. If we want to be
bulletproof against that, then none of the proposals in this thread are
correct, and the correct patch is
+ LC_COLLATE=C
+ export LC_COLLATE
regards, tom lane
Tom Lane wrote: > I saw that, but it seemed a non-problem to me: if the variables have > not been exported then they won't affect the sort program anyway. He probably had LANG, but not LC_ALL, already exported in his environment. So when the shell program writes: LC_ALL=C then sort doesn't see it, because it is not exported, but LANG is still exported with the value he doesn't want. The solution is to export LC_ALL. > I tried to reproduce Nicolai's statement about LC_ALL not being > sufficient, but AFAICT Fedora Core 1 handles this as expected: > > $ cat /etc/redhat-release > Fedora Core release 1 (Yarrow) > $ LANG=en_US LC_ALL=en_GB locale You have both LC_ALL and LANG exported. > What I suspect is that Nicolai's environment supplies an explicit > value for LC_COLLATE, overriding both LC_ALL and LANG. If we want to > be bulletproof against that, then none of the proposals in this > thread are correct, and the correct patch is That's not possible, because LC_ALL overrides everything.
Peter Eisentraut <peter_e@gmx.net> writes:
> Tom Lane wrote:
>> I saw that, but it seemed a non-problem to me: if the variables have
>> not been exported then they won't affect the sort program anyway.
> He probably had LANG, but not LC_ALL, already exported in his
> environment.
Ah, right, that would explain it.
> That's not possible, because LC_ALL overrides everything.
I hadn't realized that, but you seem to be right. Okay, setting
LC_ALL correctly should be sufficient.
regards, tom lane
Tom Lane wrote:
> Peter Eisentraut <peter_e@gmx.net> writes:
> > Tom Lane wrote:
> >> I saw that, but it seemed a non-problem to me: if the variables have
> >> not been exported then they won't affect the sort program anyway.
>
> > He probably had LANG, but not LC_ALL, already exported in his
> > environment.
>
> Ah, right, that would explain it.
>
> > That's not possible, because LC_ALL overrides everything.
>
> I hadn't realized that, but you seem to be right. Okay, setting
> LC_ALL correctly should be sufficient.
OK, new code is:
LC_ALL=C
export LC_ALL
sort tags >/tmp/$$ && mv /tmp/$$ tags
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Thanks to Peter Eisentraut, Bruce Momjian and Tom Lane.
With the second CVS commit by Bruce Momjian it works fine now.
Peter Eisentraut <peter_e@gmx.net> wrote:
> > On second look, the patch is completely wrong anyway, because it
does
> > not export the variables; it depends on the user having exported
them
> > beforehand.
I stand corrected.
Tom Lane <tgl@sss.pgh.pa.us> wrote:
> I saw that, but it seemed a non-problem to me: if the variables have
not
> been exported then they won't affect the sort program anyway.
[...]
> What I suspect is that Nicolai's environment supplies an explicit
value
> for LC_COLLATE, overriding both LC_ALL and LANG. If we want to be
> bulletproof against that, then none of the proposals in this thread
are
> correct, and the correct patch is
>
> + LC_COLLATE=C
> + export LC_COLLATE
In my environment everything but LANG is set to tr_TR:
$ locale
LANG=tr_TR
LC_CTYPE="tr_TR"
LC_NUMERIC="tr_TR"
LC_TIME="tr_TR"
LC_COLLATE="tr_TR"
LC_MONETARY="tr_TR"
LC_MESSAGES="tr_TR"
LC_PAPER="tr_TR"
LC_NAME="tr_TR"
LC_ADDRESS="tr_TR"
LC_TELEPHONE="tr_TR"
LC_MEASUREMENT="tr_TR"
LC_IDENTIFICATION="tr_TR"
LC_ALL=
$
Method you suggested:
LC_COLLATE=C
export LC_COLLATE
works fine too.
Bruce Momjian <pgman@candle.pha.pa.us> wrote:
>
> OK, new code is:
>
> LC_ALL=C
> export LC_ALL
> sort tags >/tmp/$$ && mv /tmp/$$ tags
It works as expected. Thanks a lot.
Best regards,
Nicolai Tufar