
언제 그런 일이 일어났는지, 내가 무엇을 했는지는 확실하지 않지만(무엇이든) 내 화살표 키는 더 이상 htop에서 스크롤할 수 없습니다. 하지만 예전에는 그랬어요.
위쪽 및 아래쪽을 눌러 프로세스 목록을 위아래로 스크롤할 수 있어야 하지만 작동하지 않습니다. 일부 키는 '돌아가기' 또는 이와 유사한 경향이 있습니다. 설정 화면에서는 왼쪽, 위, 아래 모두 메인 화면으로 돌아갑니다.
htop이 유일하게 영향을 받는 프로그램인 것 같습니다.
- TERM은 xterm-color입니다.
- less는 영향을 받지 않습니다(위아래로 스크롤 가능).
- htop은 다음에서 왔습니다집에서 만든 맥주, 이는htop-osx2009년 중반 이후로 변경되지 않은 github의 저장소
- TERMINFO가 비어 있습니다.
내 고양이 -v 출력
% cat -v
^[[A^[[B^[[C^[[D
^[[A^[[B^[[C^[[D
%
- less와 htop은 모두 시스템(따라서 동일한) ncurses를 사용합니다.
- 루트 사용자와 동일한 문제
sh 스크립트의 출력
Type <Up> <Down> <Right> <Left> <Control-D> <Control-D>
(no output until after the first <Control-D>, please type "blindly")
^[OA^[OB^[OC^[OD
Expected:
^[OA^[OB^[OC^[OD
저도 사용해봤는데아이텀동일한 결과를 제공하므로 특별히 Terminal.app이 아닙니다.
에피소드 6: 제다이의 귀환
libncurses에 대해 링크하고 싶었지만 homebrew ncurses는 넓은 문자 모드로 컴파일하므로 얻는 모든 라이브러리는 libncursesw입니다. Brew에서 wide char로 컴파일하기 위해 플래그를 제거하고 homebrew ncurses를 설치하고 ncurses에서 htop을 설치했는데 이제 작동합니다.
답변1
부록: 10.6.3의 ncurses가 깨진 것 같습니다.
SO에 대한 답변링크블로그 항목문제에 대한 다른 조사를 설명합니다. 보고된 해결 방법 중 하나는 10.6.2에서 ncurses 라이브러리를 복사하는 것이지만 이로 인해 의도하지 않은 부작용이 발생할 수 있습니다.
ESC는 일반적으로 터미널(또는 다음과 같은 터미널 에뮬레이션 프로그램)에서 보낸 "제어 시퀀스"의 첫 번째 문자입니다.단말기) 특수 키(화살표 키, , , 등)에 F1사용 Home됩니다 Page Up.
ESC'돌아가기' 키 역할도 합니다.htop(일반적으로 느린 연결이 ESC로 시작되는 전체 제어 시퀀스를 보낼 수 있는 충분한 시간을 갖도록 지연 후에만 가능합니다.)
다음 질문에 대한 답변으로 질문을 업데이트하세요.
학기란 무엇입니까?
TERM 환경 변수에 이상한 값이 있을 수 있습니까? echo $TERM
창에서 무엇을 보고합니까 ?htop당신이 설명한대로 행동합니까? TERM
아마도 xterm-color
, 또는 이와 유사한 것이어야 합니다.
어디서 얻었나요?htop? 맥포트? 핑크? 다른?
시스템 제공 ncurses로 컴파일된 앱은 /usr/share/terminfo/
. MacPorts는 일반적 /opt/local/
으로 를 접두사로 사용하므로 MacPorts의 ncurses를 사용하는 응용 프로그램은 /opt/local/share/terminfo/
. Fink는 일반적 /sw/
으로 를 접두사로 사용하므로 Fink의 ncurses를 사용하는 애플리케이션은 /sw/share/terminfo/
.
환경 TERMINFO
변수에 값이 있습니까? 그렇다면 ncurses(소스가 무엇이든)는 거기에 지정된 디렉터리를 검색합니다.
TERM에 지정된 터미널에 대해 부분적으로 손상된 terminfo 정의가 있을 수 있습니다(출력 제어 순서가 양호해야 하기 때문에 '부분적으로 손상됨'). 그렇지 않으면 명백한 디스플레이 예외가 표시됩니다.
영향을 받지 않는 프로그램의 예는 무엇입니까?
화살표 키를 처리하는 ncurses 기반 프로그램이 있는 경우 OK(다른 ncurses 설치를 사용할 수도 있음)를 사용하여 다른 terminfo 항목을 사용해 볼 수 있습니다.htop그 반대의 경우도 마찬가지입니다( TERMINFO
다른 ncurses 설치의 항목 위치로 설정).
터미널에서 실제로 어떤 코드를 보내나요?
cat -v
화살표 키를 사용할 때 어떤 코드가 전송되는지 확인하는 데 사용됩니다 . 시작 후 Up, Down, Right, Left, Enter, Control-를 누르면 다음과 같이 표시됩니다 .Dcat -v
% cat -v
^[[A^[[B^[[D^[[C
^[[A^[[B^[[D^[[C
%
첫 번째 코드 세트는 tty 장치에서 생성된 에코입니다. 두 번째 세트는 다음과 같이 제작됩니다.고양이존재하는 정확한 코드에 따라 처음 전송된 것과 다를 수 있습니다.
이 코드는 다음에서 구성할 수 있습니다.단말기, 그러나 코드를 변경하는 특수 모드가 있으므로 일반적으로 필요하지 않습니다(때로는 위로 보내기 ESC [ A
, 때로는 보내기 ESC O A
).
결국 문제는 그거야htop화살표 키의 코드로 전송되는 코드를 인식하지 못하므로 코드가 실제로 전송되고 있는지 아는 것이 유용할 수 있습니다.
부록:htop홈브루에서;더 적은괜찮아
ncurses는 무엇에 반대하는가?htop연결되었나요?
그것은 것 같다htop'공식'~였다ncurses의 Homebrew 버전에 의존하지 않도록 2009년 말에 변경되었습니다.. 아마도 이는 다음 버전을 의미합니다.htop이 새로운 공식으로 구축된 것은 ncurses 시스템을 사용합니다. 그럼, 어떤 ncurses가 당신의 것인가요?htop바이너리를 사용하고 있나요?
ls -l "$(which htop)"
otool -L "$(which htop)"
만약 당신의htop2009-12-18보다 오래되었거나 Homebrew ncurses(아마도 /usr/local/lib/libncurses.5.dylib
)와 연결되어 있는 경우 다시 빌드하는 것을 고려할 수 있습니다.htop공식 ( brew remove htop; brew install htop
?). 또는 기존의 경우htop바이너리가 Homebrew 버전의 ncurses를 사용하고 있는 경우(또는 다시 빌드된 버전에서도 여전히 Homebrew ncurses를 사용함) ncurses 공식을 다시 빌드해 볼 수 있습니다.
당신은 그것을 언급더 적은잘 작동합니다. Homebrew 공식이 없는 것 같습니다.더 적은, 따라서 아마도 시스템에서 제공하는더 적은. 어느 것이 당신을 저주하는지 주목할 가치가 있습니다.더 적은비교를 위해 사용하고 있습니다htop.
otool -L "$(which less)"
부록:htop그리고더 적은시스템 ncurses 사용
사용자별 구성으로 인해 문제가 발생한 경우아주 새로운사용자로 로그인한 상태에서 시도해 보세요. 새로운 사용자에게도 문제가 지속되면 시스템 전반의 문제라는 것을 알 수 있습니다(또는 문제는 모든 새로운 사용자에게 제공되는 기본 초기 구성에 있습니다!). 테스트가 끝나면 로그인 선택기 등이 복잡해지지 않도록 사용자를 삭제하세요.
단말기기타 VT100 스타일 터미널 및 터미널 에뮬레이터에는 커서 키가 응용 프로그램에 다른 제어 시퀀스를 보내는 "응용 프로그램 커서 키" 모드가 있습니다. "응용 프로그램" 모드에서는 터미널이 (각각 위쪽, 아래쪽, 오른쪽, 왼쪽 모두) ^[OA^[OB^[OC^[OD
대신 전송합니다. ^[[A^[[B^[[C^[[D
단말기가 전송하는 비"응용" 모드 시퀀스는 단말기가 예상하는 코드와 동일합니다.받다커서 제어 코드로.
귀하의단말기올바른 응용 프로그램 커서 키 코드를 보내지 않습니다. 당신이 그렇게 말했기 때문에 그럴 것 같지 않습니다더 적은작동합니다("응용 프로그램" 모드도 사용함). 아마도 화살표 키를 사용하여 탐색할 수 있다는 의미일 것입니다.더 적은. 나는 '머슬메모리' 때문에 거의 항상vi-스타일 키( kjlh
) 탐색용더 적은.
"응용프로그램 커서 키" 코드란 무엇입니까?단말기배상?
당신은 그것을 확인할 수 있습니다단말기다음과 같이 예상되는 "응용 프로그램 커서 키" 시퀀스를 보냅니다.
sh -c "$(cat <<\EOF
noecho_appmode() {
stty -echo
printf '\033[?1h'
}
modes="$(stty -g)"
restore_echo_and_appmode() {
stty "$modes"
printf '\033[?1l'
}
printf '\nType <Up> <Down> <Right> <Left> <Control-D> <Control-D>\n'
printf '(no output until after the first <Control-D>, please type "blindly")\n\t'
noecho_appmode ; trap 'restore_echo_and_appmode' 0
cat -v
restore_echo_and_appmode ; trap '' 0
printf '\nExpected:\n\t'
printf 'kcu%c1\n' u d f b | /usr/bin/tput -S | cat -v
printf '\n\n'
EOF
)"
"Expected:"라고 표시된 출력은 에 대한 시스템 terminfo 항목을 기반으로 하므로 TERM
ncurses 기반 프로그램에서 볼 것으로 예상되는 내용이어야 합니다.
실제 코드가 예상 코드와 다른 경우 구성을 조사해야 합니다.단말기잘못된 코드가 구성된 위치를 찾으십시오.
이것이 아무런 문제를 나타내지 않는 경우(코드는단말기예상 코드와 일치), setuid가 아닌 복사본을 실행합니다.htop아래에ktrace(또는 약간의 DTrace?) 현장 I/O를 확인합니다. I/O의 특성으로 인해 누군가에게 문제의 원인에 대한 단서를 줄 수도 있습니다. 전체 출력kdump공유 라이브러리 로드 및 지원 데이터 파일에 대한 세부 정보를 보고하기 때문에 매우 클 것입니다. 그러나 해당 항목을 제거하더라도 여전히 거의 2000줄과 100kB의 출력을 얻을 수 있습니다.kdump. 여기에 게시하기에는 너무 많은 것 같습니다.
답변2
이 문제는 2010년 6월 15일에 출시된 10.6.4에서 수정된 것 같습니다. 10.6.3을 실행하는 iMac을 방금 업데이트했는데 저주 키(화살표 키 포함)가 내 앱에서 제대로 반응합니다.
답변3
디버깅하는 데 도움을 주셔서 감사합니다. 나는 동일한 문제를 겪고 있으며 Daniel과 같은 홈브류를 사용하여 기본 OSX 10.6 설치에서 라이브러리 목록을 얻었습니다. 다음은 화면 덤프입니다. 나에게는 동일한 버전처럼 보입니다.
marvin:~ sheldon$ otool -L "$(which htop)"
/usr/local/bin/htop:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
marvin:~ sheldon$ otool -L "$(which less)"
/usr/bin/less:
/usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
답변4
Page UP 및 Page Down 키가 없는 작은 Apple Bluetooth 키보드가 있습니다. 따라서 이러한 기능이 htop에서 작동하도록 하려면 다음 키 입력을 사용합니다.
Page Up: Shift 키→기능 키→위쪽 화살표 키
Page Down: Shift 키→기능 키→아래쪽 화살표 키
동일한 문제가 있는 다른 앱에서도 이 작업을 본 적이 있습니다.