aboutsummaryrefslogtreecommitdiffstats
path: root/lisp
diff options
context:
space:
mode:
authorJoakim Verona2013-06-12 23:37:36 +0200
committerJoakim Verona2013-06-12 23:37:36 +0200
commitbfa52886b98804a3e1440a03c4c07490568e6407 (patch)
tree0d26aa6a7a78a38173f06d48200d9e62d986d468 /lisp
parentdd7febaa6c58b6c0163ab0f7344ea70b51614460 (diff)
parent32a590b04a10f6bbe92bc1519b9e5ba2d32cfabc (diff)
downloademacs-bfa52886b98804a3e1440a03c4c07490568e6407.tar.gz
emacs-bfa52886b98804a3e1440a03c4c07490568e6407.zip
Merge branch 'xwidget' of https://github.com/daimrod/xwidget-emacs into xwidget
Diffstat (limited to 'lisp')
-rw-r--r--lisp/xwidget-test.el2
-rw-r--r--lisp/xwidget.el240
2 files changed, 124 insertions, 118 deletions
diff --git a/lisp/xwidget-test.el b/lisp/xwidget-test.el
index 07b841bdc94..88d2739a209 100644
--- a/lisp/xwidget-test.el
+++ b/lisp/xwidget-test.el
@@ -194,3 +194,5 @@
194; (xwidget-resize-hack 1 200 200) 194; (xwidget-resize-hack 1 200 200)
195 195
196;(xwidget-demo-basic) 196;(xwidget-demo-basic)
197
198(provide 'xwidget-test)
diff --git a/lisp/xwidget.el b/lisp/xwidget.el
index 8af8d47c00d..7e556dfa6ba 100644
--- a/lisp/xwidget.el
+++ b/lisp/xwidget.el
@@ -3,7 +3,7 @@
3 3
4 4
5;;; Commentary: 5;;; Commentary:
6;; 6;;
7 7
8;;TODO this breaks compilation when we dont have xwidgets 8;;TODO this breaks compilation when we dont have xwidgets
9;;(require 'xwidget-internal) 9;;(require 'xwidget-internal)
@@ -11,19 +11,22 @@
11;;TODO model after make-text-button instead! 11;;TODO model after make-text-button instead!
12;;; Code: 12;;; Code:
13 13
14(eval-when-compile (require 'cl))
15
14(defun xwidget-insert (pos type title width height) 16(defun xwidget-insert (pos type title width height)
15 "Insert an xwidget at POS, given ID, TYPE, TITLE WIDTH and HEIGHT. 17 "Insert an xwidget at POS, given ID, TYPE, TITLE WIDTH and
18HEIGHT in the current buffer.
19
16Return ID 20Return ID
17 21
18see xwidget.c for types suitable for TYPE." 22see `make-xwidget' for types suitable for TYPE."
19 (goto-char pos) 23 (goto-char pos)
20 (let ((id (make-xwidget (point) (point) type title width height nil))) 24 (let ((id (make-xwidget (point) (point)
21 (put-text-property (point) 25 type title width height nil)))
22 (+ 1 (point)) 'display (list 'xwidget ':xwidget id)) 26 (put-text-property (point) (+ 1 (point))
23 27 'display (list 'xwidget ':xwidget id))
24 id)) 28 id))
25 29
26
27(defun xwidget-at (pos) 30(defun xwidget-at (pos)
28 "Return xwidget at POS." 31 "Return xwidget at POS."
29 ;;TODO this function is a bit tedious because the C layer isnt well protected yet and 32 ;;TODO this function is a bit tedious because the C layer isnt well protected yet and
@@ -31,10 +34,7 @@ see xwidget.c for types suitable for TYPE."
31 (let* ((disp (get-text-property pos 'display)) 34 (let* ((disp (get-text-property pos 'display))
32 (xw (car (cdr (cdr disp))))) 35 (xw (car (cdr (cdr disp)))))
33 ;;(if ( xwidgetp xw) xw nil) 36 ;;(if ( xwidgetp xw) xw nil)
34 (if (equal 'xwidget (car disp)) xw) 37 (if (equal 'xwidget (car disp)) xw)))
35 ))
36
37
38 38
39 39
40;; (defun xwidget-socket-handler () 40;; (defun xwidget-socket-handler ()
@@ -63,7 +63,7 @@ see xwidget.c for types suitable for TYPE."
63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
64;;; webkit support 64;;; webkit support
65(require 'browse-url) 65(require 'browse-url)
66(require 'image-mode);;for some image-mode alike functinoality 66(require 'image-mode);;for some image-mode alike functionality
67(require 'cl-macs);;for flet 67(require 'cl-macs);;for flet
68 68
69;;;###autoload 69;;;###autoload
@@ -72,14 +72,14 @@ see xwidget.c for types suitable for TYPE."
72NEW-SESSION specifies whether to create a new xwidget-webkit session. URL 72NEW-SESSION specifies whether to create a new xwidget-webkit session. URL
73defaults to the string looking like a url around the cursor position." 73defaults to the string looking like a url around the cursor position."
74 (interactive (progn 74 (interactive (progn
75 (require 'browse-url) 75 (require 'browse-url)
76 (browse-url-interactive-arg "xwidget-webkit URL: " 76 (browse-url-interactive-arg "xwidget-webkit URL: "
77 ;;( xwidget-webkit-current-url) 77 ;;( xwidget-webkit-current-url)
78 ))) 78 )))
79 (when (stringp url) 79 (when (stringp url)
80 (setq url (url-tidy url)) 80 (setq url (url-tidy url))
81 (if new-session 81 (if new-session
82 (xwidget-webkit-new-session url) 82 (xwidget-webkit-new-session url)
83 (xwidget-webkit-goto-url url)))) 83 (xwidget-webkit-goto-url url))))
84 84
85 85
@@ -97,7 +97,7 @@ defaults to the string looking like a url around the cursor position."
97 (funcall ,fn )))) 97 (funcall ,fn ))))
98 98
99(defmacro xwidget-image-mode-navigation-adaptor-p (fn) 99(defmacro xwidget-image-mode-navigation-adaptor-p (fn)
100 "Image code adaptor. `image-mode' FN is called with interactive arg." 100 "Image code adaptor. `image-mode' FN is called with interactive arg."
101 `(lambda (n) (interactive "p") 101 `(lambda (n) (interactive "p")
102 (cl-flet ((image-display-size (spec) (xwidget-image-display-size spec))) 102 (cl-flet ((image-display-size (spec) (xwidget-image-display-size spec)))
103 (funcall ,fn n)))) 103 (funcall ,fn n))))
@@ -116,26 +116,26 @@ defaults to the string looking like a url around the cursor position."
116 (define-key map "w" 'xwidget-webkit-current-url) 116 (define-key map "w" 'xwidget-webkit-current-url)
117 117
118 ;;similar to image mode bindings 118 ;;similar to image mode bindings
119 (define-key map (kbd "SPC") (xwidget-image-mode-navigation-adaptor 'image-scroll-up)) 119 (define-key map (kbd "SPC") (xwidget-image-mode-navigation-adaptor 'image-scroll-up))
120 (define-key map (kbd "DEL") (xwidget-image-mode-navigation-adaptor 'image-scroll-down)) 120 (define-key map (kbd "DEL") (xwidget-image-mode-navigation-adaptor 'image-scroll-down))
121 121
122 (define-key map [remap scroll-up] (xwidget-image-mode-navigation-adaptor 'image-scroll-up)) 122 (define-key map [remap scroll-up] (xwidget-image-mode-navigation-adaptor 'image-scroll-up))
123 (define-key map [remap scroll-up-command] (xwidget-image-mode-navigation-adaptor 'image-scroll-up)) 123 (define-key map [remap scroll-up-command] (xwidget-image-mode-navigation-adaptor 'image-scroll-up))
124 124
125 (define-key map [remap scroll-down] (xwidget-image-mode-navigation-adaptor 'image-scroll-down)) 125 (define-key map [remap scroll-down] (xwidget-image-mode-navigation-adaptor 'image-scroll-down))
126 (define-key map [remap scroll-down-command] (xwidget-image-mode-navigation-adaptor 'image-scroll-down)) 126 (define-key map [remap scroll-down-command] (xwidget-image-mode-navigation-adaptor 'image-scroll-down))
127 127
128 (define-key map [remap forward-char] (xwidget-image-mode-navigation-adaptor-p 'image-forward-hscroll)) 128 (define-key map [remap forward-char] (xwidget-image-mode-navigation-adaptor-p 'image-forward-hscroll))
129 (define-key map [remap backward-char] (xwidget-image-mode-navigation-adaptor-p 'image-backward-hscroll)) 129 (define-key map [remap backward-char] (xwidget-image-mode-navigation-adaptor-p 'image-backward-hscroll))
130 (define-key map [remap right-char] (xwidget-image-mode-navigation-adaptor-p 'image-forward-hscroll)) 130 (define-key map [remap right-char] (xwidget-image-mode-navigation-adaptor-p 'image-forward-hscroll))
131 (define-key map [remap left-char] (xwidget-image-mode-navigation-adaptor-p 'image-backward-hscroll)) 131 (define-key map [remap left-char] (xwidget-image-mode-navigation-adaptor-p 'image-backward-hscroll))
132 (define-key map [remap previous-line] (xwidget-image-mode-navigation-adaptor-p 'image-previous-line)) 132 (define-key map [remap previous-line] (xwidget-image-mode-navigation-adaptor-p 'image-previous-line))
133 (define-key map [remap next-line] (xwidget-image-mode-navigation-adaptor-p 'image-next-line)) 133 (define-key map [remap next-line] (xwidget-image-mode-navigation-adaptor-p 'image-next-line))
134 134
135 (define-key map [remap move-beginning-of-line] (xwidget-image-mode-navigation-adaptor-p 'image-bol)) 135 (define-key map [remap move-beginning-of-line] (xwidget-image-mode-navigation-adaptor-p 'image-bol))
136 (define-key map [remap move-end-of-line] (xwidget-image-mode-navigation-adaptor-p 'image-eol)) 136 (define-key map [remap move-end-of-line] (xwidget-image-mode-navigation-adaptor-p 'image-eol))
137 (define-key map [remap beginning-of-buffer] (xwidget-image-mode-navigation-adaptor 'image-bob)) 137 (define-key map [remap beginning-of-buffer] (xwidget-image-mode-navigation-adaptor 'image-bob))
138 (define-key map [remap end-of-buffer] (xwidget-image-mode-navigation-adaptor 'image-eob)) 138 (define-key map [remap end-of-buffer] (xwidget-image-mode-navigation-adaptor 'image-eob))
139 map) 139 map)
140 "Keymap for `xwidget-webkit-mode'.") 140 "Keymap for `xwidget-webkit-mode'.")
141 141
@@ -162,42 +162,36 @@ defaults to the string looking like a url around the cursor position."
162 ) 162 )
163 ;(funcall xwidget-callback xwidget xwidget-event-type) 163 ;(funcall xwidget-callback xwidget xwidget-event-type)
164 (message "xw callback %s" xwidget) 164 (message "xw callback %s" xwidget)
165 (funcall 'xwidget-webkit-callback xwidget xwidget-event-type) 165 (funcall 'xwidget-webkit-callback xwidget xwidget-event-type)))
166 ))
167 166
168(defun xwidget-webkit-callback (xwidget xwidget-event-type) 167(defun xwidget-webkit-callback (xwidget xwidget-event-type)
169 (save-excursion 168 (save-excursion
170 (cond ( (buffer-live-p (xwidget-buffer xwidget)) 169 (cond ((buffer-live-p (xwidget-buffer xwidget))
171 (set-buffer (xwidget-buffer xwidget)) 170 (set-buffer (xwidget-buffer xwidget))
172 (let* ( (strarg (nth 3 last-input-event))) 171 (let* ((strarg (nth 3 last-input-event)))
173 (cond ((eq xwidget-event-type 'document-load-finished) 172 (cond ((eq xwidget-event-type 'document-load-finished)
174 (xwidget-log "webkit finished loading: '%s'" (xwidget-webkit-get-title xwidget)) 173 (xwidget-log "webkit finished loading: '%s'" (xwidget-webkit-get-title xwidget))
175 (xwidget-adjust-size-to-content xwidget) 174 (xwidget-adjust-size-to-content xwidget)
176 (rename-buffer (format "*xwidget webkit: %s *" (xwidget-webkit-get-title xwidget))) 175 (rename-buffer (format "*xwidget webkit: %s *" (xwidget-webkit-get-title xwidget)))
177 (pop-to-buffer (current-buffer)) 176 (pop-to-buffer (current-buffer)))
178 ) 177 ((eq xwidget-event-type 'navigation-policy-decision-requested)
179 178 (if (string-match ".*#\\(.*\\)" strarg)
180 ((eq xwidget-event-type 'navigation-policy-decision-requested) 179 (xwidget-webkit-show-id-or-named-element xwidget (match-string 1 strarg))))
181 (if (string-match ".*#\\(.*\\)" strarg) 180 (t (xwidget-log "unhandled event:%s" xwidget-event-type)))))
182 (xwidget-webkit-show-id-or-named-element xwidget (match-string 1 strarg))))
183 (t (xwidget-log "unhandled event:%s" xwidget-event-type)))))
184 (t (xwidget-log "error: callback called for xwidget with dead buffer"))))) 181 (t (xwidget-log "error: callback called for xwidget with dead buffer")))))
185 182
186(define-derived-mode xwidget-webkit-mode 183(define-derived-mode xwidget-webkit-mode
187 special-mode "xwidget-webkit" "xwidget webkit view mode" 184 special-mode "xwidget-webkit" "xwidget webkit view mode"
188 (setq buffer-read-only t) 185 (setq buffer-read-only t)
189 ;; Keep track of [vh]scroll when switching buffers 186 ;; Keep track of [vh]scroll when switching buffers
190 (image-mode-setup-winprops) 187 (image-mode-setup-winprops))
191
192 )
193 188
194(defvar xwidget-webkit-last-session-buffer nil) 189(defvar xwidget-webkit-last-session-buffer nil)
195 190
196(defun xwidget-webkit-last-session () 191(defun xwidget-webkit-last-session ()
197 "Last active webkit, or nil." 192 "Last active webkit, or nil."
198 (if (buffer-live-p xwidget-webkit-last-session-buffer) 193 (if (buffer-live-p xwidget-webkit-last-session-buffer)
199 (save-excursion 194 (with-current-buffer xwidget-webkit-last-session-buffer
200 (set-buffer xwidget-webkit-last-session-buffer)
201 (xwidget-at 1)) 195 (xwidget-at 1))
202 nil)) 196 nil))
203 197
@@ -238,13 +232,13 @@ function findactiveelement(doc){
238 232
239" 233"
240 234
241"javascript that finds the active element." 235 "javascript that finds the active element."
242;;yes its ugly. because: 236 ;;yes its ugly. because:
243;; - there is aparently no way to find the active frame other than recursion 237 ;; - there is aparently no way to find the active frame other than recursion
244;; - the js "for each" construct missbehaved on the "frames" collection 238 ;; - the js "for each" construct missbehaved on the "frames" collection
245;; - a window with no frameset still has frames.length == 1, but frames[0].document.activeElement != document.activeElement 239 ;; - a window with no frameset still has frames.length == 1, but frames[0].document.activeElement != document.activeElement
246;;TODO the activeelement type needs to be examined, for iframe, etc. sucks. 240 ;;TODO the activeelement type needs to be examined, for iframe, etc. sucks.
247) 241 )
248 242
249(defun xwidget-webkit-insert-string (xw str) 243(defun xwidget-webkit-insert-string (xw str)
250 "Insert string in the active field in the webkit. 244 "Insert string in the active field in the webkit.
@@ -258,27 +252,29 @@ Argument STR string."
258 (progn 252 (progn
259 (xwidget-webkit-execute-script xww xwidget-webkit-activeelement-js) 253 (xwidget-webkit-execute-script xww xwidget-webkit-activeelement-js)
260 (xwidget-webkit-execute-script-rv xww "findactiveelement(document).value;" ))) 254 (xwidget-webkit-execute-script-rv xww "findactiveelement(document).value;" )))
261 (field-type (xwidget-webkit-execute-script-rv xww "findactiveelement(document).type;" ))) 255 (field-type (xwidget-webkit-execute-script-rv xww "findactiveelement(document).type;" )))
262 (list xww 256 (list xww
263 (cond ( (equal "text" field-type) (read-string "text:" field-value)) 257 (cond ((equal "text" field-type)
264 ( (equal "password" field-type) (read-passwd "password:" nil field-value)) 258 (read-string "text:" field-value))
265 ( (equal "textarea" field-type) (xwidget-webkit-begin-edit-textarea xww field-value)) 259 ((equal "password" field-type)
266 )))) 260 (read-passwd "password:" nil field-value))
261 ((equal "textarea" field-type)
262 (xwidget-webkit-begin-edit-textarea xww field-value))))))
267 (xwidget-webkit-execute-script xw (format "findactiveelement(document).value='%s'" str))) 263 (xwidget-webkit-execute-script xw (format "findactiveelement(document).value='%s'" str)))
268 264
269 265
270(defun xwidget-webkit-begin-edit-textarea (xw text) 266(defun xwidget-webkit-begin-edit-textarea (xw text)
271 (switch-to-buffer 267 (switch-to-buffer
272 (generate-new-buffer "textarea")) 268 (generate-new-buffer "textarea"))
273 269
274 (set (make-local-variable 'xwbl) xw) 270 (set (make-local-variable 'xwbl) xw)
275 (insert text) 271 (insert text))
276 )
277 272
278(defun xwidget-webkit-end-edit-textarea () 273(defun xwidget-webkit-end-edit-textarea ()
279 (interactive) 274 (interactive)
280 (goto-char (point-min)) 275 (goto-char (point-min))
281 (replace-string "\n" "\\n") 276 (while (search-forward "\n" nil t)
277 (replace-match "\\n" nil t))
282 (xwidget-webkit-execute-script xwbl (format "findactiveelement(document).value='%s'" 278 (xwidget-webkit-execute-script xwbl (format "findactiveelement(document).value='%s'"
283 (buffer-substring (point-min) (point-max)))) 279 (buffer-substring (point-min) (point-max))))
284 ;;TODO convert linefeed to \n 280 ;;TODO convert linefeed to \n
@@ -295,42 +291,49 @@ Argument STR string."
295 ;; - the selected window is scrolled but this is not always correct 291 ;; - the selected window is scrolled but this is not always correct
296 ;; - this needs to be interfaced into browse-url somehow. the tricky part is that we need to do this in two steps: 292 ;; - this needs to be interfaced into browse-url somehow. the tricky part is that we need to do this in two steps:
297 ;; A: load the base url, wait for load signal to arrive B: navigate to the anchor when the base url is finished rendering 293 ;; A: load the base url, wait for load signal to arrive B: navigate to the anchor when the base url is finished rendering
298 294
299 ;;this part figures out the Y coordinate of the element 295 ;;this part figures out the Y coordinate of the element
300 (let ((y 296 (let ((y (string-to-number
301 (string-to-number (xwidget-webkit-execute-script-rv xw (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-name) 0)))) 297 (xwidget-webkit-execute-script-rv xw
302 ;;now we need to tell emacs to scroll the element into view. 298 (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-name)
299 0))))
300 ;;now we need to tell emacs to scroll the element into view.
303 (xwidget-log "scroll: %d" y) 301 (xwidget-log "scroll: %d" y)
304 (set-window-vscroll (selected-window) y t)) 302 (set-window-vscroll (selected-window) y t)))
305 )
306 303
307(defun xwidget-webkit-show-id-element (xw element-id) 304(defun xwidget-webkit-show-id-element (xw element-id)
308 "make id-element show. for instance an anchor." 305 "make id-element show. for instance an anchor."
309 (interactive (list (xwidget-webkit-current-session) (read-string "element id:"))) 306 (interactive (list (xwidget-webkit-current-session)
310 (let ((y 307 (read-string "element id:")))
311 (string-to-number (xwidget-webkit-execute-script-rv xw (format "document.getElementById('%s').getBoundingClientRect().top" element-id) 0)))) 308 (let ((y (string-to-number
312 ;;now we need to tell emacs to scroll the element into view. 309 (xwidget-webkit-execute-script-rv xw
310 (format "document.getElementById('%s').getBoundingClientRect().top" element-id)
311 0))))
312 ;;now we need to tell emacs to scroll the element into view.
313 (xwidget-log "scroll: %d" y) 313 (xwidget-log "scroll: %d" y)
314 (set-window-vscroll (selected-window) y t)) 314 (set-window-vscroll (selected-window) y t)))
315 )
316 315
317(defun xwidget-webkit-show-id-or-named-element (xw element-id) 316(defun xwidget-webkit-show-id-or-named-element (xw element-id)
318 "make id-element show. for instance an anchor." 317 "make id-element show. for instance an anchor."
319 (interactive (list (xwidget-webkit-current-session) (read-string "element id:"))) 318 (interactive (list (xwidget-webkit-current-session)
320 (let* ((y1 319 (read-string "element id:")))
321 (string-to-number (xwidget-webkit-execute-script-rv xw (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-id) "0"))) 320 (let* ((y1 (string-to-number
322 (y2 321 (xwidget-webkit-execute-script-rv xw
323 (string-to-number (xwidget-webkit-execute-script-rv xw (format "document.getElementById('%s').getBoundingClientRect().top" element-id) "0"))) 322 (format "document.getElementsByName('%s')[0].getBoundingClientRect().top" element-id)
324 (y3 (max y1 y2))) 323 "0")))
325 ;;now we need to tell emacs to scroll the element into view. 324 (y2 (string-to-number
325 (xwidget-webkit-execute-script-rv xw
326 (format "document.getElementById('%s').getBoundingClientRect().top" element-id)
327 "0")))
328 (y3 (max y1 y2)))
329 ;;now we need to tell emacs to scroll the element into view.
326 (xwidget-log "scroll: %d" y3) 330 (xwidget-log "scroll: %d" y3)
327 (set-window-vscroll (selected-window) y3 t)) 331 (set-window-vscroll (selected-window) y3 t)))
328 )
329 332
330(defun xwidget-webkit-adjust-size-to-content () 333(defun xwidget-webkit-adjust-size-to-content ()
331 "Adjust webkit to content size." 334 "Adjust webkit to content size."
332 (interactive) 335 (interactive)
333 ( xwidget-adjust-size-to-content ( xwidget-webkit-current-session))) 336 (xwidget-adjust-size-to-content (xwidget-webkit-current-session)))
334 337
335(defun xwidget-webkit-adjust-size (w h) 338(defun xwidget-webkit-adjust-size (w h)
336 "Manualy set webkit size. 339 "Manualy set webkit size.
@@ -338,16 +341,16 @@ Argument W width.
338Argument H height." 341Argument H height."
339 ;;TODO shouldnt be tied to the webkit xwidget 342 ;;TODO shouldnt be tied to the webkit xwidget
340 (interactive "nWidth:\nnHeight:\n") 343 (interactive "nWidth:\nnHeight:\n")
341 ( xwidget-resize ( xwidget-webkit-current-session) w h)) 344 (xwidget-resize ( xwidget-webkit-current-session) w h))
342 345
343(defun xwidget-webkit-fit-width () 346(defun xwidget-webkit-fit-width ()
344 (interactive) 347 (interactive)
345 (xwidget-webkit-adjust-size 348 (xwidget-webkit-adjust-size (- (caddr (window-inside-pixel-edges))
346 (- (caddr (window-inside-pixel-edges)) (car (window-inside-pixel-edges))) 349 (car (window-inside-pixel-edges)))
347 1000)) 350 1000))
348 351
349(defun xwidget-webkit-new-session (url) 352(defun xwidget-webkit-new-session (url)
350"Create a new webkit session buffer with URL." 353 "Create a new webkit session buffer with URL."
351 (let* 354 (let*
352 ((bufname (generate-new-buffer-name "*xwidget-webkit*")) 355 ((bufname (generate-new-buffer-name "*xwidget-webkit*"))
353 xw) 356 xw)
@@ -356,31 +359,32 @@ Argument H height."
356 (setq xw (xwidget-insert 1 'webkit-osr bufname 1000 1000)) 359 (setq xw (xwidget-insert 1 'webkit-osr bufname 1000 1000))
357 (xwidget-put xw 'callback 'xwidget-webkit-callback) 360 (xwidget-put xw 'callback 'xwidget-webkit-callback)
358 (xwidget-webkit-mode) 361 (xwidget-webkit-mode)
359 (xwidget-webkit-goto-uri ( xwidget-webkit-last-session) url ))) 362 (xwidget-webkit-goto-uri (xwidget-webkit-last-session) url )))
360 363
361 364
362(defun xwidget-webkit-goto-url (url) 365(defun xwidget-webkit-goto-url (url)
363 "Goto URL." 366 "Goto URL."
364 (if ( xwidget-webkit-current-session) 367 (if (xwidget-webkit-current-session)
365 (progn 368 (progn
366 (xwidget-webkit-goto-uri ( xwidget-webkit-current-session) url)) 369 (xwidget-webkit-goto-uri (xwidget-webkit-current-session) url))
367 ( xwidget-webkit-new-session url))) 370 (xwidget-webkit-new-session url)))
368 371
369(defun xwidget-webkit-back () 372(defun xwidget-webkit-back ()
370 "Back in history." 373 "Back in history."
371 (interactive) 374 (interactive)
372 (xwidget-webkit-execute-script ( xwidget-webkit-current-session) "history.go(-1);")) 375 (xwidget-webkit-execute-script (xwidget-webkit-current-session) "history.go(-1);"))
373 376
374(defun xwidget-webkit-reload () 377(defun xwidget-webkit-reload ()
375 "Reload current url." 378 "Reload current url."
376 (interactive) 379 (interactive)
377 (xwidget-webkit-execute-script ( xwidget-webkit-current-session) "history.go(0);")) 380 (xwidget-webkit-execute-script (xwidget-webkit-current-session) "history.go(0);"))
378 381
379(defun xwidget-webkit-current-url () 382(defun xwidget-webkit-current-url ()
380 "Get the webkit url. place it on kill ring." 383 "Get the webkit url. place it on kill ring."
381 (interactive) 384 (interactive)
382 (let* ((rv (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session) "document.URL")) 385 (let* ((rv (xwidget-webkit-execute-script-rv (xwidget-webkit-current-session)
383 (url (kill-new (if rv rv "")))) 386 "document.URL"))
387 (url (kill-new (or rv ""))))
384 (message "url: %s" url ) 388 (message "url: %s" url )
385 url)) 389 url))
386 390
@@ -391,13 +395,15 @@ Argument H height."
391 ;;or we find some other way to access the DOM 395 ;;or we find some other way to access the DOM
392 396
393 ;;reset webkit title. fugly. 397 ;;reset webkit title. fugly.
394 (let* ( (emptytag "titlecantbewhitespaceohthehorror") 398 (let* ((emptytag "titlecantbewhitespaceohthehorror")
395 title) 399 title)
396 (xwidget-webkit-execute-script xw (format "document.title=\"%s\";" (if default default emptytag))) 400 (xwidget-webkit-execute-script xw (format "document.title=\"%s\";" (or default emptytag)))
397 (xwidget-webkit-execute-script xw (format "document.title=%s;" script)) 401 (xwidget-webkit-execute-script xw (format "document.title=%s;" script))
398 (setq title (xwidget-webkit-get-title xw)) 402 (setq title (xwidget-webkit-get-title xw))
399 (if (equal emptytag title) (setq title "")) 403 (if (equal emptytag title)
400 (unless title (setq title default)) 404 (setq title ""))
405 (unless title
406 (setq title default))
401 title)) 407 title))
402 408
403 409
@@ -427,7 +433,7 @@ This is the last value stored with `(xwidget-put XWIDGET PROPNAME VALUE)'."
427 "Change XWIDGET' PROPNAME property to VALUE. 433 "Change XWIDGET' PROPNAME property to VALUE.
428It can be retrieved with `(xwidget-get XWIDGET PROPNAME)'." 434It can be retrieved with `(xwidget-get XWIDGET PROPNAME)'."
429 (set-xwidget-plist xwidget 435 (set-xwidget-plist xwidget
430 (plist-put (xwidget-plist xwidget) propname value))) 436 (plist-put (xwidget-plist xwidget) propname value)))
431 437
432 438
433;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 439;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -463,6 +469,4 @@ yet, so deinstall Flash instead for now."
463 469
464(provide 'xwidget) 470(provide 'xwidget)
465 471
466(provide 'xwidget)
467
468;;; xwidget.el ends here 472;;; xwidget.el ends here