emacs에서 활성 부 모드를 어떻게 나열합니까?
emacs에서 활성 부 모드를 어떻게 나열합니까?
C-h m
또는 M-x describe-mode
모든 활성 부 모드 (및 주 모드)와 각각에 대한 간략한 설명을 표시합니다.
모든 부 모드 명령 목록은 변수에 저장됩니다 minor-mode-list
. 그들이 활성 상태인지 아닌지 알아내는 것은 일반적으로 같은 이름의 변수를 확인하여 수행됩니다. 따라서 다음과 같이 할 수 있습니다.
(defun which-active-modes ()
"Give a message of which minor modes are enabled in the current buffer."
(interactive)
(let ((active-modes))
(mapc (lambda (mode) (condition-case nil
(if (and (symbolp mode) (symbol-value mode))
(add-to-list 'active-modes mode))
(error nil) ))
minor-mode-list)
(message "Active modes are %s" active-modes)))
참고 : 이것은 현재 버퍼에서만 작동합니다 (부 모드는 특정 버퍼에서만 활성화 될 수 있기 때문).
describe-mode
어떻게 든 활성화 된 부 모드 목록을 만들 수 있는데, 왜 그렇게 할 수 없습니까? 그래서 소스 코드를 읽은 후 minor-mode-list
및 에서 활성 부 모드 목록을 가져 오는 것을 깨달았습니다 minor-mode-alist
. 타사 dash.el
목록 조작 라이브러리를 사용하여 다음 코드와 함께 제공되었습니다.
(--filter (and (boundp it) (symbol-value it)) minor-mode-list)
예를 들어 모든 부 모드를 비활성화하려면 -each
다음을 사용하십시오 .
(--each (--filter (and (boundp it) (symbol-value it)) minor-mode-list)
(funcall it -1))
변수에 부 모드 목록을 저장하는 것을 잊지 마십시오. 그렇지 않으면 Emacs를 다시 시작하거나 메모리로 활성화해야합니다.
다음은 다른 답변에서 이미 해결 된 일부 방법과 유사한 간단한 대체 스 니펫입니다.
(delq nil
(mapcar
(lambda (x)
(let ((car-x (car x)))
(when (and (symbolp car-x) (symbol-value car-x))
x)))
minor-mode-alist))
특정 모드가 활성화 된 모든 버퍼를 사용 하여 프로그래밍 방식으로 무언가를 수행 하려는 경우 가장 좋고 가장 미니멀하며 가장 깨끗한 내장 솔루션은 다음과 같습니다.
(dolist ($buf (buffer-list (current-buffer)))
(with-current-buffer $buf
(when some-buffer-local-minor-or-major-mode-variable-you-want-to-find
(message "x %s" $buf))))
다음을 수행합니다.
- 를 통해 모든 버퍼의 목록을 검색합니다
buffer-list
. 현재 활성 버퍼는 목록의 맨 앞에 있습니다 (따라서 일반적으로 원하는대로 먼저 처리되지만current-buffer
상관하지 않으면 매개 변수는 제외). - 버퍼 목록을 반복하고 각 버퍼 이름을 변수에 할당합니다
$buf
. with-current-buffer $buf
Emacs에게 본문 내의 모든 코드$buf
가 실제로 화면에 표시되는 버퍼 대신 버퍼 내부에서 실행되는 것처럼 실행되어야한다고 알리는 데 사용 합니다 .when <some mode variable>
모드가 활성화되어 있는지 확인하는 올바른 방법입니다.if
및 기타 이러한 방법을 사용할 수도 있습니다 . 어느 쪽이든 목표는 부 또는 주 모드의 주 모드 변수가 버퍼에 설정되어 있는지 확인하는 것입니다. 거의 모든 모드는 모드를 "정의"하여 변수를 정의합니다. 그러면 자동으로 모드 이름을 따서 명명 된 버퍼 로컬 변수가 생성됩니다. 표준 변수가없는 경우 자체 소스 코드를보고 "토글"코드가 어떻게 켜고 끄는지를 결정합니다. 99 %는 자신의 모드 이름 변수의 존재를 사용합니다 (그렇지 않으면 모드 작성자에게 버그로보고하는 것이 좋습니다). 예를 들어, 버퍼에 공백 모드가 활성화되어 있는지 확인하려면when whitespace-mode
.- After that, it just outputs a message to the Messages buffer, with an "x" and the name of the buffer that had the mode active. That's where you'd put your own code, to do whatever you wanted to do with the discovered buffer.
Enjoy! Onwards to greater and cleaner lisp code!
참고URL : https://stackoverflow.com/questions/1511737/how-do-you-list-the-active-minor-modes-in-emacs
'program story' 카테고리의 다른 글
Google 크롬 인쇄 페이지 나누기 (0) | 2020.08.16 |
---|---|
'source'속성을 'org.eclipse.jst.jee.server : JSFTut'로 설정하면 일치하는 속성을 찾지 못했습니다. (0) | 2020.08.16 |
Python List Comprehension을 사용하여 조건에 따라 요소의 인덱스 찾기 (0) | 2020.08.15 |
파생 클래스 생성자에서 기본 클래스 멤버 변수를 어떻게 초기화 할 수 있습니까? (0) | 2020.08.15 |
Application.ThreadException과 AppDomain.CurrentDomain.UnhandledException의 차이점은 무엇입니까? (0) | 2020.08.15 |