나는 article about well-formatted Git commits을 읽었으며 Magit 로그 모드에 일부 규칙을 적용 할 수 있는지 궁금합니다.한 번에 여러 Emacs 모드에 후크를 적용하려면 어떻게해야합니까?
동시에 3 가지 주요 모드가 사용됩니다 : Magit
, Log
, Edit
.
그렇다면 함께 사용하면 자동으로 72 문자로 하드랩 할 수있는 모드는 어떻게됩니까?
나는 article about well-formatted Git commits을 읽었으며 Magit 로그 모드에 일부 규칙을 적용 할 수 있는지 궁금합니다.한 번에 여러 Emacs 모드에 후크를 적용하려면 어떻게해야합니까?
동시에 3 가지 주요 모드가 사용됩니다 : Magit
, Log
, Edit
.
그렇다면 함께 사용하면 자동으로 72 문자로 하드랩 할 수있는 모드는 어떻게됩니까?
Emacs 버퍼에는 단 하나의 메이저 모드 만있을 수 있습니다 (something like MMM or MuMaMo을 사용하지 않는 한). 귀하의 경우 하나의 주요 모드가 magit-log-edit-mode
이며, 그 이름은 세 단어로 구성됩니다 ("Magit Log Edit"). 당신은 당신이 원하는대로 훅에 추가 할 수 있습니다, 당신이 당신의 자신의 함수를 정의 할 수 있습니다, 일반적으로
(defun my-turn-on-auto-fill()
(setq fill-column 72)
(turn-on-auto-fill))
(add-hook 'magit-log-edit-mode-hook 'my-turn-on-auto-fill)
my-common-hook
말을 예를 들어, 모든 주요 모드에 추가 :
(defun my-common-hook()
... do stuff ...
)
(add-hook 'one-mode-hook 'my-common-hook)
(add-hook 'another-mode-hook 'my-common-hook)
(add-hook 'a-third-mode-hook 'my-common-hook)
에서
(defun my-add-to-multiple-hooks (function hooks)
(mapc (lambda (hook)
(add-hook hook function))
hooks))
(defun my-turn-on-auto-fill()
(setq fill-column 72)
(turn-on-auto-fill))
(my-add-to-multiple-hooks
'my-turn-on-auto-fill
'(text-mode-hook
magit-log-edit-mode-hook
change-log-mode-hook))
을 안 최고의 예를 들어, 아마도,하지만 난 그렇게 가지고 : 당신이 수많은 후크 변수에 추가 할 하나의 함수가있는 경우,이처럼 할 수있는, 원래의 진술 질문에 답변 프로그래밍 모드에서 사용할 수있는 몇 가지 공통적 인 동작에 대해 비슷한 기능을 제공합니다.
이맥스 모드에는 "기본 모드"즉 바드 모드가 있습니다. 예를 들어 python-mode
은 prog-mode
을 확장하며 그 자체는 fundamental-mode
입니다. 모든 모드는 fundamental-mode
까지 확장됩니다. 따라서 python-mode
에 c-mode
을 연결하고 text-mode
을 연결하지 않으려면 prog-mode
을 연결할 수 있습니다.
그냥 지금보고 있지만 여기에 내가 한 것입니다. 최종 결과는 다음과 같이하고 싶습니다. (hook-up-modes my-lisps 'standard-lisp-environment)
.
이렇게하려면 다음을 정의하십시오. defvar
.
(defun append-suffix (suffix phrases)
"take SUFFIX and append it to each of the PHRASES."
(mapcar #'(lambda (phrase) (concat phrase suffix)) phrases))
그래서 ("Clojure의" "LISP") => ("Clojure의 :
(defvar my-lisps "clojure lisp emacs-lisp cider-repl")
(defun standard-lisp-environment()
(paredit-mode 1)
(rainbow-delimiters-mode 1)
(eldoc-mode 1))
나는 그래서 난 다음 한 내가 사용하는 lisps에 혀짤배기 APPEND의 -mode 훅을 갖고 싶어 -mode-hook ""lisp-mode-hook "). 이 모든
(defun multiple-mode-add-hook (modes hook)
"Given a list of x-mode-hook symbols in MODE, add the HOOK to them."
(mapc (lambda (mode) (add-hook mode hook)) modes))
:
지금 우리는 쉽게이있을 수 있다는 것을, 우리는 우리가 쉽게
(defun symbols-from-strings (strings)
"Given a list of strings, get their symbol values"
(mapcar #'intern strings))
에서 얻을 그리고 마지막으로 우리는 유사한 형태가 이상 게시 한 자신의 독자 기호가 필요 문자열 목록, 기호 목록, blah-mode-hook 등의 목록에서 작동합니다. 이제는 우리가 작업 할 수있는 멋진 사용자 지향 기능이 필요합니다. 우리는 문자열의 공백으로 구분 된 목록에서 우리의 모드를 작성하고 후크를 적용
(defun hook-up-modes (strings hook)
(let ((modes (symbols-from-strings
(append-suffix "-mode-hook" (split-string strings)))))
(multiple-mode-add-hook modes hook)))
지금 이것은 꽤 읽을 수 있어야한다.또한, 표준 리스프 환경을 정의 했으므로, 모든 lisp는 비슷하게 동작합니다. 그리고 내가 좋아하는 경우 나중에 쉽게 훅을 제거 할 수 있습니다. 실제로 실제로 작동하는 코드는 슈퍼 간단한 구 (hook-up-modes my-lisps 'standard-lisp-environment)
입니다.
목록 대신 문자열로 시작하는 것은 꽤 이상합니다. 상징의 목록은 좀 더 평범한 출발점이 될 것입니다. 'symbol-name'을 사용하면 처리 할 때와 결합 할 문자열을 얻을 수 있습니다. – phils
완벽한, 감사합니다! 접선으로, 주요 모드에 대해 혼란스러워했습니다. 각 모드는 클릭시 별도의 "상황에 맞는 메뉴"를 표시합니다. 어느 쪽이든, 당신의 솔루션은 완벽하게 작동합니다. –
후크에'lambda'-expression을 추가하는 것에 대해 강력히 조언합니다. 한 가지 이유는 내용을 연구 할 때 훅에 포함 된 내용을보기가 정말 어렵다는 것입니다. 또 다른 이유는 훅을 수정할 때 새로운 버전과 이전 버전이 모두 존재하기 때문입니다 (이전 버전을 신중하게 제거하지 않는 한). 이로 인해 흥미로운 결과가 발생할 수 있습니다. – Lindydancer
@ Lindydancer 전적으로 동의합니다. 그러나 이것은 데모 용일뿐입니다. 어쨌든 기능을 분리하기 위해 변경되었습니다. –