(autoload 'wget "wget" "Fetch an URL via wget" t)
(defconst w3m-package-dir (expand-file-name "emacs-w3m/" emacs-packages-dir)
  "Where the w3m package lives")
(add-to-list 'load-path w3m-package-dir)
(setq w3m-icon-directory (expand-file-name "icons" w3m-package-dir))
(require 'w3m)
(require 'w3m-type-ahead)
(setq w3m-fill-column 100
      w3m-mailto-url-function 'message-mail
      w3m-home-page "http://localhost/~ole/sugarshark"
      w3m-command "/usr/bin/w3m"
      w3m-use-cygdrive nil
      w3m-use-cookies t
      )
(defun browse-url-at-mouse-external (event)
  "browse url with windows browser"
  (interactive "e")
  (let ((browse-url-browser-function 'browse-url-mozilla))
    (browse-url-at-mouse event)))
(global-set-key [S-down-mouse-1] 'browse-url-at-mouse-external)
(global-set-key [C-down-mouse-1] 'ffap-at-mouse)
(defun my-w3m-edit-current-url ()
  (interactive)
  (condition-case nil
      (wiki-remote-get-w3m)
    (error (w3m-edit-current-url))))
(defun my-w3m-mode-hook()
  "Do some things when entering w3m"
  (define-key w3m-mode-map [?/] 'w3m-type-ahead)
  (define-key w3m-mode-map [(control ?/)] 'w3m-type-ahead-new-session)
  (define-key w3m-mode-map [?j] 'browse-query)
  (define-key w3m-mode-map [?e] 'my-w3m-edit-current-url))
(defun my-w3m-minormode-hook()
  "Do some things when entering w3m minor mode"
  (define-key w3m-minor-mode-map [(control return)]
    'ole-w3m-this-url-in-mozilla))
(defun ole-w3m-this-url-in-mozilla ()
  (interactive)
  (let ((url (or (w3m-anchor) (w3m-image))))
    (if url (browse-url-mozilla url)
      (message "No URL at point."))))
(add-hook 'w3m-mode-hook 'my-w3m-mode-hook)
(add-hook 'w3m-minor-mode-hook 'my-w3m-minor-mode-hook)
(defvar url-stash-file (expand-file-name "~/News/bookmarks.html")
  "File to in which store URLs that are clicked upon.")
(defun local-browse-url-grab-n-save (url &rest ARGS)
  "Given a URL sucked up from a buffer, switch to the saved-url file and insert it as a hyperlink"
  (save-excursion
    (let ((urlbuf (find-file-noselect url-stash-file)))
      (set-buffer urlbuf)
      (goto-char (point-min))
      (search-forward "</UL>" nil t)
      (beginning-of-line 2) (open-line 1)
      (insert (format "<LI><A href=\"%s\">%s</a>" url url))
      (save-buffer)
      (message "Stashed url: %s" url)
      (browse-url-mozilla url)
      )))
(setq browse-url-mozilla-program "/usr/bin/firefox")
(defun w3m-browse-url-other-window (url &optional newwin)
  (interactive "s")
  (switch-to-buffer-other-window "*scratch*" t)
  (w3m-browse-url url newwin)
  (other-window 1))
(setq browse-url-browser-function 
      '(
        (".*" . w3m-browse-url-other-window)
))
(defvar browse-query-search-engines
  '(("google" . "http://www.google.com/search?&q=%s")
    ("google-images" . "http://images.google.com/images?q=%s")
    ("google-groups" . "http://groups.google.com/groups?q=%s")
    ("google-news" ."http://news.google.com/news?q=%s")
    ("freedb" . "http://www.freedb.org/freedb_search.php?words=%s")
    ("freshmeat" . "http://freshmeat.net/search/?q=%s")
    ("imdb" . "http://www.imdb.com/find?q=%s")
    ("emacswiki" . "http://www.emacswiki.org/cgi-bin/wiki/%s")
    ("emacswikisearch" . "http://www.emacswiki.org/cgi-bin/wiki?search=%s")
    ("leo" . "http://dict.leo.org/?search=%s")
    ("rfc" . "http://www.ietf.org/rfc/rfc%s.txt")
    ("jdocs" . "http://www.jdocs.com/apis.jsp")
    ("sourceforge" . "http://www.sourceforge.net/projects/%s")
    ("sf.net" . "http://%s.sourceforge.net")
    ("vstrom" . "http://www.sub3-forennet.de/cgi-sub3/v-strom/YaBB.pl")
    ("javagaming" . "http://www.javagaming.org/cgi-bin/JGNetForums/YaBB.cgi")
    ("sharereactor" . "http://www.sharereactor.com/search.php?search=%s")))
(defun browse-query (engine &optional query)
   "Browse the result of querying a search ENGINE for QUERY.
ENGINE must be a key into the `browse-query-search-engines' alist.
QUERY is substituted for \"%s\" in the keyed value, to generate a URL."
   (interactive (list (completing-read "URL: " browse-query-search-engines nil nil)))
   (let* ((url (or (cdr (assoc engine browse-query-search-engines))
                        (if (string= "" engine) (browse-url-url-at-point) engine)))
          (topic (or query (and url (string-match "%s" url)
                                (read-from-minibuffer "Query: " (thing-at-point 'word))))))
     (if url
         (browse-url (format url topic))
       (error "No such URL: %s" engine))))
(defvar www-keymap (make-sparse-keymap "WWW")
  "Keymap used to globally access web related functionality.")
(define-key mode-specific-map [?v] www-keymap)
(define-key www-keymap [?v] 'browse-query)
(define-key www-keymap [?b] 'browse-url-of-buffer)
(define-key www-keymap [?f] 'browse-url-of-file)
(define-key www-keymap [?r] 'browse-url-of-region)
(define-key www-keymap [?c] 'browse-url-at-point)
(define-key www-keymap [?m] 'browse-url-mozilla)
(define-key www-keymap [?k] 'browse-url-kde)
(define-key www-keymap [?w] 'w3m-browse-url)
(define-key goto-keymap [?w] 'w3m)
(defvar lookup-keymap (make-sparse-keymap "Lookup")
  "Keymap used to globally access lookup functionality.")
(define-key mode-specific-map [?l] lookup-keymap)
(define-key lookup-keymap [?l] 'dictionary-lookup-definition)
(define-key lookup-keymap [?s] 'dictionary-search)
(define-key lookup-keymap [?m] 'dictionary-match-words)
(setq whois-server-name "whois.thur.de")
(setq whois-guess-server nil)