2012-05-13 12 views
3

私のinit.elを合理化しようとしている間、私は醜いコンドルツリーからいくつかの機能を移動することに決めました。それからいくつかの決定を移動するために、私は2つのヘルパー関数建て: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

ところで、あなたは 'abstract-screen-width'の代わりに' display-pixel-width'を使うことができます。 – Stefan

+0

真。なぜ私はx-display-pixel-widthを使用したのか分かりません。離れた過去にエラーを吐き出すdisplay-pixel-widthかもしれません。このinit.elは10年以上私と一緒です... – rbanffy

関連する問題