Initial commit before publication.
[berthome:berthome.git] / links.lua
1 require ("awful")
2 require ("naughty")
3
4 -- Many of what's used here should have been loaded already!
5 local spawn = awful.util.spawn
6 local gsub = string.gsub
7 local match = string.match
8
9 -- `mypromptbox' should be defined.
10
11 -- {{{ Helper functions
12
13 local function open_in_term (command, notify)
14    if notify then
15       naughty.notify ({ text = command })
16    end
17    spawn (terminal .." -geometry ".. TERM_GEOMETRY .. " -e " .. command)
18 end
19
20 local function url_encode (str)
21    if str then
22       local function repchar (c)
23          return string.format ("%%%02X", string.byte (c))
24       end
25       str = gsub (str, "\n", "\r\n")
26       str = gsub (str, "([^%w ])", repchar)
27       str = gsub (str, " ", "+")
28    end
29    return str
30 end
31
32 -- }}}
33
34 -- {{{ Hack for some publishing site at verimag...
35
36 local xbrowser="firefox"
37
38 function query_open_gate6_link (from_selection)
39
40    local function append_to_hostname (httphostname, to_append)
41       return gsub (httphostname,
42                    "([^/]*://[^/]+)(.*)", "%1"..to_append.."%2")
43    end
44
45    -- Basic check: we have an adress:
46    local function is_an_address (str)
47       return match (str, "^[^/]*://[^/]+.*$")
48    end
49
50    local function openit (address)
51
52       if not is_an_address (address) then
53          naughty.notify ({ text = "Needs a valid URI!" })
54          return false
55       end
56
57       local command = xbrowser.." \""..
58          append_to_hostname (address, ".gate6.inist.fr")..
59          "\""
60       naughty.notify ({ text = command })
61       spawn (command)
62    end
63
64    if from_selection then
65       local str = selection ()
66       if str == "" then
67          naughty.notify ({ text = "Needs a selection!" })
68       else
69          openit (str)
70       end
71    else
72       awful.prompt.run ({ prompt = "Address: " },
73                         mypromptbox[mouse.screen].widget,
74                         openit)
75    end
76
77 end
78
79 -- }}}
80
81 --{{{ Translations and language tools...
82
83 --local term_browser="w3m -o use_mouse=true -o anchor_color=cyan -o bg_color=black"
84 local term_browser="w3m"
85 --local term_browser="links"
86
87 function find_translation (langs, from_selection)
88
89    local function launch_wrlinks (string)
90       open_in_term (term_browser..
91                     " \"http://www.wordreference.com/"..
92                        langs.."/"..string.."\"")
93    end
94
95    if from_selection then
96       local str = selection ()
97       if str == "" then
98          naughty.notify ({ text = "Needs a selection!" })
99       else
100          launch_wrlinks (str) 
101       end
102    else
103       awful.prompt.run ({ prompt = "Word: " },
104                         mypromptbox[mouse.screen].widget,
105                         launch_wrlinks, nil,
106                         awful.util.getdir ("cache") ..
107                            "/history_transl_"..langs)
108    end
109 end
110
111 -- This does not really work since 
112 function find_conj (lang, from_selection)
113
114    local function openit (string)
115       if lang == "fr" then
116          open_in_term (term_browser..
117                        " \"http://leconjugueur.com/php5/index.php?v="..
118                           url_encode (string).."\"")
119          -- else
120          --    open_in_term (mplex, term_browser.." -I iso-8859-1 "..
121          --               "\"http://dico.isc.cnrs.fr/dico/en/search?b=1&send=Look+it+up&r="..
122          --               url_encode (string).."\"")
123       end
124    end
125
126    if from_selection then
127       local str = selection ()
128       if str == "" then
129          naughty.notify ({ text = "Needs a selection!" })
130       else
131          openit (str)
132       end
133    else
134       awful.prompt.run ({ prompt = "Verb: " },
135                         mypromptbox[mouse.screen].widget,
136                         openit, nil,
137                         awful.util.getdir ("cache") ..
138                            "/history_conj_"..lang)
139    end
140 end
141
142 function find_synonym (lang, from_selection)
143
144    local function openit (string)
145       local req
146       if lang == "fr" then
147          req = "fr/search?r="
148       else
149          req = "en/search?b=1&r=" 
150       end
151       open_in_term (term_browser..
152                     " -I iso-8859-1 \"http://dico.isc.cnrs.fr/dico/"..
153                        req.. url_encode (string)..
154                        --"&send=Look+it+up"..
155                        "\"")
156    end
157
158    if from_selection then
159       local str = selection ()
160       if str == "" then
161          naughty.notify ({ text = "Needs a selection!" })
162       else
163          openit (str)
164       end
165    else
166       -- XXX: Note I have a huge problem with accents in prompts...
167       awful.prompt.run ({ prompt = "Word: " },
168                         mypromptbox[mouse.screen].widget,
169                         openit, nil,
170                         awful.util.getdir ("cache") ..
171                            "/history_synonym_"..lang)
172    end
173 end
174
175 --}}}