From 312e06ecabec90fcb911bdf41fceadd999ab8026 Mon Sep 17 00:00:00 2001 From: Tom Willemsen Date: Sat, 15 Sep 2012 16:09:41 +0200 Subject: Add completion for dispass and use dispass-labels Using `dispass-labels' and parsing its results is probably better than reading and parsing the file itself. --- dispass.el | 67 +++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 23 deletions(-) diff --git a/dispass.el b/dispass.el index 5f885b0..a3be9e4 100644 --- a/dispass.el +++ b/dispass.el @@ -4,7 +4,7 @@ ;; Author: Tom Willemsen ;; Created: Jun 8, 2012 -;; Version: 1 +;; Version: 1.1 ;; Keywords: processes ;; URL: http://ryuslash.org/projects/dispass.el.html @@ -104,6 +104,10 @@ ;; - Fix the regular expression used in `dispass-process-filter-for' ;; to support DisPass v0.1a8. +;; 1.1 - Use `dispass-label' to get a list of labels the user has +;; made, use this for `dispass-list-labels' and adding +;; completion options for `dispass'. + ;;; Code: (defgroup dispass nil "Customization options for the DisPass wrapper." @@ -122,6 +126,13 @@ :type '(string) :risky t) +(defcustom dispass-labels-executable "dispass-label" + "The location of the dispass-label executable." + :package-version '(dispass . "1.1") + :group 'dispass + :type 'string + :risky t) + (defcustom dispass-file "~/.dispass" "The location of your dispass file." :package-version '(dispass . "1") @@ -193,6 +204,32 @@ an eye out for LABEL." (set-process-sentinel proc 'dispass-process-sentinel) (set-process-filter proc (dispass-process-filter-for label)))) +(defun dispass-get-labels () + "Get the list of labels and their information." + (let ((result '())) + (with-temp-buffer + (shell-command (concat dispass-labels-executable + " -l --script") + (current-buffer)) + (while (re-search-forward + "^\\(\\(?:\\sw\\|\\s_\\)+\\) +\\([0-9]+\\) +\\(\\(?:\\sw\\|\\s_\\)+\\)" + nil t) + (let ((label (match-string 1)) + (length (match-string 2)) + (hashmethod (match-string 3))) + (add-to-list 'result + (list label + `[(,label + face link + help-echo ,(concat "Generate passphrase for " label) + follow-link t + dispass-label ,label + dispass-length ,length + action dispass-from-button) + ,length + ,hashmethod]))))) + result)) + ;;;###autoload (defun dispass-create (label &optional length) "Create a new password for LABEL." @@ -204,7 +241,11 @@ an eye out for LABEL." ;;;###autoload (defun dispass (label &optional length) "Recreate a password previously used." - (interactive "MLabel: \nP") + (interactive (list + (completing-read + "Label: " (mapcar (lambda (elm) (elt elm 0)) + (dispass-get-labels))) + current-prefix-arg)) (let ((length (or length dispass-default-length))) (dispass-start-process label nil length))) @@ -250,27 +291,7 @@ thrown." (setq tabulated-list-entries nil) (let ((tmp-list '())) - (with-temp-buffer - (insert-file-contents dispass-file) - (while (re-search-forward - "\\(\\(?:\\sw\\|\\s_\\)+\\) .*length=\\([0-9]+\\) .*hash=\\(\\sw+\\)$" - nil t) - (let ((label (match-string 1)) - (length (match-string 2)) - (hashmethod (match-string 3))) - (add-to-list 'tmp-list - `(,label - [(,label - face link - help-echo ,(concat "Generate passphrase for " - label) - follow-link t - dispass-label ,label - dispass-length ,length - action dispass-from-button) - ,length - ,hashmethod]))))) - (setq tabulated-list-entries tmp-list))) + (setq tabulated-list-entries (dispass-get-labels)))) (define-derived-mode dispass-labels-mode tabulated-list-mode "DisPass" "Major mode for listing dispass labels. -- cgit v1.2.3-54-g00ecf