;; Keywords: crypto
;; Created: 2000-04-15
-;; $Id: gpg.el,v 1.1 2000/11/04 12:22:17 zsh Exp $
+;; $Id: gpg.el,v 1.7 2000/12/15 04:50:15 zsh Exp $
;; This file is NOT (yet?) part of GNU Emacs.
(eval-when-compile
(require 'cl))
+(defalias 'gpg-point-at-eol
+ (if (fboundp 'point-at-eol)
+ 'point-at-eol
+ 'line-end-position))
+
;;;; Customization:
;;; Customization: Groups:
;;; Customization: Widgets:
-(define-widget 'gpg-command-alist 'alist
- "An association list for GnuPG command names."
- :key-type '(symbol :tag "Abbreviation")
- :value-type '(string :tag "Program name")
- :convert-widget 'widget-alist-convert-widget
- :tag "Alist")
+(if (get 'alist 'widget-type)
+ (define-widget 'gpg-command-alist 'alist
+ "An association list for GnuPG command names."
+ :key-type '(symbol :tag "Abbreviation")
+ :value-type '(string :tag "Program name")
+ :convert-widget 'widget-alist-convert-widget
+ :tag "Alist")
+ (define-widget 'gpg-command-alist 'repeat
+ "An association list for GnuPG command names."
+ :args '((cons :format "%v"
+ (symbol :tag "Abbreviation")
+ (string :tag "Program name")))
+ :tag "Alist"))
(define-widget 'gpg-command-program 'choice
"Widget for entering the name of a program (mostly the GnuPG binary)."
(when gpg-command-passphrase-env
;; This will clear the variable if it wasn't set before.
(setenv (car gpg-command-passphrase-env) ,env-value))))))
+(put 'gpg-with-passphrase-env 'lisp-indent-function 0)
+(put 'gpg-with-passphrase-env 'edebug-form-spec '(body))
;;; Temporary files:
(defun gpg-make-temp-file ()
"Create a temporary file in a safe way"
- (let ((name (concat gpg-temp-directory "/gnupg")))
+ (let ((name ;; User may use "~/"
+ (expand-file-name "gnupg" gpg-temp-directory)))
(if (fboundp 'make-temp-file)
;; If we've got make-temp-file, we are on the save side.
(make-temp-file name)
;; make-temp-name doesn't create the file, and an ordinary
;; write-file operation is prone to nasty symlink attacks if the
;; temporary file resides in a world-writable directory.
- (unless (eq (file-modes gpg-temp-directory) 448) ; mode 0700
+ (unless (or (memq system-type '(windows-nt cygwin32 win32 w32 mswindows))
+ (eq (file-modes gpg-temp-directory) 448)) ; mode 0700
(error "Directory for temporary files must have mode 0700."))
(setq name (make-temp-name name))
(let ((mode (default-file-modes)))
(gpg-with-temp-files-create ,count)
,@body)
(gpg-with-temp-files-delete))))
+(put 'gpg-with-temp-files 'lisp-indent-function 1)
+(put 'gpg-with-temp-files 'edebug-form-spec '(body))
;;; Making subprocesses:
(apply 'call-process-region (point-min) (point-max) cpr-args)
;; Wipe out passphrase.
(goto-char (point-min))
- (translate-region (point) (line-end-position)
+ (translate-region (point) (gpg-point-at-eol)
(make-string 256 ? )))
(if (listp stdin)
(with-current-buffer (car stdin)
(unwind-protect
(gpg-show-result-buffer ,always-show (progn ,@body))
(kill-buffer gpg-result-buffer))))
+(put 'gpg-show-result 'lisp-indent-function 1)
+(put 'gpg-show-result 'edebug-form-spec '(body))
;;; Passphrase handling:
(timer-relative-time (current-time)
gpg-passphrase-timeout))
(timer-set-function gpg-passphrase-timer 'gpg-passphrase-forget)
- (timer-activate gpg-passphrase-timer)
+ (unless (and (fboundp 'itimer-live-p)
+ (itimer-live-p gpg-passphrase-timer))
+ (timer-activate gpg-passphrase-timer))
(setq gpg-passphrase passphrase))
passphrase)
-
+
(defun gpg-passphrase-read ()
"Read a passphrase and remember it for some time."
(interactive)
(defun gpg-key-lessp (a b)
"Returns t if primary user ID of A is less than B."
- (let ((res (compare-strings (gpg-key-primary-user-id a) 0 nil
- (gpg-key-primary-user-id b) 0 nil
- t)))
- (if (eq res t)
- nil
- (< res 0))))
+ (string-lessp (gpg-key-primary-user-id a) (gpg-key-primary-user-id b) ))
;;; Accessing the key database:
(defun gpg-key-list-keys-parse-line ()
"Parse the line in the current buffer and return a vector of fields."
- (let* ((eol (line-end-position))
+ (let* ((eol (gpg-point-at-eol))
(v (if (eolp)
nil
(vector