You would think using awful.layout.suit.max is enough, but you can do other awesome things.
The following is a fairly generic lua function that displays a prompt in the mypromptbox textbox (change it below to whatever you've called it), and sends the result back with uzblctrl. More details below
function uzbl_prompt(prompt, text, socket, command)
if command then
-- if a command prefix is provided
command = command .. ' '
else
command = ""
end
awful.prompt.run({prompt=prompt, text=text},
mypromptbox[mouse.screen],
function(input)
awful.util.spawn(string.format("uzblctrl -s '%s' -c '%s%s'", socket, command, input))
end)
end
Parameters
prompt: Something like “uzbl: ”text: Editable text that is already in the textbox, such as the current uri ($6). Could be an empty string.socket: The full path to the current instance socket ($5)command: A uzbl command that prefixes the user inputExamples:
bind o = sh 'echo \'uzbl_prompt(“uzbl uri: ”, “\'$6\'”, “\'$5\'”, “uri”)\' | awesome-client'
This replaces the “o” bind and uses the prompt awesome editing capabilities to allow you to edit the current uri.
Note the ugly backslashes everywhere, having to use sh sucks.
bind !js = sh 'echo \'uzbl_prompt("uzbl js: ", "", "\'$5\'", "js")\' | awesome-client'
This does not include text field, but it is an empty string.
bind : = sh 'echo \'uzbl_prompt("uzbl cmd: ", "", "\'$5\'")\' | awesome-client'
This does not include command field, but it is not an empty string. (
: This is inconsistent and sucks)
With this uzbl command binding
@cbind q = sh 'printf '"'"'uzbl_prompt("uri: ", "", "%1s", "uri")\\\\\\\\n'"'"' "$4" | awesome-client'
and this awesome function, you can do tab-completion of URLs from your history
function uzbl_prompt(prompt, text, fifo, command)
if command then
-- if a command prefix is provided
command = command .. ' '
else
command = ""
end
awful.prompt.run({prompt='uzbl '..prompt, text=text},
mypromptbox[mouse.screen].widget,
function(input)
awful.util.spawn_with_shell(string.format("echo '%s%s' >%s", command, input, fifo))
end,
function(cmd, cur_pos, ncomp)
-- get the url
local urls = {}
f = io.popen('awk \'{print $3}\' '.. os.getenv("HOME") .. '/.local/share/uzbl/history | sort -u')
for url in f:lines() do
table.insert(urls, url)
end
f:close()
-- abort completion under certain circumstances
if #cmd == 0 or (cur_pos ~= #cmd + 1 and cmd:sub(cur_pos, cur_pos) ~= " ") then
return cmd, cur_pos
end
-- match
local matches = {}
table.foreach(urls, function(x)
if urls[x]:find(cmd:sub(1,cur_pos)) then
table.insert(matches, urls[x])
end
end)
-- if there are no matches
if #matches == 0 then
return
end
-- cycle
while ncomp > #matches do
ncomp = ncomp - #matches
end
-- return match and position
return matches[ncomp], cur_pos
end)
end
Simple script that displays list of all instances of uzbl in dmenu, then raises and focuses the chosen one. I believe it can be easily adapted for other WM. Is it possible to replace awesome lua code with some XTest scrip (xdotool/xte), and make it WM-independent?
#!/bin/sh
xwininfo -int -root -children \
| awk -vFS='"' '/Uzbl browser/ {
gsub("^ ", "");
sub("^", "'"'"'", $2);
sub("$", "'"'"'", $2);
print $2
}' \
| dmenu -b -i -l 30 \
| awk '{
print "a=clientfind({name="$0"})\n\
awful.client.movetotag(uzbl_tag, a)\n\
client.focus=a\n\
a:raise()"
}' \
| awesome-client
You also need following function defined in your rc.lua:
function clientfind (properties)
local clients = client.get()
local rv = nil
for i, c in pairs(clients) do
if match(properties, c) then
rv = c
end
end
return rv
end
-- Returns true if all pairs in table1 are present in table2
function match (table1, table2)
for k, v in pairs(table1) do
if table2[k] ~= v then
return false
end
end
return true
end
Note, there are multiple incompatibile versions of dmenu-vertical patch around. “dmenu -b -i -l 30” is compatibile with PLD version of vertical patch. If you use other linux distribution, probably you'll have to modify this line.
In the rules section of your rc.lua, add the following rule:
{ rule = { class = "Uzbl" },
properties = { tag = tags[1][2],
focus = false,
lower = true
} },
In your uzbl config file, add the bindings:
@cbind h = sh 'echo "awful.client.focus.byidx(-1); if client.focus then client.focus:raise() end"|awesome-client' @cbind l = sh 'echo "awful.client.focus.byidx( 1); if client.focus then client.focus:raise() end"|awesome-client'
If you like url-from-surfraw-or-history, you may want to focus the instance that you just opened. In your uzbl config file, add:
@cbind t = sh 'uri=$($HOME/.local/share/uzbl/scripts/load_url_from_surfraw.sh) && $HOME/.local/share/uzbl/scripts/launch-and-raise-uzbl.sh $uri'
And here is the script launch-and-raise-uzbl.sh:
#!/bin/sh
if test -z $1; then
echo usage: $0 uri
exit 1
else
uri=$1
uzbl-browser -u $uri &
sleep 1
echo " \
for k, c in pairs(client.get()) \
do if c.pid == $! then \
client.focus = c ;\
c:raise () \
end \
end \
" | awesome-client
fi