stumpwm-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[STUMP] Browse URL hacks


From: Max Mikhanosha
Subject: [STUMP] Browse URL hacks
Date: Sun, 27 May 2012 12:46:49 -0400
User-agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (Gojō) APEL/10.6 Emacs/23.3.50 (x86_64-unknown-linux-gnu) MULE/6.0 (HANACHIRUSATO)

Went through my "things annoying me in StumpWM" list, and came out
with the following hacks.. Everyone probably has something similar,
but just thought I'll share.

Command: url <url>

If current group has a browser window, opens url as new tab. If
current group does not have a browser window, opens new browser window
in the current group, even if browser window exists in another group

Supports firefox and chromium

Command: google <word> [<word> ..]

Uses "url" command to google stuff, bind it to a key.

Command: browser

Raises browser window in current group or creates a new browser window.

Below shell scripts allow issuing same commands from command line.

--- cat url ---
#!/bin/sh
exec stumpish url $*
---------------

--- cat google ---
#!/bin/sh
exec stumpish google $*
------------------

;; Emacs integration (assumes above "url" script is in the PATH)
;; so clicking on URL's in emacs will use same commands

(defun my-browse-url (url &optional new-window)
  (interactive (browse-url-interactive-arg "URL: "))
  (start-process (concat "URL " url) nil "url" url))

(setq browse-url-browser-function 'my-browse-url
      w3m-goto-article-function 'my-browse-url
      mime-browse-url-function 'my-browse-url)

----- ~/.stumpwmrc code ------

;;; URL tools, to change browser change below var to chromium

(defvar *browser* "chromium")

(defcommand browser () ()
  "Start browser is already running, in which case focus it."
  (let* ((browser-name (or *browser* "firefox")) 
         (browser-class (string-capitalize (file-namestring browser-name))))
    (run-or-raise browser-name `(:class ,browser-class))))


(defcommand url (url) ((:rest "URL"))
  "Open URL in the browser in the current group"
  (check-type url string)
  (unless (or
           (eql 0 (search "http://"; url))
           (eql 0 (search "https://"; url))
           (eql 0 (search "ftp://"; url))
           (eql 0 (search "file://" url)))
    (setq url (cat "http://"; url)))
  (let* ((browser-name (or *browser* "firefox"))
         (browser-class (string-capitalize (file-namestring browser-name)))
         (firefoxp (search "firefox" browser-name))
         (chromep (search "chrom" browser-name))
         (window))
    (flet ((run-browser (&rest args)
             (run-prog browser-name :search t :args args :wait nil))
           (find-browser-window (&optional all-groups)
             (first (find-matching-windows 
                     `(:class ,browser-class) all-groups nil))))
      (if firefoxp 
          (cond ((setq window (find-browser-window))
                 ;; firefox opens new tab in the last active window, which
                 ;; could be in another group. Raise firefox window first
                 ;; so that tab will be opened on a window in the current 
                 ;; group
                 (focus-window window)
                 (run-browser  "-remote"  (cat "openUrl(" url ")")))
                ((find-browser-window :all)
                 (run-browser  "-remote"  (cat "openUrl(" url ",new-window)")))
                (t
                 (run-browser url)))
          (cond ((setq window (find-browser-window))
                 (focus-window window)
                 (run-browser url))
                (chromep (run-browser  "--new-window" url))
                (t (run-browser url)))))))

(defcommand google (search) ((:rest "Search in Google for: "))
  "Search Google for stuff, uses URL command"
  (check-type search string)
  (setq search (substitute #\Space #\+ search))
  (url (cat "http://www.google.com/search?q="; search)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]