# HG changeset patch # User Katsumi Yamaoka # Date 1286451961 0 # Node ID 30fed27e97bc19a66f14ff89874f4fbcd9539e54 # Parent e5dfbfe938965dd1609ae44974df422e04a00c4b 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. diff -r e5dfbfe93896 -r 30fed27e97bc lisp/gnus/ChangeLog --- 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 + + * shr.el (shr-table-widths): Expand TD elements to fill available + space. + +2010-10-07 Julien Danjou + + * nnimap.el (nnimap-request-rename-group): Add this method. + 2010-10-07 Katsumi Yamaoka * gnus-html.el (gnus-html-schedule-image-fetching): Remove function diff -r e5dfbfe93896 -r 30fed27e97bc lisp/gnus/nnimap.el --- 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) diff -r e5dfbfe93896 -r 30fed27e97bc lisp/gnus/shr.el --- 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))