Overlapping conky..
Hey all again.
After a long period Im back on arch as I got a new pc(old one burned). Afer a while using the pre installed winxp I decided to go back to arch and is just now setting it up as I like ot have it.
I seem to have lost some of my memory banks because I cannot come up with a solution to this problem. The thing is that when a new song in mpd starts, conky refresh and overlap any window that happens to be in conky's area, see below pic.
Below is my .conkyrc
background yes
use_xft yes
xftfont dejavu sans mono -10
xftalpha 1
update_interval 2.0
total_run_times 0
double_buffer yes
draw_shades no
draw_outline yes
draw_borders no
stippled_borders 0
border_margin 1
border_width 1
default_color A29F84
default_shade_color black
default_outline_color black
alignment bottom_left
gap_x 1
gap_y 41
no_buffers yes
uppercase no
cpu_avg_samples 2
net_avg_samples 2
override_utf8_locale yes
own_window yes
own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,skip_taskbar,sticky,skip_pager
use_spacer none
TEXT
${color #353535}┌[ ${color #98c2c7}TIME${color #353535} ▸ ${color}${time %H:%M} ${color #353535}]
${color #353535}└─[ ${color #98c2c7}DATE${color #353535} ▸ ${color }${time %a,} ${time %B %e} ${color #353535}]
${color #353535}┌[ ${color #98c2c7}CORE${color }${color #353535} ▸ ${color}${hwmon 1 temp 1}/${hwmon 2 temp 1}°C ${color #353535}]
${color #353535}└─[ ${color #98c2c7}CPU${color #353535} ▸ ${color }${hwmon 0 temp 2}°C ${color #353535}]
${color #353535}┌[ ${color #98c2c7}MPD${color }${color #353535} ▸ ${color}${mpd_status} ${color #353535}]
${color #353535}└┬[ ${color #98c2c7}Time${color #353535} ▸ ${color }${mpd_elapsed}/${mpd_length}${color #353535} ]
${color #353535} └─[ ${color #98c2c7}Track ${color #353535}▸ ${color}${mpd_artist}${color #353535} / ${color }${mpd_album}${color #353535} / ${color }${mpd_title}${color #FF7B00}${color #353535} ]
any help or tip is appreciated
// Thanks.
EDIT: For those who miss it in the screenie, I use xfce.
Last edited by akejo (2008-08-11 09:37:11)
dunc wrote:Try "desktop" or "override" for own_window_type. Of course, you might then run into other problems, but it should solve that one. I find getting conky to play nicely with various WMs involves a series of compromises: you can never quite get it exactly the way you want.
Thanks.
I played around a little and it seems I didnt get the overlapping issue when I changed own_window_type to "no", leaving other settings as they were.
Similar Messages
-
[SOLVED]Compton, Conky and RXVT-Unicode not playing nicely
Hello. I'm having some problems making my desktop how I want it. My window manager is fluxbox.
First problem is just a minor inconvenience, but annoying. When I login, a transparent terminal spawns to my specification, but it is skewed.
http://i.imgur.com/hrEEh3H.jpg
However, as soon as I open any window it fixes itself
http://i.imgur.com/WXQZ9e3.jpg
Second problem is that I can't figure out how to remove the shadow under conky. I know that it is coming from the slit, but it just won't go away. I can get it to go away if I set conky to desktop instead of panel, but then when I launch any window it overlaps with the conky bar, and that is unaceptable. Maybe there is a fluxbox configuration option that reserves some space so nothing can overlap it? But I couldn't find anything.
Here are the config files I think are relevant:
.Xdefaults:
urxvt*.transparent:true
urxvt*scrollBar:false
urxvt*borderLess:true
urxvt*foreground:blue
urxvt*.highlightColor: yellow
urxvt*.colorUL: #4682B4
urxvt*.cursorBlink: 1
urxvt*font: xft:Terminus:pixelsize=12
urxvt*.perl-ext-common: default,matcher,tabbedex,readline,clipboard
urxvt*.url-launcher: /usr/bin/firefox
urxvt*.matcher.button: 1
URxvt.tabbed.autohide:true
.conkyrc:
#avoid flicker
double_buffer yes
#own window to run simultanious 2 or more conkys
own_window yes
own_window_transparent yes
own_window_class conky
own_window_type panel
own_window_hints undecorate,above,sticky,skip_taskbar,skip_pager
#borders
draw_borders no
#shades
draw_shades no
#position
gap_x 6
gap_y 6
alignment top_left
#behaviour
update_interval 1
#colour
default_color 8f8f8f
wn_window_colour 262626
#font
use_xft yes
xftfont terminus:pixelsize=10
#to prevent window from moving
use_spacer left
minimum_size 1600 0
short_units yes
pad_percents 2
#mpd
#mpd_host localhost
#mpd_port 6600
imap localhost [email protected] xxxxxxx -i 120
#color = e0e0e0
TEXT
${voffset -1} Cpu: ${color 000000}${font}${cpu}% ${color} Mem: ${color 000000}${font}${mem} ${color} | ${color} Uptime: ${color 000000}${font}${uptime_short}${color} | ${color} Download Speed: ${color 000000}${font}${downspeed wlp0s26u1u4}/s ${color}Total Downloaded: ${color 000000}${totaldown wlp0s26u1u4} ${color} | ${color} Upload Speed: ${color 000000}${upspeed wlp0s26u1u4}/s ${color} Total Uploaded: ${color 000000}${totalup wlp0s26u1u4} ${color} | ${color}Root: ${color 000000}${font}${fs_free /} ${color} Home: ${color 000000}${font}${fs_free /home} ${color} | ${color} Arch-pkg: ${color 000000}${font}${execi 300 perl /home/lucas/.scripts/conky-updates.pl}${color} | Email: ${color 000000}${imap_unseen} new messages ${color} | ${color} Weather: ${color 000000} ${weather http://weather.noaa.gov/pub/data/observations/metar/stations/ SBBR temperature}°C ${color}
.compton
shadow = true;
no-dnd-shadow = true;
no-dock-shadow = true;
clear-shadow = true;
shadow-radius = 7;
shadow-offset-x = -7;
shadow-offset-y = -7;
shadow-exclude = [ "name = 'Notification'", "class_g = 'URxvt'", "class_g = 'Conky'", "class_g ?= 'Notify-osd'", "class_g = 'Cairo-clock'" ];
shadow-ignore-shaped = false;
# Opacity
menu-opacity = 0.8;
inactive-opacity = 0.8;
frame-opacity = 0.7;
inactive-opacity-override = false;
alpha-step = 0.06;
blur-kern = "3x3box"
blur-background-exclude = [ "window_type = 'dock'", "window_type = 'desktop'" ];
opacity-rule = [ ]
# Fading
fading = true;
fade-in-step = 0.03;
fade-out-step = 0.03;
fade-exclude = [ ];
# Other
backend = "glx"
mark-wmwin-focused = true;
mark-ovredir-focused = true;
detect-rounded-corners = true;
detect-client-opacity = true;
refresh-rate = 0;
vsync = "opengl-swc";
dbe = false;
paint-on-overlay = true;
focus-exclude = [ "class_g = 'Cairo-clock'" ];
detect-transient = true;
detect-client-leader = true;
invert-color-include = [ ];
# GLX backend
glx-no-stencil = true;
glx-copy-from-front = false;
glx-no-rebind-pixmap = true;
glx-swap-method = "undefined";
# Window type settings
wintypes:
tooltip = { fade = true; shadow = false; opacity = 0.75; focus = true; };
Last edited by Chetyre (2014-04-10 16:51:23)using lowercase conky in compton doesn't change anything. I'm pretty sure that shadow is not from conky, but from the slit. When I set the slit to autohide in the init file, the shadow hides as well. And there is no shadow in any other conky window type I've tried, except type panel. Unfortunately, it is the only one so far with the behavior I want.
I would like to use true transparency in urxvrt, since that does solve the skew issue and I think it looks better. However, in doing so the terminal is quite useless since there is a lot of text that I can't see, because the font becomes the same color as certain backgrounds. Unless there is a way to separate it? I want it to look like the one on the left (left = fake transparency, right = true transparency).
http://i.imgur.com/lUwk4F4.jpg
Last edited by Chetyre (2014-04-09 02:50:27) -
Bash Scripting with Conky -- How to implement?
Hey Folks, my first post here and I'm looking for a bit of help. I've created a bash script to work with conky in which its purpose is to change the color of the battery bar depending on current voltage.
Here's the bash script:
#!/bin/bash
# Change Conky battery color depending on charge
chrg=`cat /proc/acpi/battery/BAT1/state | grep "remaining capacity" |
awk '{print $3 }'`
echo $chrg
if [ $chrg -lt "3499" ]; then
${color red}${battery_percent BAT1}% ${battery_bar 4 BAT1}
elif [ "$chrg" -lt "5100"]; then
${color orange}${battery_percent BAT1}% ${battery_bar 4 BAT1}
else ${color green}${battery_percent BAT1}% ${battery_bar 4 BAT1}
fi
Essentially what it is supposed to do is grab and store the "remaining capacity" and if its lower than a certain point it changes color. What I'm having trouble with is actually implementing the colors into conky. Right now all it is doing is printing the charge as you can see. Any help would be appreciated. Thanks!I had this issue, took me three days to solve. Using if_match, put all your if_matches in a line, with each option having its color of choice, then put the bar, or % at the end. You will need to make sure it is in sequential order so the color will not overlap the color you want for the state in the if_match. I know this is an old thread, I will edit my post when I get on my netbook with the code.
I found this thread on a google search for bash and conky usages.
[edit] here was my solution for the if_match using the battery.
${if_match ${battery_percent BAT1} <= 49}${color0}${endif}${if_match ${battery_percent BAT1} <= 20}${color9}${endif}${if_match ${battery_percent BAT1} >= 50}${color4}${endif}${battery BAT1} ${alignr}${battery_bar 6,160 BAT1}
I have my colors set yellow for 49% and below, red 20% and lower, and last green for 50% and higher. Essentially this will pick yellow for under 49% and the if_match for red under 20%, the red will override the yellow, this is why order is important.
Remember this is all in one line, now there are cleaner ways of setting this up using lua. That is something I am still working on.
Last edited by mrknify (2014-03-05 17:09:59) -
Limiting string length in conky
In conky, i know 1 method for shortening strings to display the parts of them i want to see, that method is called cut.
It works great if i'm using the execi function in conky.
However i have a slight problem, i use:
${top_mem name 1}${offest -50} ${top_mem mem 1 mem_res 6}
to display process name and memory usage (in Mb) however the process name is too long and overlaps with the usage number, how can i shorten it to just 10 letters of the output?
Last edited by rabcor (2014-01-23 09:16:16)Thanks, that did it. After doing that though i had to increase offest from -50 to -10
Last edited by rabcor (2014-01-23 10:36:02) -
Hello, everyone. I'm trying to set up conky on my laptop, but I'm having some trouble configuring it the way I want. Now, what I want is to have four separate windows, one in each corner of my screen. To do so, I have created four different conkyrc files and I plan on adding four instances of conky to startup, with each one launching a different file.
The trouble is with the alignment parameter: The alignments are set to tl, tr, bl, and br. The tl and tr ones are working properly. However, the bl and br ones display only slightly below where the tl and tr windows start, causing them to overlap and become unreadable. I have also tried setting them to ml and mr instead of bl and br, and that causes them to display even higher, going partially off-screen. This really makes no sense and I'd really appreciate some help with this issue.
I can post a screenshot or the source of my conkyrc files if necessary. Also, if there's a better way to do this four-window setup than having four instances of conky, that'd be great.Have you tried the unabreviated option (bottom_left, bottom_right)? If that doesn't work, you could always mess with gap_x and gap_y to adjust the windows to where you want them.
Though, are you sure you want four instances running? That's going to take a drain on your cpu, especially if they're all updating frequently. It might be better to set one instance up as full screen with a transparent bg and offset the text to where you want it.
Last edited by TheHebes (2011-12-05 03:38:16) -
Ratpoison + dzen2 + conky-cli [SOLVED]
Hello,
I am currently trying to mix ratpoison up a little bit with the dzen2 statusbar. The bar appears and everything, no issues there, but as soon as I fire up a frame with rp it overlaps the bar! I figured that there should be some option for makin dzen2 always staying on top but I can't find anything regarding that feature(if it exists). Anyone with ideas?
Here is my .xinitrc: (don't mind the long sleep, that will be corrected sooner or later ;))
1 #!/bin/bash
2
3 (sleep 15s && conky | dzen2 -e '' -h '16' -w '1980' -ta r -fg '#aaaaaa' -bg '#1a1a1a' -fn '-*-terminus-*-r-normal-*-*-120-*-*-*-*-iso8859-*' -p) &
4 exec ratpoison
/David
Last edited by dlind (2010-07-27 15:32:50)splittercode wrote:
in .ratpoisonrc
padding left top right bottom
replace left, right, top, and bottom with the number of pixels to leave blank for your statusbar
for example, to leave 16px blank at top
'padding 0 16 0 0'
Thank you for the reply.
I have the value 'defpadding 0 0 0 0' in my .ratpoisonrc, changing the second value to 16 doesn't do anything though. I tampered with all of the values to see if it altered the frames in some way, but nothing happened.
New ideas? :)
/David -
Conky to show current i3 workspaces. i3-msg script [SOLVED]
Currently I have conky piped to i3 bar. i3 bar shows workspaces on it's own, I like this functionality but it overlaps with the conky output. I set workspace buttons off but of course i have no way of seeing workspaces. So in short I want conky to display all the open workspaces and highlight the current one. the solution i have come up with is to use the command
i3-msg -t get_workspaces
which displays an output like
[{"num":1,"name":"1","visible":false,"focused":false,"rect":{"x":0,"y":19,"width":1366,"height":749},"output":"LVDS1","urgent":false},{"num":2,"name":"2","visible":false,"focused":false,"rect":{"x":0,"y":19,"width":1366,"height":749},"output":"LVDS1","urgent":false},{"num":3,"name":"3","visible":false,"focused":false,"rect":{"x":0,"y":19,"width":1366,"height":749},"output":"LVDS1","urgent":false},{"num":4,"name":"4","visible":false,"focused":false,"rect":{"x":0,"y":19,"width":1366,"height":749},"output":"LVDS1","urgent":false},{"num":5,"name":"5","visible":true,"focused":true,"rect":{"x":0,"y":19,"width":1366,"height":749},"output":"LVDS1","urgent":false}]
so if i could pipe it to grep or form a sort of script to filter out the numbers and which desktop is visible i could easily put it into conky but i am not sure how to go about create such a script. Once i have the script i could easily create my conkyrc to give the desired output but i am not sure where to start with such a script.
Last edited by jaredanderson (2013-08-18 08:15:33)To be honest never liked running two bars, takes up too much space. the jshon thing wasn't a hundred percent what i was looking for but it gave me a good base to build off of. my script looks like this.
#! /bin/bash
if [ $# -lt 1 ]
then
echo "no command"
exit
fi
case $1 in
"color")
color=`i3-msg -t get_workspaces | jshon -a -e name -u -p -e focused -u | paste -d ' ' - - | grep $2 | cut -c3-`
# set true and false to 0 and 1 for conky
#true and false determines highlight for workspace
if [ "$color" = "" ]; then
echo "null"
elif [ "$color" = "false" ]; then
echo "0"
elif [ "$color" = "true" ]; then
echo "1"
fi
"status")
stat=`i3-msg -t get_workspaces | jshon -a -e name -u | grep $2`
#shows if workspace entered exists
#only negative is tenth workspace is plotted to 0
if [ "$stat" = "" ]; then
echo "0"
else
echo $stat
fi
esac
there is probably an even better way to do this but this works for me.
I then added these lines to my conkyrc
"full_text":
${if_match ${exec ~/.scripts/i3wc status 1}>0}
"1",
${else} "",
${endif}
"color":
${if_match ${exec ~/.scripts/i3wc color 1}<1}"\#2aa198"${else}
${if_match ${exec ~/.scripts/i3wc color 1}>0}"\#cb4b16"${else}
"\#ffffff"
${endif}
${endif}
a slight draw back is this makes my conkyrc gargantuan because I have to insert this set individually for all nine workspaces.
but it shows all workspaces and highlights the current one which is exactly what 'i wanted so I can't complain. thanks for the help progandy never would have done it without you.
probably could remove the final else in the conkyrc under color. color wouldn't be use because no text is output
Last edited by jaredanderson (2013-08-18 08:27:24) -
[SOLVED] Problem With conky and or xcompmgr
So I tried to search for this issue but i don't know quite how to explain through words on what is going on. basically i got corky installed. and so when i login my screen all around corky doesn't refresh. and i believe this to be because of xcompmgr. because thats when I installed it that is when my problem started. so here is a screenshot
Last edited by Sicariuxs (2012-11-14 21:13:45)no i don't have the problem when xcompmgr is running (lol didn't mean corky!! kept thinking about league of legends xD) but the problem is that if i don't have xcompmgr running that i don't have true trnasparancy on guake or any of my other applications. what i believe it to be is that maybe conky doesn't do so well with compositing. because this also has happened to me with compiz. but i know it has to be possible to combine the two! i've seen it done all over youtube. but i keep getting this problem. any suggestions? and thanks for the quick response
-
How can I fix left pane text overlap in iCal Day view?
In "Day" view, the items in the left hand (list) pane in iCal are overlapping, obscuring the bottom 1/3 of each line of text. It is as if the table cells are too close together vertically. How do I fix this?
Start Firefox in <u>[[Safe Mode]]</u> to check if one of the extensions or if hardware acceleration is causing the problem (switch to the DEFAULT theme: Firefox (Tools) > Add-ons > Appearance/Themes).
*Don't make any changes on the Safe mode start window.
*https://support.mozilla.org/kb/Safe+Mode
Try to disable hardware acceleration.
*Tools > Options > Advanced > General > Browsing: "Use hardware acceleration when available"
If disabling hardware acceleration works then check if there is an update available for your graphics display driver. -
Overlap, bookmarker or something like this...
hi,
i read a lot of ebooks and i've got this question:
can i mark a overlap or bookmarker (just like in normal books) in adobe so when i close ebook it will open next time exactly where i finished reading recently?
i'm new so sorry if this thread repeats...Look here:
http://forums.adobe.com/message/3321356#3321356 -
Awesome systray is not showing all icons, perhaps overlapping widgets?
I have a problem with my Awesome configuration that results in some of the icons being missing or partially missing from my systray. I suspect this is because of some overlapping, since they are partially hidden. You can see the problem in the top right corner.
rc.lua:
-- Standard awesome library
require("awful")
require("awful.autofocus")
require("awful.rules")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
--Wiget Library
require("vicious")
-- awesoMPD Widget
--require("awesompd/awesompd")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
beautiful.init("/usr/share/awesome/themes/blind-alien/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "urxvt"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
-- Enable or disable widgets:
-- You also have to edit the wiboxes!
useSysInfo = true
usePacman = true
useMpd = true
useWifi = false
useNet = true
useBat = false
useCpu = true
useMem = true
useTemp = false
-- Widget Settings
cpuCores = 2 --Number of CPU Cores
thermalZone = "coretemp.0" --Thermal Zone to read cpu temperature from (check vicious docu)
thermalData = "core" --Data Source: "proc", "core" or "sys"
netAdapter = "eth0" --Network adapter to monitor
wifiAdapter = "wlan0" --Wifi adapter for wifi widget
pacUpdate = "yaourt -Sy" --Command to update pacman cache
pacUpgrade = "yaourt -Su" --Command to upgrade system
networkManager = terminal .. " -e wicd-curses"
battery = "BAT1" --Battery to monitor
widthMpd = 420 --Width of MPD widget
-- Widget update intervals in seconds
updateCpu = 1
updatePac = 1801
updateMpd = 1
updateWifi = 7
updateNet = 1
updateBat = 31
updateMem = 7
-- For Dual-Screen setups:
-- Set "dualScreen" to "2" if you want a different, optimized widget layout for every screen.
-- If you set it to "-1" it will copy the same widget layout to both screens. (default Awesome behavior)
dualScreen = -1
screencount = screen.count()
-- Default modkey.
-- Usually, Mod4 is the key with a logo between Control and Alt.
-- If you do not like this or do not have such a key,
-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
-- However, you can use another modifier like Mod1, but it may interact with others.
modkey = "Mod4"
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.magnifier,
awful.layout.suit.floating,
awful.layout.suit.max
-- {{{ Tags
-- Define a tag table which will hold all screen tags.
tags = {
--names = { "1", "2", "3", "4", "5", "6"},
--names = { "⌘", "♐", "⌥", "ℵ"},
--names = { "⠪", "⠫", "⠬", "⠭", "⠮", "⠳"},
names = { "⠐", "⠡", "⠪", "⠵", "⠻", "⠿" },
--names = { " ∙", "⠡", "⠲", "⠵", "⠻", "⠿"},
--names = { " ⠐ ", " ⠡ ", " ⠲ ", " ⠵ ", " ⠾ ", " ⠿ "},
--names = { "⢷", "⣨", "⡪", "⣌", "⣪", "⡝"},
layout = {
layouts[8], layouts[8], layouts[8], layouts[5], layouts[8], layouts[8]
for s = 1, screencount do
tags[s] = awful.tag(tags.names, s, tags.layout)
end
-- {{{ Menu
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
{ "restart WM", awesome.restart },
{ "logout", awesome.quit },
{ "shutdown" , "sudo /sbin/halt -p" },
{ "reboot" , "sudo /sbin/reboot" }
myinternet = {
{ "Chromium", "chromium" },
{ "Firefox" , "firefox" },
{ "IM" , "pidgin" },
{ "IRC" , "xchat"}
mymedia = {
{ "Spotify", "spotify" },
{ "Rhythmbox", "rhythmbox" },
{ "ncmpcpp", "urxvt -e ncmpcpp" },
{ "Gnome Mplayer", "gnome-mplayer" },
{ "VLC" , "vlc" }
mygraphics = {
{ "GIMP" , "gimp" },
{ "Inkscape" , "inkscape" },
{ "Image viewer" , "eog" }
myoffice = {
{ "Base" , "lobase" },
{ "Calc" , "localc" },
{ "Impress" , "loimpress" },
{ "LibreOffice" , "loffice" },
{ "Writer" , "lowriter" },
{ "Lyx" , "lyx" },
{ "Document viewer" , "evince" }
mysystem = {
{ "htop" , "urxvt -e htop" },
{ "Partition" , "gksudo gparted" },
{ "Sys mon" , "gnome-system-monitor" }
myutilities = {
{ "Gedit" , "gedit" },
{ "Virtualbox" , "VirtualBox" },
{ "File Manager" , "nautilus --no-desktop" }
myplaces = {
{ "Home" , "nautilus --no-desktop /home/johan/" },
{ "Documents" , "nautilus --no-desktop /home/johan/Documents/" },
{ "Downloads" , "nautilus --no-desktop /home/johan/Downloads/" },
{ "Music" , "nautilus --no-desktop /home/johan/Music/" },
{ "Pictures" , "nautilus --no-desktop /home/johan/Pictures/" }
myserverplaces = {
{ "Server root" , "nautilus --no-desktop /srv/" },
{ "Downloads" , "nautilus --no-desktop /srv/download/" },
{ "Movies" , "nautilus --no-desktop /srv/movies/" },
{ "Tv-Series" , "nautilus --no-desktop /srv/tv-series/" },
{ "Misc" , "nautilus --no-desktop /srv/misc/" }
mymainmenu = awful.menu({ items = {
{ "Terminal", terminal },
{ "Places" , myplaces },
{ "Server" , myserverplaces },
{ "Internet" , myinternet },
{ "Media" , mymedia },
{ "Graphics" , mygraphics },
{ "Office" , myoffice },
{ "Utilities" , myutilities },
{ "Systools" , mysystem },
{ "Awesome", myawesomemenu }
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- Separators
bubble = widget({ type = "textbox" })
spacer = widget({ type = "textbox" })
space = widget({ type = "textbox" })
separator = widget({ type = "textbox" })
bracketl = widget({ type = "textbox" })
bracketr = widget({ type = "textbox" })
vertline = widget({ type = "textbox" })
dash = widget({ type = "textbox" })
bubble.text = " ∘ "
spacer.text = " "
space.text = " "
--separator.text = "<span font_desc='ClearlyU'> ⡾ </span>"
separator.text = "] ["
vertline.text = "|"
dash.text = "-"
bracketl.text = "["
bracketr.text = "]"
-- Status Labels
cpuLabel = {}
for s = 1, cpuCores do
cpuLabel[s] = widget({ type = "textbox" })
cpuLabel[s].text = "Core " .. s
end
rlabel = widget({ type = "textbox" })
rlabel.text = "Root:"
hlabel = widget({ type = "textbox" })
hlabel.text = "Home:"
-- WIDGETS --
-- OS info
if useSysInfo == true then
sys = widget({ type = "textbox" })
vicious.register(sys, vicious.widgets.os, "$1 $2")
end
-- Pacman updates
if usePacman == true then
-- Widget
pnoghosticon = widget({ type = "imagebox" })
pnoghosticon.image = image(beautiful.widget_pacnoghost)
pnoghosticon.visible = true
pghosticon = awful.widget.launcher({
image = beautiful.widget_pacghost,
command = terminal .. " -e " .. pacUpgrade .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
pghosticon.visible = false
-- Icon
-- picon = widget({ type = "imagebox" })
-- picon.image = image(beautiful.widget_pacnew)
-- Use the Pacman icon as launcher to update the package list (change to fit your package-management system)
picon = awful.widget.launcher({
image = beautiful.widget_pacnew,
command = pacUpdate .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
runpicon = awful.widget.launcher({
image = beautiful.widget_pacman_run,
command = pacUpdate .. " && echo -e 'vicious.force({ pacup, })' | awesome-client"
runpicon.visible = false
pacup = widget({ type = "textbox" })
vicious.register(pacup, vicious.widgets.pkg,
function(widget, args)
local nr = tonumber(args[1])
if nr ~= 0 then
pnoghosticon.visible = false
pghosticon.visible = true
picon.visible = false
runpicon.visible = true
else
pghosticon.visible = false
pnoghosticon.visible = true
runpicon.visible = false
picon.visible = true
end
end, updatePac, "Arch")
end
-- MPD Widget
if useMpd == true then
-- PLAY, STOP, PREV/NEXT Buttons
-- requires modification of /usr/share/awesome/lib/awful/widget/launcher.lua
-- b = util.table.join(w:buttons(), button({}, 1, nil, function () util.spawn(args.command) end))
-- to:
-- b = util.table.join(w:buttons(), button({}, 1, nil, function () util.spawn_with_shell(args.command) end))
music_play = awful.widget.launcher({
image = beautiful.widget_play,
command = "mpc toggle && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_pause = awful.widget.launcher({
image = beautiful.widget_pause,
command = "mpc toggle && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_pause.visible = false
music_stop = awful.widget.launcher({
image = beautiful.widget_stop,
command = "mpc stop && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_prev = awful.widget.launcher({
image = beautiful.widget_prev,
command = "mpc prev && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
music_next = awful.widget.launcher({
image = beautiful.widget_next,
command = "mpc next && echo -e 'vicious.force({ mpdwidget, })' | awesome-client"
mpdicon = widget({ type = "imagebox" })
mpdicon.image = image(beautiful.widget_mpd)
-- Initialize widget
mpdwidget = widget({ type = "textbox" })
--mpdwidget.wrap = "none"
mpdwidget.width = widthMpd
--mpdwidget.wrap = "word_char"
-- Register Widget
--vicious.register(mpdwidget, vicious.widgets.mpd, "(${state}) : ${Artist} - ${Title} ]", 13)
-- Set the maximum width of the MPD widget inside the string.format function as "%.<length>s"
vicious.register(mpdwidget, vicious.widgets.mpd,
function(widget, args)
--local maxlength = 85
local font = beautiful.font
local string = args["{Artist}"] .. " - " .. args["{Title}"]
--local string = "[" .. args["{state}"] .. "]" .. " : " .. args["{Artist}"] .. " - " .. args["{Title}"]
--[[ if maxlength < string.len(string) then
return "<span font_desc='" .. font .. "'>" .. string.sub(string, 0, maxlength-6) .. "</span> ..."
else
return "<span font_desc='" .. font .. "'>" .. string .. "</span>"
end]]
if args["{state}"] == "Play" then
music_play.visible = false
music_pause.visible = true
else
music_play.visible = true
music_pause.visible = false
end
return string
end, updateMpd)
end
---- WIFI Widget
--if useWifi == true then
-- wifiwidget = widget({ type = "textbox" })
-- wifiwidget.width = 22
-- wifiwidget.align = "right"
-- --wifiimage = widget({ type = "imagebox" })
-- wifiimage0 = awful.widget.launcher({
-- image = beautiful.widget_wifi0,
-- command = networkManager
-- wifiimage0.image.visible = true
-- wifiimage1 = awful.widget.launcher({
-- image = beautiful.widget_wifi1,
-- command = networkManager
-- wifiimage1.image.visible = false
-- wifiimage2 = awful.widget.launcher({
-- image = beautiful.widget_wifi2,
-- command = networkManager
-- wifiimage2.image.visible = false
-- wifiimage3 = awful.widget.launcher({
-- image = beautiful.widget_wifi3,
-- command = networkManager
-- wifiimage3.image.visible = false
-- wifiimage4 = awful.widget.launcher({
-- image = beautiful.widget_wifi4,
-- command = networkManager
-- wifiimage4.image.visible = false
-- -- Register Widget
-- -- change to the desired network adapter if needed
-- --vicious.register(wifiwidget, vicious.widgets.wifi, "~ ${link}%", 5, "wlan0")
-- vicious.register(wifiwidget, vicious.widgets.wifi,
-- function(widget, args)
-- if tonumber(args["{link}"]) > 75 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = true
-- elseif tonumber(args["{link}"]) > 50 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = true
-- wifiimage4.visible = false
-- elseif tonumber(args["{link}"]) > 25 then
-- wifiimage0.visible = false
-- wifiimage1.visible = false
-- wifiimage2.visible = true
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- elseif tonumber(args["{link}"]) > 0 then
-- wifiimage0.visible = false
-- wifiimage1.visible = true
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- else
-- wifiimage0.visible = true
-- wifiimage1.visible = false
-- wifiimage2.visible = false
-- wifiimage3.visible = false
-- wifiimage4.visible = false
-- end
-- return string.format("%02d%%", tonumber(args["{link}"]))
-- end, updateWifi, wifiAdapter)
--end
-- NETWORK Widget
if useNet == true then
dnicon = widget({ type = "imagebox" })
upicon = widget({ type = "imagebox" })
dnicon.image = image(beautiful.widget_down)
upicon.image = image(beautiful.widget_up)
-- Initialize widget
netdnwidget = widget({ type = "textbox" })
netdnwidget.width = 55
--netdnwidget.align = "right"
netupwidget = widget({ type = "textbox" })
netupwidget.width = 55
--netupwidget.align = "right"
-- Register widget
-- change to the desired network adapter if needed
--vicious.register(netdnwidget, vicious.widgets.net, "${eth0 down_kb} kB/s", 1)
--vicious.register(netupwidget, vicious.widgets.net, "${eth0 up_kb} kB/s", 1)
-- The following code formats the output to fill with zeroes at the beginning i.e. 013 kB/s instead of 13 kB/s.
-- It also automatically switches to MB/s if there is more than 999 kB/s
vicious.register(netdnwidget, vicious.widgets.net,
function(widget, args)
if tonumber(args["{" .. netAdapter .. " down_kb}"]) > 999 then
return string.format("%04.1f MB/s", tonumber(args["{" .. netAdapter .. " down_mb}"]))
else
return string.format("%03d kB/s", tonumber(args["{" .. netAdapter .. " down_kb}"]))
end
end, updateNet)
vicious.register(netupwidget, vicious.widgets.net,
function(widget, args)
if tonumber(args["{" .. netAdapter .. " up_kb}"]) > 999 then
return string.format("%04.1f MB/s", tonumber(args["{" .. netAdapter .. " up_mb}"]))
else
return string.format("%03d kB/s", tonumber(args["{" .. netAdapter .. " up_kb}"]))
end
end, updateNet)
end
---- BATTERY widget
--if useBat == true then
-- baticon = widget({ type = "imagebox" })
-- --baticon.image = image(beautiful.widget_batfull)
-- --Initialize widget
-- batwidget = widget({ type = "textbox" })
-- batwidget.width = 22
-- batwidget.align = "right"
-- --Register widget
-- --vicious.register(batwidget, vicious.widgets.bat, "$1$2", 31, "BAT1")
-- vicious.register(batwidget, vicious.widgets.bat,
-- function(widget, args)
-- if string.match(args[1], "[+↯]") then
-- baticon.image = image(beautiful.widget_ac)
-- elseif tonumber(args[2]) > 40 then
-- baticon.image = image(beautiful.widget_batfull)
-- elseif tonumber(args[2]) > 20 then
-- baticon.image = image(beautiful.widget_batlow)
-- else
-- baticon.image = image(beautiful.widget_batempty)
-- end
-- if tonumber(args[2]) == 100 then
-- return "Full"
-- end
-- return args[2] .. "%"
-- end, updateBat, battery)
--end
-- {{{ CPU
--if useTemp == true then
-- -- Core Temp
-- tempwidget = widget({ type = "textbox" })
-- tempwidget.width = 26
-- tempwidget.align = "right"
-- vicious.register(tempwidget, vicious.widgets.thermal, "$1 C", updateCpu, { thermalZone, thermalData })
-- --vicious.register(tempwidget, vicious.widgets.thermal, "$1°C", 5, { "thermal_zone0", "sys" })
-- -- Icon
-- tempicon = widget({ type = "imagebox" })
-- tempicon.image = image(beautiful.widget_temp)
--end
-- Readout
if useCpu == true then
-- Icon
cpuicon = widget({ type = "imagebox" })
cpuicon.image = image(beautiful.widget_cpu)
-- Core 1 Meter
cpubar = {}
freq = {}
displayCores = {}
displayCpu = {}
for s = 1, cpuCores do
cpubar[s] = awful.widget.progressbar()
cpubar[s]:set_width(50)
cpubar[s]:set_height(6)
cpubar[s]:set_vertical(false)
cpubar[s]:set_background_color("#434343")
--cpubar:set_color(beautiful.fg_normal)
cpubar[s]:set_gradient_colors({ beautiful.fg_normal, beautiful.fg_normal, beautiful.fg_normal, beautiful.bar })
--Delete the following line if you want to put the widget on the left side of the wibox
cpubar[s].layout = awful.widget.layout.horizontal.rightleft
vicious.register(cpubar[s], vicious.widgets.cpu, "$" .. s, updateCpu)
awful.widget.layout.margins[cpubar[s].widget] = { top = 6 }
-- Frequency
freq[s] = widget({ type = "textbox" })
freq[s].width = 44
freq[s].align = "right"
--vicious.register(freq1, vicious.widgets.cpufreq, "$2 GHz", 9, "cpu0")
vicious.register(freq[s], vicious.widgets.cpufreq,
function(widget, args)
return string.format("%03.1f GHz", args[2])
end, updateCpu, "cpu" .. s - 1)
-- Cache that shit
vicious.cache(vicious.widgets.cpu)
end
end
-- }}} CPU
-- {{{ MEM
if useMem == true then
-- Icon
memicon = widget({ type = "imagebox" })
memicon.image = image(beautiful.widget_mem)
-- Percentage
--mem = widget({ type = "textbox" })
--vicious.register(mem, vicious.widgets.mem, "$1%")
-- Meter
membar = awful.widget.progressbar()
membar:set_width(50)
membar:set_height(6)
membar:set_vertical(false)
membar:set_background_color("#434343")
--membar:set_color(beautiful.fg_normal )
membar:set_gradient_colors({ beautiful.fg_normal, beautiful.fg_normal, beautiful.fg_normal, beautiful.bar })
--This bar should be placed on the right side of the wibox unless
--it's a dual-screen config in which case the default (leftright)
--layout is used... change that if you need!
if screencount ~= dualScreen then
membar.layout = awful.widget.layout.horizontal.rightleft
end
--Register the widget
vicious.register(membar, vicious.widgets.mem, "$1", updateMem)
-- Align progressbars
awful.widget.layout.margins[membar.widget] = { top = 6 }
-- MEM Usage
--mem_total = widget({ type = "textbox" })
--vicious.register(mem_total, vicious.widgets.mem, "$3 MB", 9)
--mem_used = widget({ type = "textbox" })
--vicious.register(mem_total, vicious.widgets.mem, "$2 MB", 9,)
-- Cache that shit
vicious.cache(vicious.widgets.mem)
end
-- }}} MEM
-- Create a textclock widget
mytextclock = awful.widget.textclock({ align = "right" }, "%H:%M")
awful.widget.layout.margins[mytextclock] = { top = -1 }
-- Create a systray
mysystray = widget({ type = "systray"})
-- Create a wibox for each screen and add it
mywibox = {}
mybottomwibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = awful.util.table.join(awful.button({}, 1, awful.tag.viewonly),
awful.button({ modkey }, 1, awful.client.movetotag),
awful.button({}, 3, awful.tag.viewtoggle),
awful.button({ modkey }, 3, awful.client.toggletag),
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev))
mytasklist = {}
mytasklist.buttons = awful.util.table.join(awful.button({}, 1, function(c)
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
end),
awful.button({}, 3, function()
if instance then
instance:hide()
instance = nil
else
instance = awful.menu.clients({ width = 250 })
end
end),
awful.button({}, 4, function()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.button({}, 5, function()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end))
for s = 1, screencount do
-- Set a screen margin for borders
awful.screen.padding(screen[s], { top = 0 })
-- Create a promptbox for each screen
mypromptbox[s] = awful.widget.prompt()
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = awful.widget.layoutbox(s)
mylayoutbox[s]:buttons(awful.util.table.join(awful.button({}, 1, function() awful.layout.inc(layouts, 1) end),
awful.button({}, 3, function() awful.layout.inc(layouts, -1) end),
awful.button({}, 4, function() awful.layout.inc(layouts, 1) end),
awful.button({}, 5, function() awful.layout.inc(layouts, -1) end)))
mylayoutbox[s].resize = false
-- Create a taglist widget
mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
awful.widget.layout.margins[mytaglist[s]] = { top = -2 }
-- WARNING: In order to properly view the tasklist some lua files have been modified. For the
-- tasklist_floating_icon icon to be placed on the left side of the task name instead of the
-- right alignment, /usr/share/awesome/lib/awful/widget/tasklist.lua in function new(label, buttons) the
-- variable widgets.textbox has to be modified like this:
-- remove bg_align = "right" and
-- modify the left margin from 2 to icon width + 2 (i.e.: 18).
-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist(function(c)
return awful.widget.tasklist.label.currenttags(c, s,
-- WARNING: Requires modified /usr/share/awesome/lib/awful/widget/tasklist.lua !!!
-- This basically hides the application icons on the tasklist. If you don't want this or
-- prefer not to change your tasklist.lua remove the following line!
{ hide_icon = true })
end, mytasklist.buttons)
awful.widget.layout.margins[mytasklist[s]] = { top = 2 }
-- WIBOXES --
-- Here we create the wiboxes if it's not a dual-screen layout
if screencount ~= dualScreen then
-- Create the wibox
mywibox[s] = awful.wibox({ position = "top", screen = s, border_width = 0, height = 18 })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
mytaglist[s],
mypromptbox[s],
displaySysInfo,
layout = awful.widget.layout.horizontal.leftright
mytextclock,
mylayoutbox[s],
s == 1 and mysystray or nil,
mytasklist[s],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[s] = awful.wibox({ position = "bottom", screen = s, border_width = 0, height = 18 })
mybottomwibox[s].widgets = {
space, music_play, music_pause, music_stop, music_prev, music_next, space, mpdwidget,
layout = awful.widget.layout.horizontal.leftright
spacer,
bracketr,
-- spacer, batwidget, spacer, baticon, spacer,
-- separator,
-- spacer, wifiwidget, spacer, wifiimage0, wifiimage1, wifiimage2, wifiimage3, wifiimage4, spacer,
-- separator,
-- spacer, tempwidget, spacer, tempicon, spacer,
-- separator,
spacer, freq[1], spacer, cpubar[1], spacer,
--cpuLabel[1], spacer,
cpuicon, spacer,
separator,
spacer, membar, spacer, memicon, spacer,
separator,
spacer, netupwidget, spacer, upicon, spacer, separator, spacer, netdnwidget, spacer, dnicon, spacer,
separator,
space, pghosticon, pnoghosticon, runpicon, picon, space,
bracketl,
layout = awful.widget.layout.horizontal.rightleft
end
end
if screencount == dualScreen then
-- Here we create the wiboxes if it is a dual screen configuration:
mywibox[1] = awful.wibox({ position = "top", screen = 1, border_width = 0, height = 18 })
-- Add widgets to the wibox - order matters
mywibox[1].widgets = {
mytaglist[1],
spacer,
mypromptbox[1],
mytasklist[1],
layout = awful.widget.layout.horizontal.leftright
spacer,
mytextclock,
-- spacer,
mylayoutbox[1],
-- spacer,
-- mytasklist[1],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[1] = awful.wibox({ position = "bottom", screen = 1, border_width = 0, height = 18 })
mybottomwibox[1].widgets = {
space, music_play, music_pause, music_stop, music_prev, music_next, space, mpdwidget,
layout = awful.widget.layout.horizontal.leftright
space,
s == 1 and mysystray or nil,
layout = awful.widget.layout.horizontal.rightleft
mywibox[2] = awful.wibox({ position = "top", screen = 2, border_width = 0, height = 18 })
mywibox[2].widgets = {
space,
mytaglist[2],
spacer,
mypromptbox[2],
layout = awful.widget.layout.horizontal.leftright
spacer,
mytextclock,
space,
mylayoutbox[2],
spacer,
mytasklist[2],
layout = awful.widget.layout.horizontal.rightleft
mybottomwibox[2] = awful.wibox({ position = "bottom", screen = 2, border_width = 0, height = 18 })
mybottomwibox[2].widgets = {
spacer,
bracketl,
spacer, sys, spacer,
separator,
space, runpicon, picon, pghosticon, pnoghosticon, space,
separator,
spacer, dnicon, spacer, netdnwidget, spacer, separator, spacer, upicon, spacer, netupwidget, spacer,
separator,
spacer, memicon, spacer, membar, spacer,
bracketr,
layout = awful.widget.layout.horizontal.leftright
spacer,
bracketr,
spacer, tempwidget, spacer, tempicon, spacer,
separator,
spacer, freq[2], spacer, cpubar[2], spacer,
cpuLabel[2], spacer,
cpuicon, spacer,
separator,
spacer, freq[1], spacer, cpubar[1], spacer,
cpuLabel[1], spacer,
cpuicon, spacer,
bracketl,
layout = awful.widget.layout.horizontal.rightleft
end
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(awful.button({}, 3, function() mymainmenu:toggle() end),
awful.button({}, 4, awful.tag.viewnext),
awful.button({}, 5, awful.tag.viewprev)))
-- {{{ Key bindings
globalkeys = awful.util.table.join(awful.key({ modkey, }, "Left", awful.tag.viewprev),
awful.key({ }, "Print", function () awful.util.spawn("gnome-screenshot") end),
awful.key({ modkey, }, "Right", awful.tag.viewnext),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
awful.key({ modkey, }, "j",
function()
awful.client.focus.byidx(1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "k",
function()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function() mymainmenu:show({ keygrabber = true }) end),
--Volume manipulation
-- awful.key({}, "XF86AudioRaiseVolume", function() awful.util.spawn("amixer set Master 5+") end),
-- awful.key({}, "XF86AudioLowerVolume", function() awful.util.spawn("amixer set Master 5-") end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "j", function() awful.client.swap.byidx(1) end),
awful.key({ modkey, "Shift" }, "k", function() awful.client.swap.byidx(-1) end),
awful.key({ modkey, "Control" }, "j", function() awful.screen.focus_relative(1) end),
awful.key({ modkey, "Control" }, "k", function() awful.screen.focus_relative(-1) end),
awful.key({ modkey, }, "u", awful.client.urgent.jumpto),
awful.key({ modkey, }, "Tab",
function()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),
-- Standard program
awful.key({ modkey, }, "Return", function() awful.util.spawn(terminal) end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
awful.key({ modkey, }, "l", function() awful.tag.incmwfact(0.05) end),
awful.key({ modkey, }, "h", function() awful.tag.incmwfact(-0.05) end),
awful.key({ modkey, "Shift" }, "h", function() awful.tag.incnmaster(1) end),
awful.key({ modkey, "Shift" }, "l", function() awful.tag.incnmaster(-1) end),
awful.key({ modkey, "Control" }, "h", function() awful.tag.incncol(1) end),
awful.key({ modkey, "Control" }, "l", function() awful.tag.incncol(-1) end),
awful.key({ modkey, }, "space", function() awful.layout.inc(layouts, 1) end),
awful.key({ modkey, "Shift" }, "space", function() awful.layout.inc(layouts, -1) end),
-- Prompt
awful.key({ modkey }, "r", function() mypromptbox[mouse.screen]:run() end),
awful.key({ modkey }, "x",
function()
awful.prompt.run({ prompt = "Run Lua code: " },
mypromptbox[mouse.screen].widget,
awful.util.eval, nil,
awful.util.getdir("cache") .. "/history_eval")
end))
clientkeys = awful.util.table.join(awful.key({ modkey, }, "f", function(c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, }, "q", function(c) c:kill() end),
awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle),
awful.key({ modkey, "Control" }, "Return", function(c) c:swap(awful.client.getmaster()) end),
awful.key({ modkey, }, "o", awful.client.movetoscreen),
awful.key({ modkey, "Shift" }, "m", function () awful.util.spawn("urxvt -T ncmpcpp -e 'ncmpcpp'") end),
awful.key({ modkey, "Shift" }, "w", function () awful.util.spawn("chromium") end),
awful.key({ modkey, }, "b", function () awful.util.spawn("nautilus --no-desktop") end),
awful.key({ modkey, "Shift" }, "r", function(c) c:redraw() end),
awful.key({ modkey, }, "t", function(c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "n", function(c) c.minimized = not c.minimized end),
awful.key({ modkey, }, "m",
function(c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end))
-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screencount do
keynumber = math.min(9, math.max(#tags[s], keynumber));
end
-- Bind all key numbers to tags.
-- Be careful: we use keycodes to make it works on any keyboard layout.
-- This should map on the top row of your keyboard, usually 1 to 9.
for i = 1, keynumber do
globalkeys = awful.util.table.join(globalkeys,
awful.key({ modkey }, "#" .. i + 9,
function()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, "#" .. i + 9,
function()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewtoggle(tags[screen][i])
end
end),
awful.key({ modkey, "Shift" }, "#" .. i + 9,
function()
if client.focus and tags[client.focus.screen][i] then
awful.client.movetotag(tags[client.focus.screen][i])
end
end),
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
function()
if client.focus and tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end))
end
clientbuttons = awful.util.table.join(awful.button({}, 1, function(c) client.focus = c; c:raise() end),
awful.button({ modkey }, 1, awful.mouse.client.move),
awful.button({ modkey }, 3, awful.mouse.client.resize))
-- Set keys
root.keys(globalkeys)
-- {{{ Rules
awful.rules.rules = {
-- All clients will match this rule.
rule = {},
properties = {
border_width = beautiful.border_width,
border_color = beautiful.border_normal,
size_hints_honor = false,
focus = true,
keys = clientkeys,
buttons = clientbuttons
rule = { class = "MPlayer" },
properties = { floating = true }
rule = { class = "pinentry" },
properties = { floating = true }
rule = { class = "gimp" },
properties = { floating = true }
{ rule = { class = "firefox" },
properties = { tag = tags[1][2] } },
{ rule = { class = "Chromium" },
properties = { tag = tags[1][2] } },
{ rule = { class = "Pidgin" },
properties = { tag = tags[1][3] } },
{ rule = { class = "Xchat" },
properties = {tag = tags[1][4] } },
-- Set Firefox to always map on tags number 2 of screen 1.
-- { rule = { class = "Firefox" },
-- properties = { tag = tags[1][2] } },
-- {{{ Signals
-- Signal function to execute when a new client appears.
client.add_signal("manage", function(c, startup)
-- Add a titlebar
-- awful.titlebar.add(c, { modkey = modkey })
-- Enable sloppy focus
c:add_signal("mouse::enter", function(c)
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)
if not startup then
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)
-- Put windows in a smart way, only if they does not set an initial position.
if not c.size_hints.user_position and not c.size_hints.program_position then
awful.placement.no_overlap(c)
awful.placement.no_offscreen(c)
end
end
end)
client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- {{{ Tag signal handler - selection
-- - ASCII tags 1 [2] 3 4...
-- - start with tag 1 named [1] in tag setup
for s = 1, screencount do
for t = 1, #tags[s] do
tags[s][t]:add_signal("property::selected", function ()
if tags[s][t].selected then
tags[s][t].name = "[" .. tags[s][t].name .. "]"
else--]]
--tags[s][t].name = tags[s][t].name:gsub("[%[%]]", "")
--[[ end
end)
end
end
I have tried to search around for a solution to this, but I am coming up short. Any idea on how to solve this?
Last edited by kveras (2011-11-21 09:01:47)First of all, did you check the wiki and forums? We'll help you, but you have to try to fix it yourself first.
You will need to provide more info if you want help.
Did you set up Gnome to force fallback mode?
Did you look at the Gnome wiki article? There's a few sections that sound like what your looking to do, but the examples are USING OTHER WM's. They still might be able to point you in the right direction. -
MDI JTable Overlap Area Repaint Problem
Hi all,
I have a problem for my application in MDI mode.
I open many windows (JInternalFrame contain JTable) under JDesktopPane. Some of the windows are overlapping and when they receive update in the table, it seems repaint all of the overlapping windows, not only itself. This make my application performance become poor, slow respond for drap & drop an existing window or open a new window.
To prove this, i make a simple example for open many simple table and have a thread to update the table's value for every 200 mill second. After i open about 20 windows, the performance become poor again.
If anyone face the same problem with me and any suggestions to solve the problem ?
Please help !!!!!
Following are my sources:
public class TestMDI extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPanel;
private JDesktopPane desktopPane;
private JMenuBar menuBar;
private List<TestPanel> allScreens = new ArrayList<TestPanel>();
private List<JDialog> freeFloatDialogs = new ArrayList<JDialog>();
private List<JInternalFrame> mdiInternalFrm = new ArrayList<JInternalFrame>();
int x = 0;
int y = 0;
int index = 0;
private static int MDI_MODE = 0;
private static int FREE_FLOAT_MODE = 1;
private int windowMode = MDI_MODE;
public TestMDI() {
init();
public static void main(String[] args) {
new TestMDI().show();
public void init() {
contentPanel = new JPanel();
desktopPane = new JDesktopPane();
desktopPane.setDragMode(JDesktopPane.LIVE_DRAG_MODE);
desktopPane.setFocusTraversalKeysEnabled(false);
desktopPane.setFocusTraversalPolicyProvider(false);
desktopPane.setBorder(null);
desktopPane.setIgnoreRepaint(true);
desktopPane.setPreferredSize(new Dimension(1000, 800));
this.setSize(new Dimension(1000, 800));
menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Test");
JMenuItem menuItem1 = new JMenuItem("Open Lable Screen");
menuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 1; i < 4; i++) {
final TestJLableScreen screen = new TestJLableScreen("Screen " + (allScreens.size() + 1));
screen.startTime();
if (windowMode == MDI_MODE) {
JInternalFrame frame = createInternalFram(screen);
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (allScreens.size() * 60 + 100 < 1000) {
x = allScreens.size() * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
} else {
JDialog dialog = createJDialog(screen);
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
allScreens.add(screen);
JMenuItem menuItem2 = new JMenuItem("Open Table Screen");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (int i = 1; i < 4; i++) {
TestTableScreen screen = new TestTableScreen("Screen " + (allScreens.size() + 1));
screen.startTime();
if (windowMode == MDI_MODE) {
JInternalFrame frame = createInternalFram(screen);
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (allScreens.size() * 60 + 100 < 1000) {
x = allScreens.size() * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
} else {
JDialog dialog = createJDialog(screen);
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
allScreens.add(screen);
menu1.add(menuItem1);
menu1.add(menuItem2);
this.setJMenuBar(menuBar);
this.getJMenuBar().add(menu1);
this.getJMenuBar().add(createSwitchMenu());
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(desktopPane);
desktopPane.setDesktopManager(null);
public JInternalFrame createInternalFram(final TestPanel panel) {
final CustomeInternalFrame internalFrame = new CustomeInternalFrame(panel.getTitle(), true, true, true, true) {
public void doDefaultCloseAction() {
super.doDefaultCloseAction();
allScreens.remove(panel);
internalFrame.setPanel(panel);
// internalFrame.setOpaque(false);
internalFrame.setSize(new Dimension(1010, 445));
internalFrame.add(panel);
internalFrame.setFocusTraversalKeysEnabled(false);
internalFrame.setFocusTraversalPolicyProvider(false);
desktopPane.getDesktopManager();
// internalFrame.setFocusTraversalKeysEnabled(false);
internalFrame.setIgnoreRepaint(true);
return internalFrame;
public JDialog createJDialog(final TestPanel panel) {
JDialog dialog = new JDialog(this, panel.getTitle());
dialog.setSize(new Dimension(1010, 445));
dialog.add(panel);
dialog.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
allScreens.remove(panel);
return dialog;
public JMenu createSwitchMenu() {
JMenu menu = new JMenu("Test2");
JMenuItem menuItem1 = new JMenuItem("Switch FreeFloat");
menuItem1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
windowMode = FREE_FLOAT_MODE;
for (JInternalFrame frm : mdiInternalFrm) {
frm.setVisible(false);
frm.dispose();
frm = null;
mdiInternalFrm.clear();
remove(desktopPane);
desktopPane.removeAll();
// revalidate();
repaint();
add(contentPanel);
index = 0;
for (JDialog dialog : freeFloatDialogs) {
dialog.setVisible(false);
dialog.dispose();
dialog = null;
freeFloatDialogs.clear();
for (int i = 0; i < allScreens.size(); i++) {
JDialog dialog = createJDialog(allScreens.get(i));
freeFloatDialogs.add(dialog);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
dialog.setLocation(x, y);
dialog.setVisible(true);
JMenuItem menuItem2 = new JMenuItem("Switch MDI");
menuItem2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
windowMode = MDI_MODE;
remove(contentPanel);
add(desktopPane);
for (int i = 0; i < freeFloatDialogs.size(); i++) {
freeFloatDialogs.get(i).setVisible(false);
freeFloatDialogs.get(i).dispose();
freeFloatDialogs.clear();
// revalidate();
repaint();
for (JInternalFrame frm : mdiInternalFrm) {
frm.setVisible(false);
frm.dispose();
frm = null;
mdiInternalFrm.clear();
index = 0;
for (int i = 0; i < allScreens.size(); i++) {
JInternalFrame frame = createInternalFram(allScreens.get(i));
desktopPane.add(frame);
mdiInternalFrm.add(frame);
if (i * 60 + 100 < 1000) {
x = i * 60;
y = 60;
} else {
x = 60 * index;
y = 120;
index++;
frame.setLocation(x, y);
frame.setVisible(true);
menu.add(menuItem1);
menu.add(menuItem2);
return menu;
public class TestTableScreen extends TestPanel {
private static final long serialVersionUID = 1L;
JTable testTable = new JTable();
MyTableModel tableModel1 = new MyTableModel(1);
private boolean notRepaint = false;
int start = 0;
JScrollPane scrollPane = new JScrollPane();
private Timer timmer = new Timer(200, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random indexRandom = new Random();
final int index = indexRandom.nextInt(50);
Random valRandom = new Random();
final int val = valRandom.nextInt(600);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
notRepaint = false;
TestTableScreen.this.update(index + "|" + val);
public TestTableScreen(String title) {
this.title = title;
init();
tableModel1.setTabelName(title);
public void startTime() {
timmer.start();
public String getTitle() {
return title;
public void update(String updateStr) {
String[] val = updateStr.split("\\|");
if (val.length == 2) {
int index = Integer.valueOf(val[0]);
List vals = tableModel1.getVector();
if (vals.size() > index) {
vals.set(index, val[1]);
// tableModel1.fireTableRowsUpdated(index, index);
} else {
vals.add(val[1]);
// tableModel1.fireTableRowsUpdated(vals.size() - 1, vals.size() - 1);
tableModel1.fireTableDataChanged();
public TableModel getTableModel() {
return tableModel1;
public void init() {
testTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
testTable.setRowSelectionAllowed(true);
this.testTable.setModel(tableModel1);
int[] width = { 160, 80, 45, 98, 60, 88, 87, 88, 80, 70, 88, 80, 75, 87, 87, 41, 88, 82, 75, 68, 69 };
TableColumnModel columnModel = testTable.getColumnModel();
for (int i = 0; i < width.length; i++) {
columnModel.getColumn(i).setPreferredWidth(width[i]);
testTable.setRowHeight(20);
tableModel1.fireTableDataChanged();
this.setLayout(new BorderLayout());
TableColumnModel columnMode2 = testTable.getColumnModel();
int[] width2 = { 200 };
for (int i = 0; i < width2.length; i++) {
columnMode2.getColumn(i).setPreferredWidth(width2[i]);
scrollPane.getViewport().add(testTable);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(scrollPane, BorderLayout.CENTER);
class MyTableModel extends DefaultTableModel {
public List list = new ArrayList();
String titles[] = new String[] { "袨怓1", "袨怓2", "袨怓3", "袨怓4", "袨怓5", "袨怓6", "袨怓7", "袨怓8", "袨怓9", "袨怓10", "袨怓11",
"袨怓12", "袨怓13", "袨怓14", "袨怓15", "袨怓16", "袨怓17", "袨怓18", "袨怓19", "袨怓20", "袨怓21" };
String tabelName = "";
int type_head = 0;
int type_data = 1;
int type = 1;
public MyTableModel(int type) {
super();
this.type = type;
for (int i = 0; i < 50; i++) {
list.add(i);
public void setTabelName(String name) {
this.tabelName = name;
public int getRowCount() {
if (list != null) {
return list.size();
return 0;
public List getVector() {
return list;
public int getColumnCount() {
if (type == 0) {
return 1;
} else {
return titles.length;
public String getColumnName(int c) {
if (type == 0) {
return "head";
} else {
return titles[c];
public boolean isCellEditable(int nRow, int nCol) {
return false;
public Object getValueAt(int r, int c) {
if (list.size() == 0) {
return null;
switch (c) {
default:
if (type == 0) {
return r + " " + c + " test ";
} else {
return list.get(r) + " " + c;
public boolean isNotRepaint() {
return notRepaint;
public void setNotRepaint(boolean notRepaint) {
this.notRepaint = notRepaint;
public class TestPanel extends JPanel {
protected String title = "";
protected boolean needRepaint = false;
protected boolean isFirstOpen = true;
public String getTitle() {
return title;
public void setNeedRepaint(boolean flag) {
this.needRepaint = flag;
public boolean isNeedRepaint() {
return needRepaint;
public boolean isFirstOpen() {
return isFirstOpen;
public void setFirstOpen(boolean isFirstOpen) {
this.isFirstOpen = isFirstOpen;
public class TestJLableScreen extends TestPanel {
private static final long serialVersionUID = 1L;
private JLabel[] allLables = new JLabel[20];
private Timer timmer = new Timer(20, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Random indexRandom = new Random();
final int index = indexRandom.nextInt(10);
Random valRandom = new Random();
final int val = valRandom.nextInt(600);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
TestJLableScreen.this.setNeedRepaint(true);
TestJLableScreen.this.update(index + "|" + val);
public TestJLableScreen(String title) {
this.title = title;
init();
public void startTime() {
timmer.start();
public String getTitle() {
return title;
public void update(String updateStr) {
String[] val = updateStr.split("\\|");
if (val.length == 2) {
int index = Integer.valueOf(val[0]);
allLables[index * 2 + 1].setText(val[1]);
public void init() {
this.setLayout(new GridLayout(10, 2));
boolean flag = true;
for (int i = 0; i < allLables.length; i++) {
allLables[i] = new JLabel() {
// public void setText(String text) {
// super.setText(text);
// // System.out.println(" setText " + getTitle() + " ; " + this.getName());
public void paint(Graphics g) {
super.paint(g);
// System.out.println(" paint " + getTitle() + " ; " + this.getName());
// public void repaint() {
// super.repaint();
// System.out.println(" repaint " + getTitle() + " ; " + this.getName());
allLables[i].setName("" + i);
if (i % 2 == 0) {
allLables[i].setText("Name " + i + " : ");
} else {
allLables[i].setOpaque(true);
if (flag) {
allLables[i].setBackground(Color.YELLOW);
flag = false;
} else {
allLables[i].setBackground(Color.CYAN);
flag = true;
allLables[i].setText(i * 8 + "");
for (int i = 0; i < allLables.length; i++) {
this.add(allLables[i]);
public class CustomeInternalFrame extends JInternalFrame {
protected TestPanel panel;
public CustomeInternalFrame() {
this("", false, false, false, false);
public CustomeInternalFrame(String title) {
this(title, false, false, false, false);
public CustomeInternalFrame(String title, boolean resizable) {
this(title, resizable, false, false, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable) {
this(title, resizable, closable, false, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable) {
this(title, resizable, closable, maximizable, false);
public CustomeInternalFrame(String title, boolean resizable, boolean closable, boolean maximizable,
boolean iconifiable) {
super(title, resizable, closable, maximizable, iconifiable);
public TestPanel getPanel() {
return panel;
public void setPanel(TestPanel panel) {
this.panel = panel;i had the same problem with buttons and it seemed that i overlayed my button with something else...
so check that out first do you put something on that excact place???
other problem i had was the VAJ one --> VisualAge for Java (terrible program)
it does strange tricks even when you don't use the drawing tool...
dunno 2 thoughts i had... check it out...
SeJo -
Unity Connection 7 with overlapping extension
Hello everybody,
I'm deploying a CUCM 7.1.3 + Unity Connecion 7.1.3 to a customer, and I have a doubt when using overlapping extension. As it's a large environment, he has overlapping extension number in his multiple sites. For example, both SiteA and SiteB have the extension range 8XXX. In CUCM I have configured some translations patterns, so that an user from SiteA should dial 118XXX in order to reach SiteB, and an user in SiteB should dial 218XXX in order to reach site A. And each site has its own line partition to extension numbers. And everything works fine...
But these users are all in the same Unity Connection Server. So I would have users from SiteA and SiteB with the same extension in Unity Connection, and I can't do that. What I know can do is to configure some partitions from SiteA and SiteB in CUC, and put each subscriber in one partition, right?
But when a user wants to reach the voice mail to get his messages, how Unity Connection knows from which location is he?
Please, anyone could advise me how can I proceed with this configuration?
Thank you!!!Hello,
I workarounded my problem creating multiple VM Profiles, and assigning a diferent Voice Mail Box Mask for each. And in Unity connection I created a alternate extension for each user.
For example... the extension 6000 from SiteA has the VM Profile VM_SiteA, which has the voicemail box mask 11XXXX. And this user in Connection has the alternate extension 116000. And the extension 6000 from SiteB has the VM Profile VM_SiteB, which has the voicemail box mask 21XXXX, and this user has this number as alternate extension as well (216000)... It works fine like this.
But actually I haven't tested the MWI... If I have a translation pattern in CUCM that translates 11XXXX to XXXX (in partition from SiteA), and another 21XXXX to XXXX (in partition from SiteB), and configure the MWI extension in Connection to be 11XXXX and 21XXXX, will it work? Have anyone already tested this?
Thank you very much!!!
Bruno -
Site-to-ste VPN with overlapped subnet.
Hi Friends
I have to set up site to site VPN with overlapped network ASA 5540 and checkpoint what is the best parctice to achive tis goal
Thanks in advanceIt has to be configured on both sides.
X and Y are unused networks in this example: Site A has to hide 172.16.1.0/24 behind X when communicating to Y, site B has to hide 172.16.1.0/24 behind Y when communicating to X. The users in site A have to use Y as a destination, users in site B have to use X as destination. To make it usable for the users you should include the destinations in the DNS so that they never need the destination-IP.
On the ASA you describe the communication 172.16.1.0/24 -> Y with an access-list and add that ACL to your static-command. You find an example here:
http://www.cisco.com/en/US/products/hw/vpndevc/ps2030/products_configuration_example09186a00808c9950.shtml
Don't stop after you've improved your network! Improve the world by lending money to the working poor:
http://www.kiva.org/invitedby/karsteni -
ASA 5505: Site-to-Site VPN, NAT (Overlap Subnets)
Greetings all. I've searched through the forums and have found some similar situations to mine but nothing specific. I'm hoping this is an easy fix... :/
I volunteer for a non-profit medical facility that has an ASA 5505 (v8.4). They needed a site-to-site VPN to another facility (a Fortinet w/ 10.10.115.0/24) to securly transfer digital X-Ray images. Very simple setup... the issue is, my 5505 (192.168.1.x) overlaps with another site-to-site VPN connection on the Fortinet side already. So...
The network admin on the Fortinet side assinged me 172.31.1.0/24. I have established a connection but obviously, cannot route anywhere to the other side. Anyone have any suggestions here, how I might be able to accomplish this - hopefully with a simple NAT setup?
Thank you in advance everyone.Hello Chris,
For this scenario you will need to create a Policy-NAT rule and then configure the Interesting Traffic with the translated IP address.
Basically the NAT configuration will be like this:
object network Local-net
subnet 192.168.1.0 255.255.255.0
object network Translated-net
subnet 172.31.1.0 255.255.255.0
object network Fortinet-net
subnet 10.10.115.0 255.255.255.0
nat (inside,outside) source static Local-net Translated-net destination static Fortinet-net Fortinet-net
Obviously, you can change the name of the objects.
Then in the interesting traffic, the ACL that is apply in the crypto map that defines the VPN traffi, you will need to configure it like this:
access-list anyname permit ip 172.31.1.0 255.255.255.0 10.10.115.0 255.255.255.0
This should allow you to pass traffic over this tunnel and it will hide your network behind the network that the Fortinet assigned you.
Let me know if you have any doubts.
Daniel Moreno
Please rate any posts you find useful
Maybe you are looking for
-
Hi- I have a PXI-8145 running RT and Labview 8.0. I am having some problems with the attached VI running as a remote panel (it is a small part of a much larger app). It is supposed to read a value from a file and populate a numeric field. The "con
-
My Skype Number is going to be deactivated?
Hello, I recieved a email two days ago saying that my skype number will be deactivated in the next two days. Today is the last day to renew it. Skype must have tried to charge my pay pal account since that was the last time how I paid for it. I switc
-
How to set different Icons for Jtreenode
How to set different Icons for Jtreenode,i want to set icons for jtreenode,not only for leaf,open,closeicon,i hope that each node has a different icon.Thanks!
-
Using older version of itunes, apple support #'s
I was wondering if anyone has tried using an older version of itunes when their ipod wouldn't sync. I've got Itunes 8, and if downloading an older version will help me sync. Im for it! Are there any apple support numbers where I can call and ask for
-
Briefing Book as target for iBot
Hello Gurus, Is it somehow possible to deliver scheduled report/dashboard content to the briefing book? iBots by default do not have option to designate BB as a destination. May be there is some workaround using Actions or scripting? Thanks in advanc