답변1
보다키보드 입력과 텍스트 출력은 어떻게 작동합니까?주제에 대한 개요를 확인하세요. 애플리케이션이 터미널에서 실행 중인지 아니면 GUI 환경과 직접 통신하는지에 따라 다릅니다.
터미널에서는 터미널 소프트웨어(일반적으로 금세기 터미널 에뮬레이터)가 문자 인코딩을 결정합니다. 다음을 설정하여 문자 인코딩(입력 및 출력에 대해 동일)을 전달합니다.장소환경 변수 LC_CTYPE
. 이 변수가 설정되지 않거나 로 설정된 경우 C
터미널은 정보를 제공하지 않으므로 애플리케이션은 인코딩이 무엇인지 알 수 없습니다. 터미널에서 문자는 애플리케이션에 문자로 전송됩니다. 문자가 아닌 입력(기능 키, 커서 키, 와 같은 수정자가 있는 키 Alt등)은 다음과 같이 전송됩니다.이스케이프 시퀀스(그 중 몇 가지는제어 문자대신에).
X11애플리케이션은 다음과 같은 형태로 입력을 받습니다.KeyPress 이벤트. KeyPresss 이벤트에는 낮은 수준의 표시( keycode
대략 키의 물리적 위치에 해당하고 state
활성 수정자를 인코딩함)가 포함되어 있습니다. 애플리케이션은 다음과 같은 함수를 호출할 수 있습니다.XLookupString
(전통적인 기능, 라틴어-1로 제한됨) 또는XmbLookupString
(다른 유니바이트 인코딩을 지원하는 기능) 또는XwcLookupString
(멀티바이트 인코딩을 지원하는 기능) 또는Xutf8LookupString
(최신 UTF-8 함수)를 사용하여 이 원시 정보를 문자열로 변환합니다.
키에서 문자로의 매핑은 다양한 수준에서 변경될 수 있습니다.키보드 입력과 텍스트 출력은 어떻게 작동합니까?개요를 가지고 있습니다.
답변2
키보드는 문자를 보내지 않습니다. 스캔 코드를 보냅니다. 예를 들어, 일반적인 미국식 키보드에서 "e"라고 표시된 키를 누르면 기본적으로 "메인 그룹의 영숫자 키 두 번째 행 왼쪽에서 세 번째 키"라는 스캔 코드가 전송됩니다. 이 스캔 코드는 커널(또는 운영 체제의 다른 구성 요소)에 의해 문자(또는 일반적으로 "Print Screen"과 같은 키를 생각하는 키 기호)로 변환되며, 특히 Linux에서는 그래픽에 의해 변환됩니다. 하위 시스템.
일반적으로 운영 체제나 그래픽 하위 시스템은 변환 테이블을 제어하는 하나 이상의 유틸리티를 제공합니다. 예를 들어, Windows와 Linux 모두에서 원하는 만큼 많은 키보드 레이아웃을 설치하고 쉽게 전환할 수 있습니다.
응용 프로그램이 얻는 내용은 운영 체제의 규칙에 따라 다릅니다. Windows에서 콘솔 응용 프로그램은 명령으로 설정된 현재 콘솔 코드 페이지에 따라 인코딩된 문자를 가져옵니다 chcp
. 그래픽 응용 프로그램은 일반적으로 UTF-16 인코딩 문자로 변환되는 키 기호를 얻습니다. Linux에서 애플리케이션은 일반적으로 UTF-8로 인코딩된 문자를 얻습니다. 예를 들어, ă
키보드 레이아웃이 올바르게 설정된 상태에서 (LATIN SMALL LETTER A WITH BREVE, U+0103) 이라고 표시된 키를 누르면 ,
- Windows의 콘솔 애플리케이션은
chcp 1250
1바이트(10진수 227)를 얻습니다'\xE3'
. - Windows의 콘솔 애플리케이션은
chcp 852
1바이트(10진수 199)를 얻습니다'\xC7'
. '\x03'
'\x01'
Windows의 그래픽 응용 프로그램은 일반적으로 2바이트 (또는 짧은 정수 ) 로 저장/처리되는 적절한 키 기호를 얻습니다0x103
.- Linux의 터미널 애플리케이션은 2바이트
'\xC4'
'\x83'
(UTF-8 인코딩의 <U+0103>)를 가져옵니다. '\xC4'
'\x83'
Linux의 그래픽 응용 프로그램은 일반적으로 2바이트 (UTF-8 인코딩의 <U+0103>) 로 저장/처리되는 적절한 키 기호를 얻습니다 .
(Windows란 Windows NT와 Windows XP, Windows Vista, 7 또는 10과 같은 후속 제품을 의미합니다. Windows 95 등은 다행히 더 이상 사용되지 않는 완전히 다른 운영 체제 제품군입니다.)
Vim에서는 두 가지 새로운 번역 레이어를 얻을 수 있습니다:
다음을 사용하여 키보드 번역 맵을 설치할 수 있습니다
set keymap
.:help 'keymap'
및 을 참조하십시오:help mbyte-keymap
. 이는 운영 체제 수준에서 키보드 레이아웃을 설치할 수 없는 시스템에서 원하는 언어로 텍스트를 입력하는 데 도움이 됩니다.명령 을 사용하여 매핑을 정의할 수 있습니다
:map
. 보다:help :map
.