18

最小限の設定https://www.refheap.com/18816

シナリオ 1。

  • ターミナルから「emacs」を実行します。
  • Mx サーバー起動
  • ターミナルから「emacsclient -c」を実行します。
  • 効果: テーマが適用されます。

シナリオ 2。

  • ターミナルから「emacs --daemon」を実行します
  • 「emacsclient -c」を実行します
  • 効果: テーマは適用されません。

何故ですか?

.emacs.d/init.d 構成:

(require 'package)
(package-initialize)

(defun install-pack (p)
"A utility function to help in installing emacs package."
(unless (package-installed-p p) (package-install p)))

(defun install-packs (packs)
"A utility function to help in installing emacs packages."
(unless package-archive-contents
        (package-refresh-contents))
(dolist (p packs) (install-pack p)))

;(load-theme 'tronesque)
(load-theme 'tronesque t)

また

;(load-theme 'tronesque)
;;(load-theme 'tronesque t)
(custom-set-variables
;; custom-set-variables was added by Custom.
'(custom-enabled-themes (quote (tronesque)))
'(custom-safe-themes (quote    ("b8f561a188a77e450ab8a060128244c81dea206f15c1152a6899423dd607b327" default))))
 (custom-set-faces
 ;; custom-set-faces was added by Custom.
 )
4

4 に答える 4

20

Emacs 24 の場合、

(if (daemonp)
    (add-hook 'after-make-frame-functions
        (lambda (frame)
            (select-frame frame)
            (load-theme 'tronesque t)))
    (load-theme 'tronesque t))

また

(if (daemonp)
    (add-hook 'after-make-frame-functions
        (lambda (frame)
            (with-selected-frame frame
                (load-theme 'tronesque t))))
    (load-theme 'tronesque t))

すべきです。

于 2014-05-15T03:48:27.683 に答える
3

上記の回答の次の拡張により、solarized テーマで示されているように、color-theme 呼び出しを介して color-theme を設定することで、Emacs 24 の問題が修正されました。

(if (daemonp)
(add-hook 'after-make-frame-functions
          '(lambda (f)
             (with-selected-frame f
               (when (window-system f) (color-theme-solarized-dark)))))
(color-theme-solarized-dark))

HTH

J.

于 2014-02-12T15:22:16.593 に答える
2

load-themeデーモンの起動であるため、関数が関与したときにフレームが作成されませんでした。起動後、「emacsclient -c」と入力して新しいフレームを作成しましたが、もちろん何も起こりませんでした。

そのため、フレームの作成後にテーマを適用するように emacs に指示する必要があります。フックafter-make-frame-functionsはそのために作られています:

(if (daemonp)
    (add-hook 'after-make-frame-functions
              (lambda (frame)
                (load-theme 'tronesque t)))
    (load-theme 'tronesque t))

デーモンの起動の場合は、フレームが作成された後にテーマをロードします。それ以外の場合は、テーマを直接ロードします。

于 2013-09-22T20:03:55.133 に答える