2014-02-17 2 views
2

직렬 응용 프로그램을 만들 때 pyserial을 사용하고 있습니다. 나는 CTRL + CTRL + E (각각 라인의 시작과 끝으로 이동)에 대한 ASCII 또는 ANSI 이스케이프 시퀀스를 찾고 있어요. 어디서나 이스케이프 코드를 찾을 수없는 것 같습니다. 누구든지 코드를 나열하는 리소스를 알고 있습니까? CTRL + CTRL + E 라인 제어 키의 끝 라인과 커서의 시작으로 꽤 보편적 커서 것으로 보인다. 나는 이스케이프 시퀀스가 ​​존재한다고 믿어야한다.직렬 ctrl + 이스케이프 시퀀스

의견을 보내 주시면 대단히 감사하겠습니다.

+0

'A'-0x40' a.k.a.'0x01' ... – twalberg

+0

어떤 종류의 시리얼 장치입니까? ANSI 이스케이프, 또는'readline' 스타일 편집 등을 지원한다고 생각하는 이유는 무엇입니까? 또는 사용자 입력을 직렬 장치 등으로 보내기 전에 편집하려고합니까? – abarnert

답변

3

ASCII 문자도 ANSI 제어 코드도 실제로는 CTRL + 이라는 것을 정의하지 않습니다.

그러나 ASCII 제어 문자 0-31 (공식적으로 NUL에서 US까지의 이름이 있음)은 인쇄 가능한 문자 64-95의 "제어 버전"으로 전통적으로 매핑됩니다. 따라서 0은 ^, 1은^A, 2는^B 등입니다.

ASCIIcontrol character 위키 피 디아 페이지에 대한 자세한 정보를 제공합니다.

그래서^A는 1이고,^E 한편 제


이다

CTRL은 + CTRL + E 될 것 라인의 시작과 커서 제어 키의 끝에 꽤 보편적 인 커서.

그들은 그렇게 보편적이지 않습니다. 이것들은 많은 유닉스 터미널 에뮬레이터와 유닉스 기반의 GUI 응용 프로그램 (그리고 CLI 편집 라이브러리 인 libreadline과 텍스트 위젯 Qt과 같은 것들)이 관습에 따라 지원하는 "기본 이맥스 제어 키"의 일부입니다. 그러나 DOS 프롬프트 나 Microsoft Word에서^A를 누르면 줄의 시작 부분으로 이동하지 않습니다.

ANSI 호환 터미널에^A 또는^E를 보내는 것만으로 커서가 줄의 시작 또는 끝으로 이동하지 않을 수도 있습니다. 이를 제대로 수행하려면 실제로 해당 ANSI 제어 시퀀스를 보내야합니다. Wikipedia's과 같은 ANSI 이스케이프 코드 목록은 사용 가능한 항목을 표시합니다.

불행히도, 거기에 당신이하려는 일에 정답이 아닙니다. ANSI는 전체 80x25 (또는 무엇이든) 화면을 액세스 가능한 것으로 취급하고, 그 안에 무언가가있는 문자 위치와 비어있는 문자 위치를 구별하지 않습니다. 따라서 "열의 끝"으로 이동할 수는 없습니다. 단, "열 79"를 의미하는 것이 아닙니다.

그리고 찾고있는 것이 0 및 79 열로 이동하는 경우 CHA 명령 ('\x1b[0G''\x1b[79G')을 사용하면 쉽습니다. 그러나 모든 ANSI 터미널이이를 지원하지는 않습니다. 특히, DOS ANSI.SYS와 그것과 호환되도록 만들어진 것은 그것을 무시할 것입니다.

+0

정답입니다. CTRL + A는 \ x01, CTRL + E는 \ x05입니다. 나는 Wikipedia 페이지 하단의 링크에서 상당히 포괄적 인 목록을 발견했다. 편의상 여기 [link] (http://ascii-table.com/ansi-escape-sequences.php)가 있습니다. 도와 주셔서 감사합니다! – user3320804

+0

@ user3320804 : 해당 리소스에는 ANSI 명령의 아주 이상한 하위 집합이 있습니다. 그것은 ANSI.SYS, VT100 및 xterm-color에 공통적 인 하위 집합과 비슷합니다 ...하지만 그 정도는 아닙니다. 색상을 사용하지 않고 ANSI.SYS와 다른 기능 (예 : 열 0에서 왼쪽으로 이동하는 기능)을 사용하지 않는다면 가능한 안전하고 휴대 가능한 기능입니다. – abarnert

관련 문제