0

タイトルでは質問を明確に説明できないと思います。しかし、私はより詳細な言葉を説明しようとします。

バックアップフォルダーを設定するための私の Emacs Lisp コードは次のとおりです。

(setq backup-directory-alist '(("" . "/hom/test/.backups")))

しかし、ユーザーのパスに基づいてパスを生成する動的な方法でバックアップ パスを生成することによって、このジョブを実行したい場合。

これが私がやろうとしていることです:

(setq temp-file-folder "/home/test")
(setq backups-save-folder (concat temp-file-folder "/.backups"))
(setq backup-directory-alist '(("" . backups-save-folder)))

しかし、うまくいきません。上記のコードの最終的な出力は次のとおりです。

(("" . backups-save-folder))

私が取得しようとしているのは次のとおりです。

(("" . "/home/test/.backups"))

では、動的パスを生成するための正しいコードは何でしょうか? の意味は何ですか 。コードで?

ありがとう

4

3 に答える 3

4

まず、ポイント。これを行うには、concatの代わりに関数を使用できますformat(これはに似ていますprintf)。これが例です

(let ((home_dir "/home/noufal")
      (posts_dir "posts"))
  (format "%s/%s" home_dir posts_dir))

に評価します"/home/noufal/posts"

setq一時変数に対する慣用的なLispではありません。let値をいくつかの一時的なシンボルにバインドできる構成のスコープ内で作業してから、作業を完了する必要があります。

最後のケースでは'、2番目のパラメーターの前にaを使用しました。これにより、評価されなくなり(「文字通り引用」と同義)backups-save-folder、値に置き換えられなくなります。あなたがそれをしたいのなら、このようなことをしてください。

(setq backup-directory-alist (list (cons ""  backups-save-folder)))

これは、リストではない.リストを表す方法です。cdr詳細については、elispのドキュメントを参照してください。

于 2012-07-30T10:55:55.423 に答える
0

Noufal Ibrahimの答えによると、ここに私の最終的なコードがあります:

(setq backup-directory-alist (list (cons "" 
                                     (let ((backups_dir "/.backups")
                                           (temp_folder desktop-temp-file-folder))
                                       (format "%s/%s" temp_folder backups_dir)))))

できます。

ありがとう

于 2012-07-31T10:34:15.827 に答える
0

ペアの値を格納するように設計された関連リストは必要ないようですが、単純なリストは必要です。

現在のユーザー ディレクトリを取得する (getenv "HOME")

別の任意の文字列「-BACKSTAGE-AREA」と組み合わせることができます

(setq my-dir (list (concat (getenv "HOME")"-BACKSTAGE-AREA")))

そのように保存されたディレクトリ名を取得します

(車の私のディレクトリ)

于 2012-07-30T16:25:33.723 に答える