QA@IT
«質問へ戻る

735
本文
 (defvar foo-template-directory default-directory)
 ```
 
-以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。foo-template-directory として "~/" が設定されてしまいます。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。
+以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。
 ```
 ;;foo.el
 (defvar foo-template-directory (concat (getenv "HOME") "/.emacs.d/emacs-foo/templates"))

emacs 起動時に、emacs 拡張のファイル内で、特定のディレクトリを指定するには

foo.el という emacs 拡張があります。
emacs-foo というディレクトリがあります。
layout.xml.mustache というテンプレートファイルがあります。
それぞれ、以下のように配置します。

~/.emacs.d/elisp/emacs-foo/foo.el
~/.emacs.d/elisp/emacs-foo/templates/layout.xml.mustache

このとき、foo.el 内で、templates のパスを、環境に依存せずに取得する方法があるでしょうか。

ボツ案

以下の設定では、emacs 起動時に foo.el がバッファに読み込まれているわけではないのでエラーとなります。

;;foo.el
(defvar foo-template-directory (file-name-directory (buffer-file-name)))

以下の設定では、foo-template-directory として "~/" が設定されてしまいます。

;;foo.el
(defvar foo-template-directory default-directory)

以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。

;;foo.el
(defvar foo-template-directory (concat (getenv "HOME") "/.emacs.d/emacs-foo/templates"))
foo.el という emacs 拡張があります。
emacs-foo というディレクトリがあります。
layout.xml.mustache というテンプレートファイルがあります。
それぞれ、以下のように配置します。



```
~/.emacs.d/elisp/emacs-foo/foo.el
~/.emacs.d/elisp/emacs-foo/templates/layout.xml.mustache
```

このとき、foo.el 内で、templates のパスを、環境に依存せずに取得する方法があるでしょうか。

### ボツ案

以下の設定では、emacs 起動時に foo.el がバッファに読み込まれているわけではないのでエラーとなります。
```
;;foo.el
(defvar foo-template-directory (file-name-directory (buffer-file-name)))
```


以下の設定では、foo-template-directory として "~/" が設定されてしまいます。
```
;;foo.el
(defvar foo-template-directory default-directory)
```

以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。
```
;;foo.el
(defvar foo-template-directory (concat (getenv "HOME") "/.emacs.d/emacs-foo/templates"))
```

質問を投稿

emacs 起動時に、emacs 拡張のファイル内で、特定のディレクトリを指定するには

foo.el という emacs 拡張があります。
emacs-foo というディレクトリがあります。
layout.xml.mustache というテンプレートファイルがあります。
それぞれ、以下のように配置します。

~/.emacs.d/elisp/emacs-foo/foo.el
~/.emacs.d/elisp/emacs-foo/templates/layout.xml.mustache

このとき、foo.el 内で、templates のパスを、環境に依存せずに取得する方法があるでしょうか。

ボツ案

以下の設定では、emacs 起動時に foo.el がバッファに読み込まれているわけではないのでエラーとなります。

;;foo.el
(defvar foo-template-directory (file-name-directory (buffer-file-name)))

以下の設定では、foo-template-directory として "~/" が設定されてしまいます。

;;foo.el
(defvar foo-template-directory default-directory)

以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。foo-template-directory として "~/" が設定されてしまいます。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。

;;foo.el
(defvar foo-template-directory (concat (getenv "HOME") "/.emacs.d/emacs-foo/templates"))
foo.el という emacs 拡張があります。
emacs-foo というディレクトリがあります。
layout.xml.mustache というテンプレートファイルがあります。
それぞれ、以下のように配置します。



```
~/.emacs.d/elisp/emacs-foo/foo.el
~/.emacs.d/elisp/emacs-foo/templates/layout.xml.mustache
```

このとき、foo.el 内で、templates のパスを、環境に依存せずに取得する方法があるでしょうか。

### ボツ案

以下の設定では、emacs 起動時に foo.el がバッファに読み込まれているわけではないのでエラーとなります。
```
;;foo.el
(defvar foo-template-directory (file-name-directory (buffer-file-name)))
```


以下の設定では、foo-template-directory として "~/" が設定されてしまいます。
```
;;foo.el
(defvar foo-template-directory default-directory)
```

以下の設定では、/.emacs.d/emacs-foo の部分がハードコーディングされています。foo-template-directory として "~/" が設定されてしまいます。変数 user-emacs-directory (;;=> "~/.emacs.d/") を用いても同様です。
```
;;foo.el
(defvar foo-template-directory (concat (getenv "HOME") "/.emacs.d/emacs-foo/templates"))
```