X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=epg-config.el;h=a7c9e5b2d7fd7978b94d31f6fdcbad363ebfa3b3;hb=72d762d1971731259967fb61a4e784ac747ecaa2;hp=c3b31e316e7c24ddb53cc9eeafad797e2ce86562;hpb=214e5ad332002559546cf83e950255ebf420d7a9;p=elisp%2Fepg.git diff --git a/epg-config.el b/epg-config.el index c3b31e3..a7c9e5b 100644 --- a/epg-config.el +++ b/epg-config.el @@ -38,34 +38,65 @@ :type 'string) (defcustom epg-gpg-home-directory nil - "The directory which contains the `gpg' configuration files." + "The directory which contains the configuration files of `epg-gpg-program'." :group 'epg :type '(choice (const :tag "Default" nil) directory)) -(defconst epg-version-number "0.0.4") +(defcustom epg-passphrase-coding-system nil + "Coding system to use with messages from `epg-gpg-program'." + :group 'epg + :type 'symbol) + +(defcustom epg-debug nil + "If non-nil, debug output goes to the \" *epg-debug*\" buffer. +Note that the buffer name starts with a space." + :group 'epg + :type 'boolean) + +(defconst epg-version-number "0.0.9") (defconst epg-gpg-minimum-version "1.4.3") ;;;###autoload (defun epg-configuration () "Return a list of internal configuration parameters of `epg-gpg-program'." - (let (config type) + (let (config groups type args) (with-temp-buffer (apply #'call-process epg-gpg-program nil (list t nil) nil - '("--with-colons" "--list-config")) + (append (if epg-gpg-home-directory + (list "--homedir" epg-gpg-home-directory)) + '("--with-colons" "--list-config"))) (goto-char (point-min)) (while (re-search-forward "^cfg:\\([^:]+\\):\\(.*\\)" nil t) (setq type (intern (match-string 1)) - config (cons (cons type - (if (memq type - '(pubkey cipher digest compress)) - (mapcar #'string-to-number - (delete "" (split-string - (match-string 2) - ";"))) - (match-string 2))) - config)))) - config)) + args (match-string 2)) + (cond + ((eq type 'group) + (if (string-match "\\`\\([^:]+\\):" args) + (setq groups + (cons (cons (downcase (match-string 1 args)) + (delete "" (split-string + (substring args + (match-end 0)) + ";"))) + groups)) + (if epg-debug + (message "Invalid group configuration: %S" args)))) + ((memq type '(pubkey cipher digest compress)) + (if (string-match "\\`\\([0-9]+\\)\\(;[0-9]+\\)*" args) + (setq config + (cons (cons type + (mapcar #'string-to-number + (delete "" (split-string args ";")))) + config)) + (if epg-debug + (message "Invalid %S algorithm configuration: %S" + type args)))) + (t + (setq config (cons (cons type args) config)))))) + (if groups + (cons (cons 'groups groups) config) + config))) (defun epg-config--parse-version (string) (let ((index 0) @@ -78,11 +109,8 @@ (defun epg-config--compare-version (v1 v2) (while (and v1 v2 (= (car v1) (car v2))) - (setq v1 (cdr v1) - v2 (cdr v2))) - (setq v1 (or (car v1) 0) - v2 (or (car v2) 0)) - (if (> v1 v2) 1 (if (= v1 v2) 0 -1))) + (setq v1 (cdr v1) v2 (cdr v2))) + (- (or (car v1) 0) (or (car v2) 0))) ;;;###autoload (defun epg-check-configuration (config &optional minimum-version) @@ -99,6 +127,14 @@ (unless (>= (epg-config--compare-version version minimum-version) 0) (error "Unsupported version: %s" (cdr entry))))) +;;;###autoload +(defun epg-expand-group (config group) + "Look at CONFIG and try to expand GROUP." + (let ((entry (assq 'groups config))) + (if (and entry + (setq entry (assoc (downcase group) (cdr entry)))) + (cdr entry)))) + (provide 'epg-config) ;;; epg-config.el ends here