You are not logged in.
slightly tweaked http://ompldr.org/vZml3NQ
That "social" thing in your bar, with foreveR: hehe man bruker... is that from irc or? and how?
Offline
Offline
Offline
cross post from here
Offline
Finally, after trying every tiling wm out there I have found my favourite. Using it for half a day and chances are the wm hopping is over.
Tho there are a couple of issues, mainly with what should be floating windows, mplayer and dialog popups...
.. ..- ... . .- .-. -.-. .... -... - .--
Offline
do you mind sharing your configs?
nice screenshot you have there
Offline
Thank you. I'm afraid panel.sh is ugly and needs to be rewritten. It works though.
autostart and panel.sh: https://gist.github.com/PodColl/8932496
Offline
Thank you. I'm afraid panel.sh is ugly and needs to be rewritten. It works though.
autostart and panel.sh: https://gist.github.com/PodColl/8932496
Thanks man. Do you still use herbstluftwm or another one
Offline
Petite veille d'ivresse, sainte ! quand ce ne serait que pour le masque dont tu as gratifié. Nous t'affirmons, méthode ! Nous n'oublions pas que tu as glorifié hier chacun de nos âges. Nous avons foi au poison. Nous savons donner notre vie tout entière tous les jours.
Voici le temps des Assassins.
Offline
Trying out herbstluftwm, liking it so far!
Offline
Trying out herbstluftwm, liking it so far!
What font are you using?
Offline
Hi guys , anyone could how set font icon to tag name ?
Offline
x-post
herbstluftwm greybeard theme (wip) : https://github.com/xero/dotfiles/tree/m … rbstluftwm
Last edited by xero (2014-07-17 20:23:29)
▬▬ι═══════ﺤ
http://git.io/.files
Offline
Not a screenshot but a simple and fast "scratchpad" script:
#!/bin/bash
name="htop"
cmd="xterm -name $name -e htop"
id=$(xdotool search --name $name)
pid=$(xdotool getwindowpid $id)
if [[ -n $id ]]
then
if herbstclient dump | grep $(printf "%x" $id)
then
kill $pid
else
herbstclient bring $id
fi
else
$cmd
fi
It runs htop in a terminal if it's not already running or brings it to your current frame if it's already running. Using it again when htop is already in your current view, will kill it.
Last edited by tigrezno (2014-08-10 11:20:59)
Offline
thats my herbstluftwm, still in process but i like it so far! pic and config:
#!/bin/bash
sh ~/.config/herbstluftwm/killer &
# this is a simple config for herbstluftwm
hc() {
herbstclient "$@"
}
hc emit_hook reload
xsetroot -solid '#f3efeb'
# remove all existing keybindings
hc keyunbind --all
# keybindings
# if you have a super key you will be much happier with Mod set to Mod4
#Mod=Mod1 # Use alt as the main modifier
Mod=Mod4 # Use the super key as the main modifier
hc keybind $Mod-Shift-q quit
hc keybind $Mod-Shift-r reload
hc keybind $Mod-Shift-c close
hc keybind $Mod-Return spawn xterm
hc keybind $Mod-q spawn qutebrowser
hc keybind $Mod-m spawn thunderbird
hc keybind $Mod-t spawn xfce4-terminal
hc keybind $Mod-Shift-o chain , split right 0.5 , focus -e right , spawn xfce4-terminal
hc keybind $Mod-f spawn pcmanfm
hc keybind $Mod-Shift-u chain , split bottom 0.5 , focus -e down , spawn xfce4-terminal
hc keybind $Mod-s spawn skype
hc keybind $Mod-a spawn firefox
hc keybind $Mod-F1 spawn dmenu_run
hc keybind $Mod-y spawn surf http://curvefever.com/play2.php
hc keybind $Mod-Shift-t spawn xfce4-terminal --command ~/.config/herbstluftwm/./autoy
#media-keys
hc keybind XF86AudioLowerVolume spawn amixer -q set Master 2%-
hc keybind XF86AudioRaiseVolume spawn amixer -q set Master 2%+
hc keybind XF86AudioMute spawn amixer -D pulse set Master toggle
herbstclient rule class=trayer manage=0ff
# basic movement
# focusing clients
hc keybind $Mod-Left focus left
hc keybind $Mod-Down focus down
hc keybind $Mod-Up focus up
hc keybind $Mod-Right focus right
hc keybind $Mod-h focus left
hc keybind $Mod-j focus down
hc keybind $Mod-k focus up
hc keybind $Mod-l focus right
# moving clients
hc keybind $Mod-Shift-Left shift left
hc keybind $Mod-Shift-Down shift down
hc keybind $Mod-Shift-Up shift up
hc keybind $Mod-Shift-Right shift right
hc keybind $Mod-Shift-h shift left
hc keybind $Mod-Shift-j shift down
hc keybind $Mod-Shift-k shift up
hc keybind $Mod-Shift-l shift right
# splitting frames
# create an empty frame at the specified direction
hc keybind $Mod-u split bottom 0.5
hc keybind $Mod-o split right 0.5
# let the current frame explode into subframes
hc keybind $Mod-Control-space split explode
# resizing frames
resizestep=0.05
hc keybind $Mod-Control-h resize left +$resizestep
hc keybind $Mod-Control-j resize down +$resizestep
hc keybind $Mod-Control-k resize up +$resizestep
hc keybind $Mod-Control-l resize right +$resizestep
hc keybind $Mod-Control-Left resize left +$resizestep
hc keybind $Mod-Control-Down resize down +$resizestep
hc keybind $Mod-Control-Up resize up +$resizestep
hc keybind $Mod-Control-Right resize right +$resizestep
# tags
tag_names=( '1' 'browser' 'mail' 'dört' 'cinq' 'sechs' 'skype' 'ocho' 'float' )
tag_keys=( {1..9} 0 )
hc rename default "${tag_names[0]}" || true
for i in ${!tag_names[@]} ; do
hc add "${tag_names[$i]}"
key="${tag_keys[$i]}"
if ! [ -z "$key" ] ; then
# hc keybind "$Mod-$key" use_index "$i"
hc keybind "$Mod-$key" use "${tag_names[$i]}"
hc keybind "$Mod-Shift-$key" move_index "$i"
fi
done
# cycle through tags
hc keybind $Mod-period use_index +1 --skip-visible
hc keybind $Mod-comma use_index -1 --skip-visible
hc keybind $Mod-w use_previous
# layouting
hc keybind $Mod-r remove
hc keybind $Mod-space cycle_layout 1
hc keybind $Mod-F10 floating toggle
hc keybind $Mod-F11 fullscreen toggle
hc keybind $Mod-p pseudotile toggle
# mouse
hc mouseunbind --all
hc mousebind $Mod-Button1 move
hc mousebind $Mod-Button2 zoom
hc mousebind $Mod-Button3 resize
# focus
hc keybind $Mod-BackSpace cycle_monitor
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Shift-Tab cycle_all -1
hc keybind $Mod-c cycle
hc keybind $Mod-i jumpto urgent
# theme
hc attr theme.tiling.reset 1
hc attr theme.floating.reset 1
hc set frame_border_active_color '#ffffff'
hc set frame_border_normal_color '#370628'
hc set frame_bg_normal_color '#370628'
hc set frame_bg_active_color '#ffffff'
hc set frame_border_width 1
hc set always_show_frame 1
hc set frame_bg_transparent 1
hc set frame_transparent_width 5
hc set frame_gap 0
hc attr theme.active.color '#ffffff'
hc attr theme.normal.color '#370628'
hc attr theme.urgent.color orange
hc attr theme.inner_width 0
hc attr theme.inner_color black
hc attr theme.border_width 11
hc attr theme.floating.border_width 11
hc attr theme.floating.outer_width 0
hc attr theme.floating.outer_color black
hc attr theme.active.inner_color '#370628'
hc attr theme.active.outer_color '#ffffff'
hc attr theme.background_color '#353838'
hc set window_gap 0
hc set frame_padding 0
hc set smart_window_surroundings 0
hc set smart_frame_surroundings 1
hc set mouse_recenter_gap 0
# rules
hc unrule -F
#hc rule class=XTerm tag=3 # move all xterms to tag 3
hc rule focus=on # normally focus new clients
#hc rule focus=off # normally do not focus new clients
# give focus to most common terminals
#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
hc load skype "(split horizontal:0.800000:0 (clients horizontal:0) (clients vertical:0 0x1c00102))"
hc rule class~Skype tag=skype focus=off
hc rule class~Skype ! windowrole=ConversationsWindow index=1
hc rule class~Skype windowrole=ConversationsWindow index=0
hc rule class~Thunderbird tag=mail focus=off
hc rule class~Surf tag=ocho focus=off
hc rule class~widelands tag=float focus=off
hc floating float on
hc floating 1 on
hc floating mail on
# unlock, just to be sure
hc unlock
herbstclient set tree_style '╾│ ├└╼─┐'
# do multi monitor setup here, e.g.:
# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
# or simply:
# hc detect_monitors
# find the panel
panel=~/.config/herbstluftwm/panel.sh
[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
# start it on each monitor
"$panel" $monitor &
done
#find the tray
tray=~/.config/herbstluftwm/tray.sh
for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
# start it on each monitor
"$tray" $monitor &
done
nm-applet &
thunderbird &
thats the panel.sh
#!/bin/bash
hc() { "${herbstclient_command[@]:-herbstclient}" "$@" ;}
monitor=${1:-0}
geometry=( $(herbstclient monitor_rect "$monitor") )
if [ -z "$geometry" ] ;then
echo "Invalid monitor $monitor"
exit 1
fi
# geometry has the format W H X Y
x=${geometry[0]}
y=${geometry[1]}
panel_width=959 #${geometry[3]}
panel_height=16
font="-*-fixed-medium-*-*-*-12-*-*-*-*-*-*-*"
bgcolor=$(hc get frame_border_normal_color)
selbg=$(hc get window_border_active_color)
selfg=$(hc get frame_border_normal_color)
####
# Try to find textwidth binary.
# In e.g. Ubuntu, this is named dzen2-textwidth.
if which textwidth &> /dev/null ; then
textwidth="textwidth";
elif which dzen2-textwidth &> /dev/null ; then
textwidth="dzen2-textwidth";
else
echo "This script requires the textwidth tool of the dzen2 project."
exit 1
fi
####
# true if we are using the svn version of dzen2
# depending on version/distribution, this seems to have version strings like
# "dzen-" or "dzen-x.x.x-svn"
if dzen2 -v 2>&1 | head -n 1 | grep -q '^dzen-\([^,]*-svn\|\),'; then
dzen2_svn="true"
else
dzen2_svn=""
fi
if awk -Wv 2>/dev/null | head -1 | grep -q '^mawk'; then
# mawk needs "-W interactive" to line-buffer stdout correctly
# http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=593504
uniq_linebuffered() {
awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@"
}
else
# other awk versions (e.g. gawk) issue a warning with "-W interactive", so
# we don't want to use it there.
uniq_linebuffered() {
awk '$0 != l { print ; l=$0 ; fflush(); }' "$@"
}
fi
hc pad $monitor $panel_height
{
### Event generator ###
# based on different input data (mpc, date, hlwm hooks, ...) this generates events, formed like this:
# <eventname>\t<data> [...]
# e.g.
# date ^fg(#efefef)18:33^fg(#909090), 2013-10-^fg(#efefef)29
#mpc idleloop player &
while true ; do
# "date" output is checked once a second, but an event is only
# generated if the output changed compared to the previous run.
date +$'date\t^fg(#efefef)%H:%M^fg(#909090), %Y-%m-^fg(#efefef)%d'
sleep 1 || break
done > >(uniq_linebuffered) &
childpid=$!
hc --idle
kill $childpid
} 2> /dev/null | {
IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)"
visible=true
date=""
windowtitle=""
#my own try of a battery status
# while true; do
while true ; do
### Output ###
# This part prints dzen data based on the _previous_ data handling run,
# and then waits for the next event to happen.
bordercolor="#26221C"
separator="^bg()^fg($selbg)|"
# draw tags
for i in "${tags[@]}" ; do
case ${i:0:1} in
'#')
echo -n "^bg($selbg)^fg($selfg)"
;;
'+')
echo -n "^bg(#9CA668)^fg(#141414)"
;;
':')
echo -n "^bg()^fg(#ffffff)"
;;
'!')
echo -n "^bg(#FF0675)^fg(#141414)"
;;
*)
echo -n "^bg()^fg(#ababab)"
;;
esac
if [ ! -z "$dzen2_svn" ] ; then
# clickable tags if using SVN dzen
echo -n "^ca(1,\"${herbstclient_command[@]:-herbstclient}\" "
echo -n "focus_monitor \"$monitor\" && "
echo -n "\"${herbstclient_command[@]:-herbstclient}\" "
echo -n "use \"${i:1}\") ${i:1} ^ca()"
else
# non-clickable tags if using older dzen
echo -n " ${i:1} "
fi
done
echo -n "$separator"
echo -n "^bg()^fg() ${windowtitle//^/^^}"
# small adjustments
right="$separator^bg() $date $separator"
right_text_only=$(echo -n "$right" | sed 's.\^[^(]*([^)]*)..g')
# get width of right aligned text.. and add some space..
width=$($textwidth "$font" "$right_text_only ")
echo -n "^pa($(($panel_width - $width)))$right"
echo
### Data handling ###
# This part handles the events generated in the event loop, and sets
# internal variables based on them. The event and its arguments are
# read into the array cmd, then action is taken depending on the event
# name.
# "Special" events (quit_panel/togglehidepanel/reload) are also handled
# here.
# wait for next event
IFS=$'\t' read -ra cmd || break
# find out event origin
case "${cmd[0]}" in
tag*)
#echo "resetting tags" >&2
IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)"
;;
date)
#echo "resetting date" >&2
date="${cmd[@]:1}"
;;
quit_panel)
exit
;;
togglehidepanel)
currentmonidx=$(hc list_monitors | sed -n '/\[FOCUS\]$/s/:.*//p')
if [ "${cmd[1]}" -ne "$monitor" ] ; then
continue
fi
if [ "${cmd[1]}" = "current" ] && [ "$currentmonidx" -ne "$monitor" ] ; then
continue
fi
echo "^togglehide()"
if $visible ; then
visible=false
hc pad $monitor 0
else
visible=true
hc pad $monitor $panel_height
fi
;;
reload)
exit
;;
focus_changed|window_title_changed)
windowtitle="${cmd[@]:2}"
;;
#player)
# ;;
esac
done
### dzen2 ###
# After the data is gathered and processed, the output of the previous block
# gets piped to dzen2.
} 2> /dev/null | dzen2 -w $panel_width -x $x -y $y -fn "$font" -h $panel_height \
-e 'button3=;button4=exec:herbstclient use_index -1;button5=exec:herbstclient use_index +1' \
-ta l -bg "$bgcolor" -fg '#9eeeda'
and this is my tray
#!/bin/bash
trayer --edge top --align right --widthtype pixel --width 77 --heighttype pixel \
--height 5 --expand true --tint 0x370628 --transparent true \
--alpha 0
Volume is still missin in my panel...
Last edited by caravanlizzy (2015-07-21 08:17:02)
Offline
I use herbstluftwm on my laptop only:
The side panel persists even when I switch between workspaces. This is accomplished by dividing up the monitor into two herbstluftwm 'monitors', and the workspace changing commands only work on the left 'monitor'.
Extremely kludgy config, it is a WIP:
#!/bin/bash
# this is a simple config for herbstluftwm
hc() {
herbstclient "$@"
}
hc emit_hook reload
xsetroot -solid '#002b36'
hc keyunbind --all
Mod=Mod4 # Use alt as the main modifier
hc keybind $Mod-Shift-q quit
hc keybind $Mod-Shift-r reload
hc keybind $Mod-Shift-c close_or_remove
hc keybind $Mod-Return spawn uxterm -j -s -rw
hc keybind $Mod-m spawn dmenu_run
# basic movement
# focusing clients
hc keybind $Mod-j focus_edge left
hc keybind $Mod-k focus_edge right
hc keybind $Mod-l focus up
hc keybind $Mod-h focus down
# moving clients
hc keybind $Mod-Shift-j shift left
hc keybind $Mod-Shift-k shift right
hc keybind $Mod-Shift-l shift up
hc keybind $Mod-Shift-h shift down
# splitting frames
# create an empty frame at the specified direction
hc keybind $Mod-u split bottom 0.5
hc keybind $Mod-o split right 0.5
# let the current frame explode into subframes
hc keybind $Mod-Control-space split explode
# resizing frames
resizestep=0.05
hc keybind $Mod-Control-h resize left +$resizestep
hc keybind $Mod-Control-j resize down +$resizestep
hc keybind $Mod-Control-k resize up +$resizestep
hc keybind $Mod-Control-l resize right +$resizestep
hc keybind $Mod-Control-Left resize left +$resizestep
hc keybind $Mod-Control-Down resize down +$resizestep
hc keybind $Mod-Control-Up resize up +$resizestep
hc keybind $Mod-Control-Right resize right +$resizestep
# do multi monitor setup here, e.g.:
hc set_monitors \
1028x768+0+0 \
340x768+1028+0
sleep 1
hc focus_monitor 0
hc rename default term1 || true
tag=term1
hc add $tag
hc keybind $Mod-1 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-1 chain . focus_monitor 0 . use $tag
hc use $tag
hc split right 0.4
hc spawn uxterm -j -s -rw -uc
sleep 1
hc focus_edge right
hc spawn uxterm -j -s -rw -uc
sleep 1
tag=term2
hc add $tag
hc keybind $Mod-2 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-2 chain . focus_monitor 0 . use $tag
hc use $tag
hc split right 0.4
hc spawn uxterm -j -s -rw -uc
sleep 1
hc focus_edge right
hc spawn uxterm -j -s -rw -uc
sleep 1
tag=term3
hc add $tag
hc keybind $Mod-3 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-3 chain . focus_monitor 0 . use $tag
hc use $tag
hc split right 0.4
hc spawn uxterm -j -s -rw -uc
sleep 1
hc focus_edge right
hc spawn uxterm -j -s -rw -uc
sleep 1
tag=web4
hc add $tag
hc keybind $Mod-4 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-4 chain . focus_monitor 0 . use $tag
tag=web5
hc add $tag
hc keybind $Mod-5 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-5 chain . focus_monitor 0 . use $tag
tag=web6
hc add $tag
hc keybind $Mod-6 chain . focus_monitor 0 . use $tag
hc keybind $Mod-Shift-6 chain . focus_monitor 0 . use $tag
hc focus_monitor 1
hc add "side-panel"
hc use "side-panel"
killall conky
conky_window
sleep 1
hc set_monitors \
1028x768+0+0 \
340x768+1028+0
hc set_monitors \
1028x768+0+0 \
340x768+1028+0
# cycle through tags
hc keybind $Mod-period use_index +1 --skip-visible
hc keybind $Mod-comma use_index -1 --skip-visible
# layouting
hc keybind $Mod-r remove
hc keybind $Mod-space cycle_layout 1
hc keybind $Mod-s floating toggle
hc keybind $Mod-f fullscreen toggle
hc keybind $Mod-p pseudotile toggle
# mouse
hc mouseunbind --all
hc mousebind $Mod-Button1 move
hc mousebind $Mod-Button2 zoom
hc mousebind $Mod-Button3 resize
# focus
hc keybind $Mod-BackSpace cycle_monitor
hc keybind $Mod-Tab cycle_all +1
hc keybind $Mod-Shift-Tab cycle_all -1
hc keybind $Mod-c cycle
hc keybind $Mod-i jumpto urgent
hc focus_crosses_monitor_boundaries 0
# theme
hc attr theme.tiling.reset 1
hc attr theme.floating.reset 1
hc set frame_border_active_color '#d33682'
hc set frame_border_normal_color '#002b36'
hc set frame_bg_normal_color '#565656'
hc set frame_bg_active_color '#345F0C'
hc set frame_border_width 1
hc set always_show_frame 0
hc set frame_bg_transparent 1
hc set frame_transparent_width 1
hc set frame_gap 0
hc attr theme.active.color '#d33682'
hc attr theme.normal.color '#002b36'
hc attr theme.urgent.color '#cb4b16'
hc attr theme.inner_width 1
hc attr theme.inner_color "#002b36"
hc attr theme.border_width 1
hc attr theme.floating.border_width 1
hc attr theme.floating.outer_width 1
hc attr theme.floating.outer_color "#002b36"
hc attr theme.active.inner_color '#d33682'
hc attr theme.active.outer_color '#002b36'
hc attr theme.background_color '#002b36'
hc set window_gap 0
hc set frame_padding 0
hc set smart_window_surroundings 0
hc set smart_frame_surroundings 1
hc set mouse_recenter_gap 0
# rules
hc unrule -F
#hc rule class=XTerm tag=3 # move all xterms to tag 3
hc rule focus=on # normally focus new clients
#hc rule focus=off # normally do not focus new clients
# give focus to most common terminals
#hc rule class~'(.*[Rr]xvt.*|.*[Tt]erm|Konsole)' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK|DESKTOP)' manage=off
# unlock, just to be sure
hc unlock
herbstclient set tree_style '╾│ ├└╼─┐'
# find the panel
panel=~/.config/herbstluftwm/panel.sh
#[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
#for monitor in $(herbstclient list_monitors | cut -d: -f1) ; do
# # start it on each monitor
# "$panel" $monitor &
#done
[ -x "$panel" ] || panel=/etc/xdg/herbstluftwm/panel.sh
"$panel" 0 &
hc set smart_window_surroundings 1
hc set smart_frame_surroundings 1
hc set_monitors \
1028x768+0+0 \
340x768+1028+0
lock_tag 0
It suffers from a bug where the stuff on the right-hand side monitor will sometimes jump over to the left when I change a workspace. I need to figure out what is wrong in my config, but it's easy to deal with for now.
Offline
I use herbstluftwm on my laptop only:
Nice desktop. Which calendar and wich music player are you using?
It suffers from a bug where the stuff on the right-hand side monitor will sometimes jump over to the left when I change a workspace. I need to figure out what is wrong in my config, but it's easy to deal with for now.
What do you mean by sometims? If you focus the tag of right-hand side while still being on the left-hand side? If yes, it helps to disable swap_monitors_to_get_tag.
Offline
Nice desktop. Which calendar and wich music player are you using?
Music player is cmus. I use pal for my calendar, but the display in the screenshot is not part of the pal program; I wrote the following script to read and display pal calendar files. It requires you to gem install rainbow.
#!/usr/bin/env ruby
require 'rainbow/ext/string'
require 'date'
$calfile = '/home/kareem/.pal/details.pal'
def main_loop
events = File.read($calfile).split("\n")
events = events[1..-1]
events.reject! {|e| e.match /^\s*$/ }
now = DateTime.now
cur_day = nil
str = ''
events.each do |e|
year, month, day, start, fin, event = nil
e.match(/^(?<y>\d\d\d\d)(?<m>\d\d)(?<d>\d\d) (?<e>.+)/) do |m|
year = m[:y].to_i
month = m[:m].to_i
day = m[:d].to_i
event = m[:e].gsub(/\d\d:\d\d-\d\d:\d\d/, '').
gsub(/\d\d:\d\d/, '')
end
raise e if year.nil? or month.nil? or day.nil? or event.nil?
e.match(/(?<sh>\d\d):(?<sm>\d\d)-(?<fh>\d\d):(?<fm>\d\d)/) do |m|
start = DateTime.new(year, month, day, m[:sh].to_i, m[:sm].to_i)
fin = DateTime.new(year, month, day, m[:fh].to_i, m[:fm].to_i)
end
e.match(/(?<h>\d\d):(?<m>\d\d)/) do |m|
start = DateTime.new(year, month, day, m[:h].to_i, m[:m].to_i)
end
raise e if start.nil?
next if start.to_time + 3600 < now.to_time
if start.to_date != cur_day
cur_day = start.to_date
date_string = start.to_date.strftime("%A %d %Y")
if(cur_day == now.to_date)
date_string = "Today"
elsif(cur_day == now.to_date + 1)
date_string = "Tomorrow"
end
str += sprintf "\n#{'_' * date_string.length}"
str += sprintf "\n%s".color(:cyan).bright.background(:black), date_string
str += sprintf "\n#{'`' * date_string.length}\n".color(:blue).bright
end
time = start.strftime("%H:%M").color(:green)
time += " - #{fin.strftime('%H:%M')}" if fin
event.strip!
if start.to_time - now.to_time < 3600
str += "#{event.color(:red)}#{':'.color(:cyan)} #{time}\n"
elsif start.to_time - now.to_time < 3600 * 24
str += "#{event.color(:yellow)}#{':'.color(:cyan)} #{time}\n"
else
str += "#{event}#{':'.color(:cyan)} #{time}\n"
end
end
rows = `/usr/bin/env tput lines`.to_i
counter = 0
out = ''
str.each_line do |l|
break if counter > rows
out += l
counter += 1
end
puts out
end
main_loop
last_read = DateTime.now.to_time
while true
mtime = File.mtime($calfile)
if mtime > last_read
last_read = mtime
main_loop
end
sleep 1
end
And here is an example of a pal calendar file:
DT Detailed Schedule
20150815 Meal 07:00-10:00
20150815 Opening ceremony 10:00-10:30
20150815 Let's get ready to Go 10:30-11:30
20150815 Meal 12:00-14:00
20150815 Check-in A311 14:00
20150815 Future of Software Freedom 14:00-15:00
20150815 Lightning talks 15:30-17:00
20150815 Coffee & snacks 15:30-17:00
20150815 Meal 19:00-20:30
20150815 New to DebConf BOF 20:30-21:30
20150815 Debian Birthday Party 21:30
A better example of what pal does is in my mega 6-monitor i3 screenshot.
What do you mean by sometims? If you focus the tag of right-hand side while still being on the left-hand side? If yes, it helps to disable swap_monitors_to_get_tag.
Thanks, that helps!
Last edited by karkhaz (2015-08-11 13:12:10)
Offline
the last post was my hlwm on my notebook, this one is my setup at my tower. bit more colorless, but better to work since it doesnt make me work on hlwm all the time
-- read the rules and only post thumbnails https://bbs.archlinux.org/viewtopic.php?id=61754 [jwr] --
Last edited by caravanlizzy (2016-03-16 23:37:11)
Offline
This is a cross post from the most recent screenshot thread. I'm using pretty much the same setup with my main PC and laptop. I prefer to use sxhkd for keybindings. I've been on herbstluftwm for almost two years now and I've fiddled with lemonbar a lot
panel.sh:
#!/bin/bash
# Just a dirty script for lemonbar,
# you need to use 'siji' font for icons.
# main monitor
monitor=${1:-0}
# padding
herbstclient pad $monitor 16
# settings
RES="x16xx"
FONT="*-siji-medium-r-*-*-10-*-*-*-*-*-*-*"
FONT2="-*-cure.se-medium-r-*-*-11-*-*-*-*-*-*-*"
FONT3="IPAGothic-8"
BG="#1A1C1F"
FG="#A8A8A8"
BLK="#262626"
RED="#834f48"
YLW="#917154"
BLU="#45536E"
GRA="#898989"
VLT="#7B3D93"
# icons
st="%{F$YLW} %{F-}"
sm="%{F$RED} %{F-}"
sv="%{F$BLU} %{F-}"
sd="%{F$VLT} %{F-}"
# functions
set -f
function uniq_linebuffered() {
awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@"
}
# events
{
# now playing
mpc idleloop player | cat &
mpc_pid=$!
# volume
while true ; do
echo "vol $(amixer get Master | tail -1 | sed 's/.*\[\([0-9]*%\)\].*/\1/')"
sleep 1 || break
done > >(uniq_linebuffered) &
vol_pid=$!
# date
while true ; do
date +'date_min %b %d %A '%{F$RED}%{F-}' %H:%M'
sleep 1 || break
done > >(uniq_linebuffered) &
date_pid=$!
# herbstluftwm
herbstclient --idle
# exiting; kill stray event-emitting processes
kill $mpc_pid $vol_pid $date_pid
} 2> /dev/null | {
TAGS=( $(herbstclient tag_status $monitor) )
unset TAGS[${#TAGS[@]}]
time=""
song="nothing to see here"
windowtitle="what have you done?"
visible=true
while true ; do
echo -n "%{l}"
for i in "${TAGS[@]}" ; do
case ${i:0:1} in
'#') # current tag
echo -n "%{U$RED}%{+u}"
;;
'+') # active on other monitor
echo -n "%{U$YLW}%{+u}"
;;
':')
echo -n "%{-u}"
;;
'!') # urgent tag
echo -n "%{U$YLW}"
;;
*)
echo -n "%{-u}"
;;
esac
echo -n " ${i:1} "
done
echo -n "%{c}$st%{F$GRA}${windowtitle//^/^^} %{F-}"
# align right
echo -n "%{r}"
echo -n "$sm"
echo -n "$song" %{F$YLW}"$song2"%{F-}
echo -n "$sv"
echo -n "$volume"
echo -n "$sd"
echo -n "$date "
echo ""
# wait for next event
read line || break
cmd=( $line )
# find out event origin
case "${cmd[0]}" in
tag*)
TAGS=( $(herbstclient tag_status $monitor) )
unset TAGS[${#TAGS[@]}]
;;
mpd_player|player)
song="$(mpc -f %artist% current)"
song2="$(mpc -f %title% current)"
;;
vol)
volume="${cmd[@]:1}"
;;
date_min)
date="${cmd[@]:1}"
;;
focus_changed|window_title_changed)
windowtitle="${cmd[@]:2}"
;;
quit_panel)
exit
;;
reload)
exit
;;
esac
done
} 2> /dev/null | lemonbar -g ${RES} -u 3 -B ${BG} -F ${FG} -f ${FONT} -f ${FONT2} -f ${FONT3} & $1
autostart:
#!/bin/bash
hc() {
herbstclient "$@"
}
hc emit_hook reload
# remove all existing keybindings
hc keyunbind --all
# keybindings
Mod=Mod1 # Use alt as the main modifier
# tags
TAG_NAMES=("一" "二" "三" "四" "五" "六")
TAG_KEYS=( {1..6} 0 )
hc rename default "${TAG_NAMES[0]}" || true
for i in ${!TAG_NAMES[@]} ; do
hc add "${TAG_NAMES[$i]}"
key="${TAG_KEYS[$i]}"
if ! [ -z "$key" ] ; then
hc keybind "Control-$key" use_index "$i"
hc keybind "$Mod-Shift-$key" move_index "$i"
fi
done
hc attr theme.tiling.reset 1
hc attr theme.floating.reset 1
hc set frame_border_active_color '#353535'
hc set frame_border_normal_color '#101010'
hc set frame_bg_normal_color '#202020'
hc set frame_bg_active_color '#6c3b41'
hc set frame_border_width 1
hc set always_show_frame 0
hc set frame_bg_transparent 1
hc set frame_transparent_width 0
hc set frame_gap 0
hc attr theme.active.color '#353535'
hc attr theme.normal.color '#252525'
hc attr theme.urgent.color orange
hc attr theme.inner_width 1
hc attr theme.inner_color '#202020'
hc attr theme.border_width 2
hc attr theme.floating.border_width 4
hc attr theme.floating.outer_width 1
hc attr theme.floating.outer_color black
hc attr theme.active.inner_color '#383838'
hc attr theme.active.outer_color '#282828'
hc attr theme.background_color '#ffffff'
# mouse bindings
hc mousebind $Mod-Button1 move
hc mousebind $Mod-Button2 zoom
hc mousebind $Mod-Button3 resize
# layouts
hc load 一 '
(split horizontal:0.500000:0
(clients vertical:0 0x1800005)
(clients vertical:0))'
# rules
hc unrule -F
# focus new clients
hc rule focus=on
# rules for clients
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(DIALOG|UTILITY|SPLASH)' pseudotile=on
hc rule windowtype='_NET_WM_WINDOW_TYPE_DIALOG' focus=on
hc rule windowtype~'_NET_WM_WINDOW_TYPE_(NOTIFICATION|DOCK)' manage=off
hc rule class=Dwb tag=term focus=on
hc rule class=qutebrowser tag=term focus=on
hc rule class=Chromium tag=term focus=on
hc rule class=mpv tag=term focus=on
hc rule class=sxiv tag=term focus=on
hc rule class=wine tag=term focus=on
# unlock, just to be sure
hc unlock
herbstclient set tree_style '╾│ ├└╼─┐'
# do multi monitor setup here, e.g.:
# hc set_monitors 1280x1024+0+0 1920x1080+1280+0
hc detect_monitors
# panel
panel.sh &
sxhkdrc:
# sxhkd configuration
# herbstluftwm
# TAS
alt + 4
cd ~/TAS/fceux-2.2.2 && wine fceux.exe
# reload sxhkd config
alt + shift + s
pkill -USR1 -x sxhkd; notify-send "sxhkd restarted"
# toggle redshift
control + apostrophe
pkill -USR1 redshift; notify-send "redshift toggled"
# mute volume
XF86AudioMute
amixer sset Master toggle; notify-send "Mute toggled"
# lower volume
XF86AudioLowerVolume
amixer sset Master 5%-
# raise volume
XF86AudioRaiseVolume
amixer sset Master 5%+
# turn off monitors
XF86Display
display.sh off
# mpd controls
XF86AudioPlay
mpc toggle
XF86AudioStop
mpc stop
XF86AudioNext
mpc next
XF86AudioPrev
mpc prev
# menu
alt + p
dmenu_run
# connman_dmenu
alt + comma
sudo connman_dmenu
# touchpad behavior
alt + apostrophe
touchpad.sh; notify-send "toucpad toggled"
# web, fm, img
alt + {1,2,3}
{qutebrowser,spacefm,gimp}
alt + {odiaeresis,adiaeresis}
{xcmenuctrl,lolimpdnu}
# terminal
alt + shift + Return
termite
# close windows
alt + shift + c
herbstclient close
# kill panel properly and quit
alt + shift + q
herbstclient close; pkill bar; pkill panel
# handle panels and reloading properly
alt + shift + r
herbstclient reload; pkill lemonbar; pkill panel
# window splitting
alt + {w,q,e}
herbstclient split {bottom 0.5,right 0.5, explode}
# focus
alt + period
herbstclient cycle_monitor
alt + {Tab,shift+Tab,c,u}
herbstclient {cycle_all +1,cycle_all -1,cycle,jumpto urgent}
alt + {Left,Down,Up,Right}
herbstclient {focus left,focus down,focus up,focus right}
# layouting
alt + {r,shift+Tab,shift+f,shift+m,shift+p}
herbstclient {remove,cycle_layout 1,floating toggle, fullscreen toggle, pseudotile toggle}
# moving clients
alt + shift + {Left,Down,Up,Right}
herbstclient shift {left,down,up,right}
# resizing frames
alt + control + {Left,Down,Up,Right}
herbstclient resize {left +0.01,down +0.01,up +0.01,right +0.01}
# cycle through tags
alt + {adiaeresis,odiaeresis}
herbstclient use_index {+1 --skip-visible,-1 --skip-visible}
# shift client to specified monitor
alt + {apostrophe,section}
herbstclient shift_to_monitor {1,0}
# swap client to master or stack
alt + m
herbstclient spawn swap.sh auto
Last edited by Shinryuu (2015-11-15 00:11:23)
Offline
I love herbstluftwm <3
(Almost) Clean : tint2 panel & ncmpcpp music player
Dirty :
Opening some toys: tty-clock, pipes, cmatrix.
termite terminal, showing some hc code in my config.
Yes! I have gaps inside gaps inside gaps. I love gaps <3
My config is really messy. I'm too shy to share it.
I don't even able to setup dzen2
Last edited by AddyElric (2017-10-25 12:11:57)
I'm not lazy! I'm on powersaving mode.
Offline