LCOV - code coverage report
Current view: top level - lisp - epa-hook.el (source / functions) Hit Total Coverage
Test: tramp-tests.info Lines: 7 20 35.0 %
Date: 2017-08-27 09:44:50 Functions: 2 4 50.0 %

          Line data    Source code
       1             : ;;; epa-hook.el --- preloaded code to enable epa-file.el -*- lexical-binding: t -*-
       2             : ;; Copyright (C) 2006-2017 Free Software Foundation, Inc.
       3             : 
       4             : ;; Author: Daiki Ueno <ueno@unixuser.org>
       5             : ;; Keywords: PGP, GnuPG
       6             : ;; Package: emacs
       7             : 
       8             : ;; This file is part of GNU Emacs.
       9             : 
      10             : ;; GNU Emacs is free software: you can redistribute it and/or modify
      11             : ;; it under the terms of the GNU General Public License as published by
      12             : ;; the Free Software Foundation, either version 3 of the License, or
      13             : ;; (at your option) any later version.
      14             : 
      15             : ;; GNU Emacs is distributed in the hope that it will be useful,
      16             : ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
      17             : ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      18             : ;; GNU General Public License for more details.
      19             : 
      20             : ;; You should have received a copy of the GNU General Public License
      21             : ;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
      22             : 
      23             : ;;; Code:
      24             : 
      25             : (defgroup epa-file nil
      26             :   "The EasyPG Assistant hooks for transparent file encryption"
      27             :   :version "23.1"
      28             :   :group 'epa)
      29             : 
      30             : (defun epa-file--file-name-regexp-set (variable value)
      31           1 :   (set-default variable value)
      32           1 :   (if (fboundp 'epa-file-name-regexp-update)
      33           1 :       (epa-file-name-regexp-update)))
      34             : 
      35             : (defcustom epa-file-name-regexp (purecopy "\\.gpg\\(~\\|\\.~[0-9]+~\\)?\\'")
      36             :   "Regexp which matches filenames to be encrypted with GnuPG.
      37             : 
      38             : If you set this outside Custom while epa-file is already enabled, you
      39             : have to call `epa-file-name-regexp-update' after setting it to
      40             : properly update file-name-handler-alist.  Setting this through Custom
      41             : does that automatically."
      42             :   :type 'regexp
      43             :   :group 'epa-file
      44             :   :set 'epa-file--file-name-regexp-set)
      45             : 
      46             : (defcustom epa-file-inhibit-auto-save t
      47             :   "If non-nil, disable auto-saving when opening an encrypted file."
      48             :   :type 'boolean
      49             :   :group 'epa-file)
      50             : 
      51             : (defvar epa-file-encrypt-to nil
      52             :   "Recipient(s) used for encrypting files.
      53             : May either be a string or a list of strings.")
      54             : 
      55             : (put 'epa-file-encrypt-to 'safe-local-variable
      56             :      #'(lambda (val)
      57             :          (or (stringp val)
      58             :              (and (listp val)
      59             :                   (catch 'safe
      60             :                     (mapc (lambda (elt)
      61             :                             (unless (stringp elt)
      62             :                               (throw 'safe nil)))
      63             :                           val)
      64             :                     t)))))
      65             : 
      66             : (put 'epa-file-encrypt-to 'permanent-local t)
      67             : 
      68             : (defvar epa-file-handler
      69             :   (cons epa-file-name-regexp 'epa-file-handler))
      70             : 
      71             : (defvar epa-file-auto-mode-alist-entry
      72             :   (list epa-file-name-regexp nil 'epa-file))
      73             : 
      74             : (defun epa-file-name-regexp-update ()
      75             :   (interactive)
      76           0 :   (unless (equal (car epa-file-handler) epa-file-name-regexp)
      77           0 :     (setcar epa-file-handler epa-file-name-regexp)))
      78             : 
      79             : (defun epa-file-find-file-hook ()
      80         133 :   (if (and buffer-file-name
      81         133 :            (string-match epa-file-name-regexp buffer-file-name)
      82         133 :            epa-file-inhibit-auto-save)
      83         133 :       (auto-save-mode 0)))
      84             : 
      85             : (define-minor-mode auto-encryption-mode
      86             :   "Toggle automatic file encryption/decryption (Auto Encryption mode).
      87             : With a prefix argument ARG, enable Auto Encryption mode if ARG is
      88             : positive, and disable it otherwise.  If called from Lisp, enable
      89             : the mode if ARG is omitted or nil."
      90             :   :global t :init-value t :group 'epa-file :version "23.1"
      91             :   ;; We'd like to use custom-initialize-set here so the setup is done
      92             :   ;; before dumping, but at the point where the defcustom is evaluated,
      93             :   ;; the corresponding function isn't defined yet, so
      94             :   ;; custom-initialize-set signals an error.
      95             :   :initialize 'custom-initialize-delay
      96           0 :   (setq file-name-handler-alist
      97           0 :         (delq epa-file-handler file-name-handler-alist))
      98           0 :   (remove-hook 'find-file-hooks 'epa-file-find-file-hook)
      99           0 :   (setq auto-mode-alist (delq epa-file-auto-mode-alist-entry
     100           0 :                               auto-mode-alist))
     101           0 :   (when auto-encryption-mode
     102           0 :     (setq file-name-handler-alist
     103           0 :           (cons epa-file-handler file-name-handler-alist))
     104           0 :     (add-hook 'find-file-hook 'epa-file-find-file-hook)
     105           0 :     (setq auto-mode-alist (cons epa-file-auto-mode-alist-entry
     106           0 :                                 auto-mode-alist))))
     107             : 
     108             : (put 'epa-file-handler 'safe-magic t)
     109             : (put 'epa-file-handler 'operations '(write-region insert-file-contents))
     110             : 
     111             : (provide 'epa-hook)
     112             : 
     113             : ;;; epa-hook.el ends here

Generated by: LCOV version 1.12