2012-05-13 74 views
3

在試圖精簡我的init.el時,我決定從醜陋的cond樹中移出一些功能。爲了將部分決定了它,我建了兩個輔助功能:Emacs Lisp有趣的錯誤

(defun abstract-screen-width() 
    (cond ((eq 'x window-system) (x-display-pixel-width)) 
     ((eq 'ns window-system) (display-pixel-width)) 
     )) 

(defun perfect-font-size (pixels) 
    (cond ((eq 'x window-system) (cond ((<= pixels 1024) 100) 
            ((<= pixels 1366) 110) 
            ((> pixels 1366) 120))) 
     ((eq 'ns window-system) (cond ((<= pixels 1024) 110) 
             ((<= pixels 1280) 120) 
             ((> pixels 1280) 140))))) 

他們很好地結合起來,並調用他們,他們的目的是要調用的方式正常工作。

(perfect-font-size (abstract-screen-width)) 
130 

的自定義設置的面孔調用,因爲它的工作原理

(custom-set-faces 
     '(default ((t (:inherit nil :stipple nil :inverse-video nil :box nil 
           :strike-through nil :overline nil 
           :underline nil :slant normal :weight normal 
           :height 130 :width normal 
           :family "IBM 3270")))) 
     '(linum ((t (:inherit default :foreground "#777" :height 130))))) 

,但我的 「更好」 的版本

(custom-set-faces 
     '(default ((t (:inherit nil :stipple nil :inverse-video nil :box nil 
           :strike-through nil :overline nil 
           :underline nil :slant normal :weight normal 
           :height (perfect-font-size (abstract-screen-width)) :width normal 
           :family "IBM 3270")))) 
     '(linum ((t (:inherit default :foreground "#777" :height 120))))) 

沒有。它給出了「默認臉部高度不是絕對和正面」的錯誤。在faces.el和cus-face.el中的源並沒有多大幫助。任何提示?

回答

9

表達

'(default ((t (:inherit nil :stipple nil :inverse-video nil :box nil 
          :strike-through nil :overline nil 
          :underline nil :slant normal :weight normal 
          :height (perfect-font-size (abstract-screen-width)) :width normal 
          :family "IBM 3270")))) 

是引用將其全部,即(perfect-font-size (abstract-screen-width))不會進行評價。請嘗試反向引用:

`(default ((t (:inherit nil :stipple nil :inverse-video nil :box nil 
          :strike-through nil :overline nil 
          :underline nil :slant normal :weight normal 
          :height ,(perfect-font-size (abstract-screen-width)) :width normal 
          :family "IBM 3270")))) 

(注意反引號和逗號)。這個錯誤只是emacs告訴你的方式,它首選一個數字,它獲得了列表(perfect-font-size (abstract-screen-width))

+0

順便說一句,你可以使用'display-pixel-width'而不是'abstract-screen-width'。 – Stefan

+0

是的。我不確定爲什麼我使用了x-display-pixel-width,可能是顯示像素寬度在一些遙遠的過去吐出一個錯誤 - 這個init.el與我在一起超過十年... – rbanffy