* mime-image.el (image-insert-at-point): Check the number of the
[elisp/semi.git] / pgg.el
diff --git a/pgg.el b/pgg.el
index c702ac0..e6fa06d 100644 (file)
--- a/pgg.el
+++ b/pgg.el
@@ -188,11 +188,12 @@ and END to the keyring.")
     status))
 
 ;;;###autoload
-(defun pgg-sign-region (start end)
+(defun pgg-sign-region (start end &optional cleartext)
   (interactive "r")
   (let* ((entity (pgg-make-scheme pgg-default-scheme))
         (status (luna-send entity 'sign-region 
-                           entity start end (interactive-p))))
+                           entity start end 
+                           (or (interactive-p) cleartext))))
     (when (interactive-p)
       (if status
          (progn
@@ -228,7 +229,8 @@ and END to the keyring.")
         status)
     (and (stringp key)
         (setq key (concat "0x" (pgg-truncate-key-identifier key)))
-        (null (pgg-lookup-key-string key))
+        (null (let ((pgg-scheme scheme))
+                (pgg-lookup-key-string key)))
         (or fetch (interactive-p))
         (y-or-n-p (format "Key %s not found; attempt to fetch? " key))
         (setq keyserver 
@@ -350,6 +352,33 @@ and END to the keyring.")
 (defun pgg-remove-passphrase-cache (key)
   (unintern key pgg-passphrase-cache))
 
+(defmacro pgg-convert-lbt-region (start end lbt)
+  `(let ((pgg-conversion-end (set-marker (make-marker) ,end)))
+     (goto-char ,start)
+     (case ,lbt
+       (CRLF
+       (while (progn 
+                (end-of-line) 
+                (> (marker-position pgg-conversion-end) (point)))
+         (insert "\r")
+         (forward-line 1)))
+       (LF
+       (while (re-search-forward "\r$" pgg-conversion-end t)
+         (replace-match ""))))
+     ))
+
+(put 'pgg-as-lbt 'lisp-indent-function 3)
+
+(defmacro pgg-as-lbt (start end lbt &rest body)
+  `(let ((inhibit-read-only t)
+        buffer-read-only
+        buffer-undo-list)
+     (pgg-convert-lbt-region ,start ,end ,lbt)
+     (let ((,end (point)))
+       ,@body)
+     (push nil buffer-undo-list)
+     (undo)))
+
 
 ;;; @ postprocess macros
 ;;;