2014-01-16 3 views
4

아니에요 :이맥스 내가 람다을 인용하고있어 주장,하지만 난 이맥스 내 init.el이 추가

(add-hook 'emacs-startup-hook 
    (lambda() 
    (kill-buffer "*scratch*") 
    (ido-mode t) 
    (global-visual-line-mode 1))) 

(add-hook 'clojure-mode-hook 
(lambda() 
    (rainbow-delimiters-mode 1))) 

자동으로 이맥스 기호 람다에 단어 lambda을집니다 I 있지만, 그것이 문제인지 아닌지를 모릅니다. 내가 이맥스를 시동 할 때, 보고서 :

(lambda (line) ...) quoted with ' rather than with #'

하지만 람다를 인용하고 있지 않다. 위의 코드 줄을 제거하면 오류가 사라집니다.

왜 오류가 발생합니까?

+0

위의 '람다'에는'field' 인수가 없습니다. 다른 '람다'여야합니다. – Tobias

+0

@Tobias는 차이를 만들지는 모르지만 실제로 "필드"가 아닌 "라인"이라는 단어를 사용합니다. 질문을 업데이트했습니다. 위의 정보를 빼내면 오류가 사라지고 모든 것이로드되므로 다른 람다라고 상상할 수는 없습니다. – johnbakers

+1

아무런 차이가 없습니다. init 파일에서''(lambda')를 검색하십시오. 때때로 바이트 컴파일러가 다시 컴파일해야 할 부분과 그렇지 않은 부분이 너무 똑똑하다는 인상을 받았습니다. 인용 된 람다는 다른 곳에서있을 수 있습니다. – Tobias

답변

3

이것은 코드의 버그는 아니지만 호출하는 기능 중 하나에 의해 호출되는 Emacs와 함께 제공되는 일부 코드에서 제공됩니다. 아마도 Emacs bug #11357 일 것입니다.

코드가 적합하다는 점을 제외하고는 코드가 적절합니다. 단, 사용자가 emacs-startup-hook으로 문제를 복잡하게 만든다는 점이 다릅니다. .emacs이로드 될 때 대부분의 작업을 바로 수행 할 수 있습니다. 당신의 .emacs 자주 변경 자주 다시로드 경우에 사용하는 내가 생각할 수있는

(ido-mode t) 
(global-visual-line-mode 1) 
(add-hook 'emacs-startup-hook 
    (lambda() 
    (kill-buffer "*scratch*"))) 

유일한 이유는 emacs-startup-hook 당신이 한 방법입니다 ido-mode 또는 global-visual-line-mode하고 .emacs를 다시로드 할 때 그들을 되돌려 싶지 않아 .

*scratch*을 죽이는 것보다 Emacs를 더 많이 사용하는 방법은 Automatically closing the scratch bufferPrevent unwanted buffers from opening을 참조하십시오.

2
  1. 경고의 lambdaline 인수를 가지고; 너의 훅은하지 않는다. 둘 중 어느 하나가 init 파일에 다른 lambda으로 인용되었거나 바이트 컴파일러의 버그입니다.

  2. 람다를 전혀 인용 할 이유가 없습니다. 너는 그 일을 올바르게하고있다.

  3. 저는 올바른 방법으로 emacs-startup-hook을 사용하고 있다고 생각하지 않습니다. 그냥 (ido-mode t)(global-visual-line-mode 1)을 그대로 init 파일에 넣으십시오.