내장 함수 및 변수의 소스 코드로 이동


9

하루 종일 나는 함수와 변수에 대한 문서를 찾기 위해 지속적으로 C-h f또는 C-h v( describe-functiondescribe-variable)를 사용 하고 있습니다. 종종 필요한 정보를 모두 얻지 못하면 마지막에 파일 링크를 클릭합니다.

some-random-command is an interactive compiled Lisp function in `some-mode.el'.

소스 코드로 이동하십시오. 이것은 설치된 패키지에서 작동하지만 내장 패키지에서는 작동하지 않는 것 같습니다. 예를 들어, 명령에 대한 도움말 페이지의 맨 위에는 describe-function다음이 있습니다.

describe-function is an interactive compiled Lisp function.

소스 코드에 대한 링크가 없습니다. 내장 패키지의 소스 코드를 빠르게 탐색 할 수있는 방법이 있습니까?

예를 들어 소스 코드를 찾을 수 있고 /usr/share/emacs/24.5/lisp해당 디렉토리에 빠르게 액세스하는 방법에는 여러 가지가 있지만, 내장 함수 / 변수 정의를 빠르고 쉽게 탐색 할 수있는 방법이 있는지 궁금합니다. 소스 코드. 감사합니다!


5
M-x find-function; M-x find-variable; M-x find-face; M-x find-library. 나는 항상 Emacs의 전체 설치를 사용하여 모든 것에 액세스 할 수 있으며, 내 Emacs를 빌드 한 직후 C 소스 코드를 복사하고 위치를 설정하여 C 소스 코드 정의도 찾을 수 있습니다. find-function-C-source-directoryC 소스 코드를 복사 한 후 위치를 설정 하려면 변수 를 참조하십시오 .
법률 목록

1
Emacs의 마스터 브랜치를 사용하여 다음과 같이 얻습니다 M-x describe-function. describe-function은 'help-fns.el'의 대화식 자동로드 컴파일 된 Lisp 함수입니다. 거기에서 클릭하거나 Enter 키를 눌러 help-fns.el해당 코드 섹션으로 이동합니다. 아마도 여러 Emacs 버전이 있고 현재 사용중인 버전에 모든 소스 코드가 설치되어 있지 않습니까?
lawlist

emacs -Qinit 파일을 사용 하지 않고 Emacs를 시작할 때 , 또는 시작하는 레시피 emacs -Q(예 : 어떤 라이브러리를로드하고 어떻게로드하는지 등)로 재현 할 수 있다면 버그 신고를 고려하십시오. 보고서 : M-x report-emacs-bug.
Drew

4
nb IIRC, 데비안 용 Emacs 패키지 (다른 OS도 가능)는 .el파일 (선택적)을 .elc파일 (필수)과 분리하여 하나 이상의 추가 패키지를 설치해야합니다. OS 패키지 관리자에서 Emacs를 구한 경우이 설명이있을 수 있습니다.
phils

1
바이너리 이름 (실행 권한이있는) ( emacs 또는 emacsclient )에 대해 grep (또는 다른 검색 유틸리티)을 수행 하여 하드 드라이브의 위치를 ​​확인할 수 있습니다. 나는 자신의 전용 폴더에 내 것을 완전히 별도로 저장합니다. 예를 들어, 내 운영 시스템과 함께 제공되는 버전을 - /usr/bin/emacs그리고 /usr/bin/emacsclient, 나는 잘 .APP로 끝나는 폴더 OSX에 응용 프로그램에 패키지 버전이 -, 즉 /Applications/Emacs.app바이너리와는, Emacs.app을 내부 (그 모든 소스 코드 파일).
lawlist

답변:


7

파일 이름이없는“대화식 컴파일 된 Lisp 함수”(또는 변수의 경우)가 가끔 나타나는 이유는 바이트 컴파일 된 파일에서 함수가로드되었고 해당 Elisp 소스 파일이 없기 때문입니다. 소스 코드를 보여주기 위해 Emacs는 소스 코드를 찾을 수 있어야합니다.

많은 배포판에서 Lisp 소스 파일을 별도의 패키지로 제공합니다. 모든 사용자가 원하는 것은 아니고 부피가 크기 때문입니다. 예를 들어, 데비안 및 파생 제품에을 설치하십시오 emacs24-el. 소스에서 Emacs를 빌드하는 경우 make installElisp 소스를 복사하십시오.

프리미티브 (서브 루틴 및 특수 형식)의 소스 코드를 보려면 Emacs가 C 소스를 찾을 수 있어야합니다. 소스에서 설치하지 않으면 정상적으로 사용할 수 없습니다.

Emacs는의 디렉토리에서 Lisp 소스를 찾습니다 load-path. foo.elc,파일 에서로드 된 함수 또는 변수의 경우 foo.el또는 일 수 있습니다 foo.el.gz. Emacs는 아래 source-directory에서 C 소스를 찾고 소스 파일을 찾지 못하면 다른 디렉토리를 입력하라는 메시지를 표시합니다.


소스에서이 버전의 Emacs를 빌드했다고 맹세 할 수는 있지만 M-x emacs-version, 마지막에 "Debian에 의해 수정 됨"이라고 말하면 OS (Ubuntu의) 패키지 관리자의 버전을 사용하고 있음을 나타냅니다.
elethan

@elethan“Debian에 의해 수정 됨”이라고 표시되면 Ubuntu 패키지를 설치했거나 최소한 구축 한 것입니다. 소스에서 빌드했을 수 있습니다 (Ubuntu 릴리스의 버전보다 최신 버전을 원했기 때문일 수 있습니다). 당신은 실행 /usr/bin/emacs또는 /usr/local/bin/emacs?
Gilles 'SO- 악의를 그만두십시오'

1

신속 소스 코드로 이동하는 방법을 찾는 경우도 있습니다 find-function-at-pointfind-variable-at-point있는 커서 아래에있는 기호의 정의로 이동합니다 - 당신은 예를 들어, 채널 CF와 채널 이력서에 결합 할 수있다.

또는 M을 사용하는 elisp-slime-nav을 사용해 볼 수 있습니다. 기호의 정의로 이동하고 M-, 반환-변수, 함수, 라이브러리 및면으로 이동-https: //github.com/purcell/elisp-slime-nav/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.