Лучший дистрибутив для программирования [дубликат]

Знак вопроса в квадрате - это символ замены Unicode. Консоль Linux напечатает это в двух случаях:

  • символ не в текущем загруженном шрифте (512 глифов) или
  • в консоли включена функция управления отображением.

Последний уже давно присутствует в ядре, как видно из этой ссылки на console.c в 2.2.26 , которая имеет соответствующий комментарий:

1869                 /* If the original code was a control character we
1870                  * only allow a glyph to be displayed if the code is
1871                  * not normally used (such as for cursor movement) or
1872                  * if the disp_ctrl mode has been explicitly enabled.
1873                  * Certain characters (as given by the CTRL_ALWAYS
1874                  * bitmap) are always displayed as control characters,
1875                  * as the console would be pretty useless without
1876                  * them; to display an arbitrary font position use the
1877                  * direct-to-font zone in UTF-8 mode.
1878                  */

и устанавливается любым из две escape-последовательности :

1051                         case 11: /* ANSI X3.64-1979 (SCO-ish?)
1052                                   * Select first alternate font, lets
1053                                   * chars < 32 be displayed as ROM chars.
1054                                   */
1055                                 translate = set_translate(IBMPC_MAP,currcons);
1056                                 disp_ctrl = 1;
1057                                 toggle_meta = 0;
1058                                 break;
1059                         case 12: /* ANSI X3.64-1979 (SCO-ish?)
1060                                   * Select second alternate font, toggle
1061                                   * high bit before displaying as ROM char.
1062                                   */
1063                                 translate = set_translate(IBMPC_MAP,currcons);
1064                                 disp_ctrl = 1;
1065                                 toggle_meta = 1;
1066                                 break;

и сбрасывают третьим :

1040                         case 10: /* ANSI X3.64-1979 (SCO-ish?)
1041                                   * Select primary font, don't display
1042                                   * control chars if defined, don't set
1043                                   * bit 8 on output.
1044                                   */
1045                                 translate = set_translate(charset == 0
1046                                                 ? G0_charset
1047                                                 : G1_charset,currcons);
1048                                 disp_ctrl = 0;
1049                                 toggle_meta = 0;
1050                                 break;

Последний (если TERM - это linux ) можно записать как

tput rmpch

с помощью этой функции:

   exit_pc_charset_mode      rmpch    S3   Exit PC character
                                           display mode

или

tput sgr0

, но не , команды reset или stty .

Дополнительная литература:

13
13.04.2017, 15:36
0 ответов

Теги

Похожие вопросы