aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGnus developers2013-06-18 22:38:34 +0000
committerKatsumi Yamaoka2013-06-18 22:38:34 +0000
commit924d6997866a444f833ea0a2f0da25058a351564 (patch)
tree2bbd0c6747cc5134a4cb903ff7d5bc4bb242af99
parentd1bbba4fa5de77c3bdfb01901b697ead748a4ba6 (diff)
downloademacs-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/ChangeLog20
-rw-r--r--lisp/gnus/ChangeLog4
-rw-r--r--lisp/gnus/auth-source.el9
-rw-r--r--lisp/net/eww.el82
-rw-r--r--lisp/net/shr.el70
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 @@
12013-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
82013-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
12013-06-18 Dmitry Gutov <dgutov@yandex.ru> 212013-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 @@
12013-06-18 Teodor Zlatanov <tzz@lifelogs.com>
2
3 * auth-source.el (auth-source-netrc-parse-entries): Remove debugging.
4
12013-06-18 Glenn Morris <rgm@gnu.org> 52013-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'.
293A page is marked `next' if rel=\"next\" appears in a <link>
294or <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'.
302A page is marked `previous' if rel=\"previous\" appears in a <link>
303or <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'.
311A page is marked `up' if rel=\"up\" appears in a <link>
312or <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'.
320A page is marked `top' if rel=\"start\" appears in a <link>
321or <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.
60If 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