# HG changeset patch # User Kenichi Handa # Date 858727894 0 # Node ID 7c008ec99e97556f62882b37a3e4db6abeb29816 # Parent e38cc84db8ab35373a3d12abd265a5be7ae1dcad (describe_vector): Adjusted for the change of CHAR_TABLE_ORDINARY_SLOTS. (push_key_description): A key code less than 512 is printed with 3 octal numbers. Print only entries of valid charsets. diff -r e38cc84db8ab -r 7c008ec99e97 src/keymap.c --- a/src/keymap.c Tue Mar 18 23:31:34 1997 +0000 +++ b/src/keymap.c Tue Mar 18 23:31:34 1997 +0000 @@ -1598,16 +1598,13 @@ else if (c < 128) *p++ = c; else if (c < 256) + *p++ = c; + else if (c < 512) { - if (current_buffer->enable_multibyte_characters) - *p++ = c; - else - { - *p++ = '\\'; - *p++ = (7 & (c >> 6)) + '0'; - *p++ = (7 & (c >> 3)) + '0'; - *p++ = (7 & (c >> 0)) + '0'; - } + *p++ = '\\'; + *p++ = (7 & (c >> 6)) + '0'; + *p++ = (7 & (c >> 3)) + '0'; + *p++ = (7 & (c >> 0)) + '0'; } else { @@ -2564,7 +2561,10 @@ /* A char-table is not that deep. */ wrong_type_argument (Qchar_table_p, vector); - for (i = 0; i < this_level; i++) + /* For multibyte characters, the top level index for + charsets starts from 256. */ + idx[0] = XINT (XVECTOR (elt_prefix)->contents[0]) - 128; + for (i = 1; i < this_level; i++) idx[i] = XINT (XVECTOR (elt_prefix)->contents[i]); complete_char = (CHARSET_VALID_P (idx[0]) @@ -2593,8 +2593,13 @@ for (i = from; i < to; i++) { QUIT; + + if (this_level == 0 + && i >= CHAR_TABLE_SINGLE_BYTE_SLOTS + && !CHARSET_DEFINED_P (i - 128)) + continue; + definition = get_keyelt (XVECTOR (vector)->contents[i], 0); - if (NILP (definition)) continue; /* Don't mention suppressed commands. */ @@ -2681,12 +2686,12 @@ if (multibyte && CHAR_TABLE_P (vector) && CHAR_TABLE_P (definition)) { if (this_level == 0 - && CHARSET_VALID_P (i)) + && CHARSET_VALID_P (i - 128)) { /* Before scanning the deeper table, print the information for this character set. */ insert_string ("\t\tsize, 0); insert (">", 1); }