comparison src/keymap.c @ 24394:8159c8cb33cc

(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.
author Kenichi Handa <handa@m17n.org>
date Wed, 24 Feb 1999 02:31:57 +0000
parents 4c423f69142b
children 340189fd508f
comparison
equal deleted inserted replaced
24393:fcaabeb8aece 24394:8159c8cb33cc
1843 *p++ = 'D'; 1843 *p++ = 'D';
1844 *p++ = 'E'; 1844 *p++ = 'E';
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;
1871 } 1883 }
1872 1884
1892 charset = 0; 1904 charset = 0;
1893 else 1905 else
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 {
1900 /* Handle a generic character. */ 1913 /* Handle a generic character. */
1901 Lisp_Object name; 1914 Lisp_Object name;