[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

Re: saving a buffer without images



In [emacs-w3m : No.12595]
	On Tue, 06 Sep 2016 17:44:30 -0400, Boruch Baum wrote:
> Here is a proposal for a one-line change to function `w3m-save-buffer'
> to make life easier for those of us who view web pages without images,
> or who never want to save images along with html.

> The diff is considerably longer than a single line because:

Long diff is ok, but please use the ways like the following to
generate a diff and send it as a MIME part from the next time.

% diff -au file-OLD file-NEW > DIFF
% diff -aruN directory-OLD directory-NEW > DIFF

Using a unified diff is a convention in at least the Emacs world
today, see: <http://lists.gnu.org/archive/html/emacs-diffs/>.
Using a MIME part keeps a diff unbreakable by the email encoding,
that uses utf-8 or something whereas many emacs-w3m files use
iso-2022-7bit.

> * the change includes defining a new customizable variable
> * documentation
> * typo corrections of functions caddr cadar

I believe caddr is not a typo:
  (setq bname (cadr (assoc img imgs))
        ext (caddr (assoc img imgs)))
Where `imgs' includes:
  (("url" "file-basename" "file-extention")...)
cadar is not a typo either:
  (cadar w3m-history)
See the variable documentation of `w3m-history'.

> * change of parameter name `no-image' to `no-images'
> * there seems to be a bug in the function call to
>   `w3m-history-set-current', so that function call was removed in
>   order to illustrate an error-free test.

Why bug?  After saving a w3m buffer, `w3m-view-next-page' in the
buffer shows the saved one as designed.

> diff appended in-line and attached.
Replaced it with the unified version (the full text is attached).

-(defun w3m-save-buffer (name &optional no-image)
-  "Save the current page and its image data in NAME.html and NAME-files/.
+(defun w3m-save-buffer (name &optional no-images)
+  "Save the current buffer as `w3m-save-buffer-directory'/NAME.html,
+and...

+(defcustom w3m-save-buffer-html-only nil
+  "If nil, `w3m-save-buffer' will save the images of a buffer in

The docstring should mention what it is in one line:
,---- (info "(elisp)Documentation Tips")
| • Format the documentation string so that it fits in an Emacs window
|   on an 80-column screen.  It is a good idea for most lines to be no
|   wider than 60 characters.  The first line should not be wider than
|   67 characters or it will look bad in the output of ‘apropos’.
`----
Not a few emacs-w3m objects violate it though.

The idea of `w3m-save-buffer-html-only' is acceptable, but
the variable name and its docstring don't mention that it is
a complement operator:

+       (no-images (if no-images
+                      (not w3m-save-buffer-html-only)
+                    w3m-save-buffer-html-only))

And `no-images' is not necessary to be `let'-bound because it is
already bound as a function argument.

BTW, there seems to be another way to achieve your personal
purpose in a simple way, e.g.:

Attachment: bin54qsCksC5R.bin
Description: application/emacs-lisp

Regards,
--- w3m-save.el~	2016-08-18 23:15:23.920675800 +0000
+++ w3m-save.el	2016-09-07 00:26:10.026789100 +0000
@@ -43,12 +43,25 @@
   :group 'w3m
   :type 'boolean)
 
-(defun w3m-save-buffer (name &optional no-image)
-  "Save the current page and its image data in NAME.html and NAME-files/.
-Those files will be saved in `w3m-save-buffer-directory' by default.
-No image will be saved if the prefix argument (the optional NO-IMAGE)
-is given.  The saved page will be added to the history list, and be
-viewable using `w3m-next-page'."
+(defcustom w3m-save-buffer-html-only nil
+  "If nil, `w3m-save-buffer' will save the images of a buffer in
+addition to the buffer's html. If the buffer was originally
+loaded without images, the images will now be retrieved. The
+value of this variable may be over-ridden at run-time by passing
+a prefix argument to function `w3m-save-buffer'."
+  :group 'w3m
+  :type 'boolean)
+
+(defun w3m-save-buffer (name &optional no-images)
+  "Save the current buffer as `w3m-save-buffer-directory'/NAME.html,
+and optionally save the buffer's associated image files in
+folder `w3m-save-buffer-directory'/NAME-files/. Use of
+`w3m-save-buffer-directory' may be over-ridden by including a
+folder path in NAME. Variable `w3m-save-buffer-html-only'
+determines whether images will be save by default, but that
+setting may be over-ridden using the prefix argument (the
+optional NO-IMAGES). The saved page will be added to the
+history list, and be viewable using `w3m-next-page'."
   (interactive
    (if (and w3m-current-url
 	    (or (not (string-match "\\`[\C-@- ]*\\'\\|\\`about:\\|\\`file:"
@@ -74,6 +87,9 @@
   (let ((url w3m-current-url)
 	(w3m-prefer-cache w3m-save-buffer-use-cache)
 	(case-fold-search t)
+	(no-images (if no-images
+		       (not w3m-save-buffer-html-only)
+		     w3m-save-buffer-html-only))
 	subdir type st base regexp sdir charset ibuf imgs nd img bads bname
 	ext num bn)
     (unless (and url
@@ -93,7 +109,7 @@
     (unless (file-name-directory name)
       (setq name (expand-file-name name w3m-save-buffer-directory)))
     (setq subdir (concat (file-name-sans-extension name) "-files"))
-    (cond ((and (not no-image) (file-exists-p name) (file-exists-p subdir))
+    (cond ((and (not no-images) (file-exists-p name) (file-exists-p subdir))
 	   (if (yes-or-no-p
 		(format "#1=%s and #1#-files/ already exist in %s, overwrite? "
 			(file-name-nondirectory name)
@@ -106,7 +122,7 @@
 	   (if (yes-or-no-p (format "%s already exists, overwrite? " name))
 	       (delete-file name)
 	     (keyboard-quit)))
-	  ((and (not no-image) (file-exists-p subdir))
+	  ((and (not no-images) (file-exists-p subdir))
 	   (if (yes-or-no-p (format "%s already exists, overwrite? " subdir))
 	       (delete-directory subdir t)
 	     (keyboard-quit))))
@@ -139,7 +155,7 @@
 		    (delete-region (match-beginning 1) (match-end 1)))))
 	(goto-char st))
       ;; Save images into `subdir'.
-      (unless no-image
+      (unless no-images
 	(make-directory subdir t)
 	(setq sdir (file-name-nondirectory (directory-file-name subdir)))
 	(when (and (setq charset (or (w3m-arrived-content-charset url)
@@ -160,7 +176,7 @@
 		   ((member img bads) nil)
 		   ((assoc img imgs)
 		    (setq bname (cadr (assoc img imgs))
-			  ext (caddr (assoc img imgs)))
+			  ext (car (assoc img imgs)))
 		    t)
 		   (t
 		    (with-current-buffer
@@ -206,12 +222,7 @@
 	  (unless imgs (delete-directory subdir))))
       (unless (file-exists-p (file-name-directory name))
 	(make-directory (file-name-directory name) t))
-      (write-region (point-min) (point-max) name))
-    (w3m-history-set-current
-     (prog1
-	 (cadar w3m-history)
-       (w3m-history-push (concat "file://" name)
-			 (list :title (or w3m-current-title "<no-title>")))))))
+      (write-region (point-min) (point-max) name))))
 
 (provide 'w3m-save)