Alt+화살표 키를 누르면 어떤 문자가 인쇄됩니까?

Alt+화살표 키를 누르면 어떤 문자가 인쇄됩니까?

AltUp를 누르면 A터미널 화면으로 인쇄됩니다. 눌렀다 AltDown가 인쇄해도 B같은 일이 발생합니다 .

내가 아는 다른 캐릭터;

AltLeft= DAltRight=C

이 명령의 목적은 무엇입니까?

답변1

터미널 구성 방법에 따라 입력은 및 키를 Alt+Key순서대로 입력하는 것과 같으므로 ESC 문자( 또는 또는 ) 뒤에 해당 문자 또는 문자 시퀀스가 ​​전송됩니다 .EscKey\e^[\033Key

를 누르면 Up대부분의 터미널 에뮬레이터는 응용 프로그램 키보드 모드에 있는지 여부에 따라 세 문자 정도 \033[A를 보냅니다.\033OA

첫 번째는 터미널에 출력할 때 커서를 위로 이동하는 이스케이프 시퀀스에 해당합니다. 이렇게 하면:

printf '\nfoo\033[Abar\n\n'

이전 줄 다음에 bar쓰여진 것을 볼 수 있습니다. foo이렇게 하면:

stty -echoctl; tput rmkx; read foo

화살표 키를 누르면 커서가 움직이는 것을 볼 수 있습니다.

애플리케이션이 터미널에서 해당 문자 시퀀스를 좋아 zsh하거나 읽으면 terminfo 데이터베이스(함수)를 통해 제 시간에 전송된 이스케이프 시퀀스임을 알기 때문에 이를 "up" 작업으로 해석합니다 .vikcuu1Up

이제 send 와 같은 Alt-Up일부 터미널에는 (예: 또는 ) 에 대한 이스케이프 시퀀스가 ​​오고 , 일부 다른 터미널에서는 등과 같은 키 조합과 함께 사용할 때 이러한 유형의 키에 대해 별도의 이스케이프 시퀀스를 제공하거나 제공합니다.rxvteterm\033Up\033\033[A\033\033OAxtermgnome-terminalAltShiftCtrl

일반적 \033[1;3A으로 에 전송 됩니다 Alt-Up.

터미널로 전송되면 이 시퀀스도 커서를 위쪽으로 이동합니다(두 번째 인수(3)는 무시됩니다). 해당사항이 없습니다건반Alt-Up키이므로 수신 또는 발신 시 전송되는 동일한 시퀀스입니다.응용 키보드 모드.

이제 \033\033[A또는 \033[1;3A, 많은 응용 프로그램은 이러한 시퀀스의 용도를 모릅니다. 이러한 키 조합으로 전송되는 문자를 정의하는 기능이 없기 때문에 terminfo 데이터베이스는 도움이 되지 않습니다.

그들은 순서를 설명하기 위해 최선을 다할 것입니다. 예를 들어 는 이스케이프 시퀀스로 bash해석되며 이에 대해 아무것도 모르므로 아무 작업도 수행하지 않고 . 이 뒤따르며 알려진 일치하는 문자 시퀀스를 찾지 못하는 즉시 읽기를 중지합니다. 이스케이프 시퀀스가 ​​무엇으로 시작하는지 모르기 때문에 해당 시퀀스를 건너뛰고 나머지 부분을 읽고 행 편집기에 삽입합니다.\033[1;3Azsh\033[1;3A

많은 애플리케이션(예 vi: zsh또는 readline기반 애플리케이션( 사용된 수정된 버전 에 주의 )) gdb을 사용하면 임의의 문자 시퀀스에 대한 바인딩을 추가할 수 있습니다.bashbashreadline

예를 들어 다음 과 같이 zsh바인딩할 수 있습니다 .Alt-UpAlt-Down

bindkey '\e[1;3A' history-beginning-search-backward
bindkey '\e[1;3B' history-beginning-search-forward

이는 현재 명령줄부터 현재 커서 위치까지 명령줄 기록을 통해 앞뒤로 검색하므로 이전 명령을 불러오는 데 매우 편리합니다.

답변2

Crtl+를 사용하여 v키보드의 입력 코드를 반환할 수 있습니다. 화살표 키를 사용하여 이 작업을 수행하면 , 및 [[D^[[C^이 표시됩니다 . + 화살표 키에는 기본 바인딩이 없으므로 문자 코드를 개별적으로 인쇄하는 것 같습니다. 그러나 readline 라이브러리 구성 파일의 로컬 버전을 생성하는 경우:[[A^[[BAlt

$ cp /etc/inputrc ~/.inputrc

그리고 한 줄을 추가하세요:

"\e[1;3C": "sometexthere"

+ 에 대한 입력 코드는 어디에 있고 [1;3C(+ 단축키를 사용하기 전처럼 얻을 수 있음) 터미널을 다시 시작하면 + 단축키는 "sometexthere" 텍스트를 반환하고 다른 +화살표 단축키는 문자 반환을 중지합니다.AltCrtlvCrtlAlt

대신 바인딩 가능한 명령을 전달할 수 있습니다.http://www.gnu.org/software/bash/manual/html_node/Bindable-Readline-Commands.html#Bindable-Readline-Commands좋다

"\e[1;3C": unix-line-discard

Crtl+ (행 삭제)와 u동일한 효과 가 있습니다 .

자세한 내용을 보려면 여기를 클릭하세요:http://cnswww.cns.cwru.edu/php/chet/readline/readline.html

답변3

Alt키는 일반적으로 다음과 같이 사용됩니다.수정자. 커서 키와 기능 키가 호출됩니다.특수 키여러 문자를 보낼 수 있고 전송된 문자가 변경될 수 있기 때문입니다.

예를 들어 일부 사용자는 키를 bash누르면 Alt이스케이프 문자가 앞에 붙은 키가 전송될 것이라고 기대합니다. 레코드의 "메타" 기능(참조terminfo(5))는 여덟 번째 비트를 처리합니다.

터미널에 Shift 키 역할을 하는 "metakey"가 있고 전송된 문자의 비트 8을 설정하는 경우 이 사실은 다음 명령으로 표현할 수 있습니다.km. 그렇지 않으면 소프트웨어는 비트 8이 패리티 비트라고 가정하고 일반적으로 지워집니다. 문자열이 존재하는 경우 다음으로 변환될 수 있습니다."메타 패턴" 열림과 닫힘은 다음과 같이 표현될 수 있습니다.smm그리고rmm.

bash이것은 또한 알려져 있습니다 (참조ncurses FAQ), 그러나 이 기능에 관심이 있는 사용자는 거의 없습니다. 그럼에도 불구하고 Alt메타 모드가 꺼진 경우에도 "메타"라고 불리는 데 익숙합니다. rxvt와 xterm은 (적어도) 1990년대 초반부터 이 기능을 사용해 왔습니다.

다른 사용자( xterm기능이 도입된 이후패치 #94, 1999) 수정자 정보는 특수 키가 보내는 문자 시퀀스의 매개변수로 인코딩될 것으로 예상할 수 있습니다. XTerm의 문서에서는 이러한 수정된 키를 다음과 같이 지칭합니다."PC 스타일"이를 구별하는 기능 키"VT220 스타일"(수정자 없음). 수정되지 않은 커서 키가 전송될 수 ESC[A있지만범위, 예를 들어 ESC[5A어떤 애플리케이션이~해야 한다5번 반복해서 이해하세요. xterm첫 번째 버전컴퓨터 스타일키는 "5"를 사용하여 표시되며 control, 이는 반복 계산과의 혼동을 피하기 위해 이후 버전에서 변경되었습니다. 그래서...

ESC[5A

애플리케이션이 실행되는 동안 커서를 5줄 위로 이동하는 것이 좋습니다.

ESC[1;5A

control특정 키가 눌렸음 을 애플리케이션에 알리기 위해 한 줄 위로 이동하는 것이 좋습니다 .

유용한 조합은 이미 ncurses terminfo 데이터베이스에 있습니다.2004년:

# 2004-07-17
#       * add xterm-pc-fkeys -TD

terminfo 데이터베이스는 현재 버전을 표시합니다.xterm+pcf키수정자가 인코딩되는 방법을 보여주는 주석은 다음과 같습니다.

# This fragment describes as much of XFree86 xterm's "pc-style" function
# keys as will fit into terminfo's 60 function keys.
# From ctlseqs.ms:
#    Code     Modifiers
#  ---------------------------------
#     2       Shift
#     3       Alt
#     4       Shift + Alt
#     5       Control
#     6       Shift + Control
#     7       Alt + Control
#     8       Shift + Alt + Control
#  ---------------------------------
# The meta key may also be used as a modifier in this scheme, adding another
# bit to the parameter.

(Alt와 Meta가 반드시 동일한 키는 아닙니다). 이것은빌딩 블록(다른 구성 요소로 구성) 따라서xterm터미널 설명이 형성되었습니다. ncurses에서 제공되는 확장을 사용합니다.1999년부터사용자가 이름을 정의할 수 있습니다. termcap은 2개의 문자 이름과 1023바이트 설명만 지원하므로 통과할 이유가 없습니다.용어 모자상호 작용. 다음을 사용하는 응용 프로그램에서 쉽게 사용할 수 있습니다.용어 정보상호 작용.

이제 어려움이 발생합니다. 애플리케이션이 이러한 키 시퀀스가 ​​무엇을 나타내는지 결정할 수 있는 여러 가지 방법이 있습니다.

  1. 문자 시퀀스의 완벽한 분석
  2. control부분적으로 분석하고 필요하지 않은 경우 수정자를 삭제합니다.
  3. 문자 순서를 사전과 비교하고 그런 식으로 의미를 결정하면 됩니다.

첫 번째 작업을 수행하는 프로그램은 거의 없으며 일부 텍스트 편집기는 두 번째 작업을 수행합니다.이것~을 위한ded내부에1980년대 후반). 이와 같은 앱 개발자는 bash대부분의 정보가 다음과 같다고 가정하고 세 번째 경로를 선택합니다.용어 모자. 또는 termcap/terminfo 정보가 포함된 테이블을 만들고 최상의 정보를 제공하는 인터페이스를 사용할 수도 있습니다. xterm이는 다음을 위해 수행됩니다.tcap 쿼리function - vim실제 기능 키 할당을 제공합니다.

비교된 문자열 중 bash수신한 문자열과 일치하는 문자열이 없으므로 혼란스러워지고 부분 일치(예: 이스케이프된 문자 자체)를 해결할 수 있습니다.

추가 자료:

관련 정보