diff options
| author | Gnus developers | 2013-06-18 22:38:34 +0000 |
|---|---|---|
| committer | Katsumi Yamaoka | 2013-06-18 22:38:34 +0000 |
| commit | 924d6997866a444f833ea0a2f0da25058a351564 (patch) | |
| tree | 2bbd0c6747cc5134a4cb903ff7d5bc4bb242af99 | |
| parent | d1bbba4fa5de77c3bdfb01901b697ead748a4ba6 (diff) | |
| download | emacs-924d6997866a444f833ea0a2f0da25058a351564.tar.gz emacs-924d6997866a444f833ea0a2f0da25058a351564.zip | |
Merge changes made in Gnus master
2013-06-18 Teodor Zlatanov <tzz@lifelogs.com>
* auth-source.el (auth-source-netrc-parse-entries): Remove debugging.
2013-06-18 Lars Magne Ingebrigtsen <larsi@gnus.org>
* net/shr.el (shr-make-table-1): Implement <td rowspan>.
(shr-table-horizontal-line): Allow nil as a value, and change the default.
(shr-insert-table-ruler): Respect the nil value.
2013-06-18 Tom Tromey <tromey@barimba>
* net/eww.el (eww-next-url, eww-previous-url, eww-up-url, eww-top-url):
New defvars.
(eww-open-file): New defun.
(eww-render): Initialize new variables.
(eww-display-html): Handle "link" and "a".
(eww-handle-link, eww-tag-link, eww-tag-a): New defuns.
(eww-mode-map): Move "p" to "l". Bind "p", "n", "t", and "u".
(eww-back-url): Rename from eww-previous-url.
(eww-next-url, eww-previous-url, eww-up-url, eww-top-url): New defuns.
| -rw-r--r-- | lisp/ChangeLog | 20 | ||||
| -rw-r--r-- | lisp/gnus/ChangeLog | 4 | ||||
| -rw-r--r-- | lisp/gnus/auth-source.el | 9 | ||||
| -rw-r--r-- | lisp/net/eww.el | 82 | ||||
| -rw-r--r-- | lisp/net/shr.el | 70 |
5 files changed, 161 insertions, 24 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index ce507cfff9f..ea0deb90946 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,23 @@ | |||
| 1 | 2013-06-18 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 2 | |||
| 3 | * net/shr.el (shr-make-table-1): Implement <td rowspan>. | ||
| 4 | (shr-table-horizontal-line): Allow nil as a value, and change the | ||
| 5 | default. | ||
| 6 | (shr-insert-table-ruler): Respect the nil value. | ||
| 7 | |||
| 8 | 2013-06-18 Tom Tromey <tromey@barimba> | ||
| 9 | |||
| 10 | * net/eww.el (eww-next-url, eww-previous-url, eww-up-url, eww-top-url): | ||
| 11 | New defvars. | ||
| 12 | (eww-open-file): New defun. | ||
| 13 | (eww-render): Initialize new variables. | ||
| 14 | (eww-display-html): Handle "link" and "a". | ||
| 15 | (eww-handle-link, eww-tag-link, eww-tag-a): New defuns. | ||
| 16 | (eww-mode-map): Move "p" to "l". Bind "p", "n", "t", and "u". | ||
| 17 | (eww-back-url): Rename from eww-previous-url. | ||
| 18 | (eww-next-url, eww-previous-url, eww-up-url, eww-top-url): New | ||
| 19 | defuns. | ||
| 20 | |||
| 1 | 2013-06-18 Dmitry Gutov <dgutov@yandex.ru> | 21 | 2013-06-18 Dmitry Gutov <dgutov@yandex.ru> |
| 2 | 22 | ||
| 3 | * progmodes/ruby-mode.el (ruby-syntax-before-regexp-re): | 23 | * progmodes/ruby-mode.el (ruby-syntax-before-regexp-re): |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index fc668100f3b..22f667daf18 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2013-06-18 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 2 | |||
| 3 | * auth-source.el (auth-source-netrc-parse-entries): Remove debugging. | ||
| 4 | |||
| 1 | 2013-06-18 Glenn Morris <rgm@gnu.org> | 5 | 2013-06-18 Glenn Morris <rgm@gnu.org> |
| 2 | 6 | ||
| 3 | * eww.el, shr.el, shr-color.el: Move to ../net. | 7 | * eww.el, shr.el, shr-color.el: Move to ../net. |
diff --git a/lisp/gnus/auth-source.el b/lisp/gnus/auth-source.el index a58d023163f..8cef741cda2 100644 --- a/lisp/gnus/auth-source.el +++ b/lisp/gnus/auth-source.el | |||
| @@ -1078,8 +1078,8 @@ Note that the MAX parameter is used so we can exit the parse early." | |||
| 1078 | (when (and alist | 1078 | (when (and alist |
| 1079 | (or default | 1079 | (or default |
| 1080 | (equal item "machine"))) | 1080 | (equal item "machine"))) |
| 1081 | (auth-source-do-trivia | 1081 | ;; (auth-source-do-trivia |
| 1082 | "auth-source-netrc-parse-entries: got entry %S" alist) | 1082 | ;; "auth-source-netrc-parse-entries: got entry %S" alist) |
| 1083 | (setq all (funcall adder check alist all) | 1083 | (setq all (funcall adder check alist all) |
| 1084 | alist nil)) | 1084 | alist nil)) |
| 1085 | ;; In default entries, we don't have a next token. | 1085 | ;; In default entries, we don't have a next token. |
| @@ -1101,8 +1101,9 @@ Note that the MAX parameter is used so we can exit the parse early." | |||
| 1101 | ;; Clean up: if there's an entry left over, use it. | 1101 | ;; Clean up: if there's an entry left over, use it. |
| 1102 | (when alist | 1102 | (when alist |
| 1103 | (setq all (funcall adder check alist all)) | 1103 | (setq all (funcall adder check alist all)) |
| 1104 | (auth-source-do-trivia | 1104 | ;; (auth-source-do-trivia |
| 1105 | "auth-source-netrc-parse-entries: got2 entry %S" alist)) | 1105 | ;; "auth-source-netrc-parse-entries: got2 entry %S" alist) |
| 1106 | ) | ||
| 1106 | (nreverse all))) | 1107 | (nreverse all))) |
| 1107 | 1108 | ||
| 1108 | (defvar auth-source-passphrase-alist nil) | 1109 | (defvar auth-source-passphrase-alist nil) |
diff --git a/lisp/net/eww.el b/lisp/net/eww.el index 3914f067185..66180d90fc0 100644 --- a/lisp/net/eww.el +++ b/lisp/net/eww.el | |||
| @@ -56,6 +56,11 @@ | |||
| 56 | "Title of current page.") | 56 | "Title of current page.") |
| 57 | (defvar eww-history nil) | 57 | (defvar eww-history nil) |
| 58 | 58 | ||
| 59 | (defvar eww-next-url nil) | ||
| 60 | (defvar eww-previous-url nil) | ||
| 61 | (defvar eww-up-url nil) | ||
| 62 | (defvar eww-top-url nil) | ||
| 63 | |||
| 59 | ;;;###autoload | 64 | ;;;###autoload |
| 60 | (defun eww (url) | 65 | (defun eww (url) |
| 61 | "Fetch URL and render the page." | 66 | "Fetch URL and render the page." |
| @@ -64,10 +69,20 @@ | |||
| 64 | (setq url (concat "http://" url))) | 69 | (setq url (concat "http://" url))) |
| 65 | (url-retrieve url 'eww-render (list url))) | 70 | (url-retrieve url 'eww-render (list url))) |
| 66 | 71 | ||
| 72 | ;;;###autoload | ||
| 73 | (defun eww-open-file (file) | ||
| 74 | "Render a file using EWW." | ||
| 75 | (interactive "fFile: ") | ||
| 76 | (eww (concat "file://" (expand-file-name file)))) | ||
| 77 | |||
| 67 | (defun eww-render (status url &optional point) | 78 | (defun eww-render (status url &optional point) |
| 68 | (let ((redirect (plist-get status :redirect))) | 79 | (let ((redirect (plist-get status :redirect))) |
| 69 | (when redirect | 80 | (when redirect |
| 70 | (setq url redirect))) | 81 | (setq url redirect))) |
| 82 | (set (make-local-variable 'eww-next-url) nil) | ||
| 83 | (set (make-local-variable 'eww-previous-url) nil) | ||
| 84 | (set (make-local-variable 'eww-up-url) nil) | ||
| 85 | (set (make-local-variable 'eww-top-url) nil) | ||
| 71 | (let* ((headers (eww-parse-headers)) | 86 | (let* ((headers (eww-parse-headers)) |
| 72 | (shr-target-id | 87 | (shr-target-id |
| 73 | (and (string-match "#\\(.*\\)" url) | 88 | (and (string-match "#\\(.*\\)" url) |
| @@ -146,11 +161,33 @@ | |||
| 146 | (input . eww-tag-input) | 161 | (input . eww-tag-input) |
| 147 | (textarea . eww-tag-textarea) | 162 | (textarea . eww-tag-textarea) |
| 148 | (body . eww-tag-body) | 163 | (body . eww-tag-body) |
| 149 | (select . eww-tag-select)))) | 164 | (select . eww-tag-select) |
| 165 | (link . eww-tag-link) | ||
| 166 | (a . eww-tag-a)))) | ||
| 150 | (shr-insert-document document) | 167 | (shr-insert-document document) |
| 151 | (eww-convert-widgets)) | 168 | (eww-convert-widgets)) |
| 152 | (goto-char (point-min)))) | 169 | (goto-char (point-min)))) |
| 153 | 170 | ||
| 171 | (defun eww-handle-link (cont) | ||
| 172 | (let* ((rel (assq :rel cont)) | ||
| 173 | (href (assq :href cont)) | ||
| 174 | (where (assoc (cdr rel) | ||
| 175 | '(("next" . eww-next-url) | ||
| 176 | ("previous" . eww-previous-url) | ||
| 177 | ("start" . eww-top-url) | ||
| 178 | ("up" . eww-up-url))))) | ||
| 179 | (and href | ||
| 180 | where | ||
| 181 | (set (cdr where) (cdr href))))) | ||
| 182 | |||
| 183 | (defun eww-tag-link (cont) | ||
| 184 | (eww-handle-link cont) | ||
| 185 | (shr-generic cont)) | ||
| 186 | |||
| 187 | (defun eww-tag-a (cont) | ||
| 188 | (eww-handle-link cont) | ||
| 189 | (shr-tag-a cont)) | ||
| 190 | |||
| 154 | (defun eww-update-header-line-format () | 191 | (defun eww-update-header-line-format () |
| 155 | (if eww-header-line-format | 192 | (if eww-header-line-format |
| 156 | (setq header-line-format (format-spec eww-header-line-format | 193 | (setq header-line-format (format-spec eww-header-line-format |
| @@ -218,8 +255,11 @@ | |||
| 218 | (define-key map [delete] 'scroll-down-command) | 255 | (define-key map [delete] 'scroll-down-command) |
| 219 | (define-key map "\177" 'scroll-down-command) | 256 | (define-key map "\177" 'scroll-down-command) |
| 220 | (define-key map " " 'scroll-up-command) | 257 | (define-key map " " 'scroll-up-command) |
| 258 | (define-key map "l" 'eww-back-url) | ||
| 259 | (define-key map "n" 'eww-next-url) | ||
| 221 | (define-key map "p" 'eww-previous-url) | 260 | (define-key map "p" 'eww-previous-url) |
| 222 | ;;(define-key map "n" 'eww-next-url) | 261 | (define-key map "u" 'eww-up-url) |
| 262 | (define-key map "t" 'eww-top-url) | ||
| 223 | map)) | 263 | map)) |
| 224 | 264 | ||
| 225 | (define-derived-mode eww-mode nil "eww" | 265 | (define-derived-mode eww-mode nil "eww" |
| @@ -240,7 +280,7 @@ | |||
| 240 | (setq eww-history nil) | 280 | (setq eww-history nil) |
| 241 | (kill-buffer (current-buffer))) | 281 | (kill-buffer (current-buffer))) |
| 242 | 282 | ||
| 243 | (defun eww-previous-url () | 283 | (defun eww-back-url () |
| 244 | "Go to the previously displayed page." | 284 | "Go to the previously displayed page." |
| 245 | (interactive) | 285 | (interactive) |
| 246 | (when (zerop (length eww-history)) | 286 | (when (zerop (length eww-history)) |
| @@ -248,6 +288,42 @@ | |||
| 248 | (let ((prev (pop eww-history))) | 288 | (let ((prev (pop eww-history))) |
| 249 | (url-retrieve (car prev) 'eww-render (list (car prev) (cadr prev))))) | 289 | (url-retrieve (car prev) 'eww-render (list (car prev) (cadr prev))))) |
| 250 | 290 | ||
| 291 | (defun eww-next-url () | ||
| 292 | "Go to the page marked `next'. | ||
| 293 | A page is marked `next' if rel=\"next\" appears in a <link> | ||
| 294 | or <a> tag." | ||
| 295 | (interactive) | ||
| 296 | (if eww-next-url | ||
| 297 | (eww-browse-url (shr-expand-url eww-next-url eww-current-url)) | ||
| 298 | (error "No `next' on this page"))) | ||
| 299 | |||
| 300 | (defun eww-previous-url () | ||
| 301 | "Go to the page marked `previous'. | ||
| 302 | A page is marked `previous' if rel=\"previous\" appears in a <link> | ||
| 303 | or <a> tag." | ||
| 304 | (interactive) | ||
| 305 | (if eww-previous-url | ||
| 306 | (eww-browse-url (shr-expand-url eww-previous-url eww-current-url)) | ||
| 307 | (error "No `previous' on this page"))) | ||
| 308 | |||
| 309 | (defun eww-up-url () | ||
| 310 | "Go to the page marked `up'. | ||
| 311 | A page is marked `up' if rel=\"up\" appears in a <link> | ||
| 312 | or <a> tag." | ||
| 313 | (interactive) | ||
| 314 | (if eww-up-url | ||
| 315 | (eww-browse-url (shr-expand-url eww-up-url eww-current-url)) | ||
| 316 | (error "No `up' on this page"))) | ||
| 317 | |||
| 318 | (defun eww-top-url () | ||
| 319 | "Go to the page marked `top'. | ||
| 320 | A page is marked `top' if rel=\"start\" appears in a <link> | ||
| 321 | or <a> tag." | ||
| 322 | (interactive) | ||
| 323 | (if eww-top-url | ||
| 324 | (eww-browse-url (shr-expand-url eww-top-url eww-current-url)) | ||
| 325 | (error "No `top' on this page"))) | ||
| 326 | |||
| 251 | (defun eww-reload () | 327 | (defun eww-reload () |
| 252 | "Reload the current page." | 328 | "Reload the current page." |
| 253 | (interactive) | 329 | (interactive) |
diff --git a/lisp/net/shr.el b/lisp/net/shr.el index f3a396a94b5..49fe9c9d404 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el | |||
| @@ -55,8 +55,9 @@ fit these criteria." | |||
| 55 | :group 'shr | 55 | :group 'shr |
| 56 | :type '(choice (const nil) regexp)) | 56 | :type '(choice (const nil) regexp)) |
| 57 | 57 | ||
| 58 | (defcustom shr-table-horizontal-line ?\s | 58 | (defcustom shr-table-horizontal-line nil |
| 59 | "Character used to draw horizontal table lines." | 59 | "Character used to draw horizontal table lines. |
| 60 | If nil, don't draw horizontal table lines." | ||
| 60 | :group 'shr | 61 | :group 'shr |
| 61 | :type 'character) | 62 | :type 'character) |
| 62 | 63 | ||
| @@ -126,6 +127,7 @@ cid: URL as the argument.") | |||
| 126 | (defvar shr-external-rendering-functions nil) | 127 | (defvar shr-external-rendering-functions nil) |
| 127 | (defvar shr-target-id nil) | 128 | (defvar shr-target-id nil) |
| 128 | (defvar shr-inhibit-decoration nil) | 129 | (defvar shr-inhibit-decoration nil) |
| 130 | (defvar shr-table-separator-length 1) | ||
| 129 | 131 | ||
| 130 | (defvar shr-map | 132 | (defvar shr-map |
| 131 | (let ((map (make-sparse-keymap))) | 133 | (let ((map (make-sparse-keymap))) |
| @@ -175,7 +177,7 @@ DOM should be a parse tree as generated by | |||
| 175 | (shr-start nil) | 177 | (shr-start nil) |
| 176 | (shr-base nil) | 178 | (shr-base nil) |
| 177 | (shr-preliminary-table-render 0) | 179 | (shr-preliminary-table-render 0) |
| 178 | (shr-width (or shr-width (window-width)))) | 180 | (shr-width (or shr-width (1- (window-width))))) |
| 179 | (shr-descend (shr-transform-dom dom)) | 181 | (shr-descend (shr-transform-dom dom)) |
| 180 | (shr-remove-trailing-whitespace start (point)))) | 182 | (shr-remove-trailing-whitespace start (point)))) |
| 181 | 183 | ||
| @@ -1347,6 +1349,7 @@ ones, in case fg and bg are nil." | |||
| 1347 | (defun shr-insert-table (table widths) | 1349 | (defun shr-insert-table (table widths) |
| 1348 | (let* ((collapse (equal (cdr (assq 'border-collapse shr-stylesheet)) | 1350 | (let* ((collapse (equal (cdr (assq 'border-collapse shr-stylesheet)) |
| 1349 | "collapse")) | 1351 | "collapse")) |
| 1352 | (shr-table-separator-length (if collapse 0 1)) | ||
| 1350 | (shr-table-vertical-line (if collapse "" shr-table-vertical-line))) | 1353 | (shr-table-vertical-line (if collapse "" shr-table-vertical-line))) |
| 1351 | (unless collapse | 1354 | (unless collapse |
| 1352 | (shr-insert-table-ruler widths)) | 1355 | (shr-insert-table-ruler widths)) |
| @@ -1381,14 +1384,15 @@ ones, in case fg and bg are nil." | |||
| 1381 | (shr-insert-table-ruler widths))))) | 1384 | (shr-insert-table-ruler widths))))) |
| 1382 | 1385 | ||
| 1383 | (defun shr-insert-table-ruler (widths) | 1386 | (defun shr-insert-table-ruler (widths) |
| 1384 | (when (and (bolp) | 1387 | (when shr-table-horizontal-line |
| 1385 | (> shr-indentation 0)) | 1388 | (when (and (bolp) |
| 1386 | (shr-indent)) | 1389 | (> shr-indentation 0)) |
| 1387 | (insert shr-table-corner) | 1390 | (shr-indent)) |
| 1388 | (dotimes (i (length widths)) | 1391 | (insert shr-table-corner) |
| 1389 | (insert (make-string (aref widths i) shr-table-horizontal-line) | 1392 | (dotimes (i (length widths)) |
| 1390 | shr-table-corner)) | 1393 | (insert (make-string (aref widths i) shr-table-horizontal-line) |
| 1391 | (insert "\n")) | 1394 | shr-table-corner)) |
| 1395 | (insert "\n"))) | ||
| 1392 | 1396 | ||
| 1393 | (defun shr-table-widths (table natural-table suggested-widths) | 1397 | (defun shr-table-widths (table natural-table suggested-widths) |
| 1394 | (let* ((length (length suggested-widths)) | 1398 | (let* ((length (length suggested-widths)) |
| @@ -1432,20 +1436,52 @@ ones, in case fg and bg are nil." | |||
| 1432 | 1436 | ||
| 1433 | (defun shr-make-table-1 (cont widths &optional fill) | 1437 | (defun shr-make-table-1 (cont widths &optional fill) |
| 1434 | (let ((trs nil) | 1438 | (let ((trs nil) |
| 1435 | (shr-inhibit-decoration (not fill))) | 1439 | (shr-inhibit-decoration (not fill)) |
| 1440 | (rowspans (make-vector (length widths) 0)) | ||
| 1441 | width colspan) | ||
| 1436 | (dolist (row cont) | 1442 | (dolist (row cont) |
| 1437 | (when (eq (car row) 'tr) | 1443 | (when (eq (car row) 'tr) |
| 1438 | (let ((tds nil) | 1444 | (let ((tds nil) |
| 1439 | (columns (cdr row)) | 1445 | (columns (cdr row)) |
| 1440 | (i 0) | 1446 | (i 0) |
| 1447 | (width-column 0) | ||
| 1441 | column) | 1448 | column) |
| 1442 | (while (< i (length widths)) | 1449 | (while (< i (length widths)) |
| 1443 | (setq column (pop columns)) | 1450 | ;; If we previously had a rowspan definition, then that |
| 1451 | ;; means that we now have a "missing" td/th element here. | ||
| 1452 | ;; So just insert a dummy, empty one to (sort of) emulate | ||
| 1453 | ;; rowspan. | ||
| 1454 | (setq column | ||
| 1455 | (if (zerop (aref rowspans i)) | ||
| 1456 | (pop columns) | ||
| 1457 | (aset rowspans i (1- (aref rowspans i))) | ||
| 1458 | '(td))) | ||
| 1444 | (when (or (memq (car column) '(td th)) | 1459 | (when (or (memq (car column) '(td th)) |
| 1445 | (null column)) | 1460 | (not column)) |
| 1446 | (push (shr-render-td (cdr column) (aref widths i) fill) | 1461 | (when (cdr (assq :rowspan (cdr column))) |
| 1447 | tds) | 1462 | (aset rowspans i (+ (aref rowspans i) |
| 1448 | (setq i (1+ i)))) | 1463 | (1- (string-to-number |
| 1464 | (cdr (assq :rowspan (cdr column)))))))) | ||
| 1465 | (setq width | ||
| 1466 | (if column | ||
| 1467 | (aref widths width-column) | ||
| 1468 | 0)) | ||
| 1469 | (when (and fill | ||
| 1470 | (setq colspan (cdr (assq :colspan (cdr column))))) | ||
| 1471 | (setq colspan (string-to-number colspan)) | ||
| 1472 | (dotimes (j (1- colspan)) | ||
| 1473 | (if (> (+ i 1 j) (1- (length widths))) | ||
| 1474 | (setq width (aref widths (1- (length widths)))) | ||
| 1475 | (setq width (+ width | ||
| 1476 | shr-table-separator-length | ||
| 1477 | (aref widths (+ i 1 j)))))) | ||
| 1478 | (setq width-column (+ width-column (1- colspan)))) | ||
| 1479 | (when (or column | ||
| 1480 | (not fill)) | ||
| 1481 | (push (shr-render-td (cdr column) width fill) | ||
| 1482 | tds)) | ||
| 1483 | (setq i (1+ i) | ||
| 1484 | width-column (1+ width-column)))) | ||
| 1449 | (push (nreverse tds) trs)))) | 1485 | (push (nreverse tds) trs)))) |
| 1450 | (nreverse trs))) | 1486 | (nreverse trs))) |
| 1451 | 1487 | ||