From d547d846c6abfd4acdd442f274f67f6175c75918 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sun, 17 Jun 2012 14:44:46 +0200 Subject: 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. --- README.rst | 10 ++++++++++ dispass.el | 54 +++++++++++++++++++++++++++++++++++++++++------------- 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 test test + +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 ;; 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 + +;; 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) -- cgit v1.2.3-54-g00ecf