Minor improvements + adapted to machine `nobelium'.
[berthome:berthome.git] / links.lua
1 local awful = require ("awful")
2 local naughty = require ("naughty")
3 local string = string
4 local selection = selection
5
6 module ("links")
7
8 config = {}
9 config.prompt = nil
10 config.open_in_term = nil
11
12 -- Many of what's used here should have been loaded already!
13 local spawn = awful.util.spawn
14 local gsub = string.gsub
15 local match = string.match
16
17 local xbrowser="xdg-open"
18 local term_browser="w3m"
19
20 -- {{{ Helper functions
21
22 local function url_encode (str)
23    if str then
24       local function repchar (c)
25          return string.format ("%%%02X", string.byte (c))
26       end
27       str = gsub (str, "\n", "\r\n")
28       str = gsub (str, "([^%w ])", repchar)
29       str = gsub (str, " ", "+")
30    end
31    return str
32 end
33
34 local function prmpt (prompt_text, cache, fun)
35
36    -- Let's check it now, for now:
37    if not config.prompt or not config.open_in_term then 
38       naughty.notify ({ text = "Link module is not properly configured!" })
39       return nil
40    end
41
42    return
43    function (from_selection)
44       if from_selection then
45          local str = selection ()
46          if str == "" then
47             naughty.notify ({ text = "Need a selection!" })
48          else
49             fun (str)
50          end
51       else
52          config.prompt (prompt_text, fun, nil, cache)
53       end
54    end
55 end
56
57 -- }}}
58
59 -- {{{ Hack for some publishing site at verimag...
60
61 -- Basic check: we have an adress:
62 local function is_an_uri (str) return match (str, "^[^/]*://[^/]+.*$") end
63
64 local function open_gate6_link (uri)
65    local function append_host (hostname, to_append)
66       return gsub (hostname, "([^/]*://[^/]+)(.*)", "%1"..to_append.."%2")
67    end
68
69    if not is_an_uri (uri) then
70       naughty.notify ({ text = "Need a valid URI!" })
71       return false
72    end
73
74    local cmd = xbrowser.." \""..append_host (uri, ".gate6.inist.fr").."\""
75    naughty.notify ({ text = cmd })
76    spawn (cmd)
77 end
78
79 query_open_gate6_link =
80    prmpt ("Address: ", nil, open_gate6_link)
81
82 -- }}}
83
84 --{{{ Translations and language tools...
85
86 function find_translation (langs, from_selection)
87    prmpt ("Word: ",
88           awful.util.getdir ("cache").."/history_transl_"..langs,
89           function (string)
90              config.open_in_term (term_browser.." \"http://www.wordreference.com/"..
91                                   langs.."/"..string.."\"")
92           end) (from_selection)
93 end
94
95 find_fr_conj = 
96    prmpt ("Verb: ", 
97           awful.util.getdir ("cache").."/history_conj_fr",
98           function (string)
99              config.open_in_term (term_browser..
100                                   " \"http://leconjugueur.com/php5/index.php?v="..
101                                      url_encode (string).."\"")
102           end)
103
104 function find_synonym (lang, from_selection)
105    local req
106    if lang == "fr" then
107       req = "fr/search?r="
108    else
109       req = "en/search?b=1&r=" 
110    end
111    -- XXX: Note I have a huge problem with accents in prompts...
112    prmpt ("Word: ", 
113           awful.util.getdir ("cache").."/history_synonym_"..lang,
114           function (string)
115              config.open_in_term (term_browser..
116                                   " -I iso-8859-1 \"http://dico.isc.cnrs.fr/dico/"..req..
117                                      url_encode (string).. "\"")
118           end) (from_selection)
119 end
120
121 --}}}