aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKenichi Handa1999-02-24 02:31:57 +0000
committerKenichi Handa1999-02-24 02:31:57 +0000
commit9fb7129305282105e748b41d7c23ff0d319a2e73 (patch)
treeac2ee7a6c62038dde1cf26c7b5af450d11b5b1fa /src
parent75c44f31defb196c1920a39ae79cf5a843b72bbf (diff)
downloademacs-9fb7129305282105e748b41d7c23ff0d319a2e73.tar.gz
emacs-9fb7129305282105e748b41d7c23ff0d319a2e73.zip
(push_key_description): If enable-multibyte-characters
is non-nil, try to convert unibyte character to multibyte. For invalid multibyte character, show all bits by octal form. (Fsingle_key_description): Check the varidity of charset for a generic character.
Diffstat (limited to 'src')
-rw-r--r--src/keymap.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/src/keymap.c b/src/keymap.c
index caf4300187f..865e8dd3202 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -1845,26 +1845,38 @@ push_key_description (c, p)
1845 *p++ = 'L'; 1845 *p++ = 'L';
1846 } 1846 }
1847 else if (c == ' ') 1847 else if (c == ' ')
1848 { 1848 {
1849 *p++ = 'S'; 1849 *p++ = 'S';
1850 *p++ = 'P'; 1850 *p++ = 'P';
1851 *p++ = 'C'; 1851 *p++ = 'C';
1852 } 1852 }
1853 else if (c < 128) 1853 else if (c < 128)
1854 *p++ = c; 1854 *p++ = c;
1855 else if (c < 512)
1856 {
1857 *p++ = '\\';
1858 *p++ = (7 & (c >> 6)) + '0';
1859 *p++ = (7 & (c >> 3)) + '0';
1860 *p++ = (7 & (c >> 0)) + '0';
1861 }
1862 else 1855 else
1863 { 1856 {
1864 unsigned char work[4], *str; 1857 if (! NILP (current_buffer->enable_multibyte_characters))
1865 int i = CHAR_STRING (c, work, str); 1858 c = unibyte_char_to_multibyte (c);
1866 bcopy (str, p, i); 1859
1867 p += i; 1860 if (NILP (current_buffer->enable_multibyte_characters)
1861 || SINGLE_BYTE_CHAR_P (c)
1862 || ! char_valid_p (c, 0))
1863 {
1864 int bit_offset;
1865 *p++ = '\\';
1866 /* The biggest character code uses 19 bits. */
1867 for (bit_offset = 18; bit_offset >= 0; bit_offset -= 3)
1868 {
1869 if (c >= (1 << bit_offset))
1870 *p++ = ((c & (7 << bit_offset)) >> bit_offset) + '0';
1871 }
1872 }
1873 else
1874 {
1875 unsigned char work[4], *str;
1876 int i = CHAR_STRING (c, work, str);
1877 bcopy (str, p, i);
1878 p += i;
1879 }
1868 } 1880 }
1869 1881
1870 return p; 1882 return p;
@@ -1894,6 +1906,7 @@ Control characters turn into C-whatever, etc.")
1894 SPLIT_NON_ASCII_CHAR (without_bits, charset, c1, c2); 1906 SPLIT_NON_ASCII_CHAR (without_bits, charset, c1, c2);
1895 1907
1896 if (charset 1908 if (charset
1909 && CHARSET_DEFINED_P (charset)
1897 && ((c1 >= 0 && c1 < 32) 1910 && ((c1 >= 0 && c1 < 32)
1898 || (c2 >= 0 && c2 < 32))) 1911 || (c2 >= 0 && c2 < 32)))
1899 { 1912 {