Mercurial > emacs
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; |
