Subscribed unsubscribe Subscribe Subscribe

defcustomで定義された変数はcustom-set-variablesで変更すべき?

このへんがよく分かっていない。
anything-command-map-prefix-keyを設定しようとして、起動時の設定ファイルで

(require 'anything-config)
(setq anything-command-map-prefix-key "C-z")

のように設定しても、この変数は確かに設定されるのだけど、実際に設定されているキーバインド

<f5> a          anything-command-map

となっていて、変更されていない。
このあたりの定義はanything-config.el

(defun anything-set-anything-command-map-prefix-key (var key)
  (declare (special anything-command-map-prefix-key))
  (when (boundp 'anything-command-map-prefix-key)
    (global-unset-key (read-kbd-macro anything-command-map-prefix-key)))
  (setq anything-command-map-prefix-key key)
  (global-set-key (read-kbd-macro anything-command-map-prefix-key)
                  'anything-command-map))

(defcustom anything-command-map-prefix-key "<f5> a"
  :type 'string
  :set 'anything-set-anything-command-map-prefix-key
  :group 'anything-config)

というかんじになっている。これはもう読み込まれた時点でデフォルト値" a"を使ってglobal-set-keyに登録されてしまうから、そのあとでsetqでanything-command-map-prefix-keyを変更しても意味が無い、ということだろうか。

一方、customizeを使って変数を設定したときに生成される

(require 'anything-config)
(custom-set-variables '(anything-command-map-prefix-key "C-z"))

というのを設定しておくと、ちゃんと

C-z             anything-command-map

と設定される。custom-set-variablesの場合は設定後でもすべて上書きしてくれる、ということなのかな…?


変数の設定は基本的にcustom-set-variablesを使った方が良いのだろうか。もしくはsetq-default
正しい変数設定の仕方とは。。。