Что такое код ncurses_use_extended_names

Что такое код ncurses_use_extended_names

(PHP 4 >= 4.1.0, PHP 5)

ncurses_use_extended_names — Control use of extended names in terminfo descriptions

Description int ncurses_use_extended_names ( bool flag )

This function is EXPERIMENTAL . The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Warning

This function is currently not documented; only the argument list is available.

Что такое код ncurses_use_extended_names

ncurses_use_extended_names — Control use of extended names in terminfo descriptions

Description int ncurses_use_extended_names ( bool flag)

Warning

This function is EXPERIMENTAL . The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Warning

This function is currently not documented; only the argument list is available.

Что такое код ncurses_use_extended_names

const char * curses_version(void);
int use_extended_names(bool enable);

DESCRIPTION

curses_version

Use curses_version() to get the version number, including patch level of the library, e.g., 5.0.19991023

use_extended_names

The use_extended_names() function controls whether the calling application is able to use user-defined or nonstandard names which may be compiled into the terminfo description, i.e., via the terminfo or termcap interfaces. Normally these names are available for use, since the essential decision is made by using the -x option of tic to compile extended terminal definitions. However you can disable this feature to ensure compatibility with other implementations of curses.

RETURN VALUE

curses_version returns a pointer to static memory; you should not free this in your application.

use_extended_names returns the previous state, allowing you to save this and restore it.

ncurses перехватывает расширенные ключи (Control-left, Shift-Function и т. д.)

Я пытаюсь перехватить Control-Left, Shift-F10 и т. Д. В моих программах ruby. Обычно, используя просто getch, я получаю список целых чисел, таких как 27,91,50,50,126, который работает. Однако я боюсь, что они могут зависеть от системы или терминала. После поиска в Google я обнаружил use_extended_names, tigetstr и т. Д. Я нашел C-программу, которая использует эти коды для обнаружения кодов клавиш во время выполнения (автор Thomas Dickey). Я запускаю его, и кажется, что он обнаруживает расширенные ключи, но затем getch в той же программе все еще дает мне обычный список типов, таких как [27,91,53,68] для C-left, который я получаю в любом случае. Я ожидаю получить одно возвращаемое значение, которое оно упоминает.

Что мне не хватает?

Вот вывод, когда я нажимаю Control-left:

Разве я не должен получить только 540?

Как ни странно, все коды показывают 0 при работе под TERM = screen. Выше TERM = xterm. (Я на OSX использую Терминал)

2 ответа

Curses был разработан в то время, когда люди действительно делали модификаторы в терминалах. Его модель обработки ключей — фактически плоское перечисление значений, и она не легко обрабатывает произвольные комбинации ключ + модификатор.

Чтобы решить эту проблему лучше, я написал libtermkey. Возможно, вам удастся использовать это вместо этого.

Это библиотека C, хотя она имеет привязки как Perl, так и Python. Я полагаю, что кто-то должен был бы быть в состоянии довольно легко создать некоторые привязки для Ruby.

ncurses сам по себе не знает о модификаторах control, shift, meta и alt, потому что он знает только о символах . Модификаторы — это то, о чем знают определенные терминалы. Некоторые терминалы могут кодировать модификаторы клавиатуры в символах, которые они отправляют на хост. xterm, например, может сделать это.

terminfo (и termcap) имеют предопределенные списки специальных клавиш (таких как клавиши курсора, функциональные клавиши), включая небольшое количество модифицированных специальных клавиш (например, сдвинутая стрелка вправо). Предопределенные ключи имеют четко определенные имена в описании терминала, а также имена KEY_ xxx в заголовке KEY_ . ncurses предоставляет два способа расширения этих списков специальных ключей.

  • опция -x tic с соответствующей функцией use_extended_names (которая определяет имя для данной входной строки).
  • функция define_key (которая назначает код, возвращаемый getch для заданной входной строки).

База данных терминала ncurses предоставляет наиболее полезные определения для модифицированных специальных клавиш, фокусируясь на клавишах курсора и клавиатуре редактирования. Есть несколько проблем с этим:

  • база данных терминала не предоставляет все определения, потому что определения переносимых terminfo ограничены 4096 байтами. Если бы не было ограничений на размер, то, возможно, можно было бы создать полные таблицы для каждой (буквально) тысячи комбинаций настроек ресурсов, связанных с клавиатурой xterm.
  • некоторые терминалы, которые устанавливают для TERM значение xterm , не отправляют те же строки, что и xterm. (На самом деле, большинство отличается, хотя некоторые являются подмножествами, а не просто различаются).
  • для данного примера строка в terminfo будет \E[5D , которая, по-видимому, не является строкой xterm. (OP указывал, что это OSX Terminal несколько лет назад — каждый выпуск OSX включает изменения в Terminal, но ни один выпуск OSX Terminal пока не соответствует точно xterm). Причина, по которой он не выглядит как xterm, заключается в том, что модификатор (5) появляется в первой позиции, а не во второй. Xterm устарел, что в 2002 году ( патч № 167 ).
  • функциональные клавиши упоминаются в вопросе без уточнения. В ncurses используется соглашение о назначении (почти стандартных) 12 функциональных клавиш клавиатуры ПК с 4 наиболее полезными комбинациями модификаторов shift и control для получения 48 функциональных клавиш. В terminfo есть 60 предопределенных функциональных клавиш; когда есть дополнительные известные строки для них, оставшаяся дюжина заполняется до предела.

Так много для создания предопределенных таблиц с использованием terminfo (с проблемами размера и терминалов, которые претендуют на что-то другое). Функция define_key не имеет ограничений по размеру и давно доступна для приложений, которые имеют специальные потребности. Например, можно использовать его для построения таблицы путем объединения наиболее распространенных вариантов наиболее распространенных терминалов.

iOS Manual Pages

  • Table of Contents
  • Download Sample Code
Warning
ADC Home>Reference Library> Reference > Mac OS X > Mac OS X Man Pages

This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).

Sending feedback…

We’re sorry, an error has occurred.

Please try submitting your feedback later.

Thank you for providing feedback!

Your input helps improve our developer documentation.

Новые книги

Вы занимаетесь продажами? Тогда вам наверняка знакомо чувство отчаяния из-за непредсказуемого поведения ваших клиентов или ваших собственных действий, оказавшихся ошибочными. Хотя вы, казалось бы, все просчитали.

Дэвид Сэндлер начал карьеру в отделе продаж, будучи разорившимся бизнесменом. Спустя некоторое время он ушел, чтобы… открыть собственную компанию по обучению технике продаж. Очень скоро Сэндлер приобрел широкую известность, а 49 неочевидных, провокационных, но действенных «правил Сэндлера» вошли в арсенал многих успешных продавцов.

Книга адресована всем, кто продает – товары, услуги, мысли, идеи. Постоянно или время от времени.

Harvard Business Review – главный деловой журнал в мире. Представляем новый выпуск серии «HBR: 10 лучших статей», посвященный проблемам стратегического маркетинга.

Если вы недовольны результатами работы вашего маркетингового отдела и хотите улучшить показатели продаж компании, эта книга для вас. Из сотен статей журнала, посвященных стратегическому маркетингу, редакторы HBR отобрали самые полезные и актуальные на сегодняшний день. Из них вы узнаете, каковы преимущества клиентоориентированной стратегии, как с максимальной эффективностью использовать привязанность покупателей к бренду на протяжении всей их жизни, почему так важно учитывать специфику женской психологии и, самое главное: как выстроить правильную стратегию бренда и перестать выбрасывать деньги на ветер.

Что такое код ncurses_use_extended_names

ncurses_use_extended_names — Control use of extended names in terminfo descriptions

Description int ncurses_use_extended_names ( bool flag)

This function is EXPERIMENTAL . The behaviour of this function, the name of this function, and anything else documented about this function may change without notice in a future release of PHP. Use this function at your own risk.

Warning

This function is currently not documented; only the argument list is available.

Ncurses захват расширенных клавиш (Control-left, Shift-Function и т.д.)

Я пытаюсь захватить Control-Left, Shift-F10 и т.д. в моих рубиновых программах. Обычно, используя только getch, я получаю список ints, такой как 27,91,50,50,126, который работает. Однако я боюсь, что они могут быть системными или терминальными. После googling я нашел о use_extended_names, tigetstr и т.д. Я нашел программу на C, используя те, которые обнаруживают коды ключей во время выполнения (Томас Дики). Я запускаю его и, похоже, открывает расширенные ключи, но тогда getch в той же программе по-прежнему дает мне обычный список ints, например [27,91,53,68] для C-left, который я получаю в любом случае. Я ожидаю получить одно возвращаемое значение, которое он упоминает.

Что мне не хватает?

Вот результат, когда я нажимаю Control-left:

Должен ли я получить только 540?

Как ни странно, все коды показывают 0 при запуске под экраном TERM =. Вышеуказанное значение TERM = xterm. (Я на OSX, используя терминал)

Curses был разработан в то время, когда люди действительно делали модификаторы в терминалах. Его ключевая модель обработки фактически представляет собой плоское перечисление значений и не просто обрабатывает комбинации клавиш + +.

Чтобы решить эту проблему лучше, я написал libtermkey, вам может быть больше повезло с этим.

Это библиотека C, хотя она имеет как привязки Perl, так и Python. Я бы предположил, что кто-то должен также легко создать некоторые привязки Ruby для него.

ncurses сам по себе не знает об управляющих, сдвиговых, мета- и альт-модификаторах, поскольку он знает только о персонажах. Модификаторы — это то, о чем знают определенные терминалы. Некоторые терминалы могут кодировать модификаторы клавиатуры в символах, которые они отправляют на хост. xterm, например, может это сделать.

terminfo (и termcap) имеют предопределенные списки специальных клавиш (таких как клавиши курсора, функциональные клавиши), в том числе небольшое количество модифицированных специальных клавиш (например, сдвинутая стрелка вправо). Предопределенные ключи имеют четко определенные имена в описании терминала, а также KEY_ xxx имена в заголовке curses.h . ncurses предоставляет два способа расширения этих списков специальных клавиш

  • параметр -x tic с соответствующим use_extended_names (которая определяет имя для данной входной строки).
  • функция define_key (которая присваивает код, возвращаемый getch для данной строки ввода).

База данных терминалов ncurses предоставляет наиболее полезные определения для модифицированных специальных клавиш, фокусируясь на курсорных клавишах и клавиатуре редактирования. Есть несколько проблем с этим:

  • база данных терминалов не содержит всех определений, поскольку переносные определения terminfo ограничены 4096 байтами. Если бы не было предела по размеру, то, возможно, можно было бы создать полные таблицы для каждой из (в буквальном смысле) тысяч комбинаций xterm-настроек ресурсов, связанных с клавиатурой.
  • некоторые терминалы, которые устанавливают TERM в xterm , не отправляют те же строки, что и xterm. (На самом деле, большинство отличается, хотя некоторые из них являются подмножествами, а не просто разными).
  • для приведенного примера, строка в terminfo будет \E[5D , которая не является одной из xterm. (OP указала, что это OSX Terminal, из нескольких лет назад — каждый выпуск OSX включает изменения в Terminal, но ни один выпуск OSX Terminal точно не соответствует xterm). Причина, по которой это не похоже на xterm, заключается в том, что модификатор (5) появляется в первой позиции, а не во второй. xterm не признает, что в 2002 году (patch # 167). Функциональные клавиши
  • упоминаются в вопросе без специфики. Соглашение, используемое в ncurses, состоит в том, чтобы назначить (почти стандартные) 12 функциональных клавиш ПК-клавиатуры с 4 наиболее полезными комбинациями модификаторов сдвига и управления, чтобы получить 48 функциональных клавиш. В terminfo имеется 60 предопределенных функциональных клавиш; когда для них есть дополнительные известные строки, остальные десятки заполняются до предела.

Так много для создания предопределенных таблиц с использованием terminfo (с проблемами размера и терминалов, которые притворяются чем-то другим). Функция define_key не имеет ограничений по размеру и уже давно доступна для приложений, которые имеют особые потребности. Например, можно было бы использовать его для построения таблицы путем слияния наиболее распространенных вариантов наиболее распространенных терминалов.

C, ncurses, кириллица ? или я чего-то не понимаю или одно из двух

Извиняюсь, я на таких форумах новичок, не уверен как лучше сформулировать свою проблему и реально ли получить помощь от местной публики

Предыстория: у меня огромная прога (учетная система для торговли) созданная на C с нуля еще до эпохи Windows. Потом переделана как консольное приложение Win32, теперь вот есть идея для Linux адаптировать. Фактически только модуль ввода-вывода и требуется переделать.

И вот уже неделю я парюсь с выводом кириллицы. В теории (описания и маны) все понятно очевидно и легко. При выводе латинских букв — тоже все соответствует описанию, как только выводятся кириллические (кодируемые в UTF 2ми байтиками) — какие-то глюки

Стал смотреть тогда дамп экрана (scr_dump) Во-первых, оказалось его размер -8К . т.е. разработчики отводят 4байта на знакоместо. Ну это я понимаю. ОК. 3 знака на код символа UTF + байт цветового атрибута. Ан нет! при выводе кириллицы 4байта отводится на кадый байт кодировки. т.е. 8 байт на символ Но тогда буфер экрана в 8К не хватит, если достаточно много кириллических символов И его таки не хватает На каждой строке экрана корректно выводится 40 кириллических знаков, а не 80 как хотелось бы!

Подозреваю, у меня как-то криво собрана библиотека ncurses, либо она не соответствует UTF кодировке И сразу вдогонку вопрос — может UTF и ни к чему? Вообще-то меня бы вполне устроила кодировка 866 кодовой таблицы.

Новые книги

В ваших руках – хроника успешного маркетингового проекта, реализованного российскими маркетологами в одном из довольно далеких от Москвы регионов. Автор и непосредственный участник описываемых событий Сергей Разуваев предельно откровенно, без всякого «глянца» прослеживает путь проекта от его начала до завершения. Кстати, приемы и «фишки», впервые использованные там, потом успешно применялись в городах-миллионниках.

Эта книга о том, что грамотный, решительный и креативный маркетинг может все или почти все. Она принесет несомненную пользу всем, кто занимается маркетингом, независимо от должности, сферы деятельности и места проживания.

ncurses_use_extended_names

Warning

ncurses_use_extended_names — контролирует использование расширенных имён в описании terminfo.

Описание

int ncurses_use_extended_names (bool flag)

Учебник РНР
НазадВперёд

Эта функция — ЭКСПЕРИМЕНТАЛЬНАЯ. Поведение, имя и всё остальное, что задокументировано для данной функции может быть изменено в будущих релизах РНР без предупреждения. Вы можете использовать эту функцию только на свой страх и риск.

Илон Маск рекомендует:  Что такое код swf_placeobject
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Предупреждение!