aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemsen2012-06-17 14:44:46 +0200
committerGravatar Tom Willemsen2012-06-17 14:44:46 +0200
commitd547d846c6abfd4acdd442f274f67f6175c75918 (patch)
treeef6477ff14583ff773403d35bdde023c3e3ba30b
parent99e40ccc0fbe87ba0149983ec84fb2b51ff622cf (diff)
downloaddispass.el-d547d846c6abfd4acdd442f274f67f6175c75918.tar.gz
dispass.el-d547d846c6abfd4acdd442f274f67f6175c75918.zip
Add the -l switch functionality
Using a numeric prefix argument when calling either `dispass' or `dispass-create' will invoke dispass with the -l switch to cut passwords down to a certain size.
-rw-r--r--README.rst10
-rw-r--r--dispass.el54
2 files changed, 51 insertions, 13 deletions
diff --git a/README.rst b/README.rst
index fccc177..d9c922b 100644
--- a/README.rst
+++ b/README.rst
@@ -53,6 +53,16 @@ to generate a new password.
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> test<RET> test<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
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)