(gnus-version-number): Bumped version.
[gnus] / lisp / gnus-fun.el
index 766ef1e..5e9d79a 100644 (file)
   :group 'gnus-fun
   :type 'string)
 
+(defcustom gnus-convert-image-to-face-command "djpeg %s | ppmnorm | pnmscale -width 48 -height 48 | ppmquant %d | pnmtopng"
+  "Command for converting a GIF to an X-Face."
+  :group 'gnus-fun
+  :type 'string)
+
 (defun gnus-shell-command-to-string (command)
   "Like `shell-command-to-string' except not mingling ERROR."
   (with-output-to-string
@@ -74,8 +79,54 @@ Output to the current buffer, replace text, and don't mingle error."
      (format gnus-convert-image-to-x-face-command
             (shell-quote-argument file)))))
 
+;;;###autoload
+(defun gnus-face-from-file (file)
+  "Return an Face header based on an image file."
+  (interactive "fImage file name:" )
+  (when (file-exists-p file)
+    (let ((done nil)
+         (attempt "")
+         (step 72)
+         (quant 16))
+      (while (and (not done)
+                 (> quant 1))
+       (setq attempt
+             (gnus-shell-command-to-string
+              (format gnus-convert-image-to-face-command
+                      (shell-quote-argument file)
+                      quant)))
+       (if (> (length attempt) 740)
+           (progn
+             (setq quant (- quant 2))
+             (message "Length %d; trying quant %d"
+                      (length attempt) quant))
+         (setq done t)))
+      (if done
+         (mm-with-unibyte-buffer       
+           (insert attempt)
+           (base64-encode-region (point-min) (point-max))
+           (goto-char (point-min))
+           (while (search-forward "\n" nil t)
+             (replace-match ""))
+           (goto-char (point-min))
+           (while (> (- (point-max) (point))
+                     step)
+             (forward-char step)
+             (insert "\n ")
+             (setq step 76))
+           (buffer-string))
+       nil))))
+
+;;;###autoload
+(defun gnus-convert-face-to-png (face)
+  (mm-with-unibyte-buffer
+    (insert face)
+    (base64-decode-region (point-min) (point-max))
+    (buffer-string)))
+
 (defun gnus-convert-image-to-gray-x-face (file depth)
-  (let* ((mapfile (make-temp-name (expand-file-name "gnus." mm-tmp-directory)))
+  (let* ((mapfile (mm-make-temp-file (expand-file-name "gnus." 
+                                                      mm-tmp-directory)))
         (levels (expt 2 depth))
         (step (/ 255 (1- levels)))
         color-alist bits bits-list mask pixel x-faces)
@@ -239,22 +290,6 @@ colors of the displayed X-Faces."
     (gnus-convert-image-to-gray-x-face (concat file ".gif") 3)
     (delete-file (concat file ".gif"))))
 
-(defun gnus-respond-to-confirmation ()
-  "Respond to a Gmane confirmation message."
-  (interactive)
-  (gnus-summary-show-article 'raw)
-  (set-buffer gnus-article-buffer)
-  (let ((buffer-read-only nil))
-    (goto-char (point-min))
-    (gnus-article-goto-header "Original-To")
-    (replace-match "To:"))
-  (message-wide-reply)
-  (goto-char (point-min))
-  (gnus-article-goto-header "Cc")
-  (replace-match "From:")
-  (message-goto-body)
-  (delete-region (point) (point-max)))
-
 (provide 'gnus-fun)
 
 ;;; gnus-fun.el ends here