aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorAlbert Krewinkel2013-06-10 11:46:27 +0000
committerKatsumi Yamaoka2013-06-10 11:46:27 +0000
commit266c63b5c13c519c2deb051de10fdfea2470c4c3 (patch)
tree6cd763cf69a89190f774f0b80f47811cffabd330 /lisp
parente4568f3bc50daf2a0a95b548a3b4a38b7eec9b45 (diff)
downloademacs-266c63b5c13c519c2deb051de10fdfea2470c4c3.tar.gz
emacs-266c63b5c13c519c2deb051de10fdfea2470c4c3.zip
lisp/gnus/sieve.el: Fix handling of PORT parameter, quitting
Diffstat (limited to 'lisp')
-rw-r--r--lisp/gnus/ChangeLog17
-rw-r--r--lisp/gnus/eww.el155
-rw-r--r--lisp/gnus/shr.el3
-rw-r--r--lisp/gnus/sieve.el13
4 files changed, 181 insertions, 7 deletions
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 2c2880ee398..ee540465a3c 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,20 @@
12013-06-10 Lars Magne Ingebrigtsen <larsi@gnus.org>
2
3 * eww.el: Don't require cl-lib.
4
5 * eww.el: Start writing a new, tiny web browser.
6 (eww-previous-url): New command.
7 (eww-quit): New command.
8
92013-06-10 Albert Krewinkel <krewinkel@moltkeplatz.de>
10
11 * sieve.el: Put point at beginning of buffer when viewing a script.
12 (sieve-open-server): respect the PORT parameter. Show the correct port
13 number in sieve-buffer's header. Fixed code to also work with a string
14 as port specifier. Properly close the connection on pressing 'q'. Make
15 sieve-manage-quit close the connection and process buffer. Also, remove
16 duplicate keybinding for 'q'.
17
12013-06-10 Roy Hashimoto <roy.hashimoto@gmail.com> (tiny change) 182013-06-10 Roy Hashimoto <roy.hashimoto@gmail.com> (tiny change)
2 19
3 * mm-view.el (mm-pkcs7-signed-magic): Allow newline in the regexp and 20 * mm-view.el (mm-pkcs7-signed-magic): Allow newline in the regexp and
diff --git a/lisp/gnus/eww.el b/lisp/gnus/eww.el
new file mode 100644
index 00000000000..c4a664022ac
--- /dev/null
+++ b/lisp/gnus/eww.el
@@ -0,0 +1,155 @@
1;;; eww.el --- Emacs Web Wowser
2
3;; Copyright (C) 2013 Free Software Foundation, Inc.
4
5;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
6;; Keywords: html
7
8;; This file is part of GNU Emacs.
9
10;; GNU Emacs is free software: you can redistribute it and/or modify
11;; it under the terms of the GNU General Public License as published by
12;; the Free Software Foundation, either version 3 of the License, or
13;; (at your option) any later version.
14
15;; GNU Emacs is distributed in the hope that it will be useful,
16;; but WITHOUT ANY WARRANTY; without even the implied warranty of
17;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18;; GNU General Public License for more details.
19
20;; You should have received a copy of the GNU General Public License
21;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
22
23;;; Commentary:
24
25;;; Code:
26
27(eval-when-compile (require 'cl))
28(require 'shr)
29(require 'url)
30
31(defvar eww-current-url nil)
32(defvar eww-history nil)
33
34(defun eww (url)
35 "Fetch URL and render the page."
36 (interactive "sUrl: ")
37 (url-retrieve url 'eww-render (list url)))
38
39(defun eww-render (status url &optional point)
40 (let* ((headers (eww-parse-headers))
41 (content-type
42 (mail-header-parse-content-type
43 (or (cdr (assoc "content-type" headers))
44 "text/plain")))
45 (charset (intern
46 (downcase
47 (or (cdr (assq 'charset (cdr content-type)))
48 "utf8"))))
49 (data-buffer (current-buffer)))
50 (unwind-protect
51 (progn
52 (cond
53 ((equal (car content-type) "text/html")
54 (eww-display-html charset url))
55 ((string-match "^image/" (car content-type))
56 (eww-display-image))
57 (t
58 (eww-display-raw charset)))
59 (when point
60 (goto-char point)))
61 (kill-buffer data-buffer))))
62
63(defun eww-parse-headers ()
64 (let ((headers nil))
65 (while (and (not (eobp))
66 (not (eolp)))
67 (when (looking-at "\\([^:]+\\): *\\(.*\\)")
68 (push (cons (downcase (match-string 1))
69 (match-string 2))
70 headers))
71 (forward-line 1))
72 (unless (eobp)
73 (forward-line 1))
74 headers))
75
76(defun eww-display-html (charset url)
77 (unless (eq charset 'utf8)
78 (decode-coding-region (point) (point-max) charset))
79 (let ((document
80 (list
81 'base (list (cons 'href url))
82 (libxml-parse-html-region (point) (point-max)))))
83 (eww-setup-buffer)
84 (setq eww-current-url url)
85 (let ((inhibit-read-only t))
86 (shr-insert-document document))
87 (goto-char (point-min))))
88
89(defun eww-display-raw (charset)
90 (let ((data (buffer-substring (point) (point-max))))
91 (eww-setup-buffer)
92 (let ((inhibit-read-only t))
93 (insert data))
94 (goto-char (point-min))))
95
96(defun eww-display-image ()
97 (let ((data (buffer-substring (point) (point-max))))
98 (eww-setup-buffer)
99 (let ((inhibit-read-only t))
100 (shr-put-image data nil))
101 (goto-char (point-min))))
102
103(defun eww-setup-buffer ()
104 (pop-to-buffer (get-buffer-create "*eww*"))
105 (let ((inhibit-read-only t))
106 (erase-buffer))
107 (eww-mode))
108
109(defvar eww-mode-map
110 (let ((map (make-sparse-keymap)))
111 (suppress-keymap map)
112 (define-key map "q" 'eww-quit)
113 (define-key map [tab] 'widget-forward)
114 (define-key map [backtab] 'widget-backward)
115 (define-key map [delete] 'scroll-down-command)
116 (define-key map "\177" 'scroll-down-command)
117 (define-key map " " 'scroll-up-command)
118 (define-key map "p" 'eww-previous-url)
119 ;;(define-key map "n" 'eww-next-url)
120 map))
121
122(defun eww-mode ()
123 "Mode for browsing the web.
124
125\\{eww-mode-map}"
126 (interactive)
127 (setq major-mode 'eww-mode
128 mode-name "eww")
129 (set (make-local-variable 'eww-current-url) 'author)
130 (set (make-local-variable 'browse-url-browser-function) 'eww-browse-url)
131 (setq buffer-read-only t)
132 (use-local-map eww-mode-map))
133
134(defun eww-browse-url (url &optional new-window)
135 (push (list eww-current-url (point))
136 eww-history)
137 (eww url))
138
139(defun eww-quit ()
140 "Exit the Emacs Web Wowser."
141 (interactive)
142 (setq eww-history nil)
143 (kill-buffer (current-buffer)))
144
145(defun eww-previous-url ()
146 "Go to the previously displayed page."
147 (interactive)
148 (when (zerop (length eww-history))
149 (error "No previous page"))
150 (let ((prev (pop eww-history)))
151 (url-retrieve (car prev) 'eww-render (list (car prev) (cadr prev)))))
152
153(provide 'eww)
154
155;;; eww.el ends here
diff --git a/lisp/gnus/shr.el b/lisp/gnus/shr.el
index 9284da4c4b3..6e0aa26e376 100644
--- a/lisp/gnus/shr.el
+++ b/lisp/gnus/shr.el
@@ -945,7 +945,8 @@ ones, in case fg and bg are nil."
945 plist))) 945 plist)))
946 946
947(defun shr-tag-base (cont) 947(defun shr-tag-base (cont)
948 (setq shr-base (cdr (assq :href cont)))) 948 (setq shr-base (cdr (assq :href cont)))
949 (shr-generic cont))
949 950
950(defun shr-tag-a (cont) 951(defun shr-tag-a (cont)
951 (let ((url (cdr (assq :href cont))) 952 (let ((url (cdr (assq :href cont)))
diff --git a/lisp/gnus/sieve.el b/lisp/gnus/sieve.el
index 0e46cb66361..2c11c039d56 100644
--- a/lisp/gnus/sieve.el
+++ b/lisp/gnus/sieve.el
@@ -109,7 +109,6 @@ require \"fileinto\";
109 ;; various 109 ;; various
110 (define-key map "?" 'sieve-help) 110 (define-key map "?" 'sieve-help)
111 (define-key map "h" 'sieve-help) 111 (define-key map "h" 'sieve-help)
112 (define-key map "q" 'kill-buffer)
113 ;; activating 112 ;; activating
114 (define-key map "m" 'sieve-activate) 113 (define-key map "m" 'sieve-activate)
115 (define-key map "u" 'sieve-deactivate) 114 (define-key map "u" 'sieve-deactivate)
@@ -152,6 +151,8 @@ require \"fileinto\";
152(defun sieve-manage-quit () 151(defun sieve-manage-quit ()
153 "Quit." 152 "Quit."
154 (interactive) 153 (interactive)
154 (sieve-manage-close sieve-manage-buffer)
155 (kill-buffer sieve-manage-buffer)
155 (kill-buffer (current-buffer))) 156 (kill-buffer (current-buffer)))
156 157
157(defun sieve-activate (&optional pos) 158(defun sieve-activate (&optional pos)
@@ -206,6 +207,7 @@ require \"fileinto\";
206 (insert sieve-template)) 207 (insert sieve-template))
207 (sieve-mode) 208 (sieve-mode)
208 (setq sieve-buffer-script-name name) 209 (setq sieve-buffer-script-name name)
210 (beginning-of-buffer)
209 (message 211 (message
210 (substitute-command-keys 212 (substitute-command-keys
211 "Press \\[sieve-upload] to upload script to server.")))) 213 "Press \\[sieve-upload] to upload script to server."))))
@@ -256,10 +258,9 @@ Used to bracket operations which move point in the sieve-buffer."
256 (setq buffer-read-only nil) 258 (setq buffer-read-only nil)
257 (erase-buffer) 259 (erase-buffer)
258 (buffer-disable-undo) 260 (buffer-disable-undo)
259 (insert "\ 261 (let* ((port (or port sieve-manage-default-port))
260Server : " server ":" (or port sieve-manage-default-port) " 262 (header (format "Server : %s:%s\n\n" server port)))
261 263 (insert header))
262")
263 (set (make-local-variable 'sieve-buffer-header-end) 264 (set (make-local-variable 'sieve-buffer-header-end)
264 (point-max))) 265 (point-max)))
265 266
@@ -305,7 +306,7 @@ Server : " server ":" (or port sieve-manage-default-port) "
305 (with-current-buffer 306 (with-current-buffer
306 (or ;; open server 307 (or ;; open server
307 (set (make-local-variable 'sieve-manage-buffer) 308 (set (make-local-variable 'sieve-manage-buffer)
308 (sieve-manage-open server)) 309 (sieve-manage-open server port))
309 (error "Error opening server %s" server)) 310 (error "Error opening server %s" server))
310 (sieve-manage-authenticate))) 311 (sieve-manage-authenticate)))
311 312