aboutsummaryrefslogtreecommitdiffstats
path: root/dispass.el
diff options
context:
space:
mode:
Diffstat (limited to 'dispass.el')
-rw-r--r--dispass.el54
1 files changed, 41 insertions, 13 deletions
diff --git a/dispass.el b/dispass.el
index b4a7485..c171273 100644
--- a/dispass.el
+++ b/dispass.el
@@ -4,7 +4,7 @@
;; Author: Tom Willemsen <tom@ryuslash.org>
;; Created: Jun 8, 2012
-;; Version: 0.1a7.2
+;; Version: 0.1a7.3
;; Keywords: encryption, security
;; Permission to use, copy, modify, and distribute this software for any
@@ -50,6 +50,16 @@
;; The only real difference between the two is that `dispass-create'
;; asks to confirm the password. Both will ask for a label.
+;; When a numeric argument is used when calling either
+;; `dispass-create' or `dispass', that argument is sent to the dispass
+;; program along with the -l switch. This cuts the length of the
+;; password to that many characters. For example:
+
+;; C-5 M-x dispass<RET>
+
+;; will generate a password of 5 characters for label "test" and
+;; password "test".
+
;; Once a password has been generated it is inserted into the kill
;; ring and the system's clipboard so it can be easily inserted into
;; password field, this makes the generated password easy to see in
@@ -63,14 +73,22 @@
;; 0.1a7.2 - Kill buffer whenever we're finished with it.
+;; 0.1a7.3 - Add the possility to cut passwords short by using a
+;; numeric prefix argument.
+
+;; - Add `dispass-executable' which holds the location of the
+;; dispass executable script.
+
;;; Code:
+(defvar dispass-executable "dispass"
+ "The location of the dispass executable")
(defun dispass-process-sentinel (proc status)
"Report PROC's status change to STATUS."
(let ((status (substring status 0 -1))
(buffer (process-buffer proc)))
(unless (string-equal status "finished")
- (message "dispass %s" (substring status 0 -1)))
+ (message "dispass %s" status))
(unless (eq (current-buffer) proc)
(kill-buffer buffer))))
@@ -91,7 +109,7 @@ an eye out for LABEL."
(process-send-string proc
(concat (read-passwd string nil) "\n")))
- ((string-match (concat "^[ ]+" ,label " \\(.\\{30\\}\\)$")
+ ((string-match (concat "^[ \t]*" ,label "[ \t]*\\(.+\\)$")
string)
(let ((buffer (process-buffer proc)))
(with-current-buffer buffer
@@ -102,25 +120,35 @@ an eye out for LABEL."
(unless (eq (process-status proc) 'run)
(kill-buffer buffer))))))))
-(defun dispass-start-process (label &optional create)
+(defun dispass-start-process (label create length)
"Start dispass process. When CREATE is non-nil send along the
- -c switch to make it ask for a password twice."
- (let ((proc (start-process "dispass" "*dispass*" "dispass"
- (if create "-co" "-o") label)))
+ -c switch to make it ask for a password twice. When LENGTH is
+ an integer and greater than 0, send along the -l switch with
+ LENGTH."
+ (let ((args `("-o" ,label))
+ proc)
+ (when create
+ (setq args (append '("-c") args)))
+
+ (when (and (integerp length) (> length 0))
+ (setq args (append `("-l" ,(number-to-string length)) args)))
+
+ (setq proc (apply 'start-process "dispass" "*dispass*"
+ dispass-executable args))
(set-process-sentinel proc 'dispass-process-sentinel)
(set-process-filter proc (dispass-process-filter-for label))))
;;;###autoload
-(defun dispass-create (label)
- (interactive "MLabel: ")
+(defun dispass-create (label &optional length)
+ (interactive "MLabel: \nP")
"Create a new password for LABEL."
- (dispass-start-process label t))
+ (dispass-start-process label t length))
;;;###autoload
-(defun dispass (label)
- (interactive "MLabel: ")
+(defun dispass (label &optional length)
+ (interactive "MLabel: \nP")
"Recreate a password previously used."
- (dispass-start-process label))
+ (dispass-start-process label nil length))
(provide 'dispass)