diff options
| author | Daiki Ueno | 2011-07-08 10:29:29 +0900 |
|---|---|---|
| committer | Daiki Ueno | 2011-07-08 10:29:29 +0900 |
| commit | 47588180c91d0f150a5baa73c0461ebaa5f1b5ce (patch) | |
| tree | 006e5394914d29f4fd4d06eaf073bd74f5299e99 | |
| parent | cd79ce90d966b292c2893a6e5f7f13b5c84477ce (diff) | |
| download | emacs-47588180c91d0f150a5baa73c0461ebaa5f1b5ce.tar.gz emacs-47588180c91d0f150a5baa73c0461ebaa5f1b5ce.zip | |
Revert the plstore editing feature.
| -rw-r--r-- | lisp/gnus/ChangeLog | 6 | ||||
| -rw-r--r-- | lisp/gnus/plstore.el | 135 |
2 files changed, 12 insertions, 129 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 8b6d00e8e1d..a0f2d5809a6 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2011-07-08 Daiki Ueno <ueno@unixuser.org> | ||
| 2 | |||
| 3 | * plstore.el: Revert the editing feature since it is not urgent. | ||
| 4 | (plstore-mode, plstore-mode-toggle-display, plstore-mode-original) | ||
| 5 | (plstore-mode-decoded): Remove. | ||
| 6 | |||
| 1 | 2011-07-07 Lars Magne Ingebrigtsen <larsi@gnus.org> | 7 | 2011-07-07 Lars Magne Ingebrigtsen <larsi@gnus.org> |
| 2 | 8 | ||
| 3 | * gnus-msg.el (gnus-bug): Don't insert user variables. It usually | 9 | * gnus-msg.el (gnus-bug): Don't insert user variables. It usually |
diff --git a/lisp/gnus/plstore.el b/lisp/gnus/plstore.el index aed27340b4d..5f9a61aa843 100644 --- a/lisp/gnus/plstore.el +++ b/lisp/gnus/plstore.el | |||
| @@ -64,18 +64,8 @@ | |||
| 64 | ;; | 64 | ;; |
| 65 | ;; Editing: | 65 | ;; Editing: |
| 66 | ;; | 66 | ;; |
| 67 | ;; This file also provides `plstore-mode', a major mode for editing | 67 | ;; Currently not supported but in the future plstore will provide a |
| 68 | ;; the PLSTORE format file. Visit a non-existing file and put the | 68 | ;; major mode to edit PLSTORE files. |
| 69 | ;; following line: | ||
| 70 | ;; | ||
| 71 | ;; (("foo" :host "foo.example.org" :secret-user "user")) | ||
| 72 | ;; | ||
| 73 | ;; where the prefixing `:secret-' means the property (without | ||
| 74 | ;; `:secret-' prefix) is marked as secret. Thus, when you save the | ||
| 75 | ;; buffer, the `:secret-user' property is encrypted as `:user'. | ||
| 76 | ;; | ||
| 77 | ;; You can toggle the view between encrypted form and the decrypted | ||
| 78 | ;; form with C-c C-c. | ||
| 79 | 69 | ||
| 80 | ;;; Code: | 70 | ;;; Code: |
| 81 | 71 | ||
| @@ -115,10 +105,6 @@ May either be a string or a list of strings.") | |||
| 115 | 105 | ||
| 116 | (put 'plstore-encrypt-to 'permanent-local t) | 106 | (put 'plstore-encrypt-to 'permanent-local t) |
| 117 | 107 | ||
| 118 | (defvar plstore-encoded nil) | ||
| 119 | |||
| 120 | (put 'plstore-encoded 'permanent-local t) | ||
| 121 | |||
| 122 | (defvar plstore-cache-passphrase-for-symmetric-encryption nil) | 108 | (defvar plstore-cache-passphrase-for-symmetric-encryption nil) |
| 123 | (defvar plstore-passphrase-alist nil) | 109 | (defvar plstore-passphrase-alist nil) |
| 124 | 110 | ||
| @@ -206,6 +192,10 @@ May either be a string or a list of strings.") | |||
| 206 | (generate-new-buffer (format " plstore %s" filename)))) | 192 | (generate-new-buffer (format " plstore %s" filename)))) |
| 207 | (store (plstore--make buffer))) | 193 | (store (plstore--make buffer))) |
| 208 | (with-current-buffer buffer | 194 | (with-current-buffer buffer |
| 195 | ;; In the future plstore will provide a major mode called | ||
| 196 | ;; `plstore-mode' to edit PLSTORE files. | ||
| 197 | (if (eq major-mode 'plstore-mode) | ||
| 198 | (error "%s is opened for editing; kill the buffer first" file)) | ||
| 209 | (erase-buffer) | 199 | (erase-buffer) |
| 210 | (condition-case nil | 200 | (condition-case nil |
| 211 | (insert-file-contents-literally file) | 201 | (insert-file-contents-literally file) |
| @@ -443,119 +433,6 @@ If no one is selected, symmetric encryption will be performed. " | |||
| 443 | (plstore--insert-buffer plstore) | 433 | (plstore--insert-buffer plstore) |
| 444 | (save-buffer))) | 434 | (save-buffer))) |
| 445 | 435 | ||
| 446 | (defun plstore--encode (plstore) | ||
| 447 | (plstore--decrypt plstore) | ||
| 448 | (let ((merged-alist (plstore--get-merged-alist plstore))) | ||
| 449 | (concat "(" | ||
| 450 | (mapconcat | ||
| 451 | (lambda (entry) | ||
| 452 | (setq entry (copy-sequence entry)) | ||
| 453 | (let ((merged-plist (cdr (assoc (car entry) merged-alist))) | ||
| 454 | (plist (cdr entry))) | ||
| 455 | (while plist | ||
| 456 | (if (string-match "\\`:secret-" (symbol-name (car plist))) | ||
| 457 | (setcar (cdr plist) | ||
| 458 | (plist-get | ||
| 459 | merged-plist | ||
| 460 | (intern (concat ":" | ||
| 461 | (substring (symbol-name | ||
| 462 | (car plist)) | ||
| 463 | (match-end 0))))))) | ||
| 464 | (setq plist (nthcdr 2 plist))) | ||
| 465 | (prin1-to-string entry))) | ||
| 466 | (plstore--get-alist plstore) | ||
| 467 | "\n") | ||
| 468 | ")"))) | ||
| 469 | |||
| 470 | (defun plstore--decode (string) | ||
| 471 | (let* ((alist (car (read-from-string string))) | ||
| 472 | (pointer alist) | ||
| 473 | secret-alist | ||
| 474 | plist | ||
| 475 | entry) | ||
| 476 | (while pointer | ||
| 477 | (unless (stringp (car (car pointer))) | ||
| 478 | (error "Invalid PLSTORE format %s" string)) | ||
| 479 | (setq plist (cdr (car pointer))) | ||
| 480 | (while plist | ||
| 481 | (when (string-match "\\`:secret-" (symbol-name (car plist))) | ||
| 482 | (setq entry (assoc (car (car pointer)) secret-alist)) | ||
| 483 | (unless entry | ||
| 484 | (setq entry (list (car (car pointer))) | ||
| 485 | secret-alist (cons entry secret-alist))) | ||
| 486 | (setcdr entry (plist-put (cdr entry) | ||
| 487 | (intern (concat ":" | ||
| 488 | (substring (symbol-name | ||
| 489 | (car plist)) | ||
| 490 | (match-end 0)))) | ||
| 491 | (car (cdr plist)))) | ||
| 492 | (setcar (cdr plist) t)) | ||
| 493 | (setq plist (nthcdr 2 plist))) | ||
| 494 | (setq pointer (cdr pointer))) | ||
| 495 | (plstore--make nil alist nil secret-alist))) | ||
| 496 | |||
| 497 | (defun plstore--write-contents-functions () | ||
| 498 | (when plstore-encoded | ||
| 499 | (let ((store (plstore--decode (buffer-string))) | ||
| 500 | (file (buffer-file-name))) | ||
| 501 | (unwind-protect | ||
| 502 | (progn | ||
| 503 | (set-visited-file-name nil) | ||
| 504 | (with-temp-buffer | ||
| 505 | (plstore--insert-buffer store) | ||
| 506 | (write-region (buffer-string) nil file))) | ||
| 507 | (set-visited-file-name file) | ||
| 508 | (set-buffer-modified-p nil)) | ||
| 509 | t))) | ||
| 510 | |||
| 511 | (defun plstore-mode-original () | ||
| 512 | "Show the original form of the this buffer." | ||
| 513 | (interactive) | ||
| 514 | (when plstore-encoded | ||
| 515 | (if (and (buffer-modified-p) | ||
| 516 | (y-or-n-p "Save buffer before reading the original form? ")) | ||
| 517 | (save-buffer)) | ||
| 518 | (erase-buffer) | ||
| 519 | (insert-file-contents-literally (buffer-file-name)) | ||
| 520 | (set-buffer-modified-p nil) | ||
| 521 | (setq plstore-encoded nil))) | ||
| 522 | |||
| 523 | (defun plstore-mode-decoded () | ||
| 524 | "Show the decoded form of the this buffer." | ||
| 525 | (interactive) | ||
| 526 | (unless plstore-encoded | ||
| 527 | (if (and (buffer-modified-p) | ||
| 528 | (y-or-n-p "Save buffer before decoding? ")) | ||
| 529 | (save-buffer)) | ||
| 530 | (let ((store (plstore--make (current-buffer)))) | ||
| 531 | (plstore--init-from-buffer store) | ||
| 532 | (erase-buffer) | ||
| 533 | (insert | ||
| 534 | (substitute-command-keys "\ | ||
| 535 | ;;; You are looking at the decoded form of the PLSTORE file.\n\ | ||
| 536 | ;;; To see the original form content, do \\[plstore-mode-toggle-display]\n\n")) | ||
| 537 | (insert (plstore--encode store)) | ||
| 538 | (set-buffer-modified-p nil) | ||
| 539 | (setq plstore-encoded t)))) | ||
| 540 | |||
| 541 | (defun plstore-mode-toggle-display () | ||
| 542 | "Toggle the display mode of PLSTORE between the original and decoded forms." | ||
| 543 | (interactive) | ||
| 544 | (if plstore-encoded | ||
| 545 | (plstore-mode-original) | ||
| 546 | (plstore-mode-decoded))) | ||
| 547 | |||
| 548 | ;;;###autoload | ||
| 549 | (define-derived-mode plstore-mode emacs-lisp-mode "PLSTORE" | ||
| 550 | "Major mode for editing PLSTORE files." | ||
| 551 | (make-local-variable 'plstore-encoded) | ||
| 552 | (add-hook 'write-contents-functions #'plstore--write-contents-functions) | ||
| 553 | (define-key plstore-mode-map "\C-c\C-c" #'plstore-mode-toggle-display) | ||
| 554 | ;; to create a new file with plstore-mode, mark it as already decoded | ||
| 555 | (if (called-interactively-p 'any) | ||
| 556 | (setq plstore-encoded t) | ||
| 557 | (plstore-mode-decoded))) | ||
| 558 | |||
| 559 | (provide 'plstore) | 436 | (provide 'plstore) |
| 560 | 437 | ||
| 561 | ;;; plstore.el ends here | 438 | ;;; plstore.el ends here |