ansi-term
얼마 전에 나는 Emacs가 모든 버퍼의 현재 디렉토리를 추적할 수 있게 해주는 다음과 같은 귀중한 코드 조각을 발견했습니다 .
좀 더 구체적으로 말하면, cd <some/path>
Emacs 내의 터미널에서 누르면 C-x C-f
Emacs가 바로 실행되는데 find-file
, <some/path>
이는 매우 매우 편리합니다.
if [ -n "$INSIDE_EMACS" ]; then
chpwd() { print -P "\033AnSiTc %d" }
print -P "\033AnSiTu %n"
print -P "\033AnSiTc %d"
fi
ssh
그러나 쉘에서 원격 시스템에 액세스하면 위의 트릭이 작동하지 않습니다. 이상적으로는 이 상황에서 내가 키를 누르면 Emacs는 내가 특정 시스템으로 sshed했음을 인식하고 Trapmp를 사용하여 C-x C-f
해당 시스템과 원격 경로에서 실행해야 합니다.find-file
이로 인해 다음 두 가지 질문이 발생합니다.
- 위의 코드 조각은 어떻게 그리고 왜 작동합니까?
- 다른 컴퓨터로 SSH를 연결한 후 원격 경로도 추적할 수 있도록 이를 확장하려면 어떻게 해야 합니까?
답변1
첫째, Robert의 의견에서 언급했듯이 코드 조각이 유효하지 않습니다. 앞에는 최소한 세미콜론이나 개행 문자가 와야 합니다 }
. 인쇄 문이 올바르지 않을 수도 있습니다.
그러나 여기서는 무슨 일이 일어나고 있는지 추측할 만큼 충분하므로 설명하겠습니다.
이를 실행하면 ansi-term
환경 변수가 설정된 쉘이 호출됩니다 $INSIDE_EMACS
. 그런 다음 쉘 코드는 다른 작업을 수행합니다. 기본적으로 함수를 재정의하여 chpwd
현재 작업 디렉터리를 포함하는 다른 작업을 인쇄합니다. 각 명령에서 마지막 명령이 올바르게 완료된 후 프롬프트 영역 어딘가에 현재 디렉터리가 표시된다는 점을 확인하면 이를 쉽게 확인할 수 있습니다.
ansi-term은 줄 시작 부분에서 디렉토리와 같은 것을 볼 때 해당 내용을 추적합니다. 따라서 그런 의미에서 코드는 특별하지 않습니다. \w
프롬프트에 추가된 환경 변수를 설정하는 등 다양한 방법으로 디렉토리를 표시할 수 있습니다 PS1
.
#2에 대해서는 "emacs ansi-term 버퍼/창에서 원격 파일 열기: ansi-term + Trapp"