Экранная команда os x,'.screenrc', termcap

Мне нужна помощь в концептуальной области, окружающей:

  • / USR / бен / экран,
  • ~ /.Screenrc,
  • TERMCAP

Моя цель: создать "правильно" отформатированный файл журнала через "экран".

Симптом: в файле журнала содержатся сотни байтов возврата каретки [т.е. (\015) или (\r) ]. Я хотел бы заменить каждый байт возврата каретки байтом перевода строки [т.е. (\012) или (\n)].

Мой подход: я создал файл: ~/.screenrc и добавил к нему строку 'termcap' с надеждой перехватить входящие байты и преобразовать байты возврата каретки в байты перевода строки ДО того, как они будут записаны в файл журнала. Я перебрал девять различных синтаксических форм моего запроса. Ни один из них не имел желаемого эффекта (см. Ниже для всех девяти форм).

Мои вопросы:

  • Может ли моя цель быть достигнута с моим подходом?
  • Если да, какие изменения мне нужно сделать, чтобы достичь своей цели?
  • Если нет, какую альтернативу я должен реализовать?
  • Нужно ли смешивать в команде 'stty'?
  • Если да, то как?

Примечание: я могу создать "правильно" отформатированный файл, используя файл журнала в качестве входных данных для "tr":

   $  /usr/bin/tr  '\015'  '\012'  <screenlog.0  | head
   <5 BAUD ADDRESS: FF>  
   <WAITING FOR 5 BAUD INIT>  
   <5 BAUD ADDRESS: 33>  
   <5 BAUD INIT: OK>  
   Rx: C233F1 01 00                    @ 254742 ms  
   Tx: 86F110 41 00 BE 1B 30 13        @ 254753 ms  
   Tx: 86F118 41 00 88 18 00 10        @ 254792 ms  
   Tx: 86F128 41 00 80 08 00 10        @ 254831 ms  
   Rx: C133F0 3E                       @ 255897 ms  
   Tx: 81F010 7E                       @ 255903 ms  
   $  

Файл журнала 'screen' ( ~/screenlog.0) создается с помощью следующей команды:

$ screen -L /dev/tty.usbserial-000014FA  115200

где:

$ ls -dl /dev/*usb*
crw-rw-rw-  1 root  wheel   17,  25 Jul 21 19:50 /dev/cu.usbserial-000014FA  
crw-rw-rw-  1 root  wheel   17,  24 Jul 21 19:50 /dev/tty.usbserial-000014FA  
$  
$  
$ ls -dl ~/.screenrc
-rw-r--r--  1 scottsmith  staff  684 Jul 22 12:28 /Users/scottsmith/.screenrc 

$ cat ~ /.screenrc

 #termcap         xterm*          'XC=B%,\015\012'          #  01  no effect  
 #termcap         xterm*          'XC=B%\E(B,\015\012'      #  02  no effect  
 #termcap         xterm*          'XC=B\E(%\E(B,\015\012'   #  03  no effect  
 #terminfo        xterm*          'XC=B%,\015\012'          #  04  no effect  
 #terminfo        xterm*          'XC=B%\E(B,\015\012'      #  05  no effect  
 #terminfo        xterm*          'XC=B\E(%\E(B,\015\012'   #  06  no effect  
 #termcapinfo     xterm*          'XC=B%,\015\012'          #  07  no effect  
 #termcapinfo     xterm*          'XC=B%\E(B,\015\012'      #  08  no effect  
  termcapinfo     xterm*          'XC=B\E(%\E(B,\015\012'   #  09  no effect  
$  
$ echo $TERM  

xterm-256color  

$ echo $SCREENRC  

$ ls -dl /usr/lib/terminfo/?/*  
ls: /usr/lib/terminfo/?/*: No such file or directory  
$ ls -dl /usr/lib/terminfo/*  
ls: /usr/lib/terminfo/*: No such file or directory  
$ ls -dl /etc/termcap  
ls: /etc/termcap: No such file or directory  
$ ls -dl /usr/local/etc/screenrc  
ls: /usr/local/etc/screenrc: No such file or directory  
$  

система:

  • MacBook Pro (17 дюймов, середина 2010 г.)
  • Процессор 2,53 ГГц Intel Core i5
  • Память 8 ГБ 1067 МГц DDR3
  • Графика NVIDIA GeForce GT 330M 512 МБ
  • OS X Yosemite Версия 10.10.4

Экран (1) Страница руководства Mac OS X: (возможный соответствующий контент):

ПЕРЕВОД ХАРАКТЕРА

Screen имеет мощный механизм для перевода символов в произвольные строки в зависимости от текущего шрифта и типа терминала. Используйте эту функцию, если вы хотите работать с общим стандартным набором символов (скажем, ISO8851-latin1) даже на терминалах, которые разбрасывают более необычные символы на нескольких страницах шрифтов на национальном языке.

Syntax: XC=<charset-mapping>{,,<charset-mapping>}  

<charset-mapping> := <designator><template>{,<mapping>}  

<mapping>         := <char-to-be-mapped><template-arg> 

Вещи в фигурных скобках могут повторяться любое количество раз. Экран A рассказывает, как сопоставить символы в шрифте ("B": Ascii, "A": UK, "K": немецкий и т. Д.) Со строками. Каждый описывает, в какую строку будет переведен один символ. Используется шаблонный механизм, так как в большинстве случаев коды имеют много общего (например, строки для переключения на другую кодировку и от нее). Каждое вхождение '%' в заменяется указанным вместе с символом. Если ваши строки совсем не похожи, то используйте "%" в качестве шаблона и поместите полную строку в. Был добавлен механизм цитирования, чтобы можно было использовать настоящий "%". Символ "\" заключает в кавычки специальные символы "\", "%" и ",". Вот пример: termcap hp700 'XC=B\E(K%\E(B,\304[,\326\\,\334]') Этот экран показывает, как перевести ISOlatin1 (кодировку 'B') в верхний регистр umlaut символы на терминале hp700, который имеет немецкую кодировку. '\304' преобразуется в '\E(K[\E(B' и т. д.). Обратите внимание, что эта строка анализируется три раза до построения внутренней справочной таблицы, поэтому для создания единственного символа "\" необходимо много цитат. Еще одно расширение было добавлено для большей эмуляции: если отображение переводит символ "%" без кавычек, он будет отправляться на терминал всякий раз, когда экран переключается на соответствующий. в особом случае предполагается, что шаблон является просто "%", потому что последовательность переключателей charset и сопоставления символов обычно имеют мало общего. В этом примере показано одно использование расширения: termcap xterm 'XC=K%,%\E(B,[\304,\\\326,]\334'Здесь часть немецкой ('K') кодировки эмулируется на xterm. Если экран должен измениться на кодировку' K ', '\E(B'будет отправлено на терминал, то есть кодировку ASCII я используется вместо Шаблон представляет собой просто "%", поэтому сопоставление простое: "[" в "\ 304", "\" в "\ 326" и "]" в "\ 334".

1 ответ

Раздел о переводе символов описывает функцию, которая не связана с ведением журнала. Это говорит screen как использовать управляющие последовательности ISO-2022 для печати специальных символов на терминале. В примере страницы руководства

termcap xterm 'XC=K%,%\E(B,[\304,\\\\\326,]\334'

это говорит screen послать escape(B (притвориться, что он переключает терминал на набор символов "K"), когда ему нужно напечатать любой из [, \ или ]. От руки (ссылаясь на последовательности управления XTerm), рассуждения в примере кажутся неясными:

  • xterm обрабатывает набор символов "K" (немецкий)
  • набор символов "B" - US-ASCII
  • Предполагая, что набор символов "B" фактически отображается как ISO-8859-1, эти три символа - Ä, Ö и Ü (что является правдоподобным использованием немецкого языка для печати некоторых распространенных умлаутов).

Вместо того, чтобы обрабатываться этой функцией, screenВ логах ожидается запись оригинальных символов, отправленных на терминал - до перевода.

Другие вопросы по тегам