unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
       [not found] <E1AEH21-00079f-Je@fencepost.gnu.org>
@ 2003-10-28  7:14 ` Kenichi Handa
  2003-10-28 14:21   ` Jesper Harder
  2003-10-29 19:01   ` Richard Stallman
  0 siblings, 2 replies; 12+ messages in thread
From: Kenichi Handa @ 2003-10-28  7:14 UTC (permalink / raw)
  Cc: harder, emacs-devel

In article <E1AEH21-00079f-Je@fencepost.gnu.org>, Richard Stallman <rms@gnu.org> writes:

> can u work on this?
> ------- Start of forwarded message -------
> To: emacs-pretest-bug@gnu.org
> From: Jesper Harder <harder@ifa.au.dk>
> Date: Mon, 27 Oct 2003 04:31:50 +0100
> Subject: `set-locale-environment' bug
[...]
> 1. Start Emacs in a en_US.iso88591 locale:

>    LANG=en_US.iso88591 emacs -q --no-site-file

> 2. Evaluate:

>    (setq standard-display-table nil)

> 3. Evaluating this expression:

>    (set-locale-environment)

> results in the following backtrace:

> Debugger entered--Lisp error: (wrong-type-argument arrayp nil)
>   aset(nil 160 [160])
>   (if (and (>= l 32) (< l 127)) (aset standard-display-table l nil) (aset standard-display-table l (vector l)))
>   (while (<= l h) (if (and ... ...) (aset standard-display-table l nil) (aset standard-display-table l ...)) (setq l (1+ l)))
>   standard-display-8bit(160 255)

Several functions in disp-table.el
(e.g. standard-display-8bit, standard-display-default)
assume that standard-display-table is already a dispaly-table.

I've just added:
    (or standard-display-table
        (setq standard-display-table (make-display-table)))
to all such functions that modify standard-display-table.

> By the way, the node "(elisp)Active Display Table" states that the
> default value for `standard-display-table' is nil.

> This isn't correct since the default value depends on the locale -- it
> is non-nil in the above locale.

Right.  How about writing the info as below?

This variable's value is the default display table, used
whenever a window has no display table and neither does the
buffer displayed in that window.  This variable is usually
@code{nil}, but set to a proper display table when Emacs is
started in such locales that use a single byte character set
(e.g. en_US.iso88591).

---
Ken'ichi HANDA
handa@m17n.org

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28  7:14 ` [harder@ifa.au.dk: `set-locale-environment' bug] Kenichi Handa
@ 2003-10-28 14:21   ` Jesper Harder
  2003-10-28 20:26     ` Eli Zaretskii
  2003-11-10  2:36     ` Kenichi Handa
  2003-10-29 19:01   ` Richard Stallman
  1 sibling, 2 replies; 12+ messages in thread
From: Jesper Harder @ 2003-10-28 14:21 UTC (permalink / raw)
  Cc: rms, emacs-devel

Kenichi Handa <handa@m17n.org> writes:

> I've just added:
>     (or standard-display-table
>         (setq standard-display-table (make-display-table)))
> to all such functions that modify standard-display-table.

Thanks.

>> By the way, the node "(elisp)Active Display Table" states that the
>> default value for `standard-display-table' is nil.
>
> Right.  How about writing the info as below?
>
> This variable's value is the default display table, used whenever a
> window has no display table and neither does the buffer displayed in
> that window.  This variable is usually @code{nil}, but set to a
> proper display table when Emacs is started in such locales that use
> a single byte character set (e.g. en_US.iso88591).

I'm still a bit confused about _why_ the display table should be
non-nil in a single byte locale.

8bit characters like æøå display just fine for me if
`standard-display-table' is nil (both in X and on a console).

-- 
Cheers,
Jesper Harder

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28 14:21   ` Jesper Harder
@ 2003-10-28 20:26     ` Eli Zaretskii
  2003-10-28 23:52       ` Jesper Harder
  2003-11-10  2:36     ` Kenichi Handa
  1 sibling, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2003-10-28 20:26 UTC (permalink / raw)
  Cc: emacs-devel

> From: Jesper Harder <harder@ifa.au.dk>
> Date: Tue, 28 Oct 2003 15:21:59 +0100
> 
> I'm still a bit confused about _why_ the display table should be
> non-nil in a single byte locale.

Because Emacs sets up a few entries in that display table, to match
what most users expect.  For details, see the function
standard-display-european-internal defined on mule-cmds.el.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28 20:26     ` Eli Zaretskii
@ 2003-10-28 23:52       ` Jesper Harder
  2003-10-29  6:39         ` Eli Zaretskii
  0 siblings, 1 reply; 12+ messages in thread
From: Jesper Harder @ 2003-10-28 23:52 UTC (permalink / raw)
  Cc: emacs-devel

"Eli Zaretskii" <eliz@elta.co.il> writes:

>> From: Jesper Harder <harder@ifa.au.dk>
>
>> I'm still a bit confused about _why_ the display table should be
>> non-nil in a single byte locale.
>
> Because Emacs sets up a few entries in that display table, to match
> what most users expect.  For details, see the function
> standard-display-european-internal defined on mule-cmds.el.

Thank you.  Now that I've looked at it, I know that I definitely want
to set `standard-display-table' to nil :-(

Most of what `standard-display-european-internal' does is wrong for my
use, viz.:

 (standard-display-8bit (if (eq window-system 'pc) 128 160) 255)

This controls how eight-bit-control and eight-bit-graphics is
displayed, right?  The presence of those charsets is usually a bug, so
I'd rather be alerted than hiding their presence.

 (aset standard-display-table 146 [39])

I think this is a bit evil.  Lisp, TeX, C, etc. do not consider 146
and 39 to be the same character.  Making them indistinguishable makes
it hard to locate errors caused by the presence of \222 rather than '
in source code.

 (aset standard-display-table ?' [?’])
 (aset standard-display-table ?` [?‘])

This is nice.  But it might do some people a disservice by making them
believe that `foo' actually looks good, while it'll look wrong and
ugly for 99% of all computer users.

-- 
Cheers,
Jesper Harder

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28 23:52       ` Jesper Harder
@ 2003-10-29  6:39         ` Eli Zaretskii
  2003-10-29 16:49           ` Jesper Harder
  0 siblings, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2003-10-29  6:39 UTC (permalink / raw)
  Cc: emacs-devel

> From: Jesper Harder <harder@ifa.au.dk>
> Date: Wed, 29 Oct 2003 00:52:36 +0100
> 
>  (standard-display-8bit (if (eq window-system 'pc) 128 160) 255)
> 
> This controls how eight-bit-control and eight-bit-graphics is
> displayed, right?

No.  window-system's value is `pc' only for the MS-DOS port of
Emacs.  On other systems, this sets up the display of characters
whose 8-bit codepoints are [160..255], i.e., the normal 8-bit region
of Latin-1 characters.

In other words, for a typical Unix or GNU system in the dk locale,
this line instructs Emacs to send the 8-bit codes of Latin-1
characters directly to the terminal, which is what I think you'd want,
since terminals in your locale generally support display of Latin-1
characters.

>  (aset standard-display-table 146 [39])
> 
> I think this is a bit evil.  Lisp, TeX, C, etc. do not consider 146
> and 39 to be the same character.  Making them indistinguishable makes
> it hard to locate errors caused by the presence of \222 rather than '
> in source code.

Then undo that line in your ~/.emacs.  I think most users do want
that, though; the code is based on user experience, IIRC.  In
particular, many mail messages sadly include that character, so
displaying it as \222 would make problems elsewhere.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-29  6:39         ` Eli Zaretskii
@ 2003-10-29 16:49           ` Jesper Harder
  2003-10-29 17:48             ` Eli Zaretskii
  0 siblings, 1 reply; 12+ messages in thread
From: Jesper Harder @ 2003-10-29 16:49 UTC (permalink / raw)
  Cc: emacs-devel

Eli Zaretskii <eliz@elta.co.il> writes:

>> From: Jesper Harder <harder@ifa.au.dk>
>
>>  (standard-display-8bit (if (eq window-system 'pc) 128 160) 255)
>> 
>> This controls how eight-bit-control and eight-bit-graphics is
>> displayed, right?
>
> this sets up the display of characters whose 8-bit codepoints are
> [160..255], i.e., the normal 8-bit region of Latin-1 characters.
>
> In other words, for a typical Unix or GNU system in the dk locale,
> this line instructs Emacs to send the 8-bit codes of Latin-1
> characters directly to the terminal, which is what I think you'd
> want, since terminals in your locale generally support display of
> Latin-1 characters.

I don't understand.  As far as I can tell it makes no difference for
the display of Latin-1 characters.

It does _not_ change the dislay of `M-x list-charset-chars
latin-iso8859-1' in an xterm, the console or in X.

It does, however, change the display of the eight-bit-graphic
"charset".

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-29 16:49           ` Jesper Harder
@ 2003-10-29 17:48             ` Eli Zaretskii
  0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2003-10-29 17:48 UTC (permalink / raw)
  Cc: emacs-devel

> From: Jesper Harder <harder@ifa.au.dk>
> Date: Wed, 29 Oct 2003 17:49:13 +0100
> 
> It does, however, change the display of the eight-bit-graphic
> "charset".

Then perhaps I didn't remember that code correctly.  Sorry.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28  7:14 ` [harder@ifa.au.dk: `set-locale-environment' bug] Kenichi Handa
  2003-10-28 14:21   ` Jesper Harder
@ 2003-10-29 19:01   ` Richard Stallman
  1 sibling, 0 replies; 12+ messages in thread
From: Richard Stallman @ 2003-10-29 19:01 UTC (permalink / raw)
  Cc: harder, emacs-devel

    > This isn't correct since the default value depends on the locale -- it
    > is non-nil in the above locale.

    Right.  How about writing the info as below?

    This variable's value is the default display table, used
    whenever a window has no display table and neither does the
    buffer displayed in that window.  This variable is usually
    @code{nil}, but set to a proper display table when Emacs is
    started in such locales that use a single byte character set
    (e.g. en_US.iso88591).

ok.  thanks.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-10-28 14:21   ` Jesper Harder
  2003-10-28 20:26     ` Eli Zaretskii
@ 2003-11-10  2:36     ` Kenichi Handa
  2003-11-10  5:31       ` Eli Zaretskii
  1 sibling, 1 reply; 12+ messages in thread
From: Kenichi Handa @ 2003-11-10  2:36 UTC (permalink / raw)
  Cc: rms, emacs-devel

I'm sorry for this late response on this thread.

In article <m3he1tzblk.fsf@defun.localdomain>, Jesper Harder <harder@ifa.au.dk> writes:
>>>  By the way, the node "(elisp)Active Display Table" states that the
>>>  default value for `standard-display-table' is nil.
>> 
>>  Right.  How about writing the info as below?
>> 
>>  This variable's value is the default display table, used whenever a
>>  window has no display table and neither does the buffer displayed in
>>  that window.  This variable is usually @code{nil}, but set to a
>>  proper display table when Emacs is started in such locales that use
>>  a single byte character set (e.g. en_US.iso88591).

> I'm still a bit confused about _why_ the display table should be
> non-nil in a single byte locale.

> 8bit characters like æøå display just fine for me if
> `standard-display-table' is nil (both in X and on a console).

Actually, the relevant codes were written by someone while I
was too busy to work on Emacs.  So, I myself don't really
understand the underlining idea of those codes.

We must consider these parameters for displaying:
  * multibyte mode or unibyte mode
  * on terminal or on a windowing system
  * on Unix-like system, on MS-DOS, or on MS-Windows.
This yields 8 cases (because some conbinations are invalid).

But, in multibyte-mode, it seems that only MS-DOS case (on
terminal) really requires standard-display-table to be
setup.  That is because, in that case, characters in the
current codepage that are not supported by Emacs are decoded
into eight-bit-control/graphic, and they must be displayed
by the font of the current codepage as is.

Eli, is that right?

---
Ken'ichi HANDA
handa@m17n.org

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-11-10  2:36     ` Kenichi Handa
@ 2003-11-10  5:31       ` Eli Zaretskii
  2003-11-12  2:40         ` Kenichi Handa
  0 siblings, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2003-11-10  5:31 UTC (permalink / raw)
  Cc: harder, emacs-devel

> Date: Mon, 10 Nov 2003 11:36:00 +0900 (JST)
> From: Kenichi Handa <handa@m17n.org>
> 
> But, in multibyte-mode, it seems that only MS-DOS case (on
> terminal) really requires standard-display-table to be
> setup.  That is because, in that case, characters in the
> current codepage that are not supported by Emacs are decoded
> into eight-bit-control/graphic, and they must be displayed
> by the font of the current codepage as is.
> 
> Eli, is that right?

Yes and no.

No, because unsupported characters are not displayed as the current
codepage's glyphs, they are displayed as a special glyph whose value
is in `dos-unsupported-char-glyph'.

Yes, because term/internal.el, the MS-DOS ``internal terminal''
emulator, sets up standard-display-table to display non-ASCII
characters beyond the current codepage, such as Latin-2 for a cp-850
locale, as strings of ASCII characters, see IT-display-table-setup.

I think in the past standard-display-table was used on multibyte
sessions on Unix as well, to map some characters originating from
Microsoft's codepages to printable ASCII chars, but I'm not sure
whether I remember correctly and if so, why was that removed.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-11-10  5:31       ` Eli Zaretskii
@ 2003-11-12  2:40         ` Kenichi Handa
  2003-11-12  6:29           ` Eli Zaretskii
  0 siblings, 1 reply; 12+ messages in thread
From: Kenichi Handa @ 2003-11-12  2:40 UTC (permalink / raw)
  Cc: harder, emacs-devel

In article <9743-Mon10Nov2003073149+0200-eliz@elta.co.il>, "Eli Zaretskii" <eliz@elta.co.il> writes:
>>  But, in multibyte-mode, it seems that only MS-DOS case (on
>>  terminal) really requires standard-display-table to be
>>  setup.  That is because, in that case, characters in the
>>  current codepage that are not supported by Emacs are decoded
>>  into eight-bit-control/graphic, and they must be displayed
>>  by the font of the current codepage as is.
>>  
>>  Eli, is that right?

> Yes and no.

> No, because unsupported characters are not displayed as the current
> codepage's glyphs, they are displayed as a special glyph whose value
> is in `dos-unsupported-char-glyph'.

> Yes, because term/internal.el, the MS-DOS ``internal terminal''
> emulator, sets up standard-display-table to display non-ASCII
> characters beyond the current codepage, such as Latin-2 for a cp-850
> locale, as strings of ASCII characters, see IT-display-table-setup.

Thank you for the explanation.  It seems that all settings
about display table and terminal coding system is done by
dos-codepage-setup via term-setup-hook.  So, mule-cmds.el
should do nothing for them on DOS, right?

> I think in the past standard-display-table was used on multibyte
> sessions on Unix as well, to map some characters originating from
> Microsoft's codepages to printable ASCII chars, but I'm not sure
> whether I remember correctly and if so, why was that removed.

I think we must think over making the code in mule-cmds
clearer now.  The current code is quite confusing and it
seems that there are bugs.

For instance, at starup time,
set-display-table-and-terminal-coding-system is called in
this way now:

command-line ->
  set-local-environment ->
    set-language-environment ->
      set-display-table-and-terminal-coding-system (in unibyte mode only) ->
    set-display-table-and-terminal-coding-system (in multibyte mode only)

And set-display-table-and-terminal-coding-system calls
standard-display-european-internal in a lang. env. that has
`unibyte-display' setting, and resets standard-display-table
for 8-bit chars otherwise.

So, for instance, if we start in some European locale in
multibyte mode, standard-display-european-internal is
called, but when we switch to Japanese lang. env., the
standard-display-table is not reset.  On the other hand, if
we start in Japanese locale in multibyte mode, even if we
switch to some European locale,
standard-display-european-internal is not called.

But I need more time to study the current code to give a
concrete proposal for solving it.

---
Ken'ichi HANDA
handa@m17n.org

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [harder@ifa.au.dk: `set-locale-environment' bug]
  2003-11-12  2:40         ` Kenichi Handa
@ 2003-11-12  6:29           ` Eli Zaretskii
  0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2003-11-12  6:29 UTC (permalink / raw)
  Cc: harder, emacs-devel

> Date: Wed, 12 Nov 2003 11:40:15 +0900 (JST)
> From: Kenichi Handa <handa@m17n.org>
> 
> It seems that all settings about display table and terminal coding
> system is done by dos-codepage-setup via term-setup-hook.

Yup.

> So, mule-cmds.el should do nothing for them on DOS, right?

I'm not sure.  First, dos-cpNNN-setup still calls
set-language-environment (and the user could theoretically set some
language environment manually).  standard-display-european-internal
could also be called in some unexpected way, even on DOS.  So
mule-cmds.el shouldn't do anything that's wrong for the DOS port; this
the DOS-specific code in standard-display-european-internal and in
set-language-environment.  We could, of course, move the DOS-specific
parts to term/internal.el so that mule-cmds.el is cleaner.

> I think we must think over making the code in mule-cmds
> clearer now.  The current code is quite confusing and it
> seems that there are bugs.

I wouldn't be surprised, given the amount of changes that went under
the bridge since that code was written.

> So, for instance, if we start in some European locale in
> multibyte mode, standard-display-european-internal is
> called, but when we switch to Japanese lang. env., the
> standard-display-table is not reset.  On the other hand, if
> we start in Japanese locale in multibyte mode, even if we
> switch to some European locale,
> standard-display-european-internal is not called.

I see how this happens (set-display-table-and-terminal-coding-system
is called in the multibyte mode from set-locale-environment, not from
set-language-environment), but I'm not 100% sure this is a bug.  I
think we need to discuss the meaning of changing the language
environment without switching the locale.  When would a user want to
do that, and what should Emacs do to adapt itself to such a situation?

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2003-11-12  6:29 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <E1AEH21-00079f-Je@fencepost.gnu.org>
2003-10-28  7:14 ` [harder@ifa.au.dk: `set-locale-environment' bug] Kenichi Handa
2003-10-28 14:21   ` Jesper Harder
2003-10-28 20:26     ` Eli Zaretskii
2003-10-28 23:52       ` Jesper Harder
2003-10-29  6:39         ` Eli Zaretskii
2003-10-29 16:49           ` Jesper Harder
2003-10-29 17:48             ` Eli Zaretskii
2003-11-10  2:36     ` Kenichi Handa
2003-11-10  5:31       ` Eli Zaretskii
2003-11-12  2:40         ` Kenichi Handa
2003-11-12  6:29           ` Eli Zaretskii
2003-10-29 19:01   ` Richard Stallman

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).