Emacsは起動時にテーマをロードしません


21

MELPA経由でソラリゼーションテーマパッケージをインストールしました。`customize-themeを介して2つのソラリゼーションテーマのいずれかを選択すると、それがアクティブになります。テーマ設定を保存すると、init.elファイルに以下が追加されます。

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-enabled-themes (quote (solarized-dark)))
 '(custom-safe-themes
   (quote
    ("8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

Emacsを起動してもテーマは読み込まれませんが、エラーメッセージは表示されません。実際eval-buffer、init.elファイルで実行するとテーマがロードされます。


1
.emacsホームディレクトリにもファイルがありますか?その場合、init-elは無視されます。
マラバルバ14年

回答:


21

init.elに追加します

(load-theme 'solarized-dark t)

そこで追加されたemacを無視して、削除してください。


1
これは問題を回避するのに役立つかもしれませんが、それは解決しません。彼のカスタム設定がロードされない場合、それは一番下に到達するものです。
マラバルバ14年

21

次のinit.elファイルをファイルに追加しました(.emacsファイルがありません~)。

(setq package-enable-at-startup nil) (package-initialize)

そして最後に

(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(custom-enabled-themes (quote (solarized-dark)))
 '(custom-safe-themes
   (quote
    ("8aebf25556399b58091e533e455dd50a6a9cba958cc4ebb0aab175863c25b9a4" default))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )

それはうまくいくようです。私はemacsにあまり詳しくないので、これが悪い回避策であるかどうかはわかりません...


それが実際に正しい解決策です。
lunaryorn 14年

@lunaryornこれが正しい解決策となるのは何ですか?(私のために働いた。)
ブライトスター14年

@TrevorAlexander使用する前にパッケージをロードする必要があります。
lunaryorn 14年

17

デフォルトでは、Emacsはinitファイルを処理した後にのみパッケージを自動ロードします。そのため、テーマを設定しようとしていたときに、テーマパッケージがロードされませんでした。

すべてのパッケージをinitファイルにロードするのではなく(あなたがやっているように見える)、フックをafter-init-hookに追加することにより、パッケージの自動ロード後にパッケージをロードすることもできますafter-init-hookload-themeinitファイルに直接アクセスしようとすると、その時点ではパッケージがロードされていないため、機能しないことに注意してください。

または、これをinitファイルに追加します:

(add-hook 'after-init-hook (lambda () (load-theme 'solarized-light)))

これは正しい解決策であり、さまざまなシナリオで機能すると思います(私にとってはgithub.com/bbatsov/preludeを使用しており、そこでも魅力のように機能します)
Amol Gawai

これは正しい解決策であり、受け入れられる答えであるはずです
-Dodgie

7

重要な部分は(package-initialize)だと思います。package-enable-at-startupビットが必要かどうかはわかりません。そう:

(package-initialize)
(load-theme 'ample t)

デフォルトですべてのテーマを信頼するようにemacsに指示して、毎回プロンプトが表示されないようにすることもできます。

(setq custom-safe-themes t)

心に留めておくべきことは、すべての順序が重要であることです。ファイルのどこにテーマをロードしようとしているかに応じて、上記の提案のいくつかが必要な場合とそうでない場合があります。

.emacsファイルの先頭でパッケージとMELPAリポジトリを初期化します。これにより、後でファイル内のMELPAがロードされたパッケージをより簡単に参照できます。また、カスタムセーフテーマも設定しているため、カスタムがファイルの最後に信頼情報を追加しているという事実を心配する必要はありません。ここに私が持っているものがあります:

(when (>= emacs-major-version 24)
  (require 'package)
  (package-initialize)
  (add-to-list 'package-archives
           '("melpa" . "http://melpa.milkbox.net/packages/") t)
  )
(setq custom-safe-themes t)

..later in the file ..

;; Load a nice theme if in GUI
(when (display-graphic-p)
  (load-theme 'ample t)
  )

-1

最初の行は、どこを見るべきかを知ることです:

(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")

その後、他の人が行くことができます:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.