changeset 110804:30fed27e97bc

Merge changes made in Gnus trunk. nnimap.el (nnimap-request-rename-group): Add this method. shr.el: Keep track of the natural width of TD elements, so we know which ones to expand. shr.el: Expand TD elements to fill available space.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Thu, 07 Oct 2010 11:46:01 +0000
parents e5dfbfe93896
children 6bcb1cd1309b
files lisp/gnus/ChangeLog lisp/gnus/nnimap.el lisp/gnus/shr.el
diffstat 3 files changed, 62 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Thu Oct 07 13:40:42 2010 +0200
+++ b/lisp/gnus/ChangeLog	Thu Oct 07 11:46:01 2010 +0000
@@ -1,3 +1,12 @@
+2010-10-07  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+	* shr.el (shr-table-widths): Expand TD elements to fill available
+	space.
+
+2010-10-07  Julien Danjou  <julien@danjou.info>
+
+	* nnimap.el (nnimap-request-rename-group): Add this method.
+
 2010-10-07  Katsumi Yamaoka  <yamaoka@jpl.org>
 
 	* gnus-html.el (gnus-html-schedule-image-fetching): Remove function
--- a/lisp/gnus/nnimap.el	Thu Oct 07 13:40:42 2010 +0200
+++ b/lisp/gnus/nnimap.el	Thu Oct 07 11:46:01 2010 +0000
@@ -652,6 +652,11 @@
     (with-current-buffer (nnimap-buffer)
       (car (nnimap-command "DELETE %S" (utf7-encode group t))))))
 
+(deffoo nnimap-request-rename-group (group new-name &optional server)
+  (when (nnimap-possibly-change-group nil server)
+    (with-current-buffer (nnimap-buffer)
+      (car (nnimap-command "RENAME %S %S" (utf7-encode group t) (utf7-encode new-name t))))))
+
 (deffoo nnimap-request-expunge-group (group &optional server)
   (when (nnimap-possibly-change-group group server)
     (with-current-buffer (nnimap-buffer)
--- a/lisp/gnus/shr.el	Thu Oct 07 13:40:42 2010 +0200
+++ b/lisp/gnus/shr.el	Thu Oct 07 11:46:01 2010 +0000
@@ -184,7 +184,8 @@
 	   ((and (or (not first)
 		     (eq shr-state 'space))
 		 (> (+ column (length elem) 1) shr-width))
-	    (insert "\n"))
+	    (insert "\n")
+	    (put-text-property (1- (point)) (point) 'shr-break t))
 	   ((not first)
 	    (insert " "))))
 	(setq first nil)
@@ -459,7 +460,7 @@
 	 ;; be smaller (if there's little text) or bigger (if there's
 	 ;; unbreakable text).
 	 (sketch (shr-make-table cont suggested-widths))
-	 (sketch-widths (shr-table-widths sketch (length suggested-widths))))
+	 (sketch-widths (shr-table-widths sketch suggested-widths)))
     ;; Then render the table again with these new "hard" widths.
     (shr-insert-table (shr-make-table cont sketch-widths t) sketch-widths))
   ;; Finally, insert all the images after the table.  The Emacs buffer
@@ -490,7 +491,7 @@
 	(insert "|\n"))
       (dolist (column row)
 	(goto-char start)
-	(let ((lines (split-string (nth 2 column) "\n"))
+	(let ((lines (nth 2 column))
 	      (overlay-lines (nth 3 column))
 	      overlay overlay-line)
 	  (dolist (line lines)
@@ -520,14 +521,33 @@
     (insert (make-string (aref widths i) ?-) ?+))
   (insert "\n"))
 
-(defun shr-table-widths (table length)
-  (let ((widths (make-vector length 0)))
+(defun shr-table-widths (table suggested-widths)
+  (let* ((length (length suggested-widths))
+	 (widths (make-vector length 0))
+	 (natural-widths (make-vector length 0)))
     (dolist (row table)
       (let ((i 0))
 	(dolist (column row)
 	  (aset widths i (max (aref widths i)
 			      (car column)))
-	  (incf i))))
+	  (aset natural-widths i (max (aref natural-widths i)
+				      (cadr column)))
+	  (setq i (1+ i)))))
+    (let ((extra (- (reduce '+ suggested-widths)
+		    (reduce '+ widths)))
+	  (expanded-columns 0))
+      (when (> extra 0)
+	(dotimes (i length)
+	  ;; If the natural width is wider than the rendered width, we
+	  ;; want to allow the column to expand.
+	  (when (> (aref natural-widths i) (aref widths i))
+	    (setq expanded-columns (1+ expanded-columns))))
+	(dotimes (i length)
+	  (when (> (aref natural-widths i) (aref widths i))
+	    (aset widths i (min
+			    (1+ (aref natural-widths i))
+			    (+ (/ extra expanded-columns)
+			       (aref widths i))))))))
     widths))
 
 (defun shr-make-table (cont widths &optional fill)
@@ -575,11 +595,26 @@
 	    (when (> (- width (current-column)) 0)
 	      (insert (make-string (- width (current-column)) ? )))
 	    (forward-line 1))))
-      (list max
-	    (count-lines (point-min) (point-max))
-	    (buffer-string)
-	    (and fill
-		 (shr-collect-overlays))))))
+      (if fill
+	  (list max
+		(count-lines (point-min) (point-max))
+		(split-string (buffer-string) "\n")
+		(shr-collect-overlays))
+	(list max
+	      (shr-natural-width))))))
+
+(defun shr-natural-width ()
+  (goto-char (point-min))
+  (let ((current 0)
+	(max 0))
+    (while (not (eobp))
+      (end-of-line)
+      (setq current (+ current (current-column)))
+      (unless (get-text-property (point) 'shr-break)
+	(setq max (max max current)
+	      current 0))
+      (forward-line 1))
+    max))
 
 (defun shr-collect-overlays ()
   (save-excursion
@@ -608,12 +643,12 @@
   (let ((total-percentage 0)
 	(widths (make-vector (length columns) 0)))
     (dotimes (i (length columns))
-      (incf total-percentage (aref columns i)))
+      (setq total-percentage (+ total-percentage (aref columns i))))
     (setq total-percentage (/ 1.0 total-percentage))
     (dotimes (i (length columns))
       (aset widths i (max (truncate (* (aref columns i)
 				       total-percentage
-				       shr-width))
+				       (- shr-width (1+ (length columns)))))
 			  10)))
     widths))