(defun gnus-shell-command-to-string (command)
"Like `shell-command-to-string' except not mingling ERROR."
(with-output-to-string
- (call-process shell-file-name nil (list standard-output nil)
+ (call-process shell-file-name nil (list standard-output nil)
nil shell-command-switch command)))
(defun gnus-shell-command-on-region (start end command)
"A simplified `shell-command-on-region'.
Output to the current buffer, replace text, and don't mingle error."
- (call-process-region start end shell-file-name t
- (list (current-buffer) nil)
+ (call-process-region start end shell-file-name t
+ (list (current-buffer) nil)
nil shell-command-switch command))
;;;###autoload
(shell-quote-argument file)))))
(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)
(let* ((depth (length faces))
(scale (/ 255 (1- (expt 2 depth))))
(ok-p t)
- bit-list bit-lists pixels pixel)
- (dolist (face faces)
- (setq bit-list nil)
- (with-temp-buffer
+ (coding-system-for-read 'binary)
+ (coding-system-for-write 'binary)
+ (input-coding-system 'binary)
+ (output-coding-system 'binary)
+ default-enable-multibyte-characters
+ start bit-array bit-arrays pixel)
+ (with-temp-buffer
+ (dolist (face faces)
+ (erase-buffer)
(insert (uncompface face))
(gnus-shell-command-on-region
(point-min) (point-max)
"pnmnoraw")
(goto-char (point-min))
(forward-line 2)
+ (setq start (point))
+ (insert "[")
(while (not (eobp))
- (cond
- ((eq (following-char) ?0)
- (push 0 bit-list))
- ((eq (following-char) ?1)
- (push 1 bit-list)))
- (forward-char 1)))
- (unless (= (length bit-list) (* 48 48))
- (setq ok-p nil))
- (push bit-list bit-lists))
- (when ok-p
- (dotimes (i (* 48 48))
- (setq pixel 0)
- (dotimes (plane depth)
- (setq pixel (+ (* pixel 2) (nth i (nth plane bit-lists)))))
- (push pixel pixels))
- (with-temp-buffer
+ (forward-char 1)
+ (insert " "))
+ (insert "]")
+ (goto-char start)
+ (setq bit-array (read (current-buffer)))
+ (unless (= (length bit-array) (* 48 48))
+ (setq ok-p nil))
+ (push bit-array bit-arrays))
+ (when ok-p
+ (erase-buffer)
(insert "P2\n48 48\n255\n")
- (dolist (pixel pixels)
+ (dotimes (i (* 48 48))
+ (setq pixel 0)
+ (dotimes (plane depth)
+ (setq pixel (+ (* pixel 2) (aref (nth plane bit-arrays) i))))
(insert (number-to-string (* scale pixel)) " "))
(gnus-shell-command-on-region
(point-min) (point-max)