3

init.elを合理化しようとしているときに、いくつかの機能を醜いcondツリーから移動することにしました。いくつかの決定をそこから移動するために、私は2つのヘルパー関数を作成しました。

(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呼び出し

(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のソースはあまり役に立ちませんでした。ヒントはありますか?

4

1 に答える 1

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))

于 2012-05-13T16:25:50.037 に答える