summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Xresources87
-rw-r--r--gitconfig5
-rwxr-xr-xherbstluftwm/autostart186
-rwxr-xr-xherbstluftwm/bin/mvrsbin0 -> 8056 bytes
-rwxr-xr-xherbstluftwm/mvrs.sh36
-rwxr-xr-xherbstluftwm/panel.bar.sh157
-rwxr-xr-xherbstluftwm/panel.sh223
-rwxr-xr-xherbstluftwm/popups.sh46
-rwxr-xr-xherbstluftwm/restartpanels.sh16
-rw-r--r--irssi/config375
-rw-r--r--irssi/default.theme308
-rw-r--r--irssi/doom.theme296
-rw-r--r--irssi/gorgatron.theme299
-rw-r--r--irssi/kra3.theme297
-rw-r--r--irssi/scripts/autorun/adv_windowlist.pl2478
-rw-r--r--irssi/scripts/autorun/hilightwin.pl57
-rw-r--r--irssi/scripts/autorun/nickcolor.pl153
-rw-r--r--mpd/mpd.conf39
-rw-r--r--mutt/.passwd.gpgbin0 -> 347 bytes
-rw-r--r--mutt/aliases26
-rw-r--r--mutt/gpg.rc85
-rw-r--r--mutt/mailboxes1
-rw-r--r--mutt/signature3
-rw-r--r--muttrc191
-rw-r--r--ncmpcpp/config55
-rwxr-xr-xscripts/clear-pacman-cache9
-rwxr-xr-xscripts/get-volume.sh150
-rwxr-xr-xscripts/hs-cycle-padding21
-rwxr-xr-xscripts/ix3
-rwxr-xr-xscripts/lock18
-rw-r--r--scripts/lock.pngbin0 -> 3359 bytes
-rwxr-xr-xscripts/markdown-mine64
l---------scripts/mlblog1
l---------scripts/monserv1
-rwxr-xr-xscripts/nm-connected-device5
-rwxr-xr-xscripts/spawn3
-rwxr-xr-xscripts/sprunge2
-rwxr-xr-xscripts/terminal-colors529
-rwxr-xr-xscripts/whoneeds71
-rw-r--r--vim/.netrwhist10
-rw-r--r--vim/autoload/pathogen.vim332
-rw-r--r--vim/colors/biogoo.vim110
-rw-r--r--vim/colors/flattr.vim100
-rw-r--r--vim/colors/gentooish.vim518
-rw-r--r--vim/colors/github.vim116
-rw-r--r--vim/colors/gotham.vim229
-rw-r--r--vim/colors/hybrid-light.vim328
-rw-r--r--vim/colors/hybrid.vim441
-rw-r--r--vim/colors/hybrid.vim.1441
-rw-r--r--vim/colors/railcasts.vim137
-rw-r--r--vim/colors/sorcerer.vim208
-rw-r--r--vim/colors/tango2.vim101
-rw-r--r--vimrc117
54 files changed, 9485 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cc19234
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+vim/bundle/
diff --git a/Xresources b/Xresources
new file mode 100644
index 0000000..9cbff8f
--- /dev/null
+++ b/Xresources
@@ -0,0 +1,87 @@
+xterm*faceName: Envy Code R:size=9:antialias=false
+!xterm*faceName: xft:Termsynu:size=12
+!xterm*boldFont: xft:Termsynu:bold:size=9
+xterm*linespace: 0
+xterm*VT100*underLine: on
+xterm*termName: xterm-256color
+
+*scrollBar: false
+xterm*metaSendsEscape: true
+xterm*boldMode: false
+xterm*selectToClipboard: true
+
+dzen2*font: Envy Code R:size=9:antialias=false
+dzen2*background: #010101
+dzen2*foreground: #c8c8c8
+
+! Default
+!
+xterm*background: #010101
+xterm*foreground: #c8c8c8
+!xterm*color0: #000000
+!xterm*color1: #b33636
+!xterm*color2: #6ba82a
+!xterm*color3: #deaf40
+!xterm*color4: #5a78ad
+!xterm*color5: #ab4382
+!xterm*color6: #39a0b3
+!xterm*color7: #a8a8a8
+!xterm*color8: #646464
+!xterm*color9: #e61717
+!xterm*color10: #78dc0c
+!xterm*color11: #f1e022
+!xterm*color12: #699dfa
+!xterm*color13: #de2a98
+!xterm*color14: #13d1f3
+!xterm*color15: #c8c8c8
+
+!*font: -*-termsyn-medium-*-*-*-14-*-*-*-*-*-*-*
+!*boldFont: -*-termsyn-bold-*-*-*-14-*-*-*-*-*-*-*
+!*italicFont: -*-termsyn-medium-*-*-*-14-*-*-*-*-*-*-*
+!*boldItalicFont: -*-termsyn-bold-*-*-*-14-*-*-*-*-*-*-*
+
+!*cursorColor: #CCCCCC
+*colorIT: #E3AB8D
+!*colorBD: #F0E5DF
+!*colorUL: #cd546c
+*VT100.colorBDMode: true
+*VT100.colorBD: red
+*VT100.colorULMode: true
+*VT100.colorUL: magenta
+*VT100.veryBoldColors: 6
+
+*background: rgb:00/00/00
+!*foreground: rgb:7f/7f/7f
+*foreground: #f8f8f2
+
+! Black
+!*color0: #404040
+!*color8: #505050
+*color0: #1B1D1E
+*color8: #505354
+
+! Red
+*color1: #ff005f
+*color9: #ff6767
+
+! Green
+*color2: #afd700
+*color10: #8ce25d
+
+! Yellow
+*color3: #ff8f00
+*color11: #ffb445
+
+! Blue
+*color4: #1165e9
+*color12: #5496ff
+
+! Magenta
+*color5: #8C54FE
+*color13: #9E6FFE
+! Cyan
+*color6: #4c8ea1
+*color14: #6bc1d0
+! White
+*color7: #d2d2d2
+*color15: #ffffff
diff --git a/gitconfig b/gitconfig
new file mode 100644
index 0000000..6550dd6
--- /dev/null
+++ b/gitconfig
@@ -0,0 +1,5 @@
+[user]
+ email = matiaslina@openmailbox.org
+ name = Matias Linares
+[alias]
+ lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit
diff --git a/herbstluftwm/autostart b/herbstluftwm/autostart
new file mode 100755
index 0000000..444d17a
--- /dev/null
+++ b/herbstluftwm/autostart
@@ -0,0 +1,186 @@
+#!/bin/bash
+
+# this is a simple config for herbstluftwm
+
+# https://bbs.archlinux.org/viewtopic.php?id=128646
+#hc() {
+# herbstclient "$@"
+#}
+hc() {
+ cmd+=(, $@)
+}
+
+mvrs() {
+ ~/.config/herbstluftwm/mvrs.sh $1 $2
+}
+
+hc emit_hook reload
+
+# Some autostart configuration
+nitrogen --restore &
+#compton -b
+
+# 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 st
+hc keybind $Mod-Return spawn xterm
+#hc keybind $Mod-p spawn dmenu_run -b -p $(hostname) -nb "#010101"
+hc keybind $Mod-p spawn rofi -show run
+
+# basic movement
+# focusing clients
+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-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.02
+hc keybind $Mod-Control-h spawn ~/.config/herbstluftwm/mvrs.sh left +$resizestep
+hc keybind $Mod-Control-j spawn ~/.config/herbstluftwm/mvrs.sh down +$resizestep
+hc keybind $Mod-Control-k spawn ~/.config/herbstluftwm/mvrs.sh up +$resizestep
+hc keybind $Mod-Control-l spawn ~/.config/herbstluftwm/mvrs.sh 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..9} )
+tag_names=( "web" "editors" "chat" "games" "misc" )
+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-Shift-$key" move_index "$i"
+ fi
+done
+
+hc floating "games" on
+
+# 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-Shift-p pseudotile toggle
+
+# Light and sound
+hc keybind $Mod-Left spawn xbacklight -5
+hc keybind $Mod-Down spawn amixer set Master 3-
+hc keybind $Mod-Up spawn amixer set Master 3+
+hc keybind $Mod-Right spawn xbacklight +5
+
+# 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 '#9E003A'
+#hc set frame_border_normal_color '#101010'
+#hc set frame_bg_normal_color '#565656'
+#hc set frame_bg_active_color '#000000'
+#hc set frame_border_width 2
+#hc set always_show_frame 1
+hc set frame_bg_transparent 1
+hc set frame_transparent_width 1
+hc set frame_gap 2
+hc set frame_border_active_color '#000000'
+hc set frame_border_normal_color '#1d1f21'
+hc set frame_bg_normal_color '#151515'
+hc set frame_bg_active_color '#151515'
+hc set frame_border_width 0
+hc set window_border_width 2
+hc set window_border_normal_color '#3a3a3a'
+hc set window_border_active_color '#cc342b'
+
+#hc attr theme.active.color '#9E003A'
+#hc attr theme.normal.color '#252525'
+#hc attr theme.urgent.color orange
+#hc attr theme.inner_width 0
+#hc attr theme.inner_color '#191919'
+#hc attr theme.border_width 2
+#hc attr theme.floating.border_width 2
+#hc attr theme.floating.outer_width 3
+#hc attr theme.floating.outer_color black
+#hc attr theme.active.inner_color '#9E003A'
+#hc attr theme.active.outer_color '#111111'
+#hc attr theme.background_color '#141414'
+
+
+#hc set window_gap 0
+hc set frame_padding 0
+#hc set smart_window_surroundings 1
+#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 '╾│ ├└╼─┐'
+
+# do multi monitor setup here, e.g.:
+# hc set_monitors 1280x1024+0+0 1280x1024+1280+0
+# or simply:
+# hc detect_monitors
+herbstclient chain "${cmd[@]}"
+
+# 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
diff --git a/herbstluftwm/bin/mvrs b/herbstluftwm/bin/mvrs
new file mode 100755
index 0000000..76adda2
--- /dev/null
+++ b/herbstluftwm/bin/mvrs
Binary files differ
diff --git a/herbstluftwm/mvrs.sh b/herbstluftwm/mvrs.sh
new file mode 100755
index 0000000..f7b3c14
--- /dev/null
+++ b/herbstluftwm/mvrs.sh
@@ -0,0 +1,36 @@
+#!/bin/bash
+
+# ./mvrs WINID X Y Width Height
+
+floating=$(herbstclient get_attr tags.focus.floating)
+
+if [[ x"$floating" == xfalse ]]
+then
+ resizestep=0.02
+ herbstclient resize $1 $2
+else
+ resizestep=15
+ winid="$(herbstclient get_attr clients.focus.winid)"
+
+ width=$(xwininfo -id "${winid}" | grep Width | awk '{print $2}')
+ height=$(xwininfo -id "${winid}" | grep Height | awk '{print $2}')
+
+ case $1 in
+ left)
+ width=$(($width - ${resizestep}))
+ ;;
+ right)
+ width=$(($width + ${resizestep}))
+ ;;
+ up)
+ height=$(($height - ${resizestep}))
+ ;;
+ down)
+ height=$(($height + ${resizestep}))
+ ;;
+ esac
+
+
+ ~/.config/herbstluftwm/bin/mvrs ${winid} $width $height
+fi
+
diff --git a/herbstluftwm/panel.bar.sh b/herbstluftwm/panel.bar.sh
new file mode 100755
index 0000000..88f7ab1
--- /dev/null
+++ b/herbstluftwm/panel.bar.sh
@@ -0,0 +1,157 @@
+#!/bin/bash
+
+# todo: fontello icons
+
+# disable path name expansion or * will be expanded in the line
+# cmd=( $line )
+set -f
+
+function uniq_linebuffered() {
+ awk -W interactive '$0 != l { print ; l=$0 ; fflush(); }' "$@"
+}
+function get_mpd_song() {
+ # use mpc to get currently playing song, uppercase it
+ song=$(mpc current -f %title%)
+ # let's skip ft. parts, etc. to get some more space
+ echo $song
+}
+
+monitor=${1:-0}
+
+separator="\f3 | \fr"
+song=$(get_mpd_song)
+windowtitle=""
+
+herbstclient pad $monitor 18
+{
+ # events:
+ # mpc events
+ mpc idleloop player &
+ mpc_pid=$!
+
+ # date
+ while true ; do
+ date +'date_day %A %e. '
+ date +'date_min %H:%M '
+ sleep 1 || break
+ done > >(uniq_linebuffered) &
+ date_pid=$!
+
+ while true
+ do
+ $HOME/scripts/battery-parse
+ sleep 2m || break
+ done &
+ battery_pid=$!
+
+ while true
+ do
+ $HOME/scripts/nm-connected-device
+ sleep 3m || break
+ done &
+ nm_status_pid=$!
+
+ # hlwm events
+ herbstclient --idle
+
+ # exiting; kill stray event-emitting processes
+ kill $date_pid $mpd_pid $battery_pid $nm_status_pid
+} 2> /dev/null | {
+ TAGS=( $(herbstclient tag_status $monitor) )
+ #unset TAGS[${#TAGS[@]}-1]
+ date_day=""
+ date_min=""
+ Battery=""
+ network_status=""
+ visible=true
+
+ while true ; do
+ # align left
+ echo -n "\l"
+ if [[ $windowtitle ]]
+ then
+ if [ ${#windowtitle} -gt 55 ]
+ then
+ windowtitle="$(echo -n $windowtitle | cut -c1-55)..."
+ fi
+ echo -n "\ur\fr$windowtitle$separator"
+ fi
+
+ # Align center
+ echo -n "\c"
+ for i in "${TAGS[@]}" ; do
+ case ${i:0:1} in
+ '#') # current tag
+ echo -n "\u4\b4\fr"
+ ;;
+ '+') # active on other monitor
+ echo -n "\u7\b7\f8"
+ ;;
+ ':')
+ # Tag with windows
+ echo -n "\ur\br\f4"
+ ;;
+ '!') # urgent tag
+ echo -n "\u1\br\f1"
+ ;;
+ *)
+ echo -n "\ur\br\fr"
+ ;;
+ esac
+ echo -n " ${i:1} " # | tr '[:lower:]' '[:upper:]'
+ done
+
+ # align right
+ echo -n "\r\ur\fr\br"
+ # display song and separator only if something's playing
+ if [[ $song ]]; then
+ if [ ${#song} -gt 30 ]
+ then
+ song="$(echo -n $song | cut -c1-30)..."
+ fi
+ echo -n "\ur\fr$song$separator"
+ fi
+ echo -n "$network_status"
+ echo -n "$separator"
+ echo -n "$Battery"
+ echo -n "$separator"
+ echo -n "$date_day" | tr '[:lower:]' '[:upper:]'
+ echo -n " \f2"
+ echo -n "$date_min " | tr '[:lower:]' '[:upper:]'
+ 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[@]}-1]
+ ;;
+ date_day)
+ date_day="${cmd[@]:1}"
+ ;;
+ date_min)
+ date_min="${cmd[@]:1}"
+ ;;
+ player)
+ song=$(get_mpd_song)
+ ;;
+ focus_changed|window_title_changed)
+ windowtitle="${cmd[@]:2}"
+ ;;
+ Battery)
+ Battery="${cmd[1]} ${cmd[2]}"
+ ;;
+ network)
+ network_status="${cmd[1]} ${cmd[2]}"
+ ;;
+ quit_panel)
+ exit
+ ;;
+ reload)
+ exit
+ ;;
+ esac
+ done
+} 2> /dev/null | bar $1
diff --git a/herbstluftwm/panel.sh b/herbstluftwm/panel.sh
new file mode 100755
index 0000000..035bcf5
--- /dev/null
+++ b/herbstluftwm/panel.sh
@@ -0,0 +1,223 @@
+#!/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=${geometry[2]}
+panel_height=16
+font="-Misc-Termsyn.Icons-Medium-R-Normal--11-79-100-100-C-60-ISO8859-1"
+#font="-*-envy code r-*-*-*-*-11-*-*-*-*-*-*-*"
+# font="DejaVu Sans Mono"
+bgcolor=$(hc get frame_border_normal_color)
+selbg=$(hc get window_border_active_color)
+selfg='#101010'
+popups="/home/matias/.config/herbstluftwm/popups.sh"
+
+####
+# Load the font for the panel, should implement something more optimized
+# But for now it's fine
+xset +fp /usr/share/fonts/local/
+xset fp rehash
+
+####
+# 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 3 || break
+ done > >(uniq_linebuffered) &
+ childpid=$!
+
+ while true; do
+ mpc_output="$(mpc -f "player\t%title% - %artist%" || echo -n "player\t")"
+ echo "$mpc_output" | head -n 1
+ sleep 11 || break
+ done > >(uniq_linebuffered) &
+ mpcpid=$!
+
+ hc --idle
+ kill $childpid
+ kill $mpcpid
+} 2> /dev/null | {
+ IFS=$'\t' read -ra tags <<< "$(hc tag_status $monitor)"
+ visible=true
+ date=""
+ windowtitle=""
+ 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
+ battery=$(expr $(expr $(cat /sys/class/power_supply/BAT*/charge_now) \* 100) / $(cat /sys/class/power_supply/BAT*/charge_full))
+ if [ "$battery" = "/" ] ;then
+ right="$separator^bg($hintcolor) $date $separator"
+ else
+ right="^bg($hintcolor) ^fg(#efefef)$song $separator "
+ if [[ $battery -lt 20 ]]
+ then
+ right="$right^fg(#ef7f7f)$battery%% $separator $date"
+ elif [[ $battery -lt 50 ]]
+ then
+ right="$right^fg(#e1e17f)$battery%% $separator $date"
+ else
+ right="$right^fg(#efefef)$battery%% $separator $date"
+ fi
+ fi
+ 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 + 22)))$(printf "$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="^ca(1, ${popups} cal)${cmd[@]:1}^ca()"
+ ;;
+ 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)
+ if [[ x"${cmd[@]:1}" != "x" ]]
+ then
+ song="^ca(1, ${popups} music) \uEA ^ca()"
+ else
+ song="wep"
+ fi
+ ;;
+ esac
+ done
+
+ ### dzen2 ###
+ # After the data is gathered and processed, the output of the previous block
+ # gets piped to dzen2. font -> -fn "$font"
+
+} 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 '#efefef'
diff --git a/herbstluftwm/popups.sh b/herbstluftwm/popups.sh
new file mode 100755
index 0000000..0ba7d86
--- /dev/null
+++ b/herbstluftwm/popups.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+
+dzen_bg="#444040"
+
+calendary() {
+ (
+ cal
+ ) | dzen2 -p -bg "${dzen_bg}" -x "1195" -y "25" -w "165" -h "20" -l "5" -sa "c" -ta "c" \
+ -title-name "popup_sysinfo" -e 'onstart=uncollapse;button1=exit;button3=exit'
+}
+
+position(){
+ pos=$(mpc | awk 'NR==2' | awk '{print $4}' | sed 's/(//' | sed 's/%)//')
+ bar=$(echo $pos | gdbar -w $1 -h 1.5 -fg "#FF3D00" -bg "#821D00")
+ echo -n "$bar"
+ return
+}
+
+music() {
+ set -e
+
+ popup_width=220
+ padding=10
+
+ while :
+ do
+ echo "^p(10)$(mpc current -f %artist%)
+^p($padding)$(mpc current -f %title%)
+^p($padding)$(mpc current -f %album%)
+
+^p($padding)^ca(1,mpc prev)Prev^ca() ^ca(1,mpc toggle)Play/Pause^ca() ^ca(1,mpc stop)Stop^ca() ^ca(1,mpc next)Next^ca()
+^p($padding)$(position $(($popup_width - $padding)) )" 2> /dev/null
+ sleep 1
+ done | dzen2 -p -bg "${dzen_bg}" -y 25 -x 967 -l 5 -u -w $(($popup_width + $padding)) -ta l -title-name "popup_mpd" -e 'onstart=uncollapse;button3=exit'
+}
+
+case $1 in
+ cal)
+ calendary
+ ;;
+ music)
+ music
+ ;;
+ *)
+ ;;
+esac
diff --git a/herbstluftwm/restartpanels.sh b/herbstluftwm/restartpanels.sh
new file mode 100755
index 0000000..9d9110c
--- /dev/null
+++ b/herbstluftwm/restartpanels.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+installdir=/
+
+XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
+defaultpanel="$XDG_CONFIG_HOME/herbstluftwm/panel.sh"
+
+[ -x "$defaultpanel" ] || defaultpanel="$installdir/etc/xdg/herbstluftwm/panel.sh"
+
+panelcmd="${1:-$defaultpanel}"
+
+herbstclient emit_hook quit_panel
+
+for i in $(herbstclient list_monitors | cut -d':' -f1) ; do
+ "$panelcmd" $i &
+done
diff --git a/irssi/config b/irssi/config
new file mode 100644
index 0000000..52852a6
--- /dev/null
+++ b/irssi/config
@@ -0,0 +1,375 @@
+## SERVERS
+servers = (
+ {
+ address = "team-deprecated.org";
+ chatnet = "Team-Deprecated";
+ port = "6667";
+ },
+ { address = "eu.irc6.net"; chatnet = "IRCnet"; port = "6667"; },
+ { address = "open.ircnet.net"; chatnet = "IRCnet"; port = "6667"; },
+ {
+ address = "chat.freenode.net";
+ chatnet = "Freenode";
+ port = "6667";
+ use_ssl = "no";
+ ssl_verify = "no";
+ autoconnect = "no";
+ },
+ {
+ address = "irc.mozilla.org";
+ chatnet = "Mozilla";
+ port = "6697";
+ use_ssl = "yes";
+ ssl_verify = "yes";
+ autoconnect = "no";
+ },
+ { address = "irc.efnet.org"; chatnet = "EFNet"; port = "6667"; },
+ {
+ address = "irc.undernet.org";
+ chatnet = "Undernet";
+ port = "6667";
+ },
+ { address = "irc.dal.net"; chatnet = "DALnet"; port = "6667"; },
+ {
+ address = "irc.quakenet.org";
+ chatnet = "QuakeNet";
+ port = "6667";
+ },
+ {
+ address = "irc.oftc.net";
+ chatnet = "OFTC";
+ port = "6667";
+ autoconnect = "no";
+ },
+ {
+ address = "irc.snoonet.org";
+ chatnet = "Snoonet";
+ port = "6667";
+ autoconnect = "no";
+ },
+ {
+ address = "irc.gamesurge.net";
+ chatnet = "GameSurge";
+ port = "6667";
+ },
+ { address = "irc.webchat.org"; chatnet = "WebChat"; port = "6667"; },
+ { address = "irc.rizon.net"; chatnet = "Rizon"; port = "6667"; },
+ { address = "irc.link-net.org"; chatnet = "LinkNet"; port = "6667"; },
+ { address = "silc.silcnet.org"; chatnet = "SILC"; port = "706"; },
+ {
+ address = "irc.unixporn.net";
+ chatnet = "Unixporn";
+ port = "6667";
+ use_ssl = "no";
+ ssl_verify = "no";
+ }
+);
+
+chatnets = {
+ IRCnet = {
+ type = "IRC";
+ max_kicks = "4";
+ max_msgs = "5";
+ max_whois = "4";
+ max_query_chans = "5";
+ };
+ EFNet = {
+ type = "IRC";
+ max_kicks = "4";
+ max_msgs = "3";
+ max_whois = "1";
+ };
+ Freenode = {
+ type = "IRC";
+ nick = "matiaslina";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ Mozilla = {
+ type = "IRC";
+ nick = "matiaslina";
+ max_kicks = "1";
+ max_msgs = "4";
+ max_whois = "1";
+ };
+ Undernet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ DALnet = {
+ type = "IRC";
+ max_kicks = "4";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ QuakeNet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ OFTC = {
+ type = "IRC";
+ nick = "matiaslina";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ GameSurge = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ WebChat = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ Rizon = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ LinkNet = {
+ type = "IRC";
+ max_kicks = "1";
+ max_msgs = "3";
+ max_whois = "30";
+ };
+ SILC = { type = "SILC"; };
+ Unixporn = {
+ type = "IRC";
+ nick = "matiaslina";
+ };
+ Snoonet = { type = "IRC"; };
+ "Team-Deprecated" = {
+ type = "IRC";
+ nick = "park";
+ };
+};
+
+channels = (
+ { name = "#irssi"; chatnet = "ircnet"; autojoin = "No"; },
+ { name = "#bash"; chatnet = "Freenode"; autojoin = "Yes"; },
+ { name = "#archlinux"; chatnet = "Freenode"; autojoin = "Yes"; },
+ { name = "#herbstluftwm"; chatnet = "Freenode"; autojoin = "Yes"; },
+ { name = "#vim"; chatnet = "Freenode"; autojoin = "Yes"; },
+ { name = "#tox"; chatnet = "Freenode"; autojoin = "Yes"; },
+
+ { name = "#rust"; chatnet = "Mozilla"; autojoin = "Yes"; },
+ { name = "#servo"; chatnet = "Mozilla"; autojoin = "Yes"; },
+
+ { name = "#suckless"; chatnet = "OFTC"; autojoin = "Yes"; },
+
+ { name = "#nomanssky"; chatnet = "Snoonet"; autojoin = "Yes"; },
+
+);
+
+aliases = {
+ J = "join";
+ WJOIN = "join -window";
+ WQUERY = "query -window";
+ LEAVE = "part";
+ BYE = "quit";
+ EXIT = "quit";
+ SIGNOFF = "quit";
+ DESCRIBE = "action";
+ DATE = "time";
+ HOST = "userhost";
+ LAST = "lastlog";
+ SAY = "msg *";
+ WI = "whois";
+ WII = "whois $0 $0";
+ WW = "whowas";
+ W = "who";
+ N = "names";
+ M = "msg";
+ T = "topic";
+ C = "clear";
+ CL = "clear";
+ K = "kick";
+ KB = "kickban";
+ KN = "knockout";
+ BANS = "ban";
+ B = "ban";
+ MUB = "unban *";
+ UB = "unban";
+ IG = "ignore";
+ UNIG = "unignore";
+ SB = "scrollback";
+ UMODE = "mode $N";
+ WC = "window close";
+ WN = "window new hide";
+ SV = "say Irssi $J ($V) - http://irssi.org/";
+ GOTO = "sb goto";
+ CHAT = "dcc chat";
+ RUN = "SCRIPT LOAD";
+ CALC = "exec - if command -v bc >/dev/null 2>&1\\; then printf '%s=' '$*'\\; echo '$*' | bc -l\\; else echo bc was not found\\; fi";
+ SBAR = "STATUSBAR";
+ INVITELIST = "mode $C +I";
+ Q = "QUERY";
+ "MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set reuse_unused_windows on;save";
+ EXEMPTLIST = "mode $C +e";
+ ATAG = "WINDOW SERVER";
+ UNSET = "set -clear";
+ RESET = "set -default";
+};
+
+statusbar = {
+ # formats:
+ # when using {templates}, the template is shown only if it's argument isn't
+ # empty unless no argument is given. for example {sb} is printed always,
+ # but {sb $T} is printed only if $T isn't empty.
+
+ items = {
+ # start/end text in statusbars
+ barstart = "{sbstart}";
+ barend = "{sbend}";
+
+ topicbarstart = "{topicsbstart}";
+ topicbarend = "{topicsbend}";
+
+ # treated "normally", you could change the time/user name to whatever
+ time = "{sb $Z}";
+ user = "{sb {sbnickmode $cumode}$N{sbmode $usermode}{sbaway $A}}";
+
+ # treated specially .. window is printed with non-empty windows,
+ # window_empty is printed with empty windows
+ window = "{sb $winref:$tag/$itemname{sbmode $M}}";
+ window_empty = "{sb $winref{sbservertag $tag}}";
+ prompt = "{prompt $[.15]itemname}";
+ prompt_empty = "{prompt $winname}";
+ topic = " $topic";
+ topic_empty = " Irssi v$J - http://www.irssi.org";
+
+ # all of these treated specially, they're only displayed when needed
+ lag = "{sb Lag: $0-}";
+ act = "{sb Act: $0-}";
+ more = "-- more --";
+ };
+
+ # there's two type of statusbars. root statusbars are either at the top
+ # of the screen or at the bottom of the screen. window statusbars are at
+ # the top/bottom of each split window in screen.
+ default = {
+ # the "default statusbar" to be displayed at the bottom of the window.
+ # contains all the normal items.
+ window = {
+ disabled = "no";
+
+ # window, root
+ type = "window";
+ # top, bottom
+ placement = "bottom";
+ # number
+ position = "1";
+ # active, inactive, always
+ visible = "active";
+
+ # list of items in statusbar in the display order
+ items = {
+ barstart = { priority = "100"; };
+ time = { };
+ user = { };
+ window = { };
+ window_empty = { };
+ lag = { priority = "-1"; };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ usercount = { };
+ };
+ };
+
+ # statusbar to use in inactive split windows
+ window_inact = {
+ type = "window";
+ placement = "bottom";
+ position = "1";
+ visible = "inactive";
+ items = {
+ barstart = { priority = "100"; };
+ window = { };
+ window_empty = { };
+ more = { priority = "-1"; alignment = "right"; };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+
+ # we treat input line as yet another statusbar :) It's possible to
+ # add other items before or after the input line item.
+ prompt = {
+ type = "root";
+ placement = "bottom";
+ # we want to be at the bottom always
+ position = "100";
+ visible = "always";
+ items = {
+ prompt = { priority = "-1"; };
+ prompt_empty = { priority = "-1"; };
+ # treated specially, this is the real input line.
+ input = { priority = "10"; };
+ };
+ };
+
+ # topicbar
+ topic = {
+ type = "root";
+ placement = "top";
+ position = "1";
+ visible = "always";
+ items = {
+ topicbarstart = { priority = "100"; };
+ topic = { };
+ topic_empty = { };
+ topicbarend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ awl_0 = {
+ placement = "top";
+ items = {
+ barstart = { priority = "100"; };
+ awl_0 = { };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ awl_1 = {
+ placement = "top";
+ items = {
+ barstart = { priority = "100"; };
+ awl_1 = { };
+ barend = { priority = "100"; alignment = "right"; };
+ };
+ };
+ };
+};
+settings = {
+ core = {
+ real_name = "Matias Linares";
+ user_name = "matiaslina";
+ nick = "matiaslina";
+ };
+ "fe-text" = { actlist_sort = "refnum"; };
+ "fe-common/core" = {
+ theme = "gorgatron";
+ bell_beeps = "yes";
+ beep_msg_level = "MSGS NOTICES INVITES DCC DCCMSGS HILIGHT";
+ use_status_window = "no";
+ expand_escapes = "yes";
+ };
+ "perl/core/scripts" = {
+ awl_display_key = "%K$H $C $S";
+ awl_display_key_active = "$H %G$C $S";
+ # awl_sort = "refnum";
+ # awl_hide_data = "0";
+ awl_placement = "top";
+ awl_separator = "\\ \\ \\ ";
+ };
+};
+ignores = ( { level = "JOINS PARTS QUITS"; } );
+logs = { };
diff --git a/irssi/default.theme b/irssi/default.theme
new file mode 100644
index 0000000..d76548c
--- /dev/null
+++ b/irssi/default.theme
@@ -0,0 +1,308 @@
+#
+#
+# Beastie's irssi theme(With some small edits by neeasade).
+#
+# Thanks to crshd.
+#
+#
+# Visit irc.unixhub.net #unixhub :)
+#
+
+
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]" = "%g$*%n"; };
+
+abstracts = {
+
+ ############# generic ###############################
+
+ #indent_default = " + ";
+ indent_default = "";
+
+ # text to insert at the beginning of each non-message line
+ # line_start = "%g//%n ";
+ line_start = "";
+
+ # timestamp styling, nothing by default
+ #timestamp = "%K$0-%n";
+ timestamp = "";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message, default is bright red
+ error = "%R$*%n";
+
+ # channel name is printed
+ channel = "%b$*%n";
+
+ # nick is printed
+ #nick = "%_$*%_";
+ nick = "";
+
+ # nick host is printed
+ nickhost = "%g$*";
+
+ # server name is printed
+ server = "%_$*%_";
+
+ # some kind of comment is printed
+ comment = "%n(%b\"$*\"%n);";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ mode = "{comment $*}";
+
+ ## channel specific messages
+
+ # highlighted nick/host is printed (joins)
+ channick_hilight = "%g$*%N";
+ chanhost_hilight = "{nickhost $*}";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "$*";
+ chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ channelhilight = "%g$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ ban = "$*";
+
+ ########### messages #################################
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ # msgnick = "$1-$0%K·%N %|";
+ #msgnick = "%K$0%N $1 %K│ %|%N";
+ # msgnick = "%K$0%N $1 %K· %|%N";
+ msgnick = "%K%N $1 %K│ %N%|";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "{msgnick $0 $1}";
+ ownnick = "%Y$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "{msgnick $0 $1}";
+ pubnick = "%N$*%n";
+
+ # public highlighted message in channel
+ pubmsghinick = "{msgnick $0 $1}%r";
+ menick = "%R$*%n";
+
+ # channel name is printed with message
+ msgchannel = "%K:%m$*%n";
+
+ # private message, $0 = nick, $1 = host
+ privmsg = "$0=%b\"$1-\"%n ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ ownprivmsg = "$0=%b\"$1-\"%n ";
+
+ # private message in query
+ # privmsgnick = "{msgnick $*}";
+ privmsgnick = " %g<%N ";
+
+ # own private message in query
+ #ownprivmsgnick = "{privmsgnick $*}";
+ ownprivmsgnick = " %r>%N ";
+ #ownprivnick = "$*";
+
+
+ ########## Actions (/ME stuff) #########################
+ # used internally by this theme
+ action_core = " %n$* │";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ ownaction = "{action %p$*}";
+
+ # own action with target, both private/public
+ ownaction_target = "{action_core $0}%Y:%c$1%n ";
+
+ # private action sent by others
+ pvtaction = "%y (*) $*%n ";
+ pvtaction_query = "{action $* }";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+ # generic one that's used by most actions
+ # action = " %m$* │ %N%m";
+
+ # own action, both private/public
+ # ownaction = "{action $*}";
+ # ownaction = " %m$* │ %N%m";
+
+ # own action with target, both private/public
+ # ownaction_target = " {action $*}";
+
+ # private action sent by others
+ # pvtaction = "{ $*}";
+ # pvtaction_query = "{ $*}";
+
+ # public action sent by others
+ # pubaction = " {action}";
+
+
+ ########## other IRC events #############################
+
+ # whois
+ whois = "%# $[8]0 = $1-;";
+
+ # notices
+ ownnotice = "%NNote n = %Mnew%n $0 ($1-) ";
+ notice = "%M$*%n ";
+ pubnotice_channel = " %N($*)";
+ pvtnotice_host = " %N($*)";
+ servernotice = " %N($*)";
+
+ # CTCPs
+ ownctcp = "%NCTCP c = %Mnew%n $0 ($1-) ";
+ ctcp = "%N$*%n";
+
+ # wallops
+ wallop = "%K$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%K * $*%n ";
+
+ # netsplits
+ netsplit = " %Knsplit %R│ %b\"$*\"%n";
+ netjoin = " %Knjoin %G│ %b\"$*\"%n";
+
+ # /names list
+ names_prefix = " %Y│%n ";
+ names_nick = "%_$2$0%_%n$1- ";
+ names_nick_op = "{names_nick $* %R}";
+ names_nick_halfop = "{names_nick $* %C}";
+ names_nick_voice = "{names_nick $* %K}";
+ names_users = " %Y│%n $1";
+ names_channel = "\"%b$*\"%n";
+
+ # DCC
+ dcc = "%g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "%g /* $0 ($1-) */";
+ dccownnick = "$*%n";
+ dccownquerynick = "$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action $*}";
+
+ # DCC chat, others
+ dccmsg = "%g/* $1- ($0) */";
+ dccquerynick = "%g$*%n";
+ dccaction = "{action $*}";
+
+ ######## statusbar/topicbar ############################
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ sb_background = "%9";
+
+ # default backround for "default" statusbar group
+ #sb_default_bg = "%4";
+ # background for prompt / input line
+ sb_prompt_bg = "%n";
+ # background for info statusbar
+ #sb_info_bg = "%8";
+ # background for topicbar (same default)
+ #sb_topic_bg = "%4";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = "";
+
+
+ topicsbstart = "%BChannel: %b\"$*";
+ topicsbend = "$*%b\"";
+
+ prompt = "$c%K └─ ";
+
+ sb = " $*";
+ sbmode = " %K[%g%g+%n$*%K]";
+ sbaway = " %g/* zZzZ */%n";
+ sbservertag = ":%g$0%n";
+ sbnickmode = "$0";
+
+ # Usercount
+ sb_usercount = "{sb %_$0%_ nicks ($1-)}";
+ sb_uc_ircops = "%_*%_$*";
+ sb_uc_ops = "%_@%r$*%n";
+ sb_uc_halfops = "%_%%%g$*%n";
+ sb_uc_voices = "%_+%y$*%n";
+ sb_uc_normal = "%w$*%n";
+ sb_uc_space = " ";
+ # activity in statusbar
+
+ # ',' separator
+ sb_act_sep = " ";
+ # normal text
+ sb_act_text = "%K%9$*%n";
+ # public message
+ sb_act_msg = "%Y%9$*%n";
+ # hilight
+ sb_act_hilight = "%R%9$*%n";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "%R%9$1-%n";
+};
+
+########################################################
+
+formats = {
+ "fe-common/core" = {
+ line_start = "{line_start}";
+ line_start_irssi = "{line_start}";
+
+ join = " join %g│ %n {channick $0}";
+ part = " part %r│ %n {channick $0}";
+ kick = " kicked %r│ %n {channick $0}";
+ quit = " quit %r│ %n {channick $0}";
+ quit_once = "{channel $3} {channick $0} {chanhost $1} %kquit {reason %C$2}";
+
+ nick_changed = "%K{channick $[-13]0}%G│ %n {channick $1}";
+ your_nick_changed = "%K you %G│ %n {channick $1}";
+
+ pubmsg = "{pubmsgnick $2 {pubnick \00304$[-11]0}}$1";
+
+ own_msg = "{ownmsgnick $2 {ownnick $[-11]0}}$1";
+ own_msg_channel = "{ownmsgnick $3 {ownnick $[-11]0}{msgchannel $1}}$2";
+ own_msg_private_query = "{ownprivmsgnick {ownprivnick $[-11]2}}$1";
+
+ pubmsg_me = "{pubmsghinick $2 {menick $[-11]0}}$1";
+ pubmsg_me_channel = "{pubmsghinick $3 {menick $[-11]0}{msgchannel $1}}$2";
+
+ pubmsg_hilight = "{pubmsghinick $3 {menick $[-11]1}}$2";
+ pubmsg_hilight_channel = "{pubmsghinick $0 $[-11]1$4{msgchannel $2}}$3";
+
+ pubmsg_channel = "{pubmsgnick {pubnick %G$[-11]0}$2}$1";
+ msg_private_query = "{privmsgnick $[-11]0}$2";
+ new_topic = " %ctopic %K│ %B'$2' %non %b$1%n%K[set by {nick %y$0}]";
+
+ endofnames = " names %Y│%m Total: {hilight $2} ops, {hilight $3} halfops, {hilight $4} voices, {hilight $5} normal%n";
+ };
+ "fe-common/irc" = {
+ chanmode_change = " mode %y│ %n {channick $1}";
+ server_chanmode_change = "% mode %y│ %n {channick $1}";
+
+ own_action = "{ownaction $[-11]0} $1";
+ action_private = "{pvtaction $[-11]0}$1";
+ action_private_query = "{pvtaction_query $[-11]0} $2";
+ action_public = "{pubaction $[-11]0}$1";
+ };
+};
diff --git a/irssi/doom.theme b/irssi/doom.theme
new file mode 100644
index 0000000..130f1b0
--- /dev/null
+++ b/irssi/doom.theme
@@ -0,0 +1,296 @@
+# When testing changes, the easiest way to reload the theme is with /RELOAD.
+# This reloads the configuration file too, so if you did any changes remember
+# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
+# old data so keep backups :)
+
+# TEMPLATES:
+
+# The real text formats that irssi uses are the ones you can find with
+# /FORMAT command. Back in the old days all the colors and texts were mixed
+# up in those formats, and it was really hard to change the colors since you
+# might have had to change them in tens of different places. So, then came
+# this templating system.
+
+# Now the /FORMATs don't have any colors in them, and they also have very
+# little other styling. Most of the stuff you need to change is in this
+# theme file. If you can't change something here, you can always go back
+# to change the /FORMATs directly, they're also saved in these .theme files.
+
+# So .. the templates. They're those {blahblah} parts you see all over the
+# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
+# When irssi sees this kind of text, it goes to find "name" from abstracts
+# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
+# can have more parameters of course). Templates can have subtemplates.
+# Here's a small example:
+# /FORMAT format hello {colorify {underline world}}
+# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
+# When irssi expands the templates in "format", the final string would be:
+# hello %G%Uworld%U%n
+# ie. underlined bright green "world" text.
+# and why "$0-", why not "$0"? $0 would only mean the first parameter,
+# $0- means all the parameters. With {underline hello world} you'd really
+# want to underline both of the words, not just the hello (and world would
+# actually be removed entirely).
+
+# COLORS:
+
+# You can find definitions for the color format codes in docs/formats.txt.
+
+# There's one difference here though. %n format. Normally it means the
+# default color of the terminal (white mostly), but here it means the
+# "reset color back to the one it was in higher template". For example
+# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
+# print yellow "foo" (as set with %Y) but "bar" would be green, which was
+# set at the beginning before the {foo} template. If there wasn't the %g
+# at start, the normal behaviour of %n would occur. If you _really_ want
+# to use the terminal's default color, use %N.
+
+#############################################################################
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]=" = "%K$*%n"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ line_start = "%B-%W!%B-%n ";
+
+ # timestamp styling, nothing by default
+ timestamp = "$*";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message, default is bright red
+ error = "%R$*%n";
+
+ # channel name is printed
+ channel = "%_$*%_";
+
+ # nick is printed
+ nick = "%_$*%_";
+
+ # nick host is printed
+ nickhost = "[$*]";
+
+ # server name is printed
+ server = "%_$*%_";
+
+ # some kind of comment is printed
+ comment = "[$*]";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ mode = "{comment $*}";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ channick_hilight = "%C$*%n";
+ chanhost_hilight = "{nickhost %c$*%n}";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "%c$*%n";
+ chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ channelhilight = "%c$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ ban = "%c$*%n";
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "%K<%n$0%G$1-%K>%n %|";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %R$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "%Y<%n$0%G$1-%Y>%n %|";
+ # ownmsgnick = "{msgnick $0 $1-}";
+ ownnick = "%g$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "{msgnick $0 $1-}";
+ pubnick = "%G$*%n";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ # pubmsgmenick = "{msgnick $0 $1-}";
+ pubmsgmenick = "%R<%n$0%Y$1-%R>%n %|";
+ menick = "%Y$*%n";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = "{msgnick $1 $0$2-%n}";
+
+ # channel name is printed with message
+ msgchannel = "%K:%c$*%n";
+
+ # private message, $0 = nick, $1 = host
+ privmsg = "[%R$0%K(%r$1-%K)%n] ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ ownprivmsg = "[%r$0%K(%R$1-%K)%n] ";
+
+ # own private message in query
+ ownprivmsgnick = "{msgnick $*}";
+ ownprivnick = "%W$*%n";
+
+ # private message in query
+ privmsgnick = "{msgnick %R$*%n}";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%Y * $*";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ ownaction = "{action $*}";
+
+ # own action with target, both private/public
+ ownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # private action sent by others
+ pvtaction = "%W (*) $*%n ";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ whois = "%# $[8]0 : $1-";
+
+ # notices
+ ownnotice = "[%r$0%K(%R$1-%K)]%n ";
+ notice = "%K-%M$*%K-%n ";
+ pubnotice_channel = "%K:%m$*";
+ pvtnotice_host = "%K(%m$*%K)";
+ servernotice = "%g!$*%n ";
+
+ # CTCPs
+ ownctcp = "[%r$0%K(%R$1-%K)] ";
+ ctcp = "%g$*%n";
+
+ # wallops
+ wallop = "%W$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%W * $*%n ";
+
+ # netsplits
+ netsplit = "%R$*%n";
+ netjoin = "%C$*%n";
+
+ # /names list
+ names_prefix = "";
+ names_nick = "[%_$0%_$1-] ";
+ names_nick_op = "{names_nick $*}";
+ names_nick_halfop = "{names_nick $*}";
+ names_nick_voice = "{names_nick $*}";
+ names_users = "[%g$*%n]";
+ names_channel = "%G$*%n";
+
+ # DCC
+ dcc = "%g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "[%r$0%K($1-%K)%n] ";
+ dccownnick = "%R$*%n";
+ dccownquerynick = "%W$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # DCC chat, others
+ dccmsg = "[%G$1-%K(%g$0%K)%n] ";
+ dccquerynick = "%G$*%n";
+ dccaction = "%W (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ sb_background = "%1%Y";
+
+ # default backround for "default" statusbar group
+ #sb_default_bg = "%4";
+ # background for prompt / input line
+ sb_prompt_bg = "%W";
+ # background for info statusbar
+ sb_info_bg = "%W";
+ # background for topicbar (same default)
+ #sb_topic_bg = "%4";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = " ";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ prompt = "[$*] ";
+
+ sb = " $*";
+ sbmode = "(%W+$*%n)";
+ sbaway = " (%GzZzZ%n)";
+ sbservertag = ":$0 (change with ^X)";
+ sbnickmode = "$0";
+
+ # activity in statusbar
+
+ # ',' separator
+ sb_act_sep = "%Y$*%n";
+ # normal text
+ sb_act_text = "%c$*%n";
+ # public message
+ sb_act_msg = "%Y$*%n";
+ # hilight
+ sb_act_hilight = "%W$*%n";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "$0$1-%n";
+};
diff --git a/irssi/gorgatron.theme b/irssi/gorgatron.theme
new file mode 100644
index 0000000..df2dd0b
--- /dev/null
+++ b/irssi/gorgatron.theme
@@ -0,0 +1,299 @@
+# When testing changes, the easiest way to reload the theme is with /RELOAD.
+# This reloads the configuration file too, so if you did any changes remember
+# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
+# old data so keep backups :)
+
+# TEMPLATES:
+
+# The real text formats that irssi uses are the ones you can find with
+# /FORMAT command. Back in the old days all the colors and texts were mixed
+# up in those formats, and it was really hard to change the colors since you
+# might have had to change them in tens of different places. So, then came
+# this templating system.
+
+# Now the /FORMATs don't have any colors in them, and they also have very
+# little other styling. Most of the stuff you need to change is in this
+# theme file. If you can't change something here, you can always go back
+# to change the /FORMATs directly, they're also saved in these .theme files.
+
+# So .. the templates. They're those {blahblah} parts you see all over the
+# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
+# When irssi sees this kind of text, it goes to find "name" from abstracts
+# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
+# can have more parameters of course). Templates can have subtemplates.
+# Here's a small example:
+# /FORMAT format hello {colorify {underline world}}
+# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
+# When irssi expands the templates in "format", the final string would be:
+# hello %G%Uworld%U%n
+# ie. underlined bright green "world" text.
+# and why "$0-", why not "$0"? $0 would only mean the first parameter,
+# $0- means all the parameters. With {underline hello world} you'd really
+# want to underline both of the words, not just the hello (and world would
+# actually be removed entirely).
+
+# COLORS:
+
+# You can find definitions for the color format codes in docs/formats.txt.
+
+# There's one difference here though. %n format. Normally it means the
+# default color of the terminal (white mostly), but here it means the
+# "reset color back to the one it was in higher template". For example
+# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
+# print yellow "foo" (as set with %Y) but "bar" would be green, which was
+# set at the beginning before the {foo} template. If there wasn't the %g
+# at start, the normal behaviour of %n would occur. If you _really_ want
+# to use the terminal's default color, use %N.
+
+#############################################################################
+#foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]=" = "%K$*%n"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ line_start = "%B-%n!%B-%n ";
+
+ # timestamp styling, nothing by default
+ timestamp = "$*";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message, default is bright red
+ error = "%G$*%n";
+
+ # channel name is printed
+ channel = "%_$*%_";
+
+ # nick is printed
+ nick = "%_$*%_";
+
+ # nick host is printed
+ nickhost = "[$*]";
+
+ # server name is printed
+ server = "%_$*%_";
+
+ # some kind of comment is printed
+ comment = "[$*]";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ mode = "{comment $*}";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ channick_hilight = "%G$*%n";
+ chanhost_hilight = "{nickhost %g$*%n}";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "%g$*%n";
+ chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ channelhilight = "%g$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ ban = "%g$*%n";
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "%K<%n$0$1-%K>%n %|";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %G$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "{msgnick $0 $1-}";
+ ownnick = "%_$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "{msgnick $0 $1-}";
+ pubnick = "%N$*%n";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ pubmsgmenick = "{msgnick $0 $1-}";
+ menick = "%Y$*%n";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = "{msgnick $1 $0$2-%n}";
+
+ # channel name is printed with message
+ msgchannel = "%K:%g$*%n";
+
+ # private message, $0 = nick, $1 = host
+ privmsg = "[%G$0%K(%g$1-%K)%n] ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ ownprivmsg = "[%g$0%K(%G$1-%K)%n] ";
+
+ # own private message in query
+ ownprivmsgnick = "{msgnick $*}";
+ ownprivnick = "%_$*%n";
+
+ # private message in query
+ privmsgnick = "{msgnick %G$*%n}";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%_ * $*%n";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ ownaction = "{action $*}";
+
+ # own action with target, both private/public
+ ownaction_target = "{action_core $0}%K:%g$1%n ";
+
+ # private action sent by others
+ pvtaction = "%_ (*) $*%n ";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ whois = "%# $[8]0 : $1-";
+
+ # notices
+ ownnotice = "[%g$0%K(%G$1-%K)]%n ";
+ notice = "%K-%M$*%K-%n ";
+ pubnotice_channel = "%K:%m$*";
+ pvtnotice_host = "%K(%m$*%K)";
+ servernotice = "%g!$*%n ";
+
+ # CTCPs
+ ownctcp = "[%g$0%K(%G$1-%K)] ";
+ ctcp = "%g$*%n";
+
+ # wallops
+ wallop = "%_$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%_ * $*%n ";
+
+ # netsplits
+ netsplit = "%G$*%n";
+ netjoin = "%G$*%n";
+
+ # /names list
+ names_prefix = "";
+ names_nick = "[%_$0%_$1-] ";
+ names_nick_op = "{names_nick $*}";
+ names_nick_halfop = "{names_nick $*}";
+ names_nick_voice = "{names_nick $*}";
+ names_users = "[%g$*%n]";
+ names_channel = "%G$*%n";
+
+ # DCC
+ dcc = "%g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "[%g$0%K($1-%K)%n] ";
+ dccownnick = "%G$*%n";
+ dccownquerynick = "%_$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action_core $0}%K:%g$1%n ";
+
+ # DCC chat, others
+ dccmsg = "[%G$1-%K(%g$0%K)%n] ";
+ dccquerynick = "%G$*%n";
+ dccaction = "%_ (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ sb_background = "%w";
+
+ # default backround for "default" statusbar group
+ #sb_default_bg = "%w";
+ # background for prompt / input line
+ sb_prompt_bg = "%w";
+ # background for info statusbar
+ sb_info_bg = "%w";
+ # background for topicbar (same default)
+ #sb_topic_bg = "%w";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = " ";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ prompt = "<<$*>> ";
+
+ sb = " %m[ %n$*%m ]%n";
+ sbmode = "(%M+%n$*)";
+ sbaway = " (%MzZzZ%n)";
+ sbservertag = ":$0 (change with ^X)";
+ sbnickmode = "$0";
+
+ # activity in statusbar
+
+ # ',' separator
+ sb_act_sep = "%n$*";
+ # normal text
+ sb_act_text = "%N$*";
+ # public message
+ sb_act_msg = "%W$*";
+ # hilight
+ sb_act_hilight = "%M$*";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "$0$1-%n";
+};
+formats = {
+ "fe-common/core" = {
+ pubmsg = "{pubmsgnick $2 {pubnick \00304$[-12]0}}$1";
+ timestamp = "{timestamp [%%H:%%M] }";
+ };
+};
diff --git a/irssi/kra3.theme b/irssi/kra3.theme
new file mode 100644
index 0000000..532a918
--- /dev/null
+++ b/irssi/kra3.theme
@@ -0,0 +1,297 @@
+# When testing changes, the easiest way to reload the theme is with /RELOAD.
+# This reloads the configuration file too, so if you did any changes remember
+# to /SAVE it first. Remember also that /SAVE overwrites the theme file with
+# old data so keep backups :)
+
+# TEMPLATES:
+
+# The real text formats that irssi uses are the ones you can find with
+# /FORMAT command. Back in the old days all the colors and texts were mixed
+# up in those formats, and it was really hard to change the colors since you
+# might have had to change them in tens of different places. So, then came
+# this templating system.
+
+# Now the /FORMATs don't have any colors in them, and they also have very
+# little other styling. Most of the stuff you need to change is in this
+# theme file. If you can't change something here, you can always go back
+# to change the /FORMATs directly, they're also saved in these .theme files.
+
+# So .. the templates. They're those {blahblah} parts you see all over the
+# /FORMATs and here. Their usage is simply {name parameter1 parameter2}.
+# When irssi sees this kind of text, it goes to find "name" from abstracts
+# block below and sets "parameter1" into $0 and "parameter2" into $1 (you
+# can have more parameters of course). Templates can have subtemplates.
+# Here's a small example:
+# /FORMAT format hello {colorify {underline world}}
+# abstracts = { colorify = "%G$0-%n"; underline = "%U$0-%U"; }
+# When irssi expands the templates in "format", the final string would be:
+# hello %G%Uworld%U%n
+# ie. underlined bright green "world" text.
+# and why "$0-", why not "$0"? $0 would only mean the first parameter,
+# $0- means all the parameters. With {underline hello world} you'd really
+# want to underline both of the words, not just the hello (and world would
+# actually be removed entirely).
+
+# COLORS:
+
+# You can find definitions for the color format codes in docs/formats.txt.
+
+# There's one difference here though. %n format. Normally it means the
+# default color of the terminal (white mostly), but here it means the
+# "reset color back to the one it was in higher template". For example
+# if there was /FORMAT test %g{foo}bar, and foo = "%Y$0%n", irssi would
+# print yellow "foo" (as set with %Y) but "bar" would be green, which was
+# set at the beginning before the {foo} template. If there wasn't the %g
+# at start, the normal behaviour of %n would occur. If you _really_ want
+# to use the terminal's default color, use %N.
+
+#############################################################################
+
+# default foreground color (%N) - -1 is the "default terminal color"
+default_color = "-1";
+
+# print timestamp/servertag at the end of line, not at beginning
+info_eol = "false";
+
+# these characters are automatically replaced with specified color
+# (dark grey by default)
+replaces = { "[]=" = "%K$*%n"; };
+
+abstracts = {
+ ##
+ ## generic
+ ##
+
+ # text to insert at the beginning of each non-message line
+ line_start = "%B-%n!%B-%n ";
+
+ # timestamp styling, nothing by default
+ timestamp = "$*";
+
+ # any kind of text that needs hilighting, default is to bold
+ hilight = "%_$*%_";
+
+ # any kind of error message, default is bright red
+ error = "%R$*%n";
+
+ # channel name is printed
+ channel = "%_$*%_";
+
+ # nick is printed
+ nick = "%_$*%_";
+
+ # nick host is printed
+ nickhost = "[$*]";
+
+ # server name is printed
+ server = "%_$*%_";
+
+ # some kind of comment is printed
+ comment = "[$*]";
+
+ # reason for something is printed (part, quit, kick, ..)
+ reason = "{comment $*}";
+
+ # mode change is printed ([+o nick])
+ mode = "{comment $*}";
+
+ ##
+ ## channel specific messages
+ ##
+
+ # highlighted nick/host is printed (joins)
+ channick_hilight = "%C$*%n";
+ chanhost_hilight = "{nickhost %c$*%n}";
+
+ # nick/host is printed (parts, quits, etc.)
+ channick = "%c$*%n";
+ chanhost = "{nickhost $*}";
+
+ # highlighted channel name is printed
+ channelhilight = "%c$*%n";
+
+ # ban/ban exception/invite list mask is printed
+ ban = "%c$*%n";
+
+ ##
+ ## messages
+ ##
+
+ # the basic styling of how to print message, $0 = nick mode, $1 = nick
+ msgnick = "%K<%n$0$1-%K>%n %|";
+
+ # message from you is printed. "msgownnick" specifies the styling of the
+ # nick ($0 part in msgnick) and "ownmsgnick" specifies the styling of the
+ # whole line.
+
+ # Example1: You want the message text to be green:
+ # ownmsgnick = "{msgnick $0 $1-}%g";
+ # Example2.1: You want < and > chars to be yellow:
+ # ownmsgnick = "%Y{msgnick $0 $1-%Y}%n";
+ # (you'll also have to remove <> from replaces list above)
+ # Example2.2: But you still want to keep <> grey for other messages:
+ # pubmsgnick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsgmenick = "%K{msgnick $0 $1-%K}%n";
+ # pubmsghinick = "%K{msgnick $1 $0$2-%n%K}%n";
+ # ownprivmsgnick = "%K{msgnick $*%K}%n";
+ # privmsgnick = "%K{msgnick %R$*%K}%n";
+
+ # $0 = nick mode, $1 = nick
+ ownmsgnick = "{msgnick $0 $1-}";
+ ownnick = "%_$*%n";
+
+ # public message in channel, $0 = nick mode, $1 = nick
+ pubmsgnick = "{msgnick $0 $1-}";
+ pubnick = "%N$*%n";
+
+ # public message in channel meant for me, $0 = nick mode, $1 = nick
+ pubmsgmenick = "{msgnick $0 $1-}";
+ menick = "%Y$*%n";
+
+ # public highlighted message in channel
+ # $0 = highlight color, $1 = nick mode, $2 = nick
+ pubmsghinick = "{msgnick $1 $0$2-%n}";
+
+ # channel name is printed with message
+ msgchannel = "%K:%c$*%n";
+
+ # private message, $0 = nick, $1 = host
+ privmsg = "[%R$0%K(%r$1-%K)%n] ";
+
+ # private message from you, $0 = "msg", $1 = target nick
+ ownprivmsg = "[%r$0%K(%R$1-%K)%n] ";
+
+ # own private message in query
+ ownprivmsgnick = "{msgnick $*}";
+ ownprivnick = "%_$*%n";
+
+ # private message in query
+ privmsgnick = "{msgnick %R$*%n}";
+
+ ##
+ ## Actions (/ME stuff)
+ ##
+
+ # used internally by this theme
+ action_core = "%_ * $*%n";
+
+ # generic one that's used by most actions
+ action = "{action_core $*} ";
+
+ # own action, both private/public
+ ownaction = "{action $*}";
+
+ # own action with target, both private/public
+ ownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # private action sent by others
+ pvtaction = "%_ (*) $*%n ";
+ pvtaction_query = "{action $*}";
+
+ # public action sent by others
+ pubaction = "{action $*}";
+
+
+ ##
+ ## other IRC events
+ ##
+
+ # whois
+ whois = "%# $[8]0 : $1-";
+
+ # notices
+ ownnotice = "[%r$0%K(%R$1-%K)]%n ";
+ notice = "%K-%M$*%K-%n ";
+ pubnotice_channel = "%K:%m$*";
+ pvtnotice_host = "%K(%m$*%K)";
+ servernotice = "%g!$*%n ";
+
+ # CTCPs
+ ownctcp = "[%r$0%K(%R$1-%K)] ";
+ ctcp = "%g$*%n";
+
+ # wallops
+ wallop = "%_$*%n: ";
+ wallop_nick = "%n$*";
+ wallop_action = "%_ * $*%n ";
+
+ # netsplits
+ netsplit = "%R$*%n";
+ netjoin = "%C$*%n";
+
+ # /names list
+ names_prefix = "";
+ names_nick = "[%_$0%_$1-] ";
+ names_nick_op = "{names_nick $*}";
+ names_nick_halfop = "{names_nick $*}";
+ names_nick_voice = "{names_nick $*}";
+ names_users = "[%g$*%n]";
+ names_channel = "%G$*%n";
+
+ # DCC
+ dcc = "%g$*%n";
+ dccfile = "%_$*%_";
+
+ # DCC chat, own msg/action
+ dccownmsg = "[%r$0%K($1-%K)%n] ";
+ dccownnick = "%R$*%n";
+ dccownquerynick = "%_$*%n";
+ dccownaction = "{action $*}";
+ dccownaction_target = "{action_core $0}%K:%c$1%n ";
+
+ # DCC chat, others
+ dccmsg = "[%G$1-%K(%g$0%K)%n] ";
+ dccquerynick = "%G$*%n";
+ dccaction = "%_ (*dcc*) $*%n %|";
+
+ ##
+ ## statusbar
+ ##
+
+ # default background for all statusbars. You can also give
+ # the default foreground color for statusbar items.
+ sb_background = "%4%w";
+
+ # default backround for "default" statusbar group
+ #sb_default_bg = "%4";
+ # background for prompt / input line
+ sb_prompt_bg = "%n";
+ # background for info statusbar
+ sb_info_bg = "%8";
+ # background for topicbar (same default)
+ #sb_topic_bg = "%4";
+
+ # text at the beginning of statusbars. sb-item already puts
+ # space there,so we don't use anything by default.
+ sbstart = "";
+ # text at the end of statusbars. Use space so that it's never
+ # used for anything.
+ sbend = " ";
+
+ topicsbstart = "{sbstart $*}";
+ topicsbend = "{sbend $*}";
+
+ prompt = "[$*] ";
+
+ sb = " %c[%n$*%c]%n";
+ sbmode = "(%c+%n$*)";
+ sbaway = " (%GzZzZ%n)";
+ sbservertag = ":$0 (change with ^X)";
+ sbnickmode = "$0";
+
+ # activity in statusbar
+
+ # ',' separator
+ sb_act_sep = "%c$*";
+ # normal text
+ sb_act_text = "%c$*";
+ # public message
+ sb_act_msg = "%W$*";
+ # hilight
+ sb_act_hilight = "%M$*";
+ # hilight with specified color, $0 = color, $1 = text
+ sb_act_hilight_color = "$0$1-%n";
+};
+formats = {
+ "fe-common/core" = { timestamp = "{timestamp %%H:%%M:%%S }"; };
+};
diff --git a/irssi/scripts/autorun/adv_windowlist.pl b/irssi/scripts/autorun/adv_windowlist.pl
new file mode 100644
index 0000000..780ab35
--- /dev/null
+++ b/irssi/scripts/autorun/adv_windowlist.pl
@@ -0,0 +1,2478 @@
+use strict; # use warnings;
+
+# {{{ debug
+
+#BEGIN {
+# open STDERR, '>', '/home/ailin/wlstatwarnings';
+#};
+
+# FIXME COULD SOMEONE PLEASE TELL ME HOW TO SHUT UP
+#
+# ...
+# Variable "*" will not stay shared at (eval *) line *.
+# Variable "*" will not stay shared at (eval *) line *.
+# ...
+# Can't locate package Irssi::Nick for @Irssi::Irc::Nick::ISA at (eval *) line *.
+# ...
+#
+# THANKS
+
+# }}}
+
+# if you don't know how to operate folds, type zn
+
+# {{{ header
+
+use Irssi (); # which is the minimum required version of Irssi ?
+use Irssi::TextUI;
+
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '0.6ca';
+%IRSSI = (
+ original_authors => q(BC-bd, Veli, Timo Sirainen, ).
+ q(Wouter Coekaerts, Jean-Yves Lefort), # (decadix)
+ original_contact => q(bd@bc-bd.org, veli@piipiip.net, tss@iki.fi, ).
+ q(wouter@coekaerts.be, jylefort@brutele.be),
+ authors => q(Nei),
+ contact => q(Nei @ anti@conference.jabber.teamidiot.de),
+ url => "http://anti.teamidiot.de/",
+ name => q(awl),
+ description => q(Adds a permanent advanced window list on the right or ).
+ q(in a statusbar.),
+ description2 => q(Based on chanact.pl which was apparently based on ).
+ q(lightbar.c and nicklist.pl with various other ideas ).
+ q(from random scripts.),
+ license => q(GNU GPLv2 or later),
+);
+
+# }}}
+
+# {{{ *** D O C U M E N T A T I O N ***
+
+# adapted by Nei
+
+###############
+# {{{ original comment
+# ###########
+# # Adds new powerful and customizable [Act: ...] item (chanelnames,modes,alias).
+# # Lets you give alias characters to windows so that you can select those with
+# # meta-<char>.
+# #
+# # for irssi 0.8.2 by bd@bc-bd.org
+# #
+# # inspired by chanlist.pl by 'cumol@hammerhart.de'
+# #
+# #########
+# # {{{ Contributors
+# #########
+# #
+# # veli@piipiip.net /window_alias code
+# # qrczak@knm.org.pl chanact_abbreviate_names
+# # qerub@home.se Extra chanact_show_mode and chanact_chop_status
+# # }}}
+# }}}
+#
+# {{{ FURTHER THANKS TO
+# ############
+# # buu, fxn, Somni, Khisanth, integral, tybalt89 for much support in any aspect perl
+# # and the channel in general ( #perl @ freenode ) and especially the ir_* functions
+# #
+# # Valentin 'senneth' Batz ( vb@g-23.org ) for the pointer to grep.pl, continuous support
+# # and help in digging up ir_strip_codes
+# #
+# # OnetrixNET technology networks for the debian environment
+# #
+# # Monkey-Pirate.com / Spaceman Spiff for the webspace
+# #
+# }}}
+
+######
+# {{{ M A I N P R O B L E M
+#####
+#
+# It is impossible to place the awl on a statusbar together with other items,
+# because I do not know how to calculate the size that it is going to get
+# granted, and therefore I cannot do the linebreaks properly.
+# This is what is missing to make a nice script out of awl.
+# If you have any ideas, please contact me ASAP :).
+# }}}
+######
+
+######
+# {{{ UTF-8 PROBLEM
+#####
+#
+# Please help me find a solution to this:
+# this be your statusbar, it is using up the maximum term size
+# [[1=1]#abc [2=2]#defghi]
+#
+# now consider this example:i
+# "ascii" characters are marked with ., utf-8 characters with *
+# [[1=1]#... [2=2]#...***]
+#
+# you should think that this is how it would be displayed? WRONG!
+# [[1=1]#... [2=2]#...*** ]
+#
+# this is what Irssi does.. I believe my length calculating code to be correct,
+# however, I'd love to be proven wrong (or receive any other fix, too, of
+# course!)
+# }}}
+######
+
+#########
+# {{{ USAGE
+###
+#
+# copy the script to ~/.irssi/scripts/
+#
+# In irssi:
+#
+# /script load awl
+#
+#
+# Hint: to get rid of the old [Act:] display
+# /statusbar window remove act
+#
+# to get it back:
+# /statusbar window add -after lag -priority 10 act
+# }}}
+##########
+# {{{ OPTIONS
+########
+#
+# {{{ /set awl_display_nokey <string>
+# /set awl_display_key <string>
+# /set awl_display_nokey_active <string>
+# /set awl_display_key_active <string>
+# * string : Format String for one window. The following $'s are expanded:
+# $C : Name
+# $N : Number of the Window
+# $Q : meta-Keymap
+# $H : Start highlighting
+# $S : Stop highlighting
+# /+++++++++++++++++++++++++++++++++,
+# | **** I M P O R T A N T : **** |
+# | |
+# | don't forget to use $S if you |
+# | used $H before! |
+# | |
+# '+++++++++++++++++++++++++++++++++/
+# XXX NOTE ON *_active: there is a BUG somewhere in the length
+# XXX calculation. currently it's best to NOT remove $H/$S from those
+# XXX settings if you use it in the non-active settings.
+# }}}
+# {{{ /set awl_separator <string>
+# * string : Charater to use between the channel entries
+# you'll need to escape " " space and "$" like this:
+# "/set awl_separator \ "
+# "/set awl_separator \$"
+# and {}% like this:
+# "/set awl_separator %{"
+# "/set awl_separator %}"
+# "/set awl_separator %%"
+# (reason being, that the separator is used inside a {format })
+# }}}
+# {{{ /set awl_prefer_name <ON|OFF>
+# * this setting decides whether awl will use the active_name (OFF) or the
+# window name as the name/caption in awl_display_*.
+# That way you can rename windows using /window name myownname.
+# }}}
+# {{{ /set awl_hide_data <num>
+# * num : hide the window if its data_level is below num
+# set it to 0 to basically disable this feature,
+# 1 if you don't want windows without activity to be shown
+# 2 to show only those windows with channel text or hilight
+# 3 to show only windows with hilight
+# }}}
+# {{{ /set awl_maxlines <num>
+# * num : number of lines to use for the window list (0 to disable, negative
+# lock)
+# }}}
+# {{{ /set awl_columns <num>
+# * num : number of columns to use in screen mode (0 for unlimited)
+# }}}
+# {{{ /set awl_block <num>
+# * num : width of a column in screen mode (negative values = block display)
+# /+++++++++++++++++++++++++++++++++,
+# | ****** W A R N I N G ! ****** |
+# | |
+# | If your block display looks |
+# | DISTORTED, you need to add the |
+# | following line to your .theme |
+# | file under |
+# | abstracts = { : |
+# | |
+# | sb_act_none = "%n$*"; |
+# | |
+# '+++++++++++++++++++++++++++++++++/
+#.02:08:26. < shi> Irssi::current_theme()->get_format <.. can this be used?
+# }}}
+# {{{ /set awl_sbar_maxlength <ON|OFF>
+# * if you enable the maxlength setting, the block width will be used as a
+# maximum length for the non-block statusbar mode too.
+# }}}
+# {{{ /set awl_height_adjust <num>
+# * num : how many lines to leave empty in screen mode
+# }}}
+# {{{ /set awl_sort <-data_level|-last_line|refnum>
+# * you can change the window sort order with this variable
+# -data_level : sort windows with hilight first
+# -last_line : sort windows in order of activity
+# refnum : sort windows by window number
+# }}}
+# {{{ /set awl_placement <top|bottom>
+# /set awl_position <num>
+# * these settings correspond to /statusbar because awl will create
+# statusbars for you
+# (see /help statusbar to learn more)
+# }}}
+# {{{ /set awl_all_disable <ON|OFF>
+# * if you set awl_all_disable to ON, awl will also remove the
+# last statusbar it created if it is empty.
+# As you might guess, this only makes sense with awl_hide_data > 0 ;)
+# }}}
+# {{{ /set awl_automode <sbar|screen|emulate_lightbar>
+# * this setting defines whether the window list is shown in statusbars or
+# whether the screen hack is used (from nicklist.pl)
+# }}}
+# }}}
+##########
+# {{{ COMMANDS
+########
+# {{{ /awl paste <ON|OFF|TOGGLE>
+# * enables or disables the screen hack windowlist. This is useful when you
+# want to mark & copy text that you want to paste somewhere (hence the
+# name). (ON means AWL disabled!)
+# This is nicely bound to a function key for example.
+# }}}
+# {{{ /awl redraw
+# * redraws the screen hack windowlist. There are many occasions where the
+# screen hack windowlist can get destroyed so you can use this command to
+# fix it.
+# }}}
+# }}}
+###
+# {{{ WISHES
+####
+#
+# if you fiddle with my mess, provide me with your fixes so I can benefit as well
+#
+# Nei =^.^= ( anti@conference.jabber.teamidiot.de )
+# }}}
+
+# }}}
+
+# {{{ modules
+
+#use Class::Classless;
+#use Term::Info;
+
+# }}}
+
+# {{{ global variables
+
+my $replaces = '[=]'; # AARGH!!! (chars that are always surrounded by weird
+ # colour codes by Irssi)
+
+my $actString = []; # statusbar texts
+my $currentLines = 0;
+my $resetNeeded; # layout/screen has changed, redo everything
+my $needRemake; # "normal" changes
+#my $callcount = 0;
+sub GLOB_QUEUE_TIMER () { 100 }
+my $globTime = undef; # timer to limit remake() calls
+
+
+my $SCREEN_MODE;
+my $DISABLE_SCREEN_TEMP;
+my $currentColumns = 0;
+my $screenResizing;
+my ($screenHeight, $screenWidth);
+my $screenansi = bless {
+ NAME => 'Screen::ANSI',
+ PARENTS => [],
+ METHODS => {
+ dcs => sub { "\033P" },
+ st => sub { "\033\\"},
+ }
+}, 'Class::Classless::X';
+#my $terminfo = new Term::Info 'xterm'; # xterm here, make this modular
+# {{{{{{{{{{{{{{{
+my $terminfo = bless { # xterm here, make this modular
+ NAME => 'Term::Info::xterm',
+ PARENTS => [],
+ METHODS => {
+ # civis=\E[?25l,
+ civis => sub { "\033[?25l" },
+ # sc=\E7,
+ sc => sub { "\0337" },
+ # cup=\E[%i%p1%d;%p2%dH,
+ cup => sub { shift;shift; "\033[" . ($_[0] + 1) . ';' . ($_[1] + 1) . 'H' },
+ # el=\E[K,
+ el => sub { "\033[K" },
+ # rc=\E8,
+ rc => sub { "\0338" },
+ # cnorm=\E[?25h,
+ cnorm => sub { "\033[?25h" },
+ # setab=\E[4%p1%dm,
+ setab => sub { shift;shift; "\033[4" . $_[0] . 'm' },
+ # setaf=\E[3%p1%dm,
+ setaf => sub { shift;shift; "\033[3" . $_[0] . 'm' },
+ # bold=\E[1m,
+ bold => sub { "\033[1m" },
+ # blink=\E[5m,
+ blink => sub { "\033[5m" },
+ # rev=\E[7m,
+ rev => sub { "\033[7m" },
+ # op=\E[39;49m,
+ op => sub { "\033[39;49m" },
+ }
+}, 'Class::Classless::X';
+# }}}}}}}}}}}}}}}
+
+
+sub setc () {
+ $IRSSI{'name'}
+}
+sub set ($) {
+ setc . '_' . shift
+}
+
+# }}}
+
+
+# {{{ sbar mode
+
+my %statusbars; # currently active statusbars
+
+# maybe I should just tie the array ?
+sub add_statusbar {
+ for (@_) {
+ # add subs
+ for my $l ($_) { {
+ no strict 'refs'; # :P
+ *{set$l} = sub { awl($l, @_) };
+ }; }
+ Irssi::command('statusbar ' . (set$_) . ' reset');
+ Irssi::command('statusbar ' . (set$_) . ' enable');
+ if (lc Irssi::settings_get_str(set 'placement') eq 'top') {
+ Irssi::command('statusbar ' . (set$_) . ' placement top');
+ }
+ if ((my $x = int Irssi::settings_get_int(set 'position')) != 0) {
+ Irssi::command('statusbar ' . (set$_) . ' position ' . $x);
+ }
+ Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment left barstart');
+ Irssi::command('statusbar ' . (set$_) . ' add ' . (set$_));
+ Irssi::command('statusbar ' . (set$_) . ' add -priority 100 -alignment right barend');
+ Irssi::command('statusbar ' . (set$_) . ' disable');
+ Irssi::statusbar_item_register(set$_, '$0', set$_);
+ $statusbars{$_} = {};
+ }
+}
+
+sub remove_statusbar {
+ for (@_) {
+ Irssi::command('statusbar ' . (set$_) . ' reset');
+ Irssi::statusbar_item_unregister(set$_); # XXX does this actually work ?
+ # DO NOT REMOVE the sub before you have unregistered it :))
+ for my $l ($_) { {
+ no strict 'refs';
+ undef &{set$l};
+ }; }
+ delete $statusbars{$_};
+ }
+}
+
+sub syncLines {
+ my $temp = $currentLines;
+ $currentLines = @$actString;
+ #Irssi::print("current lines: $temp new lines: $currentLines");
+ my $currMaxLines = Irssi::settings_get_int(set 'maxlines');
+ if ($currMaxLines > 0 and @$actString > $currMaxLines) {
+ $currentLines = $currMaxLines;
+ }
+ elsif ($currMaxLines < 0) {
+ $currentLines = abs($currMaxLines);
+ }
+ return if ($temp == $currentLines);
+ if ($currentLines > $temp) {
+ for ($temp .. ($currentLines - 1)) {
+ add_statusbar($_);
+ Irssi::command('statusbar ' . (set$_) . ' enable');
+ }
+ }
+ else {
+ for ($_ = ($temp - 1); $_ >= $currentLines; $_--) {
+ Irssi::command('statusbar ' . (set$_) . ' disable');
+ remove_statusbar($_);
+ }
+ }
+}
+
+# FIXME implement $get_size_only check, and user $item->{min|max-size} ??
+sub awl {
+ my ($line, $item, $get_size_only) = @_;
+
+ if ($needRemake) {
+ $needRemake = undef;
+ remake();
+ }
+
+ my $text = $actString->[$line]; # DO NOT set the actual $actString->[$line] to '' here or
+ $text = '' unless defined $text; # you'll screw up the statusbar counter ($currentLines)
+ $item->default_handler($get_size_only, $text, '', 1);
+}
+
+# remove old statusbars
+my %killBar;
+sub get_old_status {
+ my ($textDest, $cont, $cont_stripped) = @_;
+ if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
+ and !defined($textDest->{'server'})
+ ) {
+ my $name = quotemeta(set '');
+ if ($cont_stripped =~ m/^$name(\d+)\s/) { $killBar{$1} = {}; }
+ Irssi::signal_stop();
+ }
+}
+sub killOldStatus {
+ %killBar = ();
+ Irssi::signal_add_first('print text' => 'get_old_status');
+ Irssi::command('statusbar');
+ Irssi::signal_remove('print text' => 'get_old_status');
+ remove_statusbar(keys %killBar);
+}
+#killOldStatus();
+
+# end sbar mode }}}
+
+
+# {{{ keymaps
+
+my %keymap;
+
+sub get_keymap {
+ my ($textDest, undef, $cont_stripped) = @_;
+ if ($textDest->{'level'} == 524288 and $textDest->{'target'} eq ''
+ and !defined($textDest->{'server'})
+ ) {
+ if ($cont_stripped =~ m/((?:meta-)+)(.)\s+change_window (\d+)/) {
+ my ($level, $key, $window) = ($1, $2, $3);
+ my $numlevel = ($level =~ y/-//) - 1;
+ $keymap{$window} = ('-' x $numlevel) . "$key";
+ }
+ Irssi::signal_stop();
+ }
+}
+
+sub update_keymap {
+ %keymap = ();
+ Irssi::signal_remove('command bind' => 'watch_keymap');
+ Irssi::signal_add_first('print text' => 'get_keymap');
+ Irssi::command('bind'); # stolen from grep
+ Irssi::signal_remove('print text' => 'get_keymap');
+ Irssi::signal_add('command bind' => 'watch_keymap');
+ Irssi::timeout_add_once(100, 'eventChanged', undef);
+}
+
+# watch keymap changes
+sub watch_keymap {
+ Irssi::timeout_add_once(1000, 'update_keymap', undef);
+}
+
+update_keymap();
+
+# end keymaps }}}
+
+# {{{ format handling
+
+# a bad way do do expansions but who cares
+sub expand {
+ my ($string, %format) = @_;
+ my ($exp, $repl);
+ $string =~ s/\$$exp/$repl/g while (($exp, $repl) = each(%format));
+ return $string;
+}
+
+my %strip_table = (
+ # fe-common::core::formats.c:format_expand_styles
+ # delete format_backs format_fores bold_fores other stuff
+ (map { $_ => '' } (split //, '04261537' . 'kbgcrmyw' . 'KBGCRMYW' . 'U9_8:|FnN>#[')),
+ # escape
+ (map { $_ => $_ } (split //, '{}%')),
+);
+sub ir_strip_codes { # strip %codes
+ my $o = shift;
+ $o =~ s/(%(.))/exists $strip_table{$2} ? $strip_table{$2} : $1/gex;
+ $o
+}
+
+sub ir_parse_special {
+ my $o; my $i = shift;
+ #if ($_[0]) { # for the future?!?
+ # eval {
+ # $o = $_[0]->parse_special($i);
+ # };
+ # unless ($@) {
+ # return $o;
+ # }
+ #}
+ my $win = shift || Irssi::active_win();
+ my $server = Irssi::active_server();
+ if (ref $win and ref $win->{'active'}) {
+ $o = $win->{'active'}->parse_special($i);
+ }
+ elsif (ref $win and ref $win->{'active_server'}) {
+ $o = $win->{'active_server'}->parse_special($i);
+ }
+ elsif (ref $server) {
+ $o = $server->parse_special($i);
+ }
+ else {
+ $o = Irssi::parse_special($i);
+ }
+ $o
+}
+sub ir_parse_special_protected {
+ my $o; my $i = shift;
+ $i =~ s/
+ ( \\. ) | # skip over escapes (maybe)
+ ( \$[^% $\]+ ) # catch special variables
+ /
+ if ($1) { $1 }
+ elsif ($2) { my $i2 = $2; ir_fe(ir_parse_special($i2, @_)) }
+ else { $& }
+ /gex;
+ $i
+}
+
+
+sub sb_ctfe { # Irssi::current_theme->format_expand wrapper
+ Irssi::current_theme->format_expand(
+ shift,
+ (
+ Irssi::EXPAND_FLAG_IGNORE_REPLACES
+ |
+ ($_[0]?0:Irssi::EXPAND_FLAG_IGNORE_EMPTY)
+ )
+ )
+}
+sub sb_expand { # expand {format }s (and apply parse_special for $vars)
+ ir_parse_special(
+ sb_ctfe(shift)
+ )
+}
+sub sb_strip {
+ ir_strip_codes(
+ sb_expand(shift)
+ ); # does this get us the actual length of that s*ty bar :P ?
+}
+sub sb_length {
+ # unicode cludge, d*mn broken Irssi
+ # screw it, this will fail from broken joining anyway (and cause warnings)
+ my $term_type = 'term_type';
+ if (Irssi::version > 20040819) { # this is probably wrong, but I don't know
+ # when the setting name got changed
+ $term_type = 'term_charset';
+ }
+ #if (lc Irssi::settings_get_str($term_type) eq '8bit'
+ # or Irssi::settings_get_str($term_type) =~ /^iso/i
+ #) {
+ # length(sb_strip(shift))
+ #}
+ #else {
+ my $temp = sb_strip(shift);
+ # try to get the displayed width
+ my $length;
+ eval {
+ require Text::CharWidth;
+ $length = Text::CharWidth::mbswidth($temp);
+ };
+ unless ($@) {
+ return $length;
+ }
+ else {
+ if (lc Irssi::settings_get_str($term_type) eq 'utf-8') {
+ # try to switch on utf8
+ eval {
+ no warnings;
+ require Encode;
+ #$temp = Encode::decode_utf8($temp); # thanks for the hint, but I have my
+ # # reasons for _utf8_on
+ Encode::_utf8_on($temp);
+ };
+ }
+ # there is nothing more I can do
+ length($temp)
+ }
+ #}
+}
+
+# !!! G*DD*MN Irssi is adding an additional layer of backslashitis per { } layer
+# !!! AND I still don't know what I need to escape.
+# !!! and NOONE else seems to know or care either.
+# !!! f*ck open source. I mean it.
+# XXX any Irssi::print debug statement leads to SEGFAULT - why ?
+
+# major parts of the idea by buu (#perl @ freenode)
+# thanks to fxn and Somni for debugging
+# while ($_[0] =~ /(.)/g) {
+# my $c = $1; # XXX sooo... goto kills $1
+# if ($q eq '%') { goto ESC; }
+
+## <freenode:#perl:tybalt89> s/%(.)|(\{)|(\})|(\\|\$)/$1?$1:$2?($level++,$2):$3?($level>$min_level&&$level--,$3):'\\'x(2**$level-1).$4/ge; # untested...
+sub ir_escape {
+ my $min_level = $_[1] || 0; my $level = $min_level;
+ my $o = shift;
+ $o =~ s/
+ ( %. ) | # $1
+ ( \{ ) | # $2
+ ( \} ) | # $3
+ ( \\ ) | # $4
+ ( \$(?=[^\\]) ) | # $5
+ ( \$ ) # $6
+ /
+ if ($1) { $1 } # %. escape
+ elsif ($2) { $level++; $2 } # { nesting start
+ elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
+ elsif ($4) { '\\'x(2**$level) } # \ needs \\escaping
+ elsif ($5) { '\\'x(2**$level-1) . '$' . '\\'x(2**$level-1) } # and $ needs even more because of "parse_special"
+ else { '\\'x(2**$level-1) . '$' } # $ needs \$ escaping
+ /gex;
+ $o
+}
+#sub ir_escape {
+# my $min_level = $_[1] || 0; my $level = $min_level;
+# my $o = shift;
+# $o =~ s/
+# ( %. ) | # $1
+# ( \{ ) | # $2
+# ( \} ) | # $3
+# ( \\ | \$ ) # $4
+# /
+# if ($1) { $1 } # %. escape
+# elsif ($2) { $level++; $2 } # { nesting start
+# elsif ($3) { if ($level > $min_level) { $level--; } $3 } # } nesting end
+# else { '\\'x(2**($level-1)-1) . $4 } # \ or $ needs \\escaping
+# /gex;
+# $o
+#}
+
+sub ir_fe { # try to fix format stuff
+ my $x = shift;
+ # XXX why do I have to use two/four % here instead of one/two ??
+ # answer: you screwed up in ir_escape
+ $x =~ s/([%{}])/%$1/g;
+ #$x =~ s/(\\|\$|[ ])/\\$1/g; # XXX HOW CAN I HANDLE THE SPACES CORRECTLY XXX
+ $x =~ s/(\\|\$)/\\$1/g;
+ #$x =~ s/(\$(?=.))|(\$)/$1?"\\\$\\":"\\\$"/ge; # I think this should be here
+ # # (logic), but it doesn't work
+ # # that way :P
+ #$x =~ s/\\/\\\\/g; # that's right, escape escapes
+ $x
+}
+sub ir_ve { # escapes special vars but leave colours alone
+ my $x = shift;
+ #$x =~ s/([%{}])/%$1/g;
+ $x =~ s/(\\|\$|[ ])/\\$1/g;
+ $x
+}
+
+my %ansi_table;
+{
+ my ($i, $j, $k) = (0, 0, 0);
+ %ansi_table = (
+ # fe-common::core::formats.c:format_expand_styles
+ # do format_backs
+ (map { $_ => $terminfo->setab($i++) } (split //, '01234567' )),
+ # do format_fores
+ (map { $_ => $terminfo->setaf($j++) } (split //, 'krgybmcw' )),
+ # do bold_fores
+ (map { $_ => $terminfo->bold() .
+ $terminfo->setaf($k++) } (split //, 'KRGYBMCW')),
+ # reset
+ #(map { $_ => $terminfo->op() } (split //, 'nN')),
+ (map { $_ => $terminfo->op() } (split //, 'n')),
+ (map { $_ => "\033[0m" } (split //, 'N')), # XXX quick and DIRTY
+ # flash/bright
+ F => $terminfo->blink(),
+ # reverse
+ 8 => $terminfo->rev(),
+ # bold
+ (map { $_ => $terminfo->bold() } (split //, '9_')),
+ # delete other stuff
+ (map { $_ => '' } (split //, ':|>#[')),
+ # escape
+ (map { $_ => $_ } (split //, '{}%')),
+ )
+}
+sub formats_to_ansi_basic {
+ my $o = shift;
+ $o =~ s/(%(.))/exists $ansi_table{$2} ? $ansi_table{$2} : $1/gex;
+ $o
+}
+
+sub lc1459 ($) { my $x = shift; $x =~ y/A-Z][\^/a-z}{|~/; $x }
+Irssi::settings_add_str(setc, 'banned_channels', '');
+Irssi::settings_add_bool(setc, 'banned_channels_on', 0);
+my %banned_channels = map { lc1459($_) => undef }
+split ' ', Irssi::settings_get_str('banned_channels');
+Irssi::settings_add_str(setc, 'fancy_abbrev', 'fancy');
+
+# }}}
+
+# {{{ main
+
+sub remake () {
+ #$callcount++;
+ #my $xx = $callcount; Irssi::print("starting remake [ $xx ]");
+ my ($hilight, $number, $display);
+ my $separator = '{sb_act_sep ' . Irssi::settings_get_str(set 'separator') .
+ '}';
+ my $custSort = Irssi::settings_get_str(set 'sort');
+ my $custSortDir = 1;
+ if ($custSort =~ /^[-!](.*)/) {
+ $custSortDir = -1;
+ $custSort = $1;
+ }
+
+ my @wins =
+ sort {
+ (
+ ( (int($a->{$custSort}) <=> int($b->{$custSort})) * $custSortDir )
+ ||
+ ($a->{'refnum'} <=> $b->{'refnum'})
+ )
+ } Irssi::windows;
+ my $block = Irssi::settings_get_int(set 'block');
+ my $columns = $currentColumns;
+ my $oldActString = $actString if $SCREEN_MODE;
+ $actString = $SCREEN_MODE ? [' A W L'] : [];
+ my $line = $SCREEN_MODE ? 1 : 0;
+ my $width = $SCREEN_MODE
+ ?
+ $screenWidth - abs($block)*$columns + 1
+ :
+ ([Irssi::windows]->[0]{'width'} - sb_length('{sb x}'));
+ my $height = $screenHeight - abs(Irssi::settings_get_int(set
+ 'height_adjust'));
+ my ($numPad, $keyPad) = (0, 0);
+ my %abbrevList;
+ if ($SCREEN_MODE or Irssi::settings_get_bool(set 'sbar_maxlength')
+ or ($block < 0)
+ ) {
+ %abbrevList = ();
+ if (Irssi::settings_get_str('fancy_abbrev') !~ /^(no|off|head)/i) {
+ my @nameList = map { ref $_ ? $_->get_active_name : '' } @wins;
+ for (my $i = 0; $i < @nameList - 1; ++$i) {
+ my ($x, $y) = ($nameList[$i], $nameList[$i + 1]);
+ for ($x, $y) { s/^[+#!=]// }
+ my $res = Algorithm::LCSS::LCSS($x, $y);
+ if (defined $res) {
+ #Irssi::print("common pattern $x $y : $res");
+ #Irssi::print("found at $nameList[$i] ".index($nameList[$i],
+ # $res));
+ $abbrevList{$nameList[$i]} = int (index($nameList[$i], $res) +
+ (length($res) / 2));
+ #Irssi::print("found at ".$nameList[$i+1]." ".index($nameList[$i+1],
+ # $res));
+ $abbrevList{$nameList[$i+1]} = int (index($nameList[$i+1], $res) +
+ (length($res) / 2));
+ }
+ }
+ }
+ if ($SCREEN_MODE or ($block < 0)) {
+ $numPad = length((sort { length($b) <=> length($a) } keys %keymap)[0]);
+ $keyPad = length((sort { length($b) <=> length($a) } values %keymap)[0]);
+ }
+ }
+ if ($SCREEN_MODE) {
+ print STDERR $screenansi->dcs().
+ $terminfo->civis().
+ $terminfo->sc().
+ $screenansi->st();
+ if (@$oldActString < 1) {
+ print STDERR $screenansi->dcs().
+ $terminfo->cup(0, $width).
+ $actString->[0].
+ $terminfo->el().
+ $screenansi->st();
+ }
+ }
+ foreach my $win (@wins) {
+ unless ($SCREEN_MODE) {
+ $actString->[$line] = '' unless defined $actString->[$line]
+ or Irssi::settings_get_bool(set 'all_disable');
+ }
+
+ # all stolen from chanact, what does this code do and why do we need it ?
+ !ref($win) && next;
+
+ my $name = $win->get_active_name;
+ $name = '*' if (Irssi::settings_get_bool('banned_channels_on') and exists
+ $banned_channels{lc1459($name)});
+ $name = $win->{'name'} if $name ne '*' and $win->{'name'} ne ''
+ and Irssi::settings_get_bool(set 'prefer_name');
+ my $active = $win->{'active'};
+ my $colour = $win->{'hilight_color'};
+ if (!defined $colour) { $colour = ''; }
+
+ if ($win->{'data_level'} < Irssi::settings_get_int(set 'hide_data')) {
+ next; } # for Geert
+ if ($win->{'data_level'} == 0) { $hilight = '{sb_act_none '; }
+ elsif ($win->{'data_level'} == 1) { $hilight = '{sb_act_text '; }
+ elsif ($win->{'data_level'} == 2) { $hilight = '{sb_act_msg '; }
+ elsif ($colour ne '') { $hilight = "{sb_act_hilight_color $colour "; }
+ elsif ($win->{'data_level'} == 3) { $hilight = '{sb_act_hilight '; }
+ else { $hilight = '{sb_act_special '; }
+
+ $number = $win->{'refnum'};
+ my @display = ('display_nokey');
+ if (defined $keymap{$number} and $keymap{$number} ne '') {
+ unshift @display, map { (my $cpy = $_) =~ s/_no/_/; $cpy } @display;
+ }
+ if (Irssi::active_win->{'refnum'} == $number) {
+ unshift @display, map { my $cpy = $_; $cpy .= '_active'; $cpy } @display;
+ }
+ #Irssi::print("win $number [@display]: " . join '.', split //, join '<<', map {
+ # Irssi::settings_get_str(set $_) } @display);
+ $display = (grep { $_ }
+ map { Irssi::settings_get_str(set $_) }
+ @display)[0];
+ #Irssi::print("win $number : " . join '.', split //, $display);
+
+ if ($SCREEN_MODE or Irssi::settings_get_bool(set 'sbar_maxlength')
+ or ($block < 0)
+ ) {
+ my $baseLength = sb_length(ir_escape(ir_ve(ir_parse_special_protected(sb_ctfe(
+ '{sb_background}' . expand($display,
+ C => ir_fe('x'),
+ N => $number . (' 'x($numPad - length($number))),
+ Q => ir_fe((' 'x($keyPad - length($keymap{$number}))) . $keymap{$number}),
+ H => $hilight,
+ S => '}{sb_background}'
+ ), 1), $win)))) - 1;
+ my $diff = abs($block) - (length($name) + $baseLength);
+ if ($diff < 0) { # too long
+ if (abs($diff) >= length($name)) { $name = '' } # forget it
+ elsif (abs($diff) + 1 >= length($name)) { $name = substr($name,
+ 0, 1); }
+ else {
+ my $middle = exists $abbrevList{$name} ?
+ (($abbrevList{$name} + (2*(length($name) / 2)))/3) :
+ ((Irssi::settings_get_str('fancy_abbrev') =~ /^head/i) ?
+ length($name) :
+ (length($name) / 2));
+ my $cut = int($middle - (abs($diff) / 2) + .55);
+ $cut = 1 if $cut < 1;
+ $cut = length($name) - abs($diff) - 1 if $cut > (length($name) -
+ abs($diff) - 1);
+ $name = substr($name, 0, $cut) . '~' . substr($name, $cut +
+ abs($diff) + 1);
+ }
+ }
+ elsif ($SCREEN_MODE or ($block < 0)) {
+ $name .= (' ' x $diff);
+ }
+ }
+
+ my $add = ir_ve(ir_parse_special_protected(sb_ctfe('{sb_background}' . expand($display,
+ C => ir_fe($name),
+ N => $number . (' 'x($numPad - length($number))),
+ Q => ir_fe((' 'x($keyPad - length($keymap{$number}))) . $keymap{$number}),
+ H => $hilight,
+ S => '}{sb_background}'
+ ), 1), $win));
+ if ($SCREEN_MODE) {
+ $actString->[$line] = $add;
+ if ((!defined $oldActString->[$line]
+ or $oldActString->[$line] ne $actString->[$line])
+ and
+ $line <= ($columns * $height)
+ ) {
+ print STDERR $screenansi->dcs().
+ $terminfo->cup(($line-1) % $height+1, $width + (
+ abs($block) * int(($line-1) / $height))).
+ formats_to_ansi_basic(sb_expand(ir_escape($actString->[$line]))).
+ #$terminfo->el().
+ $screenansi->st();
+ }
+ $line++;
+ }
+ else {
+ #$temp =~ s/\{\S+?(?:\s(.*?))?\}/$1/g;
+ #$temp =~ s/\\\\\\\\/\\/g; # XXX I'm actually guessing here, someone point me
+ # # XXX to docs please
+ $actString->[$line] = '' unless defined $actString->[$line];
+
+ # XXX how can I check whether the content still fits in the bar? this would
+ # XXX allow awlstatus to reside on a statusbar together with other items...
+ if (sb_length(ir_escape($actString->[$line] . $add)) >= $width) {
+ # XXX doesn't correctly handle utf-8 multibyte ... help !!?
+ $actString->[$line] .= ' ' x ($width - sb_length(ir_escape(
+ $actString->[$line])));
+ $line++;
+ }
+ $actString->[$line] .= $add . $separator;
+ # XXX if I use these prints, output layout gets screwed up... why ?
+ #Irssi::print("line $line: ".$actString->[$line]);
+ #Irssi::print("temp $line: ".$temp);
+ }
+ }
+
+ if ($SCREEN_MODE) {
+ while ($line <= ($columns * $height)) {
+ print STDERR $screenansi->dcs().
+ $terminfo->cup(($line-1) % $height+1, $width + (
+ abs($block) * int(($line-1) / $height))).
+ $terminfo->el().
+ $screenansi->st();
+ $line++;
+ }
+ print STDERR $screenansi->dcs().
+ $terminfo->rc().
+ $terminfo->cnorm().
+ $screenansi->st();
+ }
+ else {
+ # XXX the Irssi::print statements lead to the MOST WEIRD results
+ # e.g.: the loop gets executed TWICE for p > 0 ?!?
+ for (my $p = 0; $p < @$actString; $p++) { # wrap each line in {sb }, escape it
+ my $x = $actString->[$p]; # properly, etc.
+ $x =~ s/\Q$separator\E([ ]*)$/$1/;
+ #Irssi::print("[$p]".'current:'.join'.',split//,sb_strip(ir_escape($x,0)));
+ #Irssi::print("assumed length before:".sb_length(ir_escape($x,0)));
+ $x = "{sb $x}";
+ #Irssi::print("[$p]".'new:'.join'.',split//,sb_expand(ir_escape($x,0)));
+ #Irssi::print("[$p]".'new:'.join'.',split//,ir_escape($x,0));
+ #Irssi::print("assumed length after:".sb_length(ir_escape($x,0)));
+ $x = ir_escape($x);
+ #Irssi::print("[$p]".'REALnew:'.join'.',split//,sb_strip($x));
+ $actString->[$p] = $x;
+ # XXX any Irssi::print debug statement leads to SEGFAULT (sometimes) - why ?
+ }
+ }
+ #Irssi::print("remake [ $xx ] finished");
+}
+
+sub awlHasChanged () {
+ $globTime = undef;
+ my $temp = ($SCREEN_MODE ?
+ "\\\n" . Irssi::settings_get_int(set 'block').
+ Irssi::settings_get_int(set 'height_adjust')
+ : "!\n" . Irssi::settings_get_str(set 'placement').
+ Irssi::settings_get_int(set 'position')).
+ Irssi::settings_get_str(set 'automode');
+ if ($temp ne $resetNeeded) { wlreset(); return; }
+ #Irssi::print("awl has changed, calls to remake so far: $callcount");
+ $needRemake = 1;
+
+ #remake();
+ if (
+ ($SCREEN_MODE and !$DISABLE_SCREEN_TEMP)
+ or
+ ($needRemake and Irssi::settings_get_bool(set 'all_disable'))
+ or
+ (!Irssi::settings_get_bool(set 'all_disable') and $currentLines < 1)
+ ) {
+ $needRemake = undef;
+ remake();
+ }
+
+ unless ($SCREEN_MODE) {
+ # XXX Irssi crashes if I try to do this without timer, why ? What's the minimum
+ # XXX delay I need to use in the timer ?
+ Irssi::timeout_add_once(100, 'syncLines', undef);
+
+ for (keys %statusbars) {
+ Irssi::statusbar_items_redraw(set$_);
+ }
+ }
+ else {
+ Irssi::timeout_add_once(100, 'syncColumns', undef);
+ }
+}
+
+sub eventChanged () { # Implement a change queue/blocker -.-)
+ if (defined $globTime) {
+ Irssi::timeout_remove($globTime);
+ } # delay the update further
+ $globTime = Irssi::timeout_add_once(GLOB_QUEUE_TIMER, 'awlHasChanged', undef);
+}
+
+# }}}
+
+
+# {{{ screen mode
+
+sub screenFullRedraw {
+ my ($window) = @_;
+ if (!ref $window or $window->{'refnum'} == Irssi::active_win->{'refnum'}) {
+ $actString = [];
+ eventChanged();
+ }
+}
+
+sub screenSize { # from nicklist.pl
+ $screenResizing = 1;
+ # fit screen
+ system 'screen -x '.$ENV{'STY'}.' -X fit';
+ # get size
+ my ($row, $col) = split ' ', `stty size`;
+ # set screen width
+ $screenWidth = $col-1;
+ $screenHeight = $row-1;
+
+ # on some recent systems, "screen -X fit; screen -X width -w 50" doesn't work, needs a sleep in between the 2 commands
+ # so we wait a second before setting the width
+ Irssi::timeout_add_once(100, sub {
+ my ($new_irssi_width) = @_;
+ $new_irssi_width -= abs(Irssi::settings_get_int(set
+ 'block'))*$currentColumns - 1;
+ system 'screen -x '.$ENV{'STY'}.' -X width -w ' . $new_irssi_width;
+ # and then we wait another second for the resizing, and then redraw.
+ Irssi::timeout_add_once(10,sub {$screenResizing = 0; screenFullRedraw()}, []);
+ }, $screenWidth);
+}
+
+sub screenOff {
+ my ($unloadMode) = @_;
+ Irssi::signal_remove('gui print text finished' => 'screenFullRedraw');
+ Irssi::signal_remove('gui page scrolled' => 'screenFullRedraw');
+ Irssi::signal_remove('window changed' => 'screenFullRedraw');
+ Irssi::signal_remove('window changed automatic' => 'screenFullRedraw');
+ if ($unloadMode) {
+ Irssi::signal_remove('terminal resized' => 'resizeTerm');
+ }
+ system 'screen -x '.$ENV{'STY'}.' -X fit';
+}
+
+sub syncColumns {
+ return if (@$actString == 0);
+ my $temp = $currentColumns;
+ #Irssi::print("current columns $temp");
+ my $height = $screenHeight - abs(Irssi::settings_get_int(set
+ 'height_adjust'));
+ $currentColumns = int(($#$actString-1) / $height) + 1;
+ #Irssi::print("objects in actstring:".scalar(@$actString).", screen height:".
+ # $height);
+ my $currMaxColumns = Irssi::settings_get_int(set 'columns');
+ if ($currMaxColumns > 0 and $currentColumns > $currMaxColumns) {
+ $currentColumns = $currMaxColumns;
+ }
+ elsif ($currMaxColumns < 0) {
+ $currentColumns = abs($currMaxColumns);
+ }
+ return if ($temp == $currentColumns);
+ screenSize();
+}
+
+#$needRemake = 1;
+sub resizeTerm () {
+ if ($SCREEN_MODE and !$screenResizing) {
+ $screenResizing = 1;
+ Irssi::timeout_add_once(10, 'screenSize', undef);
+ }
+ Irssi::timeout_add_once(100, 'eventChanged', undef);
+}
+
+# }}}
+
+
+# {{{ settings add
+
+Irssi::settings_add_str(setc, set 'display_nokey', '[$N]$H$C$S');
+Irssi::settings_add_str(setc, set 'display_key', '[$Q=$N]$H$C$S');
+Irssi::settings_add_str(setc, set 'display_nokey_active', '');
+Irssi::settings_add_str(setc, set 'display_key_active', '');
+Irssi::settings_add_str(setc, set 'separator', "\\ ");
+Irssi::settings_add_bool(setc, set 'prefer_name', 0);
+Irssi::settings_add_int(setc, set 'hide_data', 0);
+Irssi::settings_add_int(setc, set 'maxlines', 9);
+Irssi::settings_add_int(setc, set 'columns', 1);
+Irssi::settings_add_int(setc, set 'block', 20);
+Irssi::settings_add_bool(setc, set 'sbar_maxlength', 0);
+Irssi::settings_add_int(setc, set 'height_adjust', 2);
+Irssi::settings_add_str(setc, set 'sort', 'refnum');
+Irssi::settings_add_str(setc, set 'placement', 'bottom');
+Irssi::settings_add_int(setc, set 'position', 0);
+Irssi::settings_add_bool(setc, set 'all_disable', 0);
+Irssi::settings_add_str(setc, set 'automode', 'sbar');
+
+# }}}
+
+
+# {{{ init
+
+sub wlreset {
+ $actString = [];
+ $currentLines = 0; # 1; # mhmmmm .. we actually enable one line down there so
+ # let's try this.
+ #update_keymap();
+ killOldStatus();
+ # Register statusbar
+ #add_statusbar(0);
+ #Irssi::command('statusbar wl0 enable');
+ my $was_screen_mode = $SCREEN_MODE;
+ if ($SCREEN_MODE = (Irssi::settings_get_str(set 'automode') =~ /screen/i)
+ and
+ !$was_screen_mode
+ ) {
+ if (!defined $ENV{'STY'}) {
+ Irssi::print('Screen mode can only be used in GNU screen but no '.
+ 'screen was found.', MSGLEVEL_CLIENTERROR);
+ $SCREEN_MODE = undef;
+ }
+ else {
+ Irssi::signal_add_last('gui print text finished' => 'screenFullRedraw');
+ Irssi::signal_add_last('gui page scrolled' => 'screenFullRedraw');
+ Irssi::signal_add('window changed' => 'screenFullRedraw');
+ Irssi::signal_add('window changed automatic' => 'screenFullRedraw');
+ }
+ }
+ elsif ($was_screen_mode and !$SCREEN_MODE) {
+ screenOff();
+ }
+ $resetNeeded = ($SCREEN_MODE ?
+ "\\\n" . Irssi::settings_get_int(set 'block').
+ Irssi::settings_get_int(set 'height_adjust')
+ : "!\n" . Irssi::settings_get_str(set 'placement').
+ Irssi::settings_get_int(set 'position')).
+ Irssi::settings_get_str(set 'automode');
+ resizeTerm();
+}
+
+wlreset();
+
+# }}}
+
+
+# {{{ unload/deinit
+
+my $Unload;
+sub unload ($$$) {
+ $Unload = 1;
+ # pretend we didn't do anything ASAP
+ Irssi::timeout_add_once(10, sub { $Unload = undef; }, undef);
+}
+# last try to catch a sigsegv
+Irssi::signal_add_first('gui exit' => sub { $Unload = undef; });
+sub UNLOAD {
+ # this might well crash Irssi... try /eval /script unload someotherscript ;
+ # /quit (= SEGFAULT !)
+ if ($Unload) {
+ $actString = ['']; # syncLines(); # XXX Irssi crashes when trying to disable
+ killOldStatus(); # XXX all statusbars ?
+ if ($SCREEN_MODE) {
+ screenOff('unload mode');
+ }
+ }
+}
+
+# }}}
+
+
+# {{{ signals
+
+sub addPrintTextHook { # update on print text
+ return if $_[0]->{'level'} == 262144 and $_[0]->{'target'} eq ''
+ and !defined($_[0]->{'server'});
+ if (Irssi::settings_get_str(set 'sort') =~ /^[-!]?last_line$/) {
+ Irssi::timeout_add_once(100, 'eventChanged', undef);
+ }
+}
+
+#sub _x { my ($x, $y) = @_; ($x, sub { Irssi::print('-->signal '.$x); eval "$y();"; }) }
+#sub _x { @_ }
+Irssi::signal_add_first(
+ 'command script unload' => 'unload'
+);
+Irssi::signal_add_last({
+ 'setup changed' => 'eventChanged',
+ 'print text' => 'addPrintTextHook',
+ 'terminal resized' => 'resizeTerm',
+ 'setup reread' => 'wlreset',
+ 'window hilight' => 'eventChanged',
+});
+Irssi::signal_add({
+ 'window created' => 'eventChanged',
+ 'window destroyed' => 'eventChanged',
+ 'window name changed' => 'eventChanged',
+ 'window refnum changed' => 'eventChanged',
+ 'window changed' => 'eventChanged',
+ 'window changed automatic' => 'eventChanged',
+});
+
+#Irssi::signal_add('nick mode changed', 'chanactHasChanged'); # relicts
+
+# }}}
+
+# {{{ commands
+
+
+sub runsub {
+ my ($cmd) = @_;
+ sub {
+ my ($data, $server, $item) = @_;
+ Irssi::command_runsub($cmd, $data, $server, $item);
+ };
+}
+Irssi::command_bind( setc() => runsub(setc()) );
+Irssi::command_bind( setc() . ' paste' => runsub(setc() . ' paste') );
+Irssi::command_bind(
+ setc() . ' paste on' => sub {
+ return unless $SCREEN_MODE;
+ my $was_disabled = $DISABLE_SCREEN_TEMP;
+ $DISABLE_SCREEN_TEMP = 1;
+ Irssi::print('Paste mode is now ON, '.uc(setc()).' is temporarily '.
+ 'disabled.');
+ if (!$was_disabled) {
+ $screenResizing = 1;
+ screenOff();
+ }
+ }
+);
+Irssi::command_bind(
+ setc() . ' paste off' => sub {
+ return unless $SCREEN_MODE;
+ my $was_disabled = $DISABLE_SCREEN_TEMP;
+ $DISABLE_SCREEN_TEMP = undef;
+ Irssi::print('Paste mode is now OFF, '.uc(setc()).' is enabled.');
+ if ($was_disabled) {
+ $SCREEN_MODE = undef;
+ $screenResizing = 0;
+ wlreset();
+ }
+ }
+);
+Irssi::command_bind(
+ setc() . ' paste toggle' => sub {
+ if ($DISABLE_SCREEN_TEMP) {
+ Irssi::command(setc() . ' paste off');
+ }
+ else {
+ Irssi::command(setc() . ' paste on');
+ }
+ }
+);
+Irssi::command_bind(
+ setc() . ' redraw' => sub {
+ return unless $SCREEN_MODE;
+ screenFullRedraw();
+ }
+);
+
+
+# }}}
+
+# {{{ Algorithm::LCSS module
+{
+ package Algorithm::Diff;
+ # Skip to first "=head" line for documentation.
+ use strict;
+
+ use integer; # see below in _replaceNextLargerWith() for mod to make
+ # if you don't use this
+
+ # McIlroy-Hunt diff algorithm
+ # Adapted from the Smalltalk code of Mario I. Wolczko, <mario@wolczko.com>
+ # by Ned Konz, perl@bike-nomad.com
+ # Updates by Tye McQueen, http://perlmonks.org/?node=tye
+
+ # Create a hash that maps each element of $aCollection to the set of
+ # positions it occupies in $aCollection, restricted to the elements
+ # within the range of indexes specified by $start and $end.
+ # The fourth parameter is a subroutine reference that will be called to
+ # generate a string to use as a key.
+ # Additional parameters, if any, will be passed to this subroutine.
+ #
+ # my $hashRef = _withPositionsOfInInterval( \@array, $start, $end, $keyGen );
+
+ sub _withPositionsOfInInterval
+ {
+ my $aCollection = shift; # array ref
+ my $start = shift;
+ my $end = shift;
+ my $keyGen = shift;
+ my %d;
+ my $index;
+ for ( $index = $start ; $index <= $end ; $index++ )
+ {
+ my $element = $aCollection->[$index];
+ my $key = &$keyGen( $element, @_ );
+ if ( exists( $d{$key} ) )
+ {
+ unshift ( @{ $d{$key} }, $index );
+ }
+ else
+ {
+ $d{$key} = [$index];
+ }
+ }
+ return wantarray ? %d : \%d;
+ }
+
+ # Find the place at which aValue would normally be inserted into the
+ # array. If that place is already occupied by aValue, do nothing, and
+ # return undef. If the place does not exist (i.e., it is off the end of
+ # the array), add it to the end, otherwise replace the element at that
+ # point with aValue. It is assumed that the array's values are numeric.
+ # This is where the bulk (75%) of the time is spent in this module, so
+ # try to make it fast!
+
+ sub _replaceNextLargerWith
+ {
+ my ( $array, $aValue, $high ) = @_;
+ $high ||= $#$array;
+
+ # off the end?
+ if ( $high == -1 || $aValue > $array->[-1] )
+ {
+ push ( @$array, $aValue );
+ return $high + 1;
+ }
+
+ # binary search for insertion point...
+ my $low = 0;
+ my $index;
+ my $found;
+ while ( $low <= $high )
+ {
+ $index = ( $high + $low ) / 2;
+
+ # $index = int(( $high + $low ) / 2); # without 'use integer'
+ $found = $array->[$index];
+
+ if ( $aValue == $found )
+ {
+ return undef;
+ }
+ elsif ( $aValue > $found )
+ {
+ $low = $index + 1;
+ }
+ else
+ {
+ $high = $index - 1;
+ }
+ }
+
+ # now insertion point is in $low.
+ $array->[$low] = $aValue; # overwrite next larger
+ return $low;
+ }
+
+ # This method computes the longest common subsequence in $a and $b.
+
+ # Result is array or ref, whose contents is such that
+ # $a->[ $i ] == $b->[ $result[ $i ] ]
+ # foreach $i in ( 0 .. $#result ) if $result[ $i ] is defined.
+
+ # An additional argument may be passed; this is a hash or key generating
+ # function that should return a string that uniquely identifies the given
+ # element. It should be the case that if the key is the same, the elements
+ # will compare the same. If this parameter is undef or missing, the key
+ # will be the element as a string.
+
+ # By default, comparisons will use "eq" and elements will be turned into keys
+ # using the default stringizing operator '""'.
+
+ # Additional parameters, if any, will be passed to the key generation
+ # routine.
+
+ sub _longestCommonSubsequence
+ {
+ my $a = shift; # array ref or hash ref
+ my $b = shift; # array ref or hash ref
+ my $counting = shift; # scalar
+ my $keyGen = shift; # code ref
+ my $compare; # code ref
+
+ if ( ref($a) eq 'HASH' )
+ { # prepared hash must be in $b
+ my $tmp = $b;
+ $b = $a;
+ $a = $tmp;
+ }
+
+ # Check for bogus (non-ref) argument values
+ if ( !ref($a) || !ref($b) )
+ {
+ my @callerInfo = caller(1);
+ die 'error: must pass array or hash references to ' . $callerInfo[3];
+ }
+
+ # set up code refs
+ # Note that these are optimized.
+ if ( !defined($keyGen) ) # optimize for strings
+ {
+ $keyGen = sub { $_[0] };
+ $compare = sub { my ( $a, $b ) = @_; $a eq $b };
+ }
+ else
+ {
+ $compare = sub {
+ my $a = shift;
+ my $b = shift;
+ &$keyGen( $a, @_ ) eq &$keyGen( $b, @_ );
+ };
+ }
+
+ my ( $aStart, $aFinish, $matchVector ) = ( 0, $#$a, [] );
+ my ( $prunedCount, $bMatches ) = ( 0, {} );
+
+ if ( ref($b) eq 'HASH' ) # was $bMatches prepared for us?
+ {
+ $bMatches = $b;
+ }
+ else
+ {
+ my ( $bStart, $bFinish ) = ( 0, $#$b );
+
+ # First we prune off any common elements at the beginning
+ while ( $aStart <= $aFinish
+ and $bStart <= $bFinish
+ and &$compare( $a->[$aStart], $b->[$bStart], @_ ) )
+ {
+ $matchVector->[ $aStart++ ] = $bStart++;
+ $prunedCount++;
+ }
+
+ # now the end
+ while ( $aStart <= $aFinish
+ and $bStart <= $bFinish
+ and &$compare( $a->[$aFinish], $b->[$bFinish], @_ ) )
+ {
+ $matchVector->[ $aFinish-- ] = $bFinish--;
+ $prunedCount++;
+ }
+
+ # Now compute the equivalence classes of positions of elements
+ $bMatches =
+ _withPositionsOfInInterval( $b, $bStart, $bFinish, $keyGen, @_ );
+ }
+ my $thresh = [];
+ my $links = [];
+
+ my ( $i, $ai, $j, $k );
+ for ( $i = $aStart ; $i <= $aFinish ; $i++ )
+ {
+ $ai = &$keyGen( $a->[$i], @_ );
+ if ( exists( $bMatches->{$ai} ) )
+ {
+ $k = 0;
+ for $j ( @{ $bMatches->{$ai} } )
+ {
+
+ # optimization: most of the time this will be true
+ if ( $k and $thresh->[$k] > $j and $thresh->[ $k - 1 ] < $j )
+ {
+ $thresh->[$k] = $j;
+ }
+ else
+ {
+ $k = _replaceNextLargerWith( $thresh, $j, $k );
+ }
+
+ # oddly, it's faster to always test this (CPU cache?).
+ if ( defined($k) )
+ {
+ $links->[$k] =
+ [ ( $k ? $links->[ $k - 1 ] : undef ), $i, $j ];
+ }
+ }
+ }
+ }
+
+ if (@$thresh)
+ {
+ return $prunedCount + @$thresh if $counting;
+ for ( my $link = $links->[$#$thresh] ; $link ; $link = $link->[0] )
+ {
+ $matchVector->[ $link->[1] ] = $link->[2];
+ }
+ }
+ elsif ($counting)
+ {
+ return $prunedCount;
+ }
+
+ return wantarray ? @$matchVector : $matchVector;
+ }
+
+ sub traverse_sequences
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref
+ my $callbacks = shift || {};
+ my $keyGen = shift;
+ my $matchCallback = $callbacks->{'MATCH'} || sub { };
+ my $discardACallback = $callbacks->{'DISCARD_A'} || sub { };
+ my $finishedACallback = $callbacks->{'A_FINISHED'};
+ my $discardBCallback = $callbacks->{'DISCARD_B'} || sub { };
+ my $finishedBCallback = $callbacks->{'B_FINISHED'};
+ my $matchVector = _longestCommonSubsequence( $a, $b, 0, $keyGen, @_ );
+
+ # Process all the lines in @$matchVector
+ my $lastA = $#$a;
+ my $lastB = $#$b;
+ my $bi = 0;
+ my $ai;
+
+ for ( $ai = 0 ; $ai <= $#$matchVector ; $ai++ )
+ {
+ my $bLine = $matchVector->[$ai];
+ if ( defined($bLine) ) # matched
+ {
+ &$discardBCallback( $ai, $bi++, @_ ) while $bi < $bLine;
+ &$matchCallback( $ai, $bi++, @_ );
+ }
+ else
+ {
+ &$discardACallback( $ai, $bi, @_ );
+ }
+ }
+
+ # The last entry (if any) processed was a match.
+ # $ai and $bi point just past the last matching lines in their sequences.
+
+ while ( $ai <= $lastA or $bi <= $lastB )
+ {
+
+ # last A?
+ if ( $ai == $lastA + 1 and $bi <= $lastB )
+ {
+ if ( defined($finishedACallback) )
+ {
+ &$finishedACallback( $lastA, @_ );
+ $finishedACallback = undef;
+ }
+ else
+ {
+ &$discardBCallback( $ai, $bi++, @_ ) while $bi <= $lastB;
+ }
+ }
+
+ # last B?
+ if ( $bi == $lastB + 1 and $ai <= $lastA )
+ {
+ if ( defined($finishedBCallback) )
+ {
+ &$finishedBCallback( $lastB, @_ );
+ $finishedBCallback = undef;
+ }
+ else
+ {
+ &$discardACallback( $ai++, $bi, @_ ) while $ai <= $lastA;
+ }
+ }
+
+ &$discardACallback( $ai++, $bi, @_ ) if $ai <= $lastA;
+ &$discardBCallback( $ai, $bi++, @_ ) if $bi <= $lastB;
+ }
+
+ return 1;
+ }
+
+ sub traverse_balanced
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref
+ my $callbacks = shift || {};
+ my $keyGen = shift;
+ my $matchCallback = $callbacks->{'MATCH'} || sub { };
+ my $discardACallback = $callbacks->{'DISCARD_A'} || sub { };
+ my $discardBCallback = $callbacks->{'DISCARD_B'} || sub { };
+ my $changeCallback = $callbacks->{'CHANGE'};
+ my $matchVector = _longestCommonSubsequence( $a, $b, 0, $keyGen, @_ );
+
+ # Process all the lines in match vector
+ my $lastA = $#$a;
+ my $lastB = $#$b;
+ my $bi = 0;
+ my $ai = 0;
+ my $ma = -1;
+ my $mb;
+
+ while (1)
+ {
+
+ # Find next match indices $ma and $mb
+ do {
+ $ma++;
+ } while(
+ $ma <= $#$matchVector
+ && !defined $matchVector->[$ma]
+ );
+
+ last if $ma > $#$matchVector; # end of matchVector?
+ $mb = $matchVector->[$ma];
+
+ # Proceed with discard a/b or change events until
+ # next match
+ while ( $ai < $ma || $bi < $mb )
+ {
+
+ if ( $ai < $ma && $bi < $mb )
+ {
+
+ # Change
+ if ( defined $changeCallback )
+ {
+ &$changeCallback( $ai++, $bi++, @_ );
+ }
+ else
+ {
+ &$discardACallback( $ai++, $bi, @_ );
+ &$discardBCallback( $ai, $bi++, @_ );
+ }
+ }
+ elsif ( $ai < $ma )
+ {
+ &$discardACallback( $ai++, $bi, @_ );
+ }
+ else
+ {
+
+ # $bi < $mb
+ &$discardBCallback( $ai, $bi++, @_ );
+ }
+ }
+
+ # Match
+ &$matchCallback( $ai++, $bi++, @_ );
+ }
+
+ while ( $ai <= $lastA || $bi <= $lastB )
+ {
+ if ( $ai <= $lastA && $bi <= $lastB )
+ {
+
+ # Change
+ if ( defined $changeCallback )
+ {
+ &$changeCallback( $ai++, $bi++, @_ );
+ }
+ else
+ {
+ &$discardACallback( $ai++, $bi, @_ );
+ &$discardBCallback( $ai, $bi++, @_ );
+ }
+ }
+ elsif ( $ai <= $lastA )
+ {
+ &$discardACallback( $ai++, $bi, @_ );
+ }
+ else
+ {
+
+ # $bi <= $lastB
+ &$discardBCallback( $ai, $bi++, @_ );
+ }
+ }
+
+ return 1;
+ }
+
+ sub prepare
+ {
+ my $a = shift; # array ref
+ my $keyGen = shift; # code ref
+
+ # set up code ref
+ $keyGen = sub { $_[0] } unless defined($keyGen);
+
+ return scalar _withPositionsOfInInterval( $a, 0, $#$a, $keyGen, @_ );
+ }
+
+ sub LCS
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref or hash ref
+ my $matchVector = _longestCommonSubsequence( $a, $b, 0, @_ );
+ my @retval;
+ my $i;
+ for ( $i = 0 ; $i <= $#$matchVector ; $i++ )
+ {
+ if ( defined( $matchVector->[$i] ) )
+ {
+ push ( @retval, $a->[$i] );
+ }
+ }
+ return wantarray ? @retval : \@retval;
+ }
+
+ sub LCS_length
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref or hash ref
+ return _longestCommonSubsequence( $a, $b, 1, @_ );
+ }
+
+ sub LCSidx
+ {
+ my $a= shift @_;
+ my $b= shift @_;
+ my $match= _longestCommonSubsequence( $a, $b, 0, @_ );
+ my @am= grep defined $match->[$_], 0..$#$match;
+ my @bm= @{$match}[@am];
+ return \@am, \@bm;
+ }
+
+ sub compact_diff
+ {
+ my $a= shift @_;
+ my $b= shift @_;
+ my( $am, $bm )= LCSidx( $a, $b, @_ );
+ my @cdiff;
+ my( $ai, $bi )= ( 0, 0 );
+ push @cdiff, $ai, $bi;
+ while( 1 ) {
+ while( @$am && $ai == $am->[0] && $bi == $bm->[0] ) {
+ shift @$am;
+ shift @$bm;
+ ++$ai, ++$bi;
+ }
+ push @cdiff, $ai, $bi;
+ last if ! @$am;
+ $ai = $am->[0];
+ $bi = $bm->[0];
+ push @cdiff, $ai, $bi;
+ }
+ push @cdiff, 0+@$a, 0+@$b
+ if $ai < @$a || $bi < @$b;
+ return wantarray ? @cdiff : \@cdiff;
+ }
+
+ sub diff
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref
+ my $retval = [];
+ my $hunk = [];
+ my $discard = sub {
+ push @$hunk, [ '-', $_[0], $a->[ $_[0] ] ];
+ };
+ my $add = sub {
+ push @$hunk, [ '+', $_[1], $b->[ $_[1] ] ];
+ };
+ my $match = sub {
+ push @$retval, $hunk
+ if 0 < @$hunk;
+ $hunk = []
+ };
+ traverse_sequences( $a, $b,
+ { MATCH => $match, DISCARD_A => $discard, DISCARD_B => $add }, @_ );
+ &$match();
+ return wantarray ? @$retval : $retval;
+ }
+
+ sub sdiff
+ {
+ my $a = shift; # array ref
+ my $b = shift; # array ref
+ my $retval = [];
+ my $discard = sub { push ( @$retval, [ '-', $a->[ $_[0] ], "" ] ) };
+ my $add = sub { push ( @$retval, [ '+', "", $b->[ $_[1] ] ] ) };
+ my $change = sub {
+ push ( @$retval, [ 'c', $a->[ $_[0] ], $b->[ $_[1] ] ] );
+ };
+ my $match = sub {
+ push ( @$retval, [ 'u', $a->[ $_[0] ], $b->[ $_[1] ] ] );
+ };
+ traverse_balanced(
+ $a,
+ $b,
+ {
+ MATCH => $match,
+ DISCARD_A => $discard,
+ DISCARD_B => $add,
+ CHANGE => $change,
+ },
+ @_
+ );
+ return wantarray ? @$retval : $retval;
+ }
+
+ ########################################
+ my $Root= __PACKAGE__;
+ package Algorithm::Diff::_impl;
+ use strict;
+
+ sub _Idx() { 0 } # $me->[_Idx]: Ref to array of hunk indices
+ # 1 # $me->[1]: Ref to first sequence
+ # 2 # $me->[2]: Ref to second sequence
+ sub _End() { 3 } # $me->[_End]: Diff between forward and reverse pos
+ sub _Same() { 4 } # $me->[_Same]: 1 if pos 1 contains unchanged items
+ sub _Base() { 5 } # $me->[_Base]: Added to range's min and max
+ sub _Pos() { 6 } # $me->[_Pos]: Which hunk is currently selected
+ sub _Off() { 7 } # $me->[_Off]: Offset into _Idx for current position
+ sub _Min() { -2 } # Added to _Off to get min instead of max+1
+
+ sub Die
+ {
+ require Carp;
+ Carp::confess( @_ );
+ }
+
+ sub _ChkPos
+ {
+ my( $me )= @_;
+ return if $me->[_Pos];
+ my $meth= ( caller(1) )[3];
+ Die( "Called $meth on 'reset' object" );
+ }
+
+ sub _ChkSeq
+ {
+ my( $me, $seq )= @_;
+ return $seq + $me->[_Off]
+ if 1 == $seq || 2 == $seq;
+ my $meth= ( caller(1) )[3];
+ Die( "$meth: Invalid sequence number ($seq); must be 1 or 2" );
+ }
+
+ sub getObjPkg
+ {
+ my( $us )= @_;
+ return ref $us if ref $us;
+ return $us . "::_obj";
+ }
+
+ sub new
+ {
+ my( $us, $seq1, $seq2, $opts ) = @_;
+ my @args;
+ for( $opts->{keyGen} ) {
+ push @args, $_ if $_;
+ }
+ for( $opts->{keyGenArgs} ) {
+ push @args, @$_ if $_;
+ }
+ my $cdif= Algorithm::Diff::compact_diff( $seq1, $seq2, @args );
+ my $same= 1;
+ if( 0 == $cdif->[2] && 0 == $cdif->[3] ) {
+ $same= 0;
+ splice @$cdif, 0, 2;
+ }
+ my @obj= ( $cdif, $seq1, $seq2 );
+ $obj[_End] = (1+@$cdif)/2;
+ $obj[_Same] = $same;
+ $obj[_Base] = 0;
+ my $me = bless \@obj, $us->getObjPkg();
+ $me->Reset( 0 );
+ return $me;
+ }
+
+ sub Reset
+ {
+ my( $me, $pos )= @_;
+ $pos= int( $pos || 0 );
+ $pos += $me->[_End]
+ if $pos < 0;
+ $pos= 0
+ if $pos < 0 || $me->[_End] <= $pos;
+ $me->[_Pos]= $pos || !1;
+ $me->[_Off]= 2*$pos - 1;
+ return $me;
+ }
+
+ sub Base
+ {
+ my( $me, $base )= @_;
+ my $oldBase= $me->[_Base];
+ $me->[_Base]= 0+$base if defined $base;
+ return $oldBase;
+ }
+
+ sub Copy
+ {
+ my( $me, $pos, $base )= @_;
+ my @obj= @$me;
+ my $you= bless \@obj, ref($me);
+ $you->Reset( $pos ) if defined $pos;
+ $you->Base( $base );
+ return $you;
+ }
+
+ sub Next {
+ my( $me, $steps )= @_;
+ $steps= 1 if ! defined $steps;
+ if( $steps ) {
+ my $pos= $me->[_Pos];
+ my $new= $pos + $steps;
+ $new= 0 if $pos && $new < 0;
+ $me->Reset( $new )
+ }
+ return $me->[_Pos];
+ }
+
+ sub Prev {
+ my( $me, $steps )= @_;
+ $steps= 1 if ! defined $steps;
+ my $pos= $me->Next(-$steps);
+ $pos -= $me->[_End] if $pos;
+ return $pos;
+ }
+
+ sub Diff {
+ my( $me )= @_;
+ $me->_ChkPos();
+ return 0 if $me->[_Same] == ( 1 & $me->[_Pos] );
+ my $ret= 0;
+ my $off= $me->[_Off];
+ for my $seq ( 1, 2 ) {
+ $ret |= $seq
+ if $me->[_Idx][ $off + $seq + _Min ]
+ < $me->[_Idx][ $off + $seq ];
+ }
+ return $ret;
+ }
+
+ sub Min {
+ my( $me, $seq, $base )= @_;
+ $me->_ChkPos();
+ my $off= $me->_ChkSeq($seq);
+ $base= $me->[_Base] if !defined $base;
+ return $base + $me->[_Idx][ $off + _Min ];
+ }
+
+ sub Max {
+ my( $me, $seq, $base )= @_;
+ $me->_ChkPos();
+ my $off= $me->_ChkSeq($seq);
+ $base= $me->[_Base] if !defined $base;
+ return $base + $me->[_Idx][ $off ] -1;
+ }
+
+ sub Range {
+ my( $me, $seq, $base )= @_;
+ $me->_ChkPos();
+ my $off = $me->_ChkSeq($seq);
+ if( !wantarray ) {
+ return $me->[_Idx][ $off ]
+ - $me->[_Idx][ $off + _Min ];
+ }
+ $base= $me->[_Base] if !defined $base;
+ return ( $base + $me->[_Idx][ $off + _Min ] )
+ .. ( $base + $me->[_Idx][ $off ] - 1 );
+ }
+
+ sub Items {
+ my( $me, $seq )= @_;
+ $me->_ChkPos();
+ my $off = $me->_ChkSeq($seq);
+ if( !wantarray ) {
+ return $me->[_Idx][ $off ]
+ - $me->[_Idx][ $off + _Min ];
+ }
+ return
+ @{$me->[$seq]}[
+ $me->[_Idx][ $off + _Min ]
+ .. ( $me->[_Idx][ $off ] - 1 )
+ ];
+ }
+
+ sub Same {
+ my( $me )= @_;
+ $me->_ChkPos();
+ return wantarray ? () : 0
+ if $me->[_Same] != ( 1 & $me->[_Pos] );
+ return $me->Items(1);
+ }
+
+ my %getName;
+ %getName= (
+ same => \&Same,
+ diff => \&Diff,
+ base => \&Base,
+ min => \&Min,
+ max => \&Max,
+ range=> \&Range,
+ items=> \&Items, # same thing
+ );
+
+ sub Get
+ {
+ my $me= shift @_;
+ $me->_ChkPos();
+ my @value;
+ for my $arg ( @_ ) {
+ for my $word ( split ' ', $arg ) {
+ my $meth;
+ if( $word !~ /^(-?\d+)?([a-zA-Z]+)([12])?$/
+ || not $meth= $getName{ lc $2 }
+ ) {
+ Die( $Root, ", Get: Invalid request ($word)" );
+ }
+ my( $base, $name, $seq )= ( $1, $2, $3 );
+ push @value, scalar(
+ 4 == length($name)
+ ? $meth->( $me )
+ : $meth->( $me, $seq, $base )
+ );
+ }
+ }
+ if( wantarray ) {
+ return @value;
+ } elsif( 1 == @value ) {
+ return $value[0];
+ }
+ Die( 0+@value, " values requested from ",
+ $Root, "'s Get in scalar context" );
+ }
+
+
+ my $Obj= getObjPkg($Root);
+ no strict 'refs';
+
+ for my $meth ( qw( new getObjPkg ) ) {
+ *{$Root."::".$meth} = \&{$meth};
+ *{$Obj ."::".$meth} = \&{$meth};
+ }
+ for my $meth ( qw(
+ Next Prev Reset Copy Base Diff
+ Same Items Range Min Max Get
+ _ChkPos _ChkSeq
+ ) ) {
+ *{$Obj."::".$meth} = \&{$meth};
+ }
+
+};
+{
+ package Algorithm::LCSS;
+
+ use strict;
+ {
+ no strict 'refs';
+ *traverse_sequences = \&Algorithm::Diff::traverse_sequences;
+ }
+
+ sub _tokenize { [split //, $_[0]] }
+
+ sub CSS {
+ my $is_array = ref $_[0] eq 'ARRAY' ? 1 : 0;
+ my ( $seq1, $seq2, @match, $from_match );
+ my $i = 0;
+ if ( $is_array ) {
+ $seq1 = $_[0];
+ $seq2 = $_[1];
+ traverse_sequences( $seq1, $seq2, {
+ MATCH => sub { push @{$match[$i]}, $seq1->[$_[0]]; $from_match = 1 },
+ DISCARD_A => sub { do{$i++; $from_match = 0} if $from_match },
+ DISCARD_B => sub { do{$i++; $from_match = 0} if $from_match },
+ });
+ }
+ else {
+ $seq1 = _tokenize($_[0]);
+ $seq2 = _tokenize($_[1]);
+ traverse_sequences( $seq1, $seq2, {
+ MATCH => sub { $match[$i] .= $seq1->[$_[0]]; $from_match = 1 },
+ DISCARD_A => sub { do{$i++; $from_match = 0} if $from_match },
+ DISCARD_B => sub { do{$i++; $from_match = 0} if $from_match },
+ });
+ }
+ return \@match;
+ }
+
+ sub CSS_Sorted {
+ my $match = CSS(@_);
+ if ( ref $_[0] eq 'ARRAY' ) {
+ @$match = map{$_->[0]}sort{$b->[1]<=>$a->[1]}map{[$_,scalar(@$_)]}@$match
+ }
+ else {
+ @$match = map{$_->[0]}sort{$b->[1]<=>$a->[1]}map{[$_,length($_)]}@$match
+ }
+ return $match;
+ }
+
+ sub LCSS {
+ my $is_array = ref $_[0] eq 'ARRAY' ? 1 : 0;
+ my $css = CSS(@_);
+ my $index;
+ my $length = 0;
+ if ( $is_array ) {
+ for( my $i = 0; $i < @$css; $i++ ) {
+ next unless @{$css->[$i]}>$length;
+ $index = $i;
+ $length = @{$css->[$i]};
+ }
+ }
+ else {
+ for( my $i = 0; $i < @$css; $i++ ) {
+ next unless length($css->[$i])>$length;
+ $index = $i;
+ $length = length($css->[$i]);
+ }
+ }
+ return $css->[$index];
+ }
+
+};
+# }}}
+#{{{ Class::Classless module
+{
+ package Class::Classless;
+ use strict;
+ use vars qw(@ISA);
+ use Carp;
+
+ @ISA = ();
+
+ ###########################################################################
+
+ @Class::Classless::X::ISA = ();
+
+ ###########################################################################
+ ###########################################################################
+
+ sub Class::Classless::X::AUTOLOAD {
+ # This's the big dispatcher.
+
+ my $it = shift @_;
+ my $m = ($Class::Classless::X::AUTOLOAD =~ m/([^:]+)$/s )
+ ? $1 : $Class::Classless::X::AUTOLOAD;
+
+ croak "Can't call Class::Classless methods (like $m) without an object"
+ unless ref $it; # sanity, basically.
+
+ my $prevstate;
+ $prevstate = ${shift @_}
+ if scalar(@_) && defined($_[0]) &&
+ ref($_[0]) eq 'Class::Classless::CALLSTATE::SHIMMY'
+ ; # A shim! we were called via $callstate->NEXT
+
+ my $no_fail = $prevstate ? $prevstate->[3] : undef;
+ my $i = $prevstate ? ($prevstate->[1] + 1) : 0;
+ # where to start scanning
+ my $lineage;
+
+ # Get the linearization of the ISA tree
+ if($prevstate) {
+ $lineage = $prevstate->[2];
+ } elsif(defined $it->{'ISA_CACHE'} and ref $it->{'ISA_CACHE'} ){
+ $lineage = $it->{'ISA_CACHE'};
+ } else {
+ $lineage = [ &Class::Classless::X::ISA_TREE($it) ];
+ }
+
+ # Was:
+ #my @lineage =
+ # $prevstate ? @{$prevstate->[2]}
+ # : &Class::Classless::X::ISA_TREE($it);
+ # # Get the linearization of the ISA tree
+ # # ISA-memoization happens in the ISA_TREE function.
+
+ for(; $i < @$lineage; ++$i) {
+
+ if( !defined($no_fail) and exists($lineage->[$i]{'NO_FAIL'}) ) {
+ $no_fail = ($lineage->[$i]{'NO_FAIL'} || 0);
+ # so the first NO_FAIL sets it
+ }
+
+ if( ref($lineage->[$i]{'METHODS'} || 0) # sanity
+ && exists($lineage->[$i]{'METHODS'}{$m})
+ ){
+ # We found what we were after. Now see what to do with it.
+ my $v = $lineage->[$i]{'METHODS'}{$m};
+ return $v unless defined $v and ref $v;
+
+ if(ref($v) eq 'CODE') { # normal case, I expect!
+ # Used to have copying of the arglist here.
+ # But it was apparently useless, so I deleted it
+ unshift @_,
+ $it, # $_[0] -- target object
+ # a NEW callstate
+ bless([$m, $i, $lineage, $no_fail, $prevstate ? 1 : 0],
+ 'Class::Classless::CALLSTATE'
+ ), # $_[1] -- the callstate
+ ;
+ goto &{ $v }; # yes, magic goto! bimskalabim!
+ }
+ return @$v if ref($v) eq '_deref_array';
+ return $$v if ref($v) eq '_deref_scalar';
+ return $v; # fallthru
+ }
+ }
+
+ if($m eq 'DESTROY') { # mitigate DESTROY-lookup failure at global destruction
+ # should be impossible
+ } else {
+ if($no_fail || 0) {
+ return;
+ }
+ croak "Can't find ", $prevstate ? 'NEXT method' : 'method',
+ " $m in ", $it->{'NAME'} || $it,
+ " or any ancestors\n";
+ }
+ }
+
+ ###########################################################################
+ ###########################################################################
+
+ sub Class::Classless::X::DESTROY {
+ # noop
+ }
+
+ ###########################################################################
+ sub Class::Classless::X::ISA_TREE {
+ # The linearizer!
+ # Returns the search path for $_[0], starting with $_[0]
+ # Possibly memoized.
+
+ # I stopped being able to understand this algorithm about five
+ # minutes after I wrote it.
+ use strict;
+
+ my $set_cache = 0; # flag to set the cache on the way out
+
+ if(exists($_[0]{'ISA_CACHE'})) {
+ return @{$_[0]{'ISA_CACHE'}}
+ if defined $_[0]{'ISA_CACHE'}
+ and ref $_[0]{'ISA_CACHE'};
+
+ # Otherwise, if exists but is not a ref, it's a signal that it should
+ # be replaced at the earliest, with a listref
+ $set_cache = 1;
+ }
+
+ my $has_mi = 0; # set to 0 on the first node we see with 2 parents!
+ # First, just figure out what's in the tree.
+ my %last_child = ($_[0] => 1); # as if already seen
+
+ # if $last_child{$x} == $y, that means:
+ # 1) incidentally, we've passed the node $x before.
+ # 2) $x is the last child of $y,
+ # so that means that $y can be pushed to the stack only after
+ # we've pushed $x to the stack.
+
+ my @tree_nodes;
+ {
+ my $current;
+ my @in_stack = ($_[0]);
+ while(@in_stack) {
+ next unless
+ defined($current = shift @in_stack)
+ && ref($current) # sanity
+ && ref($current->{'PARENTS'} || 0) # sanity
+ ;
+
+ push @tree_nodes, $current;
+
+ $has_mi = 1 if @{$current->{'PARENTS'}} > 1;
+ unshift
+ @in_stack,
+ map {
+ if(exists $last_child{$_}) { # seen before!
+ $last_child{$_} = $current;
+ (); # seen -- don't re-explore
+ } else { # first time seen
+ $last_child{$_} = $current;
+ $_; # first time seen -- explore now
+ }
+ }
+ @{$current->{'PARENTS'}}
+ ;
+ }
+
+ # If there was no MI, then that first scan was sufficient.
+ unless($has_mi) {
+ $_[0]{'ISA_CACHE'} = \@tree_nodes if $set_cache;
+ return @tree_nodes;
+ }
+
+ # Otherwise, toss this list and rescan, consulting %last_child
+ }
+
+ # $last_child{$parent} holds the last (or only) child of $parent
+ # in this tree. When walking the tree this time, only that
+ # child is authorized to put its parent on the @in_stack.
+ # And that's the only way a node can get added to @in_stack,
+ # except for $_[0] (the start node) being there at the beginning.
+
+ # Now, walk again, but this time exploring parents the LAST
+ # time seen in the tree, not the first.
+
+ my @out;
+ {
+ my $current;
+ my @in_stack = ($_[0]);
+ while(@in_stack) {
+ next unless defined($current = shift @in_stack) && ref($current);
+ push @out, $current; # finally.
+ unshift
+ @in_stack,
+ grep(
+ (
+ defined($_) # sanity
+ && ref($_) # sanity
+ && $last_child{$_} eq $current,
+ ),
+ # I'm lastborn (or onlyborn) of this parent
+ # so it's OK to explore now
+ @{$current->{'PARENTS'}}
+ )
+ if ref($current->{'PARENTS'} || 0) # sanity
+ ;
+ }
+
+ unless(scalar(@out) == scalar(keys(%last_child))) {
+ # the counts should be equal
+ my %good_ones;
+ @good_ones{@out} = ();
+ croak
+ "ISA tree for " .
+ ($_[0]{'NAME'} || $_[0]) .
+ " is apparently cyclic, probably involving the nodes " .
+ nodelist( grep { ref($_) && !exists $good_ones{$_} }
+ values(%last_child) )
+ . "\n";
+ }
+ }
+ #print "Contents of out: ", nodelist(@out), "\n";
+
+ $_[0]{'ISA_CACHE'} = \@out if $set_cache;
+ return @out;
+ }
+
+ ###########################################################################
+
+ sub Class::Classless::X::can { # NOT like UNIVERSAL::can ...
+ # return 1 if $it is capable of the method given -- otherwise 0
+ my($it, $m) = @_[0,1];
+ return undef unless ref $it;
+
+ croak "undef is not a valid method name" unless defined($m);
+ croak "null-string is not a valid method name" unless length($m);
+
+ foreach my $o (&Class::Classless::X::ISA_TREE($it)) {
+ return 1
+ if ref($o->{'METHODS'} || 0) # sanity
+ && exists $o->{'METHODS'}{$m};
+ }
+
+ return 0;
+ }
+
+
+ ###########################################################################
+
+ sub Class::Classless::X::isa { # Like UNIVERSAL::isa
+ # Returns true for $X->isa($Y) iff $Y is $X or is an ancestor of $X.
+
+ return unless ref($_[0]) && ref($_[1]);
+ return scalar(grep {$_ eq $_[1]} &Class::Classless::X::ISA_TREE($_[0]));
+ }
+
+ ###########################################################################
+
+ sub nodelist { join ', ', map { "" . ($_->{'NAME'} || $_) . ""} @_ }
+
+ ###########################################################################
+ ###########################################################################
+ ###########################################################################
+ # Methods for the CALLSTATE class.
+ # Basically, CALLSTATE objects represent the state of the dispatcher,
+ # frozen at the moment when the method call was dispatched to the
+ # appropriate sub.
+ # In the grand scheme of things, this needn't be a class -- I could
+ # have just made the callstate data-object be a hash with documented
+ # keys, or a closure that responded to only certain parameters,
+ # etc. But I like it this way. And I like being able to say simply
+ # $cs->NEXT
+ # Yes, these are a bit cryptically written, but it's behoovy for
+ # them to be very very efficient.
+
+ @Class::Classless::ISA = ();
+ sub Class::Classless::CALLSTATE::found_name { $_[0][0] }
+ # the method name called and found
+ sub Class::Classless::CALLSTATE::found_depth { $_[0][1] }
+ # my depth in the lineage
+ sub Class::Classless::CALLSTATE::lineage { @{$_[0][2]} }
+ # my lineage
+ sub Class::Classless::CALLSTATE::target { $_[0][2][ 0 ] }
+ # the object that's the target -- same as $_[0] for the method called
+ sub Class::Classless::CALLSTATE::home { $_[0][2][ $_[0][1] ] }
+ # the object I was found in
+ sub Class::Classless::CALLSTATE::sub_found {
+ $_[0][2][ $_[0][1] ]{'METHODS'}{ $_[0][0] }
+ } # the routine called
+
+ sub Class::Classless::CALLSTATE::no_fail { $_[0][3] }
+ sub Class::Classless::CALLSTATE::set_no_fail_true { $_[0][3] = 1 }
+ sub Class::Classless::CALLSTATE::set_fail_false { $_[0][3] = 0 }
+ sub Class::Classless::CALLSTATE::set_fail_undef { $_[0][3] = undef }
+
+ sub Class::Classless::CALLSTATE::via_next { $_[0][4] }
+
+ sub Class::Classless::CALLSTATE::NEXT {
+ #croak "NEXT needs at least one argument: \$cs->NEXT('method'...)"
+ # unless @_ > 1;
+ # no longer true.
+ my $cs = shift @_;
+ my $m = shift @_; # which may be (or come out) undef...
+ $m = $cs->[0] unless defined $m; # the method name called and found
+
+ ($cs->[2][0])->$m(
+ bless( \$cs, 'Class::Classless::CALLSTATE::SHIMMY' ),
+ @_
+ );
+ }
+
+ ###########################################################################
+};
+#}}}
+
+###############
+###
+#
+# {{{ *** C h a n g e l o g ***
+#
+# 0.6ca
+# - add screen support (from nicklist.pl)
+# - rename to adv_windowlist.pl (advanced window list) since it isn't just a
+# window list status bar (wlstat) anymore
+# - names can now have a max length and window names can be used
+# - fixed a bug with block display in screen mode and statusbar mode
+# - added space handling to ir_fe and removed it again
+# - now handling formats on my own
+# - added warning about missing sb_act_none abstract leading to
+# - display*active settings
+# - added warning about the bug in awl_display_(no)key_active settings
+#
+# 0.5d
+# - add setting to also hide the last statusbar if empty (awl_all_disable)
+# - reverted to old utf8 code to also calculate broken utf8 length correctly
+# - simplified dealing with statusbars in wlreset
+# - added a little tweak for the renamed term_type somewhere after Irssi 0.8.9
+# - fixed bug in handling channel #$$
+# - typo on line 200 spotted by f0rked
+# - reset background colour at the beginning of an entry
+#
+# 0.4d
+# - fixed order of disabling statusbars
+# - several attempts at special chars, without any real success
+# and much more weird new bugs caused by this
+# - setting to specify sort order
+# - reduced timeout values
+# - added awl_hide_data for Geert Hauwaerts ( geert@irssi.org ) :)
+# - make it so the dynamic sub is actually deleted
+# - fix a bug with removing of the last separator
+# - take into consideration parse_special
+#
+# 0.3b
+# - automatically kill old statusbars
+# - reset on /reload
+# - position/placement settings
+#
+# 0.2
+# - automated retrieval of key bindings (thanks grep.pl authors)
+# - improved removing of statusbars
+# - got rid of status chop
+#
+# 0.1
+# - rewritten to suit my needs
+# - based on chanact 0.5.5
+# }}}
+# vim: se fdm=marker tw=80 :
diff --git a/irssi/scripts/autorun/hilightwin.pl b/irssi/scripts/autorun/hilightwin.pl
new file mode 100644
index 0000000..f7af8a7
--- /dev/null
+++ b/irssi/scripts/autorun/hilightwin.pl
@@ -0,0 +1,57 @@
+#
+# Print hilighted messages & private messages to window named "hilight" for
+# irssi 0.7.99 by Timo Sirainen
+#
+# Modded a tiny bit by znx to stop private messages entering the hilighted
+# window (can be toggled) and to put up a timestamp.
+#
+
+use Irssi;
+use POSIX;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = "0.02";
+%IRSSI = (
+ authors => "Timo \'cras\' Sirainen, Mark \'znx\' Sangster",
+ contact => "tss\@iki.fi, znxster\@gmail.com",
+ name => "hilightwin",
+ description => "Print hilighted messages to window named \"hilight\"",
+ license => "Public Domain",
+ url => "http://irssi.org/",
+ changed => "Sun May 25 18:59:57 BST 2008"
+);
+
+sub sig_printtext {
+ my ($dest, $text, $stripped) = @_;
+
+ my $opt = MSGLEVEL_HILIGHT;
+
+ if(Irssi::settings_get_bool('hilightwin_showprivmsg')) {
+ $opt = MSGLEVEL_HILIGHT|MSGLEVEL_MSGS;
+ }
+
+ if(
+ ($dest->{level} & ($opt)) &&
+ ($dest->{level} & MSGLEVEL_NOHILIGHT) == 0
+ ) {
+ $window = Irssi::window_find_name('hilight');
+
+ if ($dest->{level} & MSGLEVEL_PUBLIC) {
+ $text = $dest->{target}.": ".$text;
+ }
+ $text = strftime(
+ Irssi::settings_get_str('timestamp_format')." ",
+ localtime
+ ).$text;
+ $window->print($text, MSGLEVEL_NEVER) if ($window);
+ }
+}
+
+$window = Irssi::window_find_name('hilight');
+Irssi::print("Create a window named 'hilight'") if (!$window);
+
+Irssi::settings_add_bool('hilightwin','hilightwin_showprivmsg',1);
+
+Irssi::signal_add('print text', 'sig_printtext');
+
+# vim:set ts=4 sw=4 et:
diff --git a/irssi/scripts/autorun/nickcolor.pl b/irssi/scripts/autorun/nickcolor.pl
new file mode 100644
index 0000000..4f661e3
--- /dev/null
+++ b/irssi/scripts/autorun/nickcolor.pl
@@ -0,0 +1,153 @@
+use strict;
+use Irssi 20020101.0250 ();
+use vars qw($VERSION %IRSSI);
+$VERSION = "1.2";
+%IRSSI = (
+authors => "Timo Sirainen, Ian Peters, modified by Daniele Sluijters, Edwin \"Dutchy\" Smulders",
+contact => "tss\@iki.fi, mail\@dutchy.org",
+name => "Nick Color",
+description => "assign a different color for each nick",
+license => "Public Domain",
+url => "https://github.com/Dutchy-/irssi-nickcolor",
+changed => "2012-04-23T15:17+0100"
+);
+# hm.. i should make it possible to use the existing one..
+Irssi::theme_register([
+'pubmsg_hilight', '{pubmsghinick $0 $3 $1}$2'
+]);
+my %saved_colors;
+my %session_colors = {};
+my @colors = qw/2 3 4 5 6 7 9 10 11 12 13/;
+sub load_colors {
+open COLORS, "$ENV{HOME}/.irssi/saved_colors";
+while (<COLORS>) {
+# I don't know why this is necessary only inside of irssi
+my @lines = split "\n";
+foreach my $line (@lines) {
+my($nick, $color) = split ":", $line;
+$saved_colors{$nick} = $color;
+}
+}
+close COLORS;
+}
+sub save_colors {
+open COLORS, ">$ENV{HOME}/.irssi/saved_colors";
+foreach my $nick (keys %saved_colors) {
+print COLORS "$nick:$saved_colors{$nick}\n";
+}
+Irssi::print("Saved colors to $ENV{HOME}/.irssi/saved_colors");
+close COLORS;
+}
+# If someone we've colored (either through the saved colors, or the hash
+# function) changes their nick, we'd like to keep the same color associated
+# with them (but only in the session_colors, ie a temporary mapping).
+sub sig_nick {
+my ($server, $newnick, $nick, $address) = @_;
+my $color;
+$newnick = substr ($newnick, 1) if ($newnick =~ /^:/);
+if ($color = $saved_colors{$nick}) {
+$session_colors{$newnick} = $color;
+} elsif ($color = $session_colors{$nick}) {
+$session_colors{$newnick} = $color;
+}
+}
+# This gave reasonable distribution values when run across
+# /usr/share/dict/words
+sub simple_hash {
+my ($string) = @_;
+chomp $string;
+my @chars = split //, $string;
+my $counter;
+foreach my $char (@chars) {
+$counter += ord $char;
+}
+$counter = $colors[$counter % 12];
+return $counter;
+}
+# FIXME: breaks /HILIGHT etc.
+sub sig_public {
+my ($server, $msg, $nick, $address, $target) = @_;
+my $chanrec = $server->channel_find($target);
+return if not $chanrec;
+my $nickrec = $chanrec->nick_find($nick);
+return if not $nickrec;
+my $nickmode = $nickrec->{op} ? "@" : $nickrec->{voice} ? "+" : "";
+# Has the user assigned this nick a color?
+my $color = $saved_colors{$nick};
+# Have -we- already assigned this nick a color?
+if (!$color) {
+$color = $session_colors{$nick};
+}
+# Let's assign this nick a color
+if (!$color) {
+$color = simple_hash $nick;
+# We don't want people with the same nick length to have the same color
+my %used;
+foreach my $c (@colors) {
+$used{$c} = 0;
+}
+# Count colors for this specific nick length
+while ( my ($saved_nick, $saved_color) = each(%session_colors)) {
+if (length($saved_nick) == length($nick)) {
+# Length is equal, add one
+$used{$saved_color} += 1;
+}
+}
+# Check if the color we want is available
+if ( $used{$color} == 0 ) {
+$session_colors{$nick} = $color ;
+} else {
+# Pick the _least_ used color
+$color = (sort {$used{$a} cmp $used{$b} } keys %used)[0];
+$session_colors{$nick} = $color;
+}
+}
+$color = "0".$color if ($color < 10);
+$server->command('/^format pubmsg {pubmsgnick $2 {pubnick '.chr(3).$color.'$[-12]0}}$1')
+}
+sub cmd_color {
+my ($data, $server, $witem) = @_;
+my ($op, $nick, $color) = split " ", $data;
+$op = lc $op;
+if (!$op) {
+Irssi::print ("Supported commands:
+preview (list possible colors and their codes)
+list (show current entries in saved_colors)
+set <nick> <color> (associate a color to a nick)
+clear <nick> (delete color associated to nick)
+save (save colorsettings to saved_colors file)");
+} elsif ($op eq "save") {
+save_colors;
+} elsif ($op eq "set") {
+if (!$nick) {
+Irssi::print ("Nick not given");
+} elsif (!$color) {
+Irssi::print ("Color not given");
+} elsif ($color < 2 || $color > 14) {
+Irssi::print ("Color must be between 2 and 14 inclusive");
+} else {
+$saved_colors{$nick} = $color;
+}
+} elsif ($op eq "clear") {
+if (!$nick) {
+Irssi::print ("Nick not given");
+} else {
+delete ($saved_colors{$nick});
+}
+} elsif ($op eq "list") {
+Irssi::print ("\nSaved Colors:");
+foreach my $nick (keys %saved_colors) {
+Irssi::print (chr (3) . "$saved_colors{$nick}$nick" .
+chr (3) . "1 ($saved_colors{$nick})");
+}
+} elsif ($op eq "preview") {
+Irssi::print ("\nAvailable colors:");
+foreach my $i (2..14) {
+Irssi::print (chr (3) . "$i" . "Color #$i");
+}
+}
+}
+load_colors;
+Irssi::command_bind('color', 'cmd_color');
+Irssi::signal_add('message public', 'sig_public');
+Irssi::signal_add('event nick', 'sig_nick');
diff --git a/mpd/mpd.conf b/mpd/mpd.conf
new file mode 100644
index 0000000..929a3a5
--- /dev/null
+++ b/mpd/mpd.conf
@@ -0,0 +1,39 @@
+## Configuracion
+
+# Basico
+music_directory "/home/matias/Music"
+playlist_directory "/home/matias/.mpd/playlists"
+db_file "/home/matias/.mpd/mpd.db"
+log_file "/home/matias/.mpd/mpd.log"
+pid_file "/home/matias/.mpd/pid.log"
+state_file "/home/matias/.mpd/mpdstate"
+
+# Audio
+#audio_output {
+# type "alsa"
+# name "MPD Sound Device"
+# options "dev=dmixer"
+#}
+
+audio_output {
+ type "pulse"
+ name "MPD Sound Device (Pulseaudio)"
+}
+
+audio_output {
+ type "fifo"
+ name "my_fifo"
+ path "/tmp/mpd.fifo"
+ format "44100:16:2"
+}
+
+audio_output {
+ type "httpd"
+ name "My HTTP Stream"
+ encoder "lame"
+ port "8000"
+ bind_to_address "0.0.0.0"
+ bitrate "128"
+ format "44100:16:1"
+ max_clients "0"
+}
diff --git a/mutt/.passwd.gpg b/mutt/.passwd.gpg
new file mode 100644
index 0000000..32bd90a
--- /dev/null
+++ b/mutt/.passwd.gpg
Binary files differ
diff --git a/mutt/aliases b/mutt/aliases
new file mode 100644
index 0000000..b489b49
--- /dev/null
+++ b/mutt/aliases
@@ -0,0 +1,26 @@
+# Work
+alias tefi Tefi Rollino <tefi.rollino@gmail.com>
+alias cristian Cristian Morales <albirrojo@gmail.com>
+alias lio Lionel Hubmann <lh@moonlighting.io>
+alias gonza Gonzalo Garzon <gjg@moonlighting.io>
+alias corin Ricardo Corin <corin@moonlighting.io>
+alias cristian Cristian Morales <albirrojo@gmail.com>
+alias lio Lionel Hubmann <lh@moonlighting.io>
+alias rodri Rodrigo Jaime <roj57@moonlighting.io>
+alias emi Emilia Degano <emilia@moonlighting.io>
+alias devs Moonlighting Developers <devs@moonlighting.io>
+alias moonlighting Moonlighting All <all@moonlighting.io>
+
+# Famaf
+# Old santi
+# alias santi Santiago Feraud <dummyplug.04@gmail.com>
+alias santi Santiago Feraud <sferaud.04@gmail.com>
+alias manu Manuel Cavallo <mcavallo.92@gmail.com>
+
+# Profes
+alias rafa Rafael Carrascosa <rafacarrascosa@gmail.com>
+## Arquitectura
+alias eduardo Eduardo Sanchez <ledusanchez@gmail.com>
+
+alias bubu Ignacio del Rio <ignaciodelrio9@gmail.com>
+alias diegolis Diego Lis <diegolis@gmail.com>
diff --git a/mutt/gpg.rc b/mutt/gpg.rc
new file mode 100644
index 0000000..d6c9def
--- /dev/null
+++ b/mutt/gpg.rc
@@ -0,0 +1,85 @@
+# -*-muttrc-*-
+#
+# Command formats for gpg.
+#
+# This version uses gpg-2comp from
+# http://70t.de/download/gpg-2comp.tar.gz
+#
+# $Id$
+#
+# %p The empty string when no passphrase is needed,
+# the string "PGPPASSFD=0" if one is needed.
+#
+# This is mostly used in conditional % sequences.
+#
+# %f Most PGP commands operate on a single file or a file
+# containing a message. %f expands to this file's name.
+#
+# %s When verifying signatures, there is another temporary file
+# containing the detached signature. %s expands to this
+# file's name.
+#
+# %a In "signing" contexts, this expands to the value of the
+# configuration variable $pgp_sign_as. You probably need to
+# use this within a conditional % sequence.
+#
+# %r In many contexts, mutt passes key IDs to pgp. %r expands to
+# a list of key IDs.
+
+# Note that we explicitly set the comment armor header since GnuPG, when used
+# in some localiaztion environments, generates 8bit data in that header, thereby
+# breaking PGP/MIME.
+
+# decode application/pgp
+set pgp_decode_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
+
+# verify a pgp/mime signature
+set pgp_verify_command="gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
+
+# decrypt a pgp/mime attachment
+set pgp_decrypt_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
+
+# create a pgp/mime signed attachment
+# set pgp_sign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
+set pgp_sign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
+
+# create a application/pgp signed (old-style) message
+# set pgp_clearsign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
+set pgp_clearsign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
+
+# create a pgp/mime encrypted attachment
+# set pgp_encrypt_only_command="pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
+set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
+
+# create a pgp/mime encrypted and signed attachment
+# set pgp_encrypt_sign_command="pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
+set pgp_encrypt_sign_command="pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
+
+# import a key into the public key ring
+set pgp_import_command="gpg --no-verbose --import %f"
+
+# export a key from the public key ring
+set pgp_export_command="gpg --no-verbose --export --armor %r"
+
+# verify a key
+set pgp_verify_key_command="gpg --verbose --batch --fingerprint --check-sigs %r"
+
+# read in the public key ring
+set pgp_list_pubring_command="gpg --no-verbose --batch --quiet --with-colons --list-keys %r"
+
+# read in the secret key ring
+set pgp_list_secring_command="gpg --no-verbose --batch --quiet --with-colons --list-secret-keys %r"
+
+# fetch keys
+# set pgp_getkeys_command="pkspxycwrap %r"
+
+# pattern for good signature - may need to be adapted to locale!
+
+# set pgp_good_sign="^gpgv?: Good signature from "
+
+# OK, here's a version which uses gnupg's message catalog:
+# set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`"
+
+# This version uses --status-fd messages
+set pgp_good_sign="^\\[GNUPG:\\] GOODSIG"
+
diff --git a/mutt/mailboxes b/mutt/mailboxes
new file mode 100644
index 0000000..f3cef77
--- /dev/null
+++ b/mutt/mailboxes
@@ -0,0 +1 @@
+mailboxes "+opmbx/Drafts" "+opmbx/Enviados" "+opmbx/FaMAF" "+opmbx/INBOX" "+opmbx/MobaSimulator" "+opmbx/Rust" "+opmbx/Sent" "+opmbx/Spam" "+opmbx/SpamFalse" "+opmbx/SpamToLearn" "+opmbx/Suckless" "+opmbx/Trash" "+opmbx/Unwanted"
diff --git a/mutt/signature b/mutt/signature
new file mode 100644
index 0000000..62a9c73
--- /dev/null
+++ b/mutt/signature
@@ -0,0 +1,3 @@
+XMPP/Mail: matiaslina@openmailbox.org
+GPG: http://www.famaf.unc.edu.ar/~mlm0111/pubkey.asc | BBD8 CADC C236 AD16
+Tox ID: A84709E264C9F10B71D3BC2730685C27CBCC2D280E98744C50803509FB0FEF586EBB101D0694
diff --git a/muttrc b/muttrc
new file mode 100644
index 0000000..f0c9feb
--- /dev/null
+++ b/muttrc
@@ -0,0 +1,191 @@
+# Store messages localy to speed things up.
+set header_cache = /tmp/mutt-cache
+set message_cachedir = /tmp/mutt-cache
+set alias_file = ~/.mutt/aliases
+source $alias_file
+
+# Sidebar settings
+set sidebar_visible = yes
+set sidebar_width = 24
+set sidebar_sort = yes
+#set sidebar_indentstr = ' '
+#set sidebar_folderindent = yes
+#set sidebar_shortpath = yes
+#set sidebar_format="%B%?F? [%F]?%* %?N?%N/?%S"
+
+# Smtp opmbx
+#set my_user=park
+set my_user=matiaslina@openmailbox.org
+set my_pass="`echo -n $PASSWORD`"
+set realname='Matias Linares'
+set smtp_url=smtp://$my_user:$my_pass@smtp.team-deprecated.org
+#set from = park@team-deprecated.org
+set from = matiaslina@openmailbox.org
+#unset ssl_verify_host
+
+# IMAP opmbx
+#set imap_user=park
+#set imap_pass=$my_pass
+#set folder=imap://imap.team-deprecated.org:143/
+set imap_user=matiaslina@openmailbox.org
+set imap_pass="$my_pass"
+set folder=imap://imap.openmailbox.org:143/
+set spoolfile=+INBOX
+set record="+Sent"
+#set imap_check_subscribed = yes
+#mailboxes = +INBOX
+mailboxes = +INBOX +Archlinux +Archlinux/Development \
+ +Archlinux/Announces +Suckless \
+ +Herbstluftwm +FaMAF +MobaSimulator +team-deprecated
+set use_from=yes
+#set ssl_force_tls = yes
+# Don't wit to enter mailbox manually
+unset imap_passive
+# Reduce polling frequency
+set net_inc=5
+
+# timeouts
+set mail_check=60
+set imap_keepalive = 300
+set timeout = 300
+
+# Mailing lists
+subscribe hlwm@lists.herbstluftwm.org
+subscribe dev@suckless.org
+subscribe arch-general@archlinux.org
+subscribe arch-announce@archlinux.org
+subscribe arch-dev-public@archlinux.org
+
+# Misc.
+#set pager_index_lines=5
+set sort="threads"
+set sort_aux = "reverse-last-date-received"
+set editor="vim"
+
+set signature = ~/.mutt/signature
+
+# GPG
+source ~/.mutt/gpg.rc
+set pgp_sign_as = 7D7B9EF2
+set pgp_timeout = 3600
+set pgp_use_gpg_agent = yes
+set crypt_verify_sig = yes
+set crypt_autosign = yes
+set crypt_replyencrypt = yes
+
+# Headers
+my_hdr X-Operating-System: Arch Linux, `uname -o` `uname -r`
+my_hdr X-PGP-Key: http://www.famaf.unc.edu.ar/~mlm0111/pubkey.asc
+my_hdr OpenPGP: id=7D7B9EF2\; \
+url=http://www.famaf.unc.edu.ar/~mlm0111/pubkey.asc\; \
+preference=signencrypt
+
+# Vi-like keybindings
+bind generic l select-entry
+macro index h '<change-folder>?'
+bind index,pager H display-toggle-weed
+bind pager h exit
+bind pager j next-line
+bind pager k previous-line
+bind pager l view-attachments
+bind attach,compose l view-attach
+bind attach h exit
+bind attach H display-toggle-weed
+bind compose l view-attach
+
+macro index b '<enter-command>toggle sidebar_visible<enter><refresh>'
+macro pager b '<enter-command>toggle sidebar_visible<enter><redraw-screen>'
+
+# Ctrl-n, Ctrl-p to select next, previous folder.
+# Ctrl-o to open selected folder.
+bind index,pager \CP sidebar-prev
+bind index,pager \CN sidebar-next
+bind index,pager \CO sidebar-open
+
+
+# Colours for items in the index
+
+color index brightcyan default ~N
+color index brightred default ~O
+color index brightyellow default ~F
+color index default green ~T
+color index brightred default ~D
+mono index bold ~N
+mono index bold ~F
+mono index bold ~T
+mono index bold ~D
+
+# Highlights inside the body of a message.
+
+# URLs
+color body brightgreen default "(http|ftp|news|telnet|finger)://[^ \"\t\r\n]*"
+color body brightgreen default "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+"
+mono body bold "(http|ftp|news|telnet|finger)://[^ \"\t\r\n]*"
+mono body bold "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+"
+
+## Email addresses.
+color body brightgreen default "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+"
+
+## Header
+color header green default "^from:"
+color header green default "^to:"
+color header green default "^cc:"
+color header green default "^date:"
+color header yellow default "^newsgroups:"
+color header yellow default "^reply-to:"
+color header brightcyan default "^subject:"
+color header red default "^x-spam-rule:"
+color header green default "^x-mailer:"
+color header yellow default "^message-id:"
+color header yellow default "^Organization:"
+color header yellow default "^Organisation:"
+color header yellow default "^User-Agent:"
+color header yellow default "^message-id: .*pine"
+color header yellow default "^X-Fnord:"
+color header yellow default "^X-WebTV-Stationery:"
+
+color header red default "^x-spam-rule:"
+color header green default "^x-mailer:"
+color header yellow default "^message-id:"
+color header yellow default "^Organization:"
+color header yellow default "^Organisation:"
+color header yellow default "^User-Agent:"
+color header yellow default "^message-id: .*pine"
+color header yellow default "^X-Fnord:"
+color header yellow default "^X-WebTV-Stationery:"
+color header yellow default "^X-Message-Flag:"
+color header yellow default "^X-Spam-Status:"
+color header yellow default "^X-SpamProbe:"
+color header red default "^X-SpamProbe: SPAM"
+
+## Coloring quoted text - coloring the first 7 levels:
+color quoted cyan default
+color quoted1 yellow default
+color quoted2 red default
+color quoted3 green default
+color quoted4 cyan default
+color quoted5 yellow default
+color quoted6 red default
+color quoted7 green default
+
+## Default color definitions
+#color hdrdefault white green
+
+color signature brightmagenta default
+color indicator default cyan
+color attachment black cyan
+color error red default
+color message white default
+color search brightwhite magenta
+color status brightyellow blue
+color tree brightblue default
+color normal white default
+color tilde green default
+color bold brightyellow default
+#color underline magenta default
+color markers brightcyan default
+
+## Colour definitions when on a mono screen
+mono bold bold
+mono underline underline
+mono indicator reverse
diff --git a/ncmpcpp/config b/ncmpcpp/config
new file mode 100644
index 0000000..ca1ea71
--- /dev/null
+++ b/ncmpcpp/config
@@ -0,0 +1,55 @@
+mpd_music_dir = "/home/matias/Music"
+mpd_crossfade_time = "5"
+
+# Visualizer
+visualizer_fifo_path = "/tmp/mpd.fifo"
+visualizer_output_name = "my_fifo"
+visualizer_type = "spectrum" (spectrum/wave)
+
+# Playlist
+song_columns_list_format = "$L(9)[white]{l} (20)[red]{a} (30)[green]{b}$R(20)[cyan]{t}"
+now_playing_prefix = "$b"
+#now_playing_subfix = "/$b"
+playlist_display_mode = "classic" (classic/columns)
+autocenter_mode = "no"
+centered_cursor = "no"
+cyclic_scrolling = "yes"
+mouse_list_scroll_whole_page = "no"
+#song_list_format = "{$8$9}{[%l] >> }{%t }$R{%a - %b}"
+song_list_format = " $0$8$8%l$0$8 $1|$7 $7%a$7 $1|$7 $6%t$1 $R $1%b$1"
+
+song_library_format = "{%n > }{%t}|{%f}"
+
+# Bars
+song_status_format = "{%a - }{%t - }{%b}"
+#progressbar_look = "|> "
+progressbar_look = "─╼ "
+titles_visibility = "no"
+header_visibility = "no"
+statusbar_visibility = "no"
+user_interface = "alternative"
+
+# Browser
+browser_playlist_prefix = "$2plist »$9 "
+browser_display_mode = "columns" (classic/columns)
+
+# Colors
+# discard_colors_if_item_is_selected = "yes"
+# header_window_color = "black"
+# volume_color = "cyan"
+# state_line_color = "black"
+# state_flags_color = "green"
+# main_window_color = "blue"
+# color1 = "cyan"
+# color2 = "black"
+# main_window_highlight_color = "red"
+# progressbar_color = "black"
+# statusbar_color = "black"
+# active_column_color = "red"
+# visualizer_color = "cyan"
+
+# Others
+song_window_title_format = "MPD: {%a > }{%t}{ [%b{ Disc %d}]}|{%f}"
+search_engine_display_mode = "columns" (classic/columns)
+follow_now_playing_lyrics = "yes"
+#display_screens_numbers_on_start = "no"
diff --git a/scripts/clear-pacman-cache b/scripts/clear-pacman-cache
new file mode 100755
index 0000000..3891796
--- /dev/null
+++ b/scripts/clear-pacman-cache
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+if [[ $UID -eq 0 ]]
+then
+ paccache -r
+ paccache -ruk0
+else
+ echo "You need to be root!"
+fi
diff --git a/scripts/get-volume.sh b/scripts/get-volume.sh
new file mode 100755
index 0000000..0696b6f
--- /dev/null
+++ b/scripts/get-volume.sh
@@ -0,0 +1,150 @@
+#!/bin/bash
+
+# This prints a character '♫' and the percentage of the actual volume.
+# ♫ = E299AB
+WITH_ICONS=false
+
+get_percentage() {
+ full_db=65.25
+ # -65.25 <= $db <= 0
+ db=$1
+ bc <<CALC scale=2
+(-$db)/$full_db
+CALC
+}
+
+get_icon() {
+ if [ "$volStatus" == "on" ]
+ then
+ echo "\fr♫"
+ else
+ echo "\f1♫"
+ fi
+}
+
+panel_volume()
+{
+
+ volStatus=$(amixer get Master | tail -n 1 | cut -d '[' -f 4 | sed 's/].*//g')
+ volLevel=$(amixer get Master | tail -n 1 | cut -d '[' -f 2 | sed 's/\%].*//g')
+ if $WITH_ICONS
+ then
+ headphone=$(amixer -c 0 contents | grep 'Headphone Jack' -A 2 | tail -n 1 | sed s/.*=//g)
+ else
+ headphone=""
+ fi
+
+ if $WITH_ICONS
+ then
+ if [ "$volStatus" == "on" ] && [ "$headphone" == "off" ];
+ then
+ icon="\fr ⮞"
+ elif [ "$volStatus" == "on" ] && [ "$headphone" == "on" ];
+ then
+ icon="\fr ⮜"
+ elif [ "$volStatus" == "off" ] && [ "$headphone" == "on" ];
+ then
+ icon="\fr ⮜"
+ elif [ "$volStatus" == "off" ] && [ "$headphone" == "off" ];
+ then
+ icon="\fr ⮝"
+ else
+ icon="\f1 ⮝"
+ fi
+ else
+ icon=$(get_icon)
+ fi
+
+ case $volLevel in
+ 100)
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr——————————\fr"
+ else
+ echo "$icon" "\f8——————————\fr"
+ fi
+ ;;
+ [0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr—\f8—————————\fr"
+ else
+ echo "$icon" "\f1—\f8—————————\fr"
+ fi
+ ;;
+ 1[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr——\f8————————\fr"
+ else
+ echo "$icon" "\f1——\f8————————\fr"
+ fi
+ ;;
+ 2[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr———\f8———————\fr"
+ else
+ echo "$icon" "\f1———\f8———————\fr"
+ fi
+ ;;
+ 3[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr————\f8——————\fr"
+ else
+ echo "$icon" "\f1————\f8——————\fr"
+ fi
+ ;;
+ 4[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr—————\f8—————\fr"
+ else
+ echo "$icon" "\f1—————\f8—————\fr"
+ fi
+ ;;
+ 5[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr——————\f8————\fr"
+ else
+ echo "$icon" "\f1——————\f8————\fr"
+ fi
+ ;;
+ 6[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr———————\f8———\fr"
+ else
+ echo "$icon" "\f1———————\f8———\fr"
+ fi
+ ;;
+ 7[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr————————\f8——\fr"
+ else
+ echo "$icon" "\f1————————\f8——\fr"
+ fi
+ ;;
+ 8[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr——————————\f8—\fr"
+ else
+ echo "$icon" "\f1——————————\f8—\fr"
+ fi
+ ;;
+ 9[0-9])
+ if [ "$volStatus" == "on" ]
+ then
+ echo "$icon" "\fr——————————\fr"
+ else
+ echo "$icon" "\f1——————————\fr"
+ fi
+ ;;
+ esac
+}
+
+panel_volume
diff --git a/scripts/hs-cycle-padding b/scripts/hs-cycle-padding
new file mode 100755
index 0000000..56fe802
--- /dev/null
+++ b/scripts/hs-cycle-padding
@@ -0,0 +1,21 @@
+#!/usr/bin/ruby
+
+file1 = "/tmp/herbst-padding-1"
+file2 = "/tmp/herbst-padding-2"
+
+pad1 = 'pad 0 0 0 0 0'
+pad2 = 'pad 0 0 20 0 200'
+pad3 = 'pad 0 0 0 0 150'
+
+files = [file1, file2].map{|f| File.exist? File.expand_path(f)}
+
+if files == [false, false] # 0 files
+ system "herbstclient #{pad2}"
+ system "touch #{file1}"
+elsif files == [true, false] # 1 file
+ system "herbstclient #{pad1}"
+ system "touch #{file2}"
+else # 2 files
+ system "herbstclient #{pad3}"
+ system "rm #{file1} #{file2}"
+end
diff --git a/scripts/ix b/scripts/ix
new file mode 100755
index 0000000..47c3e2b
--- /dev/null
+++ b/scripts/ix
@@ -0,0 +1,3 @@
+#!/bin/bash
+curl -F 'f:1=<-' -F "ext:1=$1" ix.io #| \
+ #xclip -i -selection clipboard
diff --git a/scripts/lock b/scripts/lock
new file mode 100755
index 0000000..4046b49
--- /dev/null
+++ b/scripts/lock
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+bg=/tmp/screen.png
+lock_png=${HOME}/scripts/lock.png
+_backlight=$(xbacklight -get)
+backlight=${_backlight::2}
+
+scrot ${bg}
+#convert ${bg} -scale 25% -scale 400% ${bg}
+convert ${bg} -blur 0x2 -sharpen 1x4 ${bg}
+
+[[ -f ${lock_png} ]] && convert ${bg} ${lock_png} \
+ -gravity center -composite -matte \
+ ${bg}
+xbacklight -set 10
+i3lock -u -n -i ${bg}
+rm ${bg}
+xbacklight -set $backlight
diff --git a/scripts/lock.png b/scripts/lock.png
new file mode 100644
index 0000000..62eb9e9
--- /dev/null
+++ b/scripts/lock.png
Binary files differ
diff --git a/scripts/markdown-mine b/scripts/markdown-mine
new file mode 100755
index 0000000..6505be7
--- /dev/null
+++ b/scripts/markdown-mine
@@ -0,0 +1,64 @@
+#!/bin/bash
+
+begin_of_html() {
+ cat > "$1" <<EOF
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<style>
+html, body {
+ padding: 10px;
+ padding-left: 4%;
+ padding-right: 4%;
+ font-family: monospace;
+ font-size: 13px;
+}
+
+a {
+ text-decoration: none;
+ color: #ab2323;
+ font-size: 0.95em;
+ font-weight: bold;
+}
+
+h1 {
+ font-size: 32px;
+ padding:3px;
+}
+
+h2 {
+ border-bottom: 1px solid #dedede;
+ padding:1px;
+}
+</style>
+</head>
+<body>
+EOF
+}
+
+_OUTFILE="$2"
+_INFILE="$1"
+
+main() {
+ begin_of_html "$_OUTFILE"
+ /usr/bin/markdown "$_INFILE" >> "$_OUTFILE"
+ echo "</body>" >> "$_OUTFILE"
+}
+
+case $1 in
+ --help|-h)
+ echo "$0 file.md out.html"
+ exit 0
+ ;;
+ *)
+ if [[ $# -ne 2 ]]
+ then
+ echo "Invalid arguments!"
+ echo "$0 file.md out.html"
+ else
+ main
+ fi
+ exit 1
+ ;;
+esac
diff --git a/scripts/mlblog b/scripts/mlblog
new file mode 120000
index 0000000..84a2657
--- /dev/null
+++ b/scripts/mlblog
@@ -0,0 +1 @@
+/home/matias/Workspace/blog/bin/mlblog \ No newline at end of file
diff --git a/scripts/monserv b/scripts/monserv
new file mode 120000
index 0000000..38b3fa6
--- /dev/null
+++ b/scripts/monserv
@@ -0,0 +1 @@
+/home/matias/Workspace/other_projects/monserv/bin/monserv \ No newline at end of file
diff --git a/scripts/nm-connected-device b/scripts/nm-connected-device
new file mode 100755
index 0000000..c4fc24a
--- /dev/null
+++ b/scripts/nm-connected-device
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+OUT=$(nmcli device wifi list | grep "^\*" | tail -n 1 | awk -e '{print $2,$8}')
+
+echo "network $OUT"
diff --git a/scripts/spawn b/scripts/spawn
new file mode 100755
index 0000000..6a30ee1
--- /dev/null
+++ b/scripts/spawn
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+$@ 2>&1 >/dev/null & disown %1
diff --git a/scripts/sprunge b/scripts/sprunge
new file mode 100755
index 0000000..ba30dae
--- /dev/null
+++ b/scripts/sprunge
@@ -0,0 +1,2 @@
+#!/bin/bash
+curl -F sprunge=@- sprunge.us
diff --git a/scripts/terminal-colors b/scripts/terminal-colors
new file mode 100755
index 0000000..985cefb
--- /dev/null
+++ b/scripts/terminal-colors
@@ -0,0 +1,529 @@
+#!/usr/bin/env python
+
+"""2.2 John Eikenberry <jae@zhar.net> GPL-3+ http://zhar.net/projects/
+
+Copyright
+ Copyright (C) 2010-2013 John Eikenberry <jae@zhar.net>
+
+License
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Description
+ My goal in writing this script was to provide all the functionality of all
+ the various perl/sh scripts found around the web in one place with some
+ additional bells and whistles.
+
+ It automatically detects 8, 16, 88, 256 color capabilities (via ncurses)
+ and displays the appropriate color charts. It can display the colors as
+ blocks or (2d) cubes optionally with color values overlaid in int or hex
+ values. It can show the full rgb text string as well. It can also show the
+ display with a vertical (default) or horizontal orientation. It has the
+ option of additional padding and supports -h --help as well.
+
+ It also works as a utility for converting between 256 and 88 color values.
+
+Development
+ A note on coding style. I was playing around with using classes as simple
+ module-esque namespaces; i.e. having classes that have all staticmethods
+ and never get instatiated. As a side effect of this it makes calls at the
+ module level thus this script is not really importable, thus limiting
+ reuse.
+
+Contributors
+ Isaac Cammann <icammann@gmail.com> - cube display bugfix
+ Jan Larres <jan@majutsushi.net> - submitted patches for..
+ - compact rgb display
+ - use of color intensity to determine foreground contrast color
+ - 16 color SGR ANSI chart
+ - 88 color rgb display bugfix
+
+"""
+from __future__ import print_function
+
+__version__ = __doc__.split('\n')[0]
+
+import sys
+import curses
+from optparse import OptionParser, OptionGroup, make_option
+from math import ceil, sqrt
+from functools import wraps
+
+# output constants
+fg_escape = "\x1b[38;5;%dm"
+bg_escape = "\x1b[48;5;%dm"
+clear = "\x1b[0m"
+
+def _get_options(args):
+ """ Setup and parse options.
+ """
+ option_list = [
+ make_option("-b", "--block", action="store_true", dest="block",
+ default=True, help="Display as block format (vs cube) [default]."),
+ make_option("-c", "--cube-slice", action="store_true", dest="cube",
+ default=False, help="Display as cube slices (vs block)."),
+ make_option("-f", "--foreground", action="store_true",
+ dest="foreground", default=False,
+ help="Use color for foreground text."),
+ make_option("-l", "--rgb", action="store_true", dest="rgb",
+ default=False, help="Long format. RGB values as text."),
+ make_option("-n", "--numbers", action="store_true", dest="numbers",
+ default=False, help="Include color escape numbers on chart."),
+ make_option("-o", "--basiccodes", action="store_true",
+ dest="basiccodes", default=False,
+ help="Display 16 color chart with SGR ANSI escape codes."),
+ make_option("-p", "--padding", action="store_true", dest="padding",
+ default=False, help="Add extra padding (helps discern colors)."),
+ make_option("-v", "--vertical", action="store_true", dest="vertical",
+ default=True, help="Display with vertical orientation [default]."),
+ make_option("-x", "--hex", action="store_true", dest="hex",
+ default=False, help="Include hex color numbers on chart."),
+ make_option("-z", "--horizontal", action="store_true",
+ dest="horizontal", default=False,
+ help="Display with horizontal orientation."),
+ ]
+
+ parser = OptionParser(version=__version__, option_list=option_list)
+
+ convert_option_list = [
+ make_option("-r", "--256to88", action="store", dest="reduce",
+ metavar="N", type="int",
+ help="Convert (reduce) 256 color value N to an 88 color value."),
+ make_option("-e", "--88to256", action="store", dest="expand",
+ metavar="N", type="int",
+ help="Convert (expand) 88 color value N to an 256 color value."),
+ ]
+ group = OptionGroup(parser, "Conversion options")
+ group.add_options(option_list=convert_option_list)
+ parser.add_option_group(group)
+
+ (options, args) = parser.parse_args(args)
+ return options
+
+# instantiate global options based on command arguments
+options = _get_options(sys.argv[1:])
+# don't allow -f by itself
+options.foreground = options.foreground and (
+ options.numbers or options.hex or options.rgb )
+
+class _staticmethods(type):
+ """ Got tired of adding @staticmethod in front of every method.
+ """
+ def __new__(m, n, b, d):
+ """ turn all methods in to staticmethods.
+ staticmethod() deals correctly with class attributes.
+ """
+ for (n, f) in d.items():
+ if callable(f):
+ d[n] = staticmethod(f)
+ return type.__new__(m, n, b, d)
+
+def _cached(f):
+ """ Memoize function w/ no params
+ """
+ _cache = {}
+ def cache():
+ if None not in _cache:
+ _cache[None] = f()
+ return _cache[None]
+ return cache
+
+
+class term16(object):
+ """ Basic 16 color terminal.
+ """
+ __metaclass__ = _staticmethods
+
+ def label(n, esc):
+ """ color label for 256 color values
+ """
+ if options.numbers:
+ return esc(n) + "%3d " % n
+ elif options.hex:
+ return esc(n) + " %2x " % n
+ return esc(n) + " "
+
+ def _render():
+ """ 16 color info
+ """
+ if options.foreground:
+ esc = lambda n: fg_escape % n
+ else:
+ esc = lambda n: bg_escape % n + fg_escape % (15 if n < 9 else 0)
+ return [[term16.label(n, esc) + clear for n in range(8)],
+ [term16.label(n, esc) + clear for n in range(8,16)]]
+
+ def basiccodes():
+ text = " gYw "
+ esc_code = "\x1b[%sm"
+ print(' ' * 17 + ' '.join([str(40 + n) + "m" for n in range(8)]))
+ fg_codes = ['0', '1']
+ for i in range(30, 38):
+ fg_codes.extend([str(i), "1;%d" % i])
+ for fg in fg_codes:
+ print("%5sm " % fg + esc_code % fg + text + clear + ' ', end='')
+ print(' '.join([esc_code % fg + esc_code % bg + text + clear
+ for bg in range(40, 48)]))
+
+ def display():
+ """ display 16 color info
+ """
+ print("System colors:")
+ colors = term16._render()
+ padding=' ' if options.padding else ''
+ for r in colors:
+ print(padding.join(i for i in r))
+ if options.padding: print()
+
+
+class term256(term16):
+ """ eg. xterm-256
+ """
+
+ @_cached
+ def _rgb_lookup():
+ """ color rgb lookup dict
+ """
+ # color increment is based on xterm/rxvt palette
+ cincr = [0] + [95+40*n for n in range(5)]
+ color_rgb = [rgb(i, j, k)
+ for i in cincr for j in cincr for k in cincr]
+ color_rgb = dict(zip(range(16, len(color_rgb)+16), color_rgb))
+ greys = [rgb(*((n,)*3)) for n in range(8, 248, 10)]
+ greys = dict(zip(range(232, 256), greys))
+ color_rgb.update(greys)
+ return color_rgb
+
+ def _to_rgb(n):
+ """ Convert color value to rgb tuple.
+ """
+ return term256._rgb_lookup()[n]
+
+ def _rgb_color_table():
+ """ 256 color info
+ """
+ rgbl = term256._rgb_lookup()
+ label_num = "% 4d: "
+ label_val = "%s"
+ if options.foreground:
+ render = lambda n: fg_escape % n + label_num % n + \
+ label_val % str(rgbl[n]) + clear
+ else:
+ render = lambda n: fg_escape % n + label_num % n + \
+ fg_escape % (16 if rgbl[n].is_light() else 255) \
+ + bg_escape % n + label_val % str(rgbl[n]) + clear
+ return [[render(n) for n in [i+j for j in range(6)]]
+ for i in range(16, 256, 6)]
+
+ def _rgb_display():
+ """ display colors with rgb hex info
+ """
+ colors = term256._rgb_color_table()
+ padding=' ' if options.padding else ''
+ while colors:
+ rows, colors = colors[:6], colors[6:]
+ if not options.horizontal:
+ rows = zip(*rows)
+ for r in rows:
+ print(padding.join(i for i in r))
+ if options.padding: print()
+ print()
+
+ def _colors():
+ """ 256 color numbers
+ """
+ return [[i+j for j in range(6)] for i in range(16, 232, 6)]
+
+ def _greyscale():
+ """ 256 greyscale numbers
+ """
+ return [[i+j for j in range(12)] for i in range(232, 256, 12)]
+
+ def _render(palette):
+ """ compact 256 color info
+ """
+ if options.foreground:
+ esc = lambda n: fg_escape % n
+ render = lambda n: term256.label(n, esc) + clear
+ else:
+ esc = lambda n: fg_escape % \
+ (16 if term256._to_rgb(n).is_light() else 255)
+ render = lambda n: bg_escape % n + term256.label(n, esc) + clear
+ return [[render(n) for n in i] for i in palette]
+
+ def _compact_display():
+ """ display colors in compact format
+ """
+ colors = term256._render(term256._colors())
+ if options.cube:
+ _cube_display(colors)
+ elif options.block:
+ _block_display(colors)
+ print()
+ greys = term256._render(term256._greyscale())
+ padding=' ' if options.padding else ''
+ for r in greys:
+ print(padding.join(i for i in r))
+ if options.padding: print()
+
+ def display():
+ """ display 256 color info (+ 16 in compact format)
+ """
+ if options.rgb:
+ print("Xterm RGB values for 6x6x6 color cube and greyscale.")
+ print()
+ term256._rgb_display()
+ else:
+ term16.display()
+ print()
+ print("6x6x6 color cube and greyscale:")
+ term256._compact_display()
+
+
+class term88(term16):
+ """ xterm-88 or urxvt
+ """
+
+ @_cached
+ def _rgb_lookup():
+ """ color rgb lookup dict
+ """
+ # color increment is based on rxvt palette
+ cincr = [0, 0x8b, 0xcd, 0xff]
+ color_rgb = [rgb(i, j, k)
+ for i in cincr for j in cincr for k in cincr]
+ color_rgb = dict(zip(range(16, len(color_rgb)+16), color_rgb))
+ greys = [rgb(*((n,)*3))
+ for n in [0x2e, 0x5c, 0x73, 0x8b, 0xa2, 0xb9, 0xd0, 0xe7]]
+ greys = dict(zip(range(80, 88), greys))
+ color_rgb.update(greys)
+ return color_rgb
+
+ def _to_rgb(n):
+ """ Convert color value to rgb tuple.
+ """
+ return term88._rgb_lookup()[n]
+
+ def _rgb_color_table():
+ """ 88 color info
+ """
+ rgbl = term88._rgb_lookup()
+ label_num = "% 4d: "
+ label_val = "%s"
+ if options.foreground:
+ render = lambda n: fg_escape % n + label_num % n + \
+ label_val % str(rgbl[n]) + clear
+ else:
+ render = lambda n: fg_escape % n + label_num % n + \
+ fg_escape % (16 if rgbl[n].is_light() else 87) \
+ + bg_escape % n + label_val % str(rgbl[n]) + clear
+ return [[render(n) for n in [i+j for j in range(4)]]
+ for i in range(16, 88, 4)]
+
+ def _rgb_display():
+ """ display colors with rgb hex info
+ """
+ colors = term88._rgb_color_table()
+ while colors:
+ rows, colors = colors[:4], colors[4:]
+ for r in zip(*rows):
+ print(''.join(i for i in r))
+ print()
+
+ def _render(palette):
+ """ 88 color info
+ """
+ if options.foreground:
+ esc = lambda n: fg_escape % n
+ render = lambda n: term88.label(n, esc) + clear
+ else:
+ esc = lambda n: fg_escape % \
+ (16 if term88._to_rgb(n).is_light() else 87)
+ render = lambda n: bg_escape % n + term88.label(n, esc) + clear
+ return [[render(n) for n in i] for i in palette]
+ #for n in [i+j for j in range(4)]]
+ #for i in range(16, 80, 4)]
+
+ def _colors():
+ """ 88 color numbers
+ """
+ return [[i+j for j in range(4)] for i in range(16, 80, 4)]
+
+ def _greyscale():
+ """ 88 greyscale numbers
+ """
+ return [range(80,88)]
+
+
+ def display():
+ """ display 16 + 88 color info
+ """
+ if options.rgb:
+ print("Xterm RGB values for 4x4x4 color cube and greyscale.")
+ print()
+ term88._rgb_display()
+ else:
+ padding = ' ' if options.padding else ''
+ term16.display()
+ print()
+ print("4x4x4 color cube and greyscale:")
+ colors = term88._render(term88._colors())
+ if options.cube:
+ _cube_display(colors)
+ elif options.block:
+ _block_display(colors)
+ print()
+ greys = term88._render(term88._greyscale())
+ for r in greys:
+ print(padding.join(i for i in r))
+
+class rgb(tuple):
+ """ An RGB, (red, green, blue) tuple. Takes integers.
+ """
+ def __new__(cls, r, g, b):
+ """ We want 3 colors.
+ """
+ return super(rgb, cls).__new__(cls, (r,g,b))
+
+ def __str__(self):
+ """ Display in compact rgb format.
+ """
+ return "#%02x%02x%02x" % self
+
+ def is_light(self):
+ """ Is this color light (or dark).
+ """
+ red, green, blue = self[0], self[1], self[2]
+ intensity = red*0.2126 + green*0.7152 + blue*0.0722
+ return intensity > 127
+
+
+def _cube_display(colors):
+ """ Display color cube as color aligned flatten cube sides.
+ """
+ padding = ' ' if options.padding else ''
+ if options.horizontal:
+ def _horizontal(colors):
+ size = int(sqrt(len(colors)))
+ for n in (n*size for n in range(size)):
+ colors[n:n+size] = zip(*colors[n:n+size])
+ while colors:
+ rows, colors = colors[:size*2], colors[size*2:]
+ for n in range(size):
+ print(padding.join(i
+ for i in rows[n]+tuple(reversed(rows[n+size]))))
+ if options.padding: print(padding)
+ if colors: print()
+ _horizontal(colors)
+ else: #options.vertical - default
+ def _vertical(colors):
+ size = int(sqrt(len(colors)))
+ top = [colors[n:len(colors):size*2] for n in range(size)]
+ bottom = [colors[n+size:len(colors):size*2]
+ for n in reversed(range(size))]
+ for group in [top, bottom]:
+ for rows in group:
+ for r in rows:
+ print(padding.join(i for i in r), end=' ')
+ if options.padding: print(padding, end=' ')
+ if options.padding: print()
+ print()
+ _vertical(colors)
+
+def _block_display(colors):
+ """ Display color cube as cube sides organized by color #s (default).
+ """
+ padding = ' ' if options.padding else ''
+ size = int(sqrt(len(colors)))
+ if not options.horizontal:
+ for n in (n*size for n in range(size)):
+ colors[n:n+size] = zip(*colors[n:n+size])
+ while colors:
+ half = size*(size//2)
+ rows, colors = colors[:half], colors[half:]
+ for n in range(size):
+ for r in rows[n:len(rows):size]:
+ print(padding.join(i for i in r), end=' ')
+ if options.padding: print(padding, end=' ')
+ if options.padding: print()
+ print()
+ if colors: print()
+
+def convert88to256(n):
+ """ 88 (4x4x4) color cube to 256 (6x6x6) color cube values
+ """
+ if n < 16:
+ return n
+ elif n > 79:
+ return 234 + (3 * (n - 80))
+ else:
+ def m(n):
+ "0->0, 1->1, 2->3, 3->5"
+ return n and n + n-1 or n
+ b = n - 16
+ x = b % 4
+ y = (b // 4) % 4
+ z = b // 16
+ return 16 + m(x) + (6 * m(y) + 36 * m(z))
+
+def convert256to88(n):
+ """ 256 (6x6x6) color cube to 88 (4x4x4) color cube values
+ """
+ if n < 16:
+ return n
+ elif n > 231:
+ if n < 234:
+ return 0
+ return 80 + ((n - 234) // 3)
+ else:
+ def m(n, _ratio=(4./6.)):
+ if n < 2:
+ return int(ceil(_ratio*n))
+ else:
+ return int(_ratio*n)
+ b = n - 16
+ x = b % 6
+ y = (b // 6) % 6
+ z = b // 36
+ return 16 + m(x) + (4 * m(y) + 16 * m(z))
+
+def _terminal():
+ """ detect # of colors supported by terminal and return appropriate
+ terminal class
+ """
+ curses.setupterm()
+ num_colors = curses.tigetnum('colors')
+ if num_colors > 0:
+ return {16:term16, 88:term88, 256:term256}.get(num_colors, term16)
+
+def main():
+ if options.reduce:
+ v = convert256to88(options.reduce)
+ # reconvert back to display reduction in context
+ print("%s (equivalent to 256 value: %s)" % (v, convert88to256(v)))
+ elif options.expand:
+ print(convert88to256(options.expand))
+ else:
+ term = _terminal()
+ if term is None:
+ print("Your terminal reports that it has no color support.")
+ else:
+ if options.basiccodes:
+ print("Basic 16 color chart with SGR ANSI escape codes.\n")
+ term16.basiccodes()
+ else:
+ term.display()
+
+if __name__ == "__main__":
+ main()
+
diff --git a/scripts/whoneeds b/scripts/whoneeds
new file mode 100755
index 0000000..6f8f23c
--- /dev/null
+++ b/scripts/whoneeds
@@ -0,0 +1,71 @@
+#!/bin/bash
+# whoneeds package : shows explicitly installed packages that require some package
+
+# we use associative arrays to get uniqueness for "free"
+typeset -A root_packages
+typeset -A walked_nodes
+query="$1"
+
+function walk_nodes () {
+ local package="$1"
+
+ # if we've walked this node before, skip. This drastically
+ # reduces overhead for a relatively cheap operation
+ [[ "${walked_nodes[$package]}" -eq 1 ]] && return 0
+ walked_nodes["$package"]=1
+
+ # we do this so that we can make a single call to pacman
+ # to get both bits of information that we require
+ result=( $(LC_ALL=c pacman -Qi "$package" | awk -F':' \
+ 'BEGIN { tag = ""; dependents = ""; explicit = 0 }
+ {
+ # since the formatting of the pacman output is more for human
+ # consumption than programmatic, we find ourselves with the following need.
+ # if we have two fields, then we know we have a proper identifier on the line
+ # so we store the identifier as a current tag
+ # All identifier checks are made against the current tag, which allows us
+ # to deal with instances where "Required By" spans lines
+ if (NF == 2) { tag = $1 }
+ if (tag ~ /^Required By[ ]*$/) { dependents = dependents $(NF) }
+ if ($1 ~ /^Install Reason $/ && $2 ~/^ Explicitly installed/) { explicit = 1 }
+ }
+ END { print explicit,dependents}') )
+
+ # and if we hit an issue retrieving package information
+ if [[ ${#result[*]} -lt 2 ]]; then
+ echo "error: could not get information on $package" 1>&2
+ exit 3
+ fi
+ if [[ ${result[0]} -eq 1 ]]; then
+ # we found an explicitly installed package that relies on
+ # the original query. Add it to our array, provided it isn't
+ # the original query, as that would be useless information
+ [[ "$query" != "$package" ]] && root_packages["$package"]=1
+ fi
+ if [[ "${result[1]}" != "None" ]]; then
+ # iterate over our 'Required By:' packages
+ dependents="${result[@]:1:${#result[*]}}"
+ for i in "$dependents"; do
+ walk_nodes "$i"
+ done
+ fi
+}
+
+if [ $# -ne 1 ]; then
+ echo "error: unexpected number of arguments" 1>&2
+ echo "Usage: $(basename $0) <package-name>"
+ exit 2
+fi
+
+walk_nodes "$1"
+echo "Packages that depend on [$query]"
+if [[ -n "${!root_packages[*]}" ]]; then
+ for pkg in "${!root_packages[@]}"; do
+ echo " $pkg"
+ done | sort
+ exit 0
+fi
+echo " None"
+exit 1
+
+# vim: set ts=4 sw=4 et:
diff --git a/vim/.netrwhist b/vim/.netrwhist
new file mode 100644
index 0000000..788e683
--- /dev/null
+++ b/vim/.netrwhist
@@ -0,0 +1,10 @@
+let g:netrw_dirhistmax =10
+let g:netrw_dirhist_cnt =8
+let g:netrw_dirhist_1='/home/matias/Moonlighting/ssh/app/views/creations'
+let g:netrw_dirhist_2='/home/matias/Moonlighting/other_projects/rendis'
+let g:netrw_dirhist_3='/home/matias/Moonlighting/other_projects/rendis/etc'
+let g:netrw_dirhist_4='/home/matias/Moonlighting/other_projects/rendis/etc/init.d'
+let g:netrw_dirhist_5='/home/matias'
+let g:netrw_dirhist_6='/home/matias/Desktop'
+let g:netrw_dirhist_7='/home/matias/Desktop/xmpp client'
+let g:netrw_dirhist_8='/home/matias/Moonlighting/ssh'
diff --git a/vim/autoload/pathogen.vim b/vim/autoload/pathogen.vim
new file mode 100644
index 0000000..a3a8f1d
--- /dev/null
+++ b/vim/autoload/pathogen.vim
@@ -0,0 +1,332 @@
+" pathogen.vim - path option manipulation
+" Maintainer: Tim Pope <http://tpo.pe/>
+" Version: 2.3
+
+" Install in ~/.vim/autoload (or ~\vimfiles\autoload).
+"
+" For management of individually installed plugins in ~/.vim/bundle (or
+" ~\vimfiles\bundle), adding `execute pathogen#infect()` to the top of your
+" .vimrc is the only other setup necessary.
+"
+" The API is documented inline below. For maximum ease of reading,
+" :set foldmethod=marker
+
+if exists("g:loaded_pathogen") || &cp
+ finish
+endif
+let g:loaded_pathogen = 1
+
+" Point of entry for basic default usage. Give a relative path to invoke
+" pathogen#interpose() (defaults to "bundle/{}"), or an absolute path to invoke
+" pathogen#surround(). For backwards compatibility purposes, a full path that
+" does not end in {} or * is given to pathogen#runtime_prepend_subdirectories()
+" instead.
+function! pathogen#infect(...) abort " {{{1
+ for path in a:0 ? filter(reverse(copy(a:000)), 'type(v:val) == type("")') : ['bundle/{}']
+ if path =~# '^[^\\/]\+$'
+ call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')')
+ call pathogen#interpose(path . '/{}')
+ elseif path =~# '^[^\\/]\+[\\/]\%({}\|\*\)$'
+ call pathogen#interpose(path)
+ elseif path =~# '[\\/]\%({}\|\*\)$'
+ call pathogen#surround(path)
+ else
+ call s:warn('Change pathogen#infect('.string(path).') to pathogen#infect('.string(path.'/{}').')')
+ call pathogen#surround(path . '/{}')
+ endif
+ endfor
+ call pathogen#cycle_filetype()
+ return ''
+endfunction " }}}1
+
+" Split a path into a list.
+function! pathogen#split(path) abort " {{{1
+ if type(a:path) == type([]) | return a:path | endif
+ let split = split(a:path,'\\\@<!\%(\\\\\)*\zs,')
+ return map(split,'substitute(v:val,''\\\([\\,]\)'',''\1'',"g")')
+endfunction " }}}1
+
+" Convert a list to a path.
+function! pathogen#join(...) abort " {{{1
+ if type(a:1) == type(1) && a:1
+ let i = 1
+ let space = ' '
+ else
+ let i = 0
+ let space = ''
+ endif
+ let path = ""
+ while i < a:0
+ if type(a:000[i]) == type([])
+ let list = a:000[i]
+ let j = 0
+ while j < len(list)
+ let escaped = substitute(list[j],'[,'.space.']\|\\[\,'.space.']\@=','\\&','g')
+ let path .= ',' . escaped
+ let j += 1
+ endwhile
+ else
+ let path .= "," . a:000[i]
+ endif
+ let i += 1
+ endwhile
+ return substitute(path,'^,','','')
+endfunction " }}}1
+
+" Convert a list to a path with escaped spaces for 'path', 'tag', etc.
+function! pathogen#legacyjoin(...) abort " {{{1
+ return call('pathogen#join',[1] + a:000)
+endfunction " }}}1
+
+" Turn filetype detection off and back on again if it was already enabled.
+function! pathogen#cycle_filetype() " {{{1
+ if exists('g:did_load_filetypes')
+ filetype off
+ filetype on
+ endif
+endfunction " }}}1
+
+" Check if a bundle is disabled. A bundle is considered disabled if its
+" basename or full name is included in the list g:pathogen_disabled.
+function! pathogen#is_disabled(path) abort " {{{1
+ let sep = pathogen#slash()
+ let blacklist = get(g:, 'pathogen_blacklist', get(g:, 'pathogen_disabled', []))
+ return index(blacklist, fnamemodify(a:path, ':t')) != -1 || index(blacklist, a:path) != -1
+endfunction "}}}1
+
+" Prepend the given directory to the runtime path and append its corresponding
+" after directory. If the directory is already included, move it to the
+" outermost position. Wildcards are added as is. Ending a path in /{} causes
+" all subdirectories to be added (except those in g:pathogen_disabled).
+function! pathogen#surround(path) abort " {{{1
+ let sep = pathogen#slash()
+ let rtp = pathogen#split(&rtp)
+ if a:path =~# '[\\/]{}$'
+ let path = fnamemodify(a:path[0:-4], ':p:s?[\\/]\=$??')
+ let before = filter(pathogen#glob_directories(path.sep.'*'), '!pathogen#is_disabled(v:val)')
+ let after = filter(reverse(pathogen#glob_directories(path.sep."*".sep."after")), '!pathogen#is_disabled(v:val[0:-7])')
+ call filter(rtp,'v:val[0:strlen(path)-1] !=# path')
+ else
+ let path = fnamemodify(a:path, ':p:s?[\\/]\=$??')
+ let before = [path]
+ let after = [path . sep . 'after']
+ call filter(rtp, 'index(before + after, v:val) == -1')
+ endif
+ let &rtp = pathogen#join(before, rtp, after)
+ return &rtp
+endfunction " }}}1
+
+" For each directory in the runtime path, add a second entry with the given
+" argument appended. If the argument ends in '/{}', add a separate entry for
+" each subdirectory.
+function! pathogen#interpose(name) abort " {{{1
+ let sep = pathogen#slash()
+ let name = a:name
+ if has_key(s:done_bundles, name)
+ return ""
+ endif
+ let s:done_bundles[name] = 1
+ let list = []
+ for dir in pathogen#split(&rtp)
+ if dir =~# '\<after$'
+ if name =~# '{}$'
+ let list += filter(pathogen#glob_directories(substitute(dir,'after$',name[0:-3],'').'*'.sep.'after'), '!pathogen#is_disabled(v:val[0:-7])') + [dir]
+ else
+ let list += [dir, substitute(dir, 'after$', '', '') . name . sep . 'after']
+ endif
+ else
+ if name =~# '{}$'
+ let list += [dir] + filter(pathogen#glob_directories(dir.sep.name[0:-3].'*'), '!pathogen#is_disabled(v:val)')
+ else
+ let list += [dir . sep . name, dir]
+ endif
+ endif
+ endfor
+ let &rtp = pathogen#join(pathogen#uniq(list))
+ return 1
+endfunction
+
+let s:done_bundles = {}
+
+" }}}1
+
+" Invoke :helptags on all non-$VIM doc directories in runtimepath.
+function! pathogen#helptags() abort " {{{1
+ let sep = pathogen#slash()
+ for glob in pathogen#split(&rtp)
+ for dir in map(split(glob(glob), "\n"), 'v:val.sep."/doc/".sep')
+ if (dir)[0 : strlen($VIMRUNTIME)] !=# $VIMRUNTIME.sep && filewritable(dir) == 2 && !empty(split(glob(dir.'*.txt'))) && (!filereadable(dir.'tags') || filewritable(dir.'tags'))
+ silent! execute 'helptags' pathogen#fnameescape(dir)
+ endif
+ endfor
+ endfor
+endfunction " }}}1
+
+command! -bar Helptags :call pathogen#helptags()
+
+" Execute the given command. This is basically a backdoor for --remote-expr.
+function! pathogen#execute(...) abort " {{{1
+ for command in a:000
+ execute command
+ endfor
+ return ''
+endfunction " }}}1
+
+" Section: Unofficial
+
+" \ on Windows unless shellslash is set, / everywhere else.
+function! pathogen#slash() abort " {{{1
+ return !exists("+shellslash") || &shellslash ? '/' : '\'
+endfunction " }}}1
+
+function! pathogen#separator() abort " {{{1
+ return pathogen#slash()
+endfunction " }}}1
+
+" Convenience wrapper around glob() which returns a list.
+function! pathogen#glob(pattern) abort " {{{1
+ let files = split(glob(a:pattern),"\n")
+ return map(files,'substitute(v:val,"[".pathogen#slash()."/]$","","")')
+endfunction "}}}1
+
+" Like pathogen#glob(), only limit the results to directories.
+function! pathogen#glob_directories(pattern) abort " {{{1
+ return filter(pathogen#glob(a:pattern),'isdirectory(v:val)')
+endfunction "}}}1
+
+" Remove duplicates from a list.
+function! pathogen#uniq(list) abort " {{{1
+ let i = 0
+ let seen = {}
+ while i < len(a:list)
+ if (a:list[i] ==# '' && exists('empty')) || has_key(seen,a:list[i])
+ call remove(a:list,i)
+ elseif a:list[i] ==# ''
+ let i += 1
+ let empty = 1
+ else
+ let seen[a:list[i]] = 1
+ let i += 1
+ endif
+ endwhile
+ return a:list
+endfunction " }}}1
+
+" Backport of fnameescape().
+function! pathogen#fnameescape(string) abort " {{{1
+ if exists('*fnameescape')
+ return fnameescape(a:string)
+ elseif a:string ==# '-'
+ return '\-'
+ else
+ return substitute(escape(a:string," \t\n*?[{`$\\%#'\"|!<"),'^[+>]','\\&','')
+ endif
+endfunction " }}}1
+
+" Like findfile(), but hardcoded to use the runtimepath.
+function! pathogen#runtime_findfile(file,count) abort "{{{1
+ let rtp = pathogen#join(1,pathogen#split(&rtp))
+ let file = findfile(a:file,rtp,a:count)
+ if file ==# ''
+ return ''
+ else
+ return fnamemodify(file,':p')
+ endif
+endfunction " }}}1
+
+" Section: Deprecated
+
+function! s:warn(msg)
+ echohl WarningMsg
+ echomsg a:msg
+ echohl NONE
+endfunction
+
+" Prepend all subdirectories of path to the rtp, and append all 'after'
+" directories in those subdirectories. Deprecated.
+function! pathogen#runtime_prepend_subdirectories(path) " {{{1
+ call s:warn('Change pathogen#runtime_prepend_subdirectories('.string(a:path).') to pathogen#infect('.string(a:path.'/{}').')')
+ return pathogen#surround(a:path . pathogen#slash() . '{}')
+endfunction " }}}1
+
+function! pathogen#incubate(...) abort " {{{1
+ let name = a:0 ? a:1 : 'bundle/{}'
+ call s:warn('Change pathogen#incubate('.(a:0 ? string(a:1) : '').') to pathogen#infect('.string(name).')')
+ return pathogen#interpose(name)
+endfunction " }}}1
+
+" Deprecated alias for pathogen#interpose().
+function! pathogen#runtime_append_all_bundles(...) abort " {{{1
+ if a:0
+ call s:warn('Change pathogen#runtime_append_all_bundles('.string(a:1).') to pathogen#infect('.string(a:1.'/{}').')')
+ else
+ call s:warn('Change pathogen#runtime_append_all_bundles() to pathogen#infect()')
+ endif
+ return pathogen#interpose(a:0 ? a:1 . '/{}' : 'bundle/{}')
+endfunction " }}}1
+
+if exists(':Vedit')
+ finish
+endif
+
+let s:vopen_warning = 0
+
+function! s:find(count,cmd,file,lcd) " {{{1
+ let rtp = pathogen#join(1,pathogen#split(&runtimepath))
+ let file = pathogen#runtime_findfile(a:file,a:count)
+ if file ==# ''
+ return "echoerr 'E345: Can''t find file \"".a:file."\" in runtimepath'"
+ endif
+ if !s:vopen_warning
+ let s:vopen_warning = 1
+ let warning = '|echohl WarningMsg|echo "Install scriptease.vim to continue using :V'.a:cmd.'"|echohl NONE'
+ else
+ let warning = ''
+ endif
+ if a:lcd
+ let path = file[0:-strlen(a:file)-2]
+ execute 'lcd `=path`'
+ return a:cmd.' '.pathogen#fnameescape(a:file) . warning
+ else
+ return a:cmd.' '.pathogen#fnameescape(file) . warning
+ endif
+endfunction " }}}1
+
+function! s:Findcomplete(A,L,P) " {{{1
+ let sep = pathogen#slash()
+ let cheats = {
+ \'a': 'autoload',
+ \'d': 'doc',
+ \'f': 'ftplugin',
+ \'i': 'indent',
+ \'p': 'plugin',
+ \'s': 'syntax'}
+ if a:A =~# '^\w[\\/]' && has_key(cheats,a:A[0])
+ let request = cheats[a:A[0]].a:A[1:-1]
+ else
+ let request = a:A
+ endif
+ let pattern = substitute(request,'/\|\'.sep,'*'.sep,'g').'*'
+ let found = {}
+ for path in pathogen#split(&runtimepath)
+ let path = expand(path, ':p')
+ let matches = split(glob(path.sep.pattern),"\n")
+ call map(matches,'isdirectory(v:val) ? v:val.sep : v:val')
+ call map(matches,'expand(v:val, ":p")[strlen(path)+1:-1]')
+ for match in matches
+ let found[match] = 1
+ endfor
+ endfor
+ return sort(keys(found))
+endfunction " }}}1
+
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Ve :execute s:find(<count>,'edit<bang>',<q-args>,0)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vedit :execute s:find(<count>,'edit<bang>',<q-args>,0)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vopen :execute s:find(<count>,'edit<bang>',<q-args>,1)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vsplit :execute s:find(<count>,'split',<q-args>,<bang>1)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vvsplit :execute s:find(<count>,'vsplit',<q-args>,<bang>1)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vtabedit :execute s:find(<count>,'tabedit',<q-args>,<bang>1)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vpedit :execute s:find(<count>,'pedit',<q-args>,<bang>1)
+command! -bar -bang -range=1 -nargs=1 -complete=customlist,s:Findcomplete Vread :execute s:find(<count>,'read',<q-args>,<bang>1)
+
+" vim:set et sw=2:
diff --git a/vim/colors/biogoo.vim b/vim/colors/biogoo.vim
new file mode 100644
index 0000000..bef7576
--- /dev/null
+++ b/vim/colors/biogoo.vim
@@ -0,0 +1,110 @@
+" Vim color file - biogoo
+" Generated by http://bytefluent.com/vivify 2014-07-15
+set background=light
+if version > 580
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+
+set t_Co=256
+let g:colors_name = "biogoo"
+
+hi IncSearch guifg=#ffffff guibg=#0000ff guisp=#0000ff gui=bold ctermfg=15 ctermbg=21 cterm=bold
+hi WildMenu guifg=#540054 guibg=NONE guisp=NONE gui=NONE ctermfg=53 ctermbg=NONE cterm=NONE
+"hi SignColumn -- no settings --
+hi SpecialComment guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi Typedef guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi Title guifg=#404040 guibg=NONE guisp=NONE gui=bold ctermfg=238 ctermbg=NONE cterm=bold
+hi Folded guifg=#00007f guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=18 ctermbg=254 cterm=NONE
+hi PreCondit guifg=#295498 guibg=NONE guisp=NONE gui=bold ctermfg=24 ctermbg=NONE cterm=bold
+hi Include guifg=#295498 guibg=NONE guisp=NONE gui=bold ctermfg=24 ctermbg=NONE cterm=bold
+hi TabLineSel guifg=#00007f guibg=#eeeeee guisp=#eeeeee gui=bold ctermfg=18 ctermbg=255 cterm=bold
+hi StatusLineNC guifg=#676767 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=241 ctermbg=15 cterm=NONE
+"hi CTagsMember -- no settings --
+hi NonText guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+"hi CTagsGlobalConstant -- no settings --
+hi DiffText guifg=#ee0000 guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=196 ctermbg=254 cterm=NONE
+hi ErrorMsg guifg=#ffffff guibg=#ff0000 guisp=#ff0000 gui=bold ctermfg=15 ctermbg=196 cterm=bold
+"hi Ignore -- no settings --
+hi Debug guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi PMenuSbar guifg=NONE guibg=#99cc99 guisp=#99cc99 gui=NONE ctermfg=NONE ctermbg=151 cterm=NONE
+hi Identifier guifg=#004000 guibg=NONE guisp=NONE gui=NONE ctermfg=22 ctermbg=NONE cterm=NONE
+hi SpecialChar guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi Conditional guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi StorageClass guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi Todo guifg=#00007f guibg=#e5e5e5 guisp=#e5e5e5 gui=underline ctermfg=18 ctermbg=254 cterm=underline
+hi Special guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi LineNr guifg=#303030 guibg=#e5e5e5 guisp=#e5e5e5 gui=underline ctermfg=236 ctermbg=254 cterm=underline
+hi StatusLine guifg=#00007f guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=18 ctermbg=15 cterm=NONE
+hi Normal guifg=#000000 guibg=#d6d6d6 guisp=#d6d6d6 gui=NONE ctermfg=NONE ctermbg=188 cterm=NONE
+hi Label guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+"hi CTagsImport -- no settings --
+hi PMenuSel guifg=#ffffff guibg=#993333 guisp=#993333 gui=NONE ctermfg=15 ctermbg=131 cterm=NONE
+hi Search guifg=NONE guibg=#ffff00 guisp=#ffff00 gui=NONE ctermfg=NONE ctermbg=11 cterm=NONE
+"hi CTagsGlobalVariable -- no settings --
+hi Delimiter guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi Statement guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi SpellRare guifg=#ffffff guibg=#b85d00 guisp=#b85d00 gui=NONE ctermfg=15 ctermbg=130 cterm=NONE
+"hi EnumerationValue -- no settings --
+hi Comment guifg=#0000c3 guibg=NONE guisp=NONE gui=NONE ctermfg=4 ctermbg=NONE cterm=NONE
+hi Character guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+hi Float guifg=#b85d00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE
+hi Number guifg=#b85d00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE
+hi Boolean guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi Operator guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi CursorLine guifg=NONE guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+"hi Union -- no settings --
+hi TabLineFill guifg=#d6d6d6 guibg=NONE guisp=NONE gui=NONE ctermfg=188 ctermbg=NONE cterm=NONE
+hi Question guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi WarningMsg guifg=#500000 guibg=NONE guisp=NONE gui=NONE ctermfg=52 ctermbg=NONE cterm=NONE
+hi VisualNOS guifg=#007f00 guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=2 ctermbg=254 cterm=NONE
+hi DiffDelete guifg=#7f0000 guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=3 ctermbg=254 cterm=NONE
+hi ModeMsg guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi CursorColumn guifg=NONE guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+hi Define guifg=#0c3b6b guibg=NONE guisp=NONE gui=bold ctermfg=17 ctermbg=NONE cterm=bold
+hi Function guifg=#7f0000 guibg=NONE guisp=NONE gui=NONE ctermfg=3 ctermbg=NONE cterm=NONE
+hi FoldColumn guifg=#00007f guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=18 ctermbg=254 cterm=NONE
+hi PreProc guifg=#0c3b6b guibg=NONE guisp=NONE gui=bold ctermfg=17 ctermbg=NONE cterm=bold
+"hi EnumerationName -- no settings --
+hi Visual guifg=#7f7f7f guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=8 ctermbg=15 cterm=NONE
+hi MoreMsg guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi SpellCap guifg=#ffffff guibg=#7f007f guisp=#7f007f gui=NONE ctermfg=15 ctermbg=90 cterm=NONE
+hi VertSplit guifg=#676767 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=241 ctermbg=15 cterm=NONE
+hi Exception guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi Keyword guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi Type guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi DiffChange guifg=#00007f guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=18 ctermbg=254 cterm=NONE
+hi Cursor guifg=#ffffff guibg=#00007f guisp=#00007f gui=NONE ctermfg=15 ctermbg=18 cterm=NONE
+hi SpellLocal guifg=#ffffff guibg=#007f7f guisp=#007f7f gui=NONE ctermfg=15 ctermbg=6 cterm=NONE
+hi Error guifg=#d6d6d6 guibg=#7f0000 guisp=#7f0000 gui=NONE ctermfg=188 ctermbg=3 cterm=NONE
+hi PMenu guifg=#000000 guibg=#cc9999 guisp=#cc9999 gui=NONE ctermfg=NONE ctermbg=181 cterm=NONE
+hi SpecialKey guifg=#00007f guibg=NONE guisp=NONE gui=NONE ctermfg=18 ctermbg=NONE cterm=NONE
+hi Constant guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+"hi DefinedName -- no settings --
+hi Tag guifg=#007f00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi String guifg=#d10000 guibg=NONE guisp=NONE gui=NONE ctermfg=160 ctermbg=NONE cterm=NONE
+hi PMenuThumb guifg=#339933 guibg=NONE guisp=NONE gui=NONE ctermfg=71 ctermbg=NONE cterm=NONE
+hi MatchParen guifg=#ffffff guibg=#00a000 guisp=#00a000 gui=NONE ctermfg=15 ctermbg=34 cterm=NONE
+"hi LocalVariable -- no settings --
+hi Repeat guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi SpellBad guifg=#ffffff guibg=#7f0000 guisp=#7f0000 gui=NONE ctermfg=15 ctermbg=3 cterm=NONE
+"hi CTagsClass -- no settings --
+hi Directory guifg=#b85d00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE
+hi Structure guifg=#540054 guibg=NONE guisp=NONE gui=bold ctermfg=53 ctermbg=NONE cterm=bold
+hi Macro guifg=#295498 guibg=NONE guisp=NONE gui=NONE ctermfg=24 ctermbg=NONE cterm=NONE
+hi Underlined guifg=#b85d00 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE
+hi DiffAdd guifg=#007f00 guibg=#e5e5e5 guisp=#e5e5e5 gui=NONE ctermfg=2 ctermbg=254 cterm=NONE
+hi TabLine guifg=#222222 guibg=#d6d6d6 guisp=#d6d6d6 gui=NONE ctermfg=235 ctermbg=188 cterm=NONE
+hi cursorim guifg=#1F1F1F guibg=#FFEE68 guisp=#FFEE68 gui=NONE ctermfg=234 ctermbg=227 cterm=NONE
+"hi clear -- no settings --
+hi htmlitalic guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=italic ctermfg=252 ctermbg=234 cterm=NONE
+hi htmlboldunderlineitalic guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=bold,italic,underline ctermfg=252 ctermbg=234 cterm=bold,underline
+hi htmlbolditalic guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=bold,italic ctermfg=252 ctermbg=234 cterm=bold
+hi htmlunderlineitalic guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=italic,underline ctermfg=252 ctermbg=234 cterm=underline
+hi htmlbold guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=bold ctermfg=252 ctermbg=234 cterm=bold
+hi htmlboldunderline guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=bold,underline ctermfg=252 ctermbg=234 cterm=bold,underline
+hi htmlunderline guifg=#D0D0D0 guibg=#1F1F1F guisp=#1F1F1F gui=underline ctermfg=252 ctermbg=234 cterm=underline
+"hi default -- no settings --
+hi spellerrors guifg=#ffffff guibg=#7f0000 guisp=#7f0000 gui=NONE ctermfg=15 ctermbg=3 cterm=NONE
diff --git a/vim/colors/flattr.vim b/vim/colors/flattr.vim
new file mode 100644
index 0000000..28c315f
--- /dev/null
+++ b/vim/colors/flattr.vim
@@ -0,0 +1,100 @@
+hi clear
+if version > 580
+hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+let g:colors_name="flattr"
+hi Boolean guifg=#8DEFB5 ctermfg=121
+hi Character guifg=#FFF382 ctermfg=228
+hi ColorColumn guibg=#232526 ctermbg=235
+hi Conditional guifg=#FF8A3C ctermfg=209 gui=bold
+hi Conceal guifg=#BA7FFA ctermfg=141 guibg=#1B1D1E ctermbg=234 gui=bold
+hi Constant guifg=#A1DD63 ctermfg=149 gui=bold
+hi Comment guifg=#5C5C5C ctermfg=59
+hi CursorLine guibg=#293739 ctermbg=236
+hi CursorLineNr guifg=#FFB761 ctermfg=215 gui=none
+hi CursorColumn guibg=#293739 ctermbg=236
+hi Cursor guifg=#000000 ctermfg=0 guibg=#F8F8F0 ctermbg=15
+hi Debug guifg=#FF154A ctermfg=197 gui=bold
+hi Define guifg=#FF9E56 ctermfg=215
+hi Delimiter guifg=#8F8F8F ctermfg=245
+hi DiffAdd guifg=#000000 ctermfg=0 guibg=#7EC4EF ctermbg=117
+hi DiffChange guifg=#4EDC44 ctermfg=77 guibg=#4C4745 ctermbg=238
+hi DiffDelete guifg=#FF311D ctermfg=202 guibg=#4F4F4F ctermbg=239
+hi DiffText guibg=#4C4745 ctermbg=238 gui=italic,bold
+hi Directory guifg=#45E22E ctermfg=76 gui=bold
+hi Error guifg=#E6DB74 ctermfg=186 guibg=#555555 ctermbg=240
+hi ErrorMsg guifg=#F94226 ctermfg=202 guibg=#232526 ctermbg=235 gui=bold
+hi Exception guifg=#8ABD25 ctermfg=106 gui=bold
+hi Float guifg=#ECE352 ctermfg=221
+hi FoldColumn guifg=#465457 ctermfg=239 guibg=#000000 ctermbg=234
+hi Folded guifg=#465457 ctermfg=239 guibg=#000000 ctermbg=234
+hi Function guifg=#FFB792 ctermfg=216
+hi helpExample guifg=#65AE8D ctermfg=79
+hi iCursor guifg=#000000 ctermfg=0 guibg=#F8F8F0 ctermbg=15
+hi Identifier guifg=#F9A33D ctermfg=215
+hi Ignore guifg=#656565 ctermfg=241 guibg=bg
+hi IncSearch guifg=#DCCA2D ctermfg=184 guibg=#000000 ctermbg=234
+hi Keyword guifg=#78D3F4 ctermfg=117 gui=bold
+hi Label guifg=#FFD554 ctermfg=221 gui=none
+hi LineNr guifg=#465457 ctermfg=239 guibg=#232526 ctermbg=235
+hi Macro guifg=#CF8BA8 ctermfg=175 gui=italic
+hi MatchParen guifg=#000000 ctermfg=0 guibg=#FFAE4F ctermbg=215 gui=bold
+hi ModeMsg guifg=#3DFBA5 ctermfg=85
+hi MoreMsg guifg=#8EFCCD ctermfg=122
+hi NonText guifg=#465457 ctermfg=239
+hi Normal guifg=#E5E5E5 ctermfg=250 guibg=#1B1D1E ctermbg=0
+hi Number guifg=#8DEFB5 ctermfg=121
+hi Operator guifg=#F92672 ctermfg=197
+" complete menu
+hi Pmenu guifg=#66D9EF ctermfg=81 guibg=#000000 ctermbg=234
+hi PmenuSel guibg=#808080 ctermbg=236
+hi PmenuSbar guibg=#080808 ctermbg=0
+hi PmenuThumb guifg=#66D9EF ctermfg=81
+hi PreCondit guifg=#C6F961 ctermfg=191 gui=bold
+hi PreProc guifg=#1DFFB0 ctermfg=49
+hi Question guifg=#8D8FF8 ctermfg=105
+hi Repeat guifg=#FF7499 ctermfg=210 gui=bold
+hi Search guifg=#000000 ctermfg=0 guibg=#F3C82F ctermbg=220
+" marks
+hi SignColumn guifg=#C2FF46 ctermfg=155 guibg=#232526 ctermbg=235
+hi Special guifg=#94DBE9 ctermfg=116 guibg=bg gui=italic
+hi SpecialChar guifg=#85D99A ctermfg=114 gui=bold
+hi SpecialComment guifg=#6A6E6F ctermfg=242 gui=bold
+hi SpecialKey guifg=#D466EF ctermfg=171 gui=italic
+if has("spell")
+ hi SpellBad guisp=#FF976D gui=undercurl
+ hi SpellCap guisp=#9999FD gui=undercurl
+ hi SpellLocal guisp=#5CD8F5 gui=undercurl
+ hi SpellRare guisp=#E5CBCB gui=undercurl
+endif
+hi Statement guifg=#61D1FD ctermfg=81 gui=bold
+hi StorageClass guifg=#ECA756 ctermfg=215 gui=italic
+hi String guifg=#FFF382 ctermfg=228
+hi Structure guifg=#7CC3F6 ctermfg=111
+hi Tabline guifg=#000000 ctermfg=016 guibg=#888888 ctermbg=14
+hi Tag guifg=#F7547C ctermfg=204 gui=italic
+hi Title guifg=#ef5939 ctermfg=203
+hi Todo guifg=#E962FB ctermfg=171 guibg=bg ctermbg=0 gui=bold
+hi Typedef guifg=#F6D94B ctermfg=221
+hi Type guifg=#BEEF66 ctermfg=155 gui=none
+hi Underlined guifg=#808080 ctermfg=244 gui=underline
+hi VertSplit guifg=#808080 ctermfg=244 guibg=#080808 ctermbg=0 gui=bold
+hi VisualNOS guibg=#403D3D ctermbg=237
+hi Visual guibg=#403D3D ctermbg=237
+hi WarningMsg guifg=#FF914C ctermfg=209 guibg=#333333 ctermbg=236 gui=bold
+hi WildMenu guifg=#ABBAFF ctermfg=147 guibg=#000000 ctermbg=234
+" for TagHighlight
+hi Class guifg=#18E28D ctermfg=42
+hi DefinedName guifg=#838ED7 ctermfg=104
+hi Enumerator guifg=#F5A281 ctermfg=216
+hi EnumeratorName guifg=#FD6161 ctermfg=203
+hi Member guifg=#66C1FF ctermfg=75
+hi Structure guifg=#90B4B7 ctermfg=109
+hi Union guifg=#F1C40F ctermfg=220
+hi GlobalConstant guifg=#16A085 ctermfg=36
+hi GlobalVariable guifg=#1ABC9C ctermfg=37
+hi LocalVariable guifg=#2ECC71 ctermfg=41
+set background=dark
diff --git a/vim/colors/gentooish.vim b/vim/colors/gentooish.vim
new file mode 100644
index 0000000..112c1a4
--- /dev/null
+++ b/vim/colors/gentooish.vim
@@ -0,0 +1,518 @@
+" Vim color file - gentooish
+" Generated by http://bytefluent.com/vivify 2014-07-15
+set background=dark
+if version > 580
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+
+set t_Co=256
+let g:colors_name = "gentooish"
+
+hi IncSearch guifg=#000000 guibg=#8bff95 guisp=#8bff95 gui=NONE ctermfg=NONE ctermbg=120 cterm=NONE
+hi WildMenu guifg=#cf7dff guibg=#1F0F29 guisp=#1F0F29 gui=NONE ctermfg=177 ctermbg=235 cterm=NONE
+hi SignColumn guifg=#00ffff guibg=#bcbcbc guisp=#bcbcbc gui=NONE ctermfg=14 ctermbg=250 cterm=NONE
+hi SpecialComment guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi Typedef guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Title guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi Folded guifg=#aaa400 guibg=#000000 guisp=#000000 gui=NONE ctermfg=142 ctermbg=NONE cterm=NONE
+hi PreCondit guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi Include guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi TabLineSel guifg=NONE guibg=NONE guisp=NONE gui=bold ctermfg=NONE ctermbg=NONE cterm=bold
+hi StatusLineNC guifg=#999999 guibg=#333333 guisp=#333333 gui=NONE ctermfg=246 ctermbg=236 cterm=NONE
+"hi CTagsMember -- no settings --
+hi NonText guifg=#555555 guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE
+"hi CTagsGlobalConstant -- no settings --
+hi DiffText guifg=#000000 guibg=#4cd169 guisp=#4cd169 gui=NONE ctermfg=NONE ctermbg=78 cterm=NONE
+hi ErrorMsg guifg=#cccccc guibg=#863132 guisp=#863132 gui=NONE ctermfg=252 ctermbg=95 cterm=NONE
+hi Ignore guifg=#555555 guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE
+hi Debug guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi PMenuSbar guifg=#cccccc guibg=#000000 guisp=#000000 gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi Identifier guifg=#4cbbd1 guibg=NONE guisp=NONE gui=NONE ctermfg=80 ctermbg=NONE cterm=NONE
+hi SpecialChar guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi Conditional guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi StorageClass guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Todo guifg=#cccccc guibg=#863132 guisp=#863132 gui=NONE ctermfg=252 ctermbg=95 cterm=NONE
+hi Special guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi LineNr guifg=#bbbbbb guibg=#222222 guisp=#222222 gui=NONE ctermfg=250 ctermbg=235 cterm=NONE
+hi StatusLine guifg=#cccccc guibg=#333333 guisp=#333333 gui=NONE ctermfg=252 ctermbg=236 cterm=NONE
+hi Normal guifg=#cccccc guibg=#191919 guisp=#191919 gui=NONE ctermfg=252 ctermbg=234 cterm=NONE
+hi Label guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+"hi CTagsImport -- no settings --
+hi PMenuSel guifg=#c476f1 guibg=#000000 guisp=#000000 gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Search guifg=#cccccc guibg=#863132 guisp=#863132 gui=NONE ctermfg=252 ctermbg=95 cterm=NONE
+"hi CTagsGlobalVariable -- no settings --
+hi Delimiter guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi Statement guifg=#4cd169 guibg=NONE guisp=NONE gui=NONE ctermfg=78 ctermbg=NONE cterm=NONE
+"hi SpellRare -- no settings --
+"hi EnumerationValue -- no settings --
+hi Comment guifg=#666666 guibg=NONE guisp=NONE gui=NONE ctermfg=241 ctermbg=NONE cterm=NONE
+hi Character guifg=#b8bb00 guibg=NONE guisp=NONE gui=NONE ctermfg=142 ctermbg=NONE cterm=NONE
+hi Float guifg=#ddaa66 guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+hi Number guifg=#ddaa66 guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+hi Boolean guifg=#00ff00 guibg=NONE guisp=NONE gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi Operator guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi CursorLine guifg=NONE guibg=#222222 guisp=#222222 gui=NONE ctermfg=NONE ctermbg=235 cterm=NONE
+"hi Union -- no settings --
+hi TabLineFill guifg=#1c1c1c guibg=#d0d0d0 guisp=#d0d0d0 gui=NONE ctermfg=234 ctermbg=252 cterm=NONE
+hi Question guifg=#cccccc guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi WarningMsg guifg=#cccccc guibg=#863132 guisp=#863132 gui=NONE ctermfg=252 ctermbg=95 cterm=NONE
+hi VisualNOS guifg=#cccccc guibg=#000000 guisp=#000000 gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi DiffDelete guifg=#cccccc guibg=#863132 guisp=#863132 gui=NONE ctermfg=252 ctermbg=95 cterm=NONE
+hi ModeMsg guifg=#cccccc guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi CursorColumn guifg=NONE guibg=#222222 guisp=#222222 gui=NONE ctermfg=NONE ctermbg=235 cterm=NONE
+hi Define guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi Function guifg=#4cbbd1 guibg=NONE guisp=NONE gui=NONE ctermfg=80 ctermbg=NONE cterm=NONE
+hi FoldColumn guifg=#cccccc guibg=#000000 guisp=#000000 gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi PreProc guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+"hi EnumerationName -- no settings --
+hi Visual guifg=#cccccc guibg=#1d474f guisp=#1d474f gui=NONE ctermfg=252 ctermbg=23 cterm=NONE
+hi MoreMsg guifg=#cccccc guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+"hi SpellCap -- no settings --
+hi VertSplit guifg=#cccccc guibg=#333333 guisp=#333333 gui=NONE ctermfg=252 ctermbg=236 cterm=NONE
+hi Exception guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Keyword guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Type guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi DiffChange guifg=NONE guibg=#541691 guisp=#541691 gui=NONE ctermfg=NONE ctermbg=54 cterm=NONE
+hi Cursor guifg=#000000 guibg=#8bff95 guisp=#8bff95 gui=NONE ctermfg=NONE ctermbg=120 cterm=NONE
+"hi SpellLocal -- no settings --
+hi Error guifg=#990000 guibg=#000000 guisp=#000000 gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi PMenu guifg=#cccccc guibg=#222222 guisp=#222222 gui=NONE ctermfg=252 ctermbg=235 cterm=NONE
+hi SpecialKey guifg=#6f6f2f guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi Constant guifg=#b8bb00 guibg=NONE guisp=NONE gui=NONE ctermfg=142 ctermbg=NONE cterm=NONE
+"hi DefinedName -- no settings --
+hi Tag guifg=#ffcd8b guibg=NONE guisp=NONE gui=NONE ctermfg=222 ctermbg=NONE cterm=NONE
+hi String guifg=#5dff9e guibg=#0f291a guisp=#0f291a gui=NONE ctermfg=85 ctermbg=22 cterm=NONE
+hi PMenuThumb guifg=#cccccc guibg=#333333 guisp=#333333 gui=NONE ctermfg=252 ctermbg=236 cterm=NONE
+hi MatchParen guifg=#ffffff guibg=#005500 guisp=#005500 gui=NONE ctermfg=15 ctermbg=22 cterm=NONE
+"hi LocalVariable -- no settings --
+hi Repeat guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+"hi SpellBad -- no settings --
+"hi CTagsClass -- no settings --
+hi Directory guifg=#8bff95 guibg=NONE guisp=NONE gui=NONE ctermfg=120 ctermbg=NONE cterm=NONE
+hi Structure guifg=#c476f1 guibg=NONE guisp=NONE gui=NONE ctermfg=177 ctermbg=NONE cterm=NONE
+hi Macro guifg=#9a383a guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi Underlined guifg=#cccccc guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi DiffAdd guifg=#cccccc guibg=#306d30 guisp=#306d30 gui=NONE ctermfg=252 ctermbg=65 cterm=NONE
+hi TabLine guifg=NONE guibg=#a8a8a8 guisp=#a8a8a8 gui=underline ctermfg=NONE ctermbg=248 cterm=underline
+hi cursorim guifg=NONE guibg=#90ee90 guisp=#90ee90 gui=NONE ctermfg=NONE ctermbg=120 cterm=NONE
+"hi clear -- no settings --
+hi pythonoperator guifg=#a26561 guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi mbenormal guifg=#cf2e3c guibg=#101c3f guisp=#101c3f gui=NONE ctermfg=167 ctermbg=17 cterm=NONE
+hi perlspecialstring guifg=#2300d0 guibg=#212240 guisp=#212240 gui=NONE ctermfg=20 ctermbg=238 cterm=NONE
+hi doxygenspecial guifg=#fdf3f3 guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE
+hi mbechanged guifg=#8f5fee guibg=#101c3f guisp=#101c3f gui=NONE ctermfg=99 ctermbg=17 cterm=NONE
+hi mbevisiblechanged guifg=#8f5fee guibg=#8e8e8f guisp=#8e8e8f gui=NONE ctermfg=99 ctermbg=245 cterm=NONE
+hi doxygenparam guifg=#fdf3f3 guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE
+hi doxygensmallspecial guifg=#fdf3f3 guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE
+hi doxygenprev guifg=#fdf3f3 guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE
+hi perlspecialmatch guifg=#2300d0 guibg=#212240 guisp=#212240 gui=NONE ctermfg=20 ctermbg=238 cterm=NONE
+hi cformat guifg=#2300d0 guibg=#212240 guisp=#212240 gui=NONE ctermfg=20 ctermbg=238 cterm=NONE
+hi lcursor guifg=#1c1c1c guibg=#d0d0d0 guisp=#d0d0d0 gui=NONE ctermfg=234 ctermbg=252 cterm=NONE
+hi doxygenspecialmultilinedesc guifg=#ad5555 guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi taglisttagname guifg=#000000 guibg=#798779 guisp=#798779 gui=NONE ctermfg=NONE ctermbg=65 cterm=NONE
+hi doxygenbrief guifg=#fdc2c2 guibg=NONE guisp=NONE gui=NONE ctermfg=224 ctermbg=NONE cterm=NONE
+hi mbevisiblenormal guifg=#cfcf4d guibg=#8e8e8f guisp=#8e8e8f gui=NONE ctermfg=185 ctermbg=245 cterm=NONE
+hi user2 guifg=#8bff95 guibg=#333333 guisp=#333333 gui=NONE ctermfg=120 ctermbg=236 cterm=NONE
+hi user1 guifg=#999999 guibg=#333333 guisp=#333333 gui=NONE ctermfg=246 ctermbg=236 cterm=NONE
+hi doxygenspecialonelinedesc guifg=#ad5555 guibg=NONE guisp=NONE gui=NONE ctermfg=131 ctermbg=NONE cterm=NONE
+hi doxygencomment guifg=#6aada5 guibg=NONE guisp=NONE gui=NONE ctermfg=73 ctermbg=NONE cterm=NONE
+hi cspecialcharacter guifg=#2300d0 guibg=#212240 guisp=#212240 gui=NONE ctermfg=20 ctermbg=238 cterm=NONE
+hi browsesuffixes guifg=#cdc49d guibg=#162a55 guisp=#162a55 gui=NONE ctermfg=187 ctermbg=17 cterm=NONE
+hi rubyconstant guifg=#6098d7 guibg=NONE guisp=NONE gui=NONE ctermfg=68 ctermbg=NONE cterm=NONE
+hi rubylocalvariableormethod guifg=#D0D0FF guibg=NONE guisp=NONE gui=NONE ctermfg=189 ctermbg=NONE cterm=NONE
+hi xmltagname guifg=#F8BB00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi rubyblockparameter guifg=#FFFFFF guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi rubyclass guifg=#c199c5 guibg=NONE guisp=NONE gui=NONE ctermfg=182 ctermbg=NONE cterm=NONE
+hi xmlendtag guifg=#F8BB00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi rubypseudovariable guifg=#239999 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE
+hi rubyinstancevariable guifg=#a9e5f4 guibg=NONE guisp=NONE gui=NONE ctermfg=159 ctermbg=NONE cterm=NONE
+hi xmltag guifg=#F8BB00 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi rubystringdelimiter guifg=#efffe5 guibg=NONE guisp=NONE gui=NONE ctermfg=194 ctermbg=NONE cterm=NONE
+hi rubyinterpolation guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi rubypredefinedconstant guifg=#DA4939 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE
+hi stringdelimiter guifg=#556633 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi rubyregexp guifg=#E8A75C guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+hi string guifg=#c3e66b guibg=NONE guisp=NONE gui=NONE ctermfg=149 ctermbg=NONE cterm=NONE
+hi constant guifg=#c4fe05 guibg=NONE guisp=NONE gui=NONE ctermfg=190 ctermbg=NONE cterm=NONE
+"hi normal -- no settings --
+hi identifier guifg=#afb7ff guibg=NONE guisp=NONE gui=NONE ctermfg=147 ctermbg=NONE cterm=NONE
+hi comment guifg=#8A9184 guibg=NONE guisp=NONE gui=NONE ctermfg=65 ctermbg=NONE cterm=NONE
+hi rubyregexpdelimiter guifg=#fafffb guibg=NONE guisp=NONE gui=NONE ctermfg=194 ctermbg=NONE cterm=NONE
+hi rubyregexpspecial guifg=#a40073 guibg=NONE guisp=NONE gui=NONE ctermfg=126 ctermbg=NONE cterm=NONE
+hi rubypredefinedidentifier guifg=#5f8700 guibg=NONE guisp=NONE gui=NONE ctermfg=64 ctermbg=NONE cterm=NONE
+hi function guifg=#e16521 guibg=NONE guisp=NONE gui=NONE ctermfg=166 ctermbg=NONE cterm=NONE
+hi directory guifg=#dad085 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi rubysymbol guifg=#239999 guibg=NONE guisp=NONE gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE
+hi rubycontrol guifg=#d8f881 guibg=NONE guisp=NONE gui=NONE ctermfg=192 ctermbg=NONE cterm=NONE
+hi rubyidentifier guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi browsedirectory guifg=#7dffff guibg=NONE guisp=NONE gui=NONE ctermfg=123 ctermbg=NONE cterm=NONE
+hi type guifg=#719ec1 guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE
+"hi vimhigroup -- no settings --
+hi showpairshlp guifg=NONE guibg=#c4f0c4 guisp=#c4f0c4 gui=NONE ctermfg=NONE ctermbg=194 cterm=NONE
+hi showpairshle guifg=NONE guibg=#ff5555 guisp=#ff5555 gui=NONE ctermfg=NONE ctermbg=203 cterm=NONE
+hi showpairshl guifg=NONE guibg=#c4ffc4 guisp=#c4ffc4 gui=NONE ctermfg=NONE ctermbg=194 cterm=NONE
+hi jinjafilter guifg=#ff0086 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=198 ctermbg=230 cterm=NONE
+hi pythondoctest2 guifg=#3b916a guibg=NONE guisp=NONE gui=NONE ctermfg=72 ctermbg=NONE cterm=NONE
+hi jinjaraw guifg=#aaaaaa guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=248 ctermbg=230 cterm=NONE
+hi htmltagn guifg=#4aa04a guibg=NONE guisp=NONE gui=NONE ctermfg=71 ctermbg=NONE cterm=NONE
+hi pythonexception guifg=#f0c0f0 guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi jinjaoperator guifg=#ffffff guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=15 ctermbg=230 cterm=NONE
+hi jinjavarblock guifg=#ff0007 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=196 ctermbg=230 cterm=NONE
+hi jinjaattribute guifg=#dd7700 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=172 ctermbg=230 cterm=NONE
+hi pythondoctest guifg=#2f5f49 guibg=NONE guisp=NONE gui=NONE ctermfg=23 ctermbg=NONE cterm=NONE
+hi htmltagname guifg=#8a59e5 guibg=NONE guisp=NONE gui=NONE ctermfg=98 ctermbg=NONE cterm=NONE
+hi jinjastring guifg=#0086d2 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=32 ctermbg=230 cterm=NONE
+hi htmlspecialtagname guifg=#babdb6 guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE
+hi pythonfunction guifg=#ee0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+"hi pythonspaceerror -- no settings --
+hi jinjacomment guifg=#008800 guibg=#002300 guisp=#002300 gui=NONE ctermfg=28 ctermbg=22 cterm=NONE
+hi jinjanumber guifg=#bf0945 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=1 ctermbg=230 cterm=NONE
+hi pythoncoding guifg=#ff0086 guibg=NONE guisp=NONE gui=NONE ctermfg=198 ctermbg=NONE cterm=NONE
+hi jinjatagblock guifg=#ff0007 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=196 ctermbg=230 cterm=NONE
+hi jinjastatement guifg=#fb660a guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=202 ctermbg=230 cterm=NONE
+hi pythonbuiltinfunc guifg=#2b6ba2 guibg=NONE guisp=NONE gui=NONE ctermfg=25 ctermbg=NONE cterm=NONE
+hi htmltag guifg=#aad7ef guibg=NONE guisp=NONE gui=NONE ctermfg=153 ctermbg=NONE cterm=NONE
+hi pythonrun guifg=#ff0086 guibg=NONE guisp=NONE gui=NONE ctermfg=198 ctermbg=NONE cterm=NONE
+hi pythonclass guifg=#ff0086 guibg=NONE guisp=NONE gui=NONE ctermfg=198 ctermbg=NONE cterm=NONE
+hi pythonexclass guifg=#879075 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi pythonbuiltinobj guifg=#2b6ba2 guibg=NONE guisp=NONE gui=NONE ctermfg=25 ctermbg=NONE cterm=NONE
+hi jinjaspecial guifg=#008ffd guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=33 ctermbg=230 cterm=NONE
+hi htmlendtag guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi jinjavariable guifg=#92cd35 guibg=#fbf4c7 guisp=#fbf4c7 gui=NONE ctermfg=149 ctermbg=230 cterm=NONE
+hi underline guifg=#27b7ff guibg=NONE guisp=NONE gui=NONE ctermfg=39 ctermbg=NONE cterm=NONE
+hi htmlitalic guifg=#ffffe5 guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi htmlboldunderlineitalic guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi htmlbolditalic guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi htmlunderlineitalic guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi htmlbold guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi htmlboldunderline guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi htmlunderline guifg=#8b7d8b guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi htmllink guifg=#5590aa guibg=#102235 guisp=#102235 gui=NONE ctermfg=67 ctermbg=17 cterm=NONE
+hi menu guifg=#000000 guibg=#ff6a6a guisp=#ff6a6a gui=NONE ctermfg=NONE ctermbg=9 cterm=NONE
+hi scrollbar guifg=#d3d3d3 guibg=#a9a9a9 guisp=#a9a9a9 gui=NONE ctermfg=252 ctermbg=248 cterm=NONE
+hi pythonbuiltin guifg=#963a29 guibg=NONE guisp=NONE gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi phpstringdouble guifg=#8a59e5 guibg=NONE guisp=NONE gui=NONE ctermfg=98 ctermbg=NONE cterm=NONE
+hi javascriptstrings guifg=#8a59e5 guibg=NONE guisp=NONE gui=NONE ctermfg=98 ctermbg=NONE cterm=NONE
+hi htmlstring guifg=#8a59e5 guibg=NONE guisp=NONE gui=NONE ctermfg=98 ctermbg=NONE cterm=NONE
+hi phpstringsingle guifg=#8a59e5 guibg=NONE guisp=NONE gui=NONE ctermfg=98 ctermbg=NONE cterm=NONE
+"hi default -- no settings --
+hi titled guifg=#000000 guibg=#fffdfa guisp=#fffdfa gui=NONE ctermfg=NONE ctermbg=230 cterm=NONE
+hi incsearch guifg=#f0f0f0 guibg=#806060 guisp=#806060 gui=NONE ctermfg=255 ctermbg=95 cterm=NONE
+hi htmlh1 guifg=#fffefa guibg=#2e3312 guisp=#2e3312 gui=NONE ctermfg=230 ctermbg=58 cterm=NONE
+hi htmlh3 guifg=#c6c5c4 guibg=#2e3312 guisp=#2e3312 gui=NONE ctermfg=251 ctermbg=58 cterm=NONE
+hi htmlh2 guifg=#fffefa guibg=#042207 guisp=#042207 gui=NONE ctermfg=230 ctermbg=22 cterm=NONE
+hi htmlh5 guifg=#9e9d9c guibg=#2e3312 guisp=#2e3312 gui=NONE ctermfg=247 ctermbg=58 cterm=NONE
+hi htmlh4 guifg=#b2b2b1 guibg=#2e3312 guisp=#2e3312 gui=NONE ctermfg=249 ctermbg=58 cterm=NONE
+hi htmlh6 guifg=#8a8988 guibg=#2e3312 guisp=#2e3312 gui=NONE ctermfg=245 ctermbg=58 cterm=NONE
+hi cursor guifg=#000000 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+hi cterm guifg=#cefaf6 guibg=#000000 guisp=#000000 gui=NONE ctermfg=195 ctermbg=NONE cterm=NONE
+hi gui guifg=#cefaf6 guibg=#000000 guisp=#000000 gui=NONE ctermfg=195 ctermbg=NONE cterm=NONE
+hi javadocseetag guifg=#cc8902 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE
+hi number guifg=#fce94f guibg=NONE guisp=NONE gui=NONE ctermfg=227 ctermbg=NONE cterm=NONE
+hi keyword guifg=#fffce5 guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi rubyescape guifg=#d7f28c guibg=NONE guisp=NONE gui=NONE ctermfg=192 ctermbg=NONE cterm=NONE
+hi conditional guifg=#cc6abc guibg=NONE guisp=NONE gui=NONE ctermfg=170 ctermbg=NONE cterm=NONE
+hi rubyinterpolationdelimiter guifg=#a0a0a0 guibg=NONE guisp=NONE gui=NONE ctermfg=247 ctermbg=NONE cterm=NONE
+hi operator guifg=#fffefa guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi longlinewarning guifg=NONE guibg=#371b32 guisp=#371b32 gui=NONE ctermfg=NONE ctermbg=237 cterm=NONE
+hi pythonstatement guifg=#4e9a06 guibg=NONE guisp=NONE gui=NONE ctermfg=64 ctermbg=NONE cterm=NONE
+hi pythonescape guifg=#3465a4 guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE
+hi pythoncomment guifg=#0066ff guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE
+hi pythonprecondit guifg=#ef2929 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi pythonrawstring guifg=#ad7fa8 guibg=NONE guisp=NONE gui=NONE ctermfg=139 ctermbg=NONE cterm=NONE
+hi pythonconditional guifg=#d28202 guibg=NONE guisp=NONE gui=NONE ctermfg=172 ctermbg=NONE cterm=NONE
+hi pythonrepeat guifg=#4e9a06 guibg=NONE guisp=NONE gui=NONE ctermfg=64 ctermbg=NONE cterm=NONE
+hi constants guifg=#6782d3 guibg=NONE guisp=NONE gui=NONE ctermfg=68 ctermbg=NONE cterm=NONE
+hi char guifg=#61dd76 guibg=#2e452e guisp=#2e452e gui=NONE ctermfg=78 ctermbg=65 cterm=NONE
+hi tagname guifg=#a7a7a7 guibg=#660000 guisp=#660000 gui=NONE ctermfg=248 ctermbg=52 cterm=NONE
+hi foldecolumn guifg=#535353 guibg=#202020 guisp=#202020 gui=NONE ctermfg=239 ctermbg=234 cterm=NONE
+hi special guifg=#ebac47 guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE
+hi statement guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi cppstltype guifg=#729fcf guibg=NONE guisp=NONE gui=NONE ctermfg=110 ctermbg=NONE cterm=NONE
+hi vimfold guifg=#888888 guibg=#222222 guisp=#222222 gui=NONE ctermfg=102 ctermbg=235 cterm=NONE
+hi underlined guifg=#ad7fa8 guibg=NONE guisp=NONE gui=NONE ctermfg=139 ctermbg=NONE cterm=NONE
+hi mytaglistfilename guifg=#6eadff guibg=#242428 guisp=#242428 gui=NONE ctermfg=75 ctermbg=235 cterm=NONE
+hi rubyclassvariable guifg=#a9e5f4 guibg=NONE guisp=NONE gui=NONE ctermfg=159 ctermbg=NONE cterm=NONE
+hi rubyoperator guifg=#b8cdcd guibg=NONE guisp=NONE gui=NONE ctermfg=152 ctermbg=NONE cterm=NONE
+hi method guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+hi cdefine guifg=#00ff00 guibg=NONE guisp=NONE gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi cinclude guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi rubypredefinedvariable guifg=#666666 guibg=NONE guisp=NONE gui=NONE ctermfg=241 ctermbg=NONE cterm=NONE
+hi rubyexception guifg=#8C4D38 guibg=NONE guisp=NONE gui=NONE ctermfg=95 ctermbg=NONE cterm=NONE
+hi repeat guifg=#480000 guibg=NONE guisp=NONE gui=NONE ctermfg=52 ctermbg=NONE cterm=NONE
+hi rubyaccess guifg=#939264 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi pythonimport guifg=#879075 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi pythonbuiltinfunction guifg=#879075 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi xmlattrib guifg=#007C00 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi xmlcomment guifg=#7F7F7F guibg=NONE guisp=NONE gui=NONE ctermfg=8 ctermbg=NONE cterm=NONE
+hi xmlentity guifg=#99006B guibg=NONE guisp=NONE gui=NONE ctermfg=89 ctermbg=NONE cterm=NONE
+hi gutter guifg=#000000 guibg=#bebebe guisp=#bebebe gui=NONE ctermfg=NONE ctermbg=7 cterm=NONE
+hi cif0 guifg=#bebebe guibg=#000000 guisp=#000000 gui=NONE ctermfg=7 ctermbg=NONE cterm=NONE
+hi user4 guifg=#e5fffc guibg=#c8c8df guisp=#c8c8df gui=NONE ctermfg=195 ctermbg=146 cterm=NONE
+hi user5 guifg=#e5ffe5 guibg=#c8c8df guisp=#c8c8df gui=NONE ctermfg=194 ctermbg=146 cterm=NONE
+hi user3 guifg=#e5ffe5 guibg=#c8c8df guisp=#c8c8df gui=NONE ctermfg=194 ctermbg=146 cterm=NONE
+hi subtitle guifg=#000000 guibg=#66bbbb guisp=#66bbbb gui=NONE ctermfg=NONE ctermbg=73 cterm=NONE
+hi prompt guifg=NONE guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+hi cssboxattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi cssgeneratedcontentattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi htmlarg guifg=#d3d7cf guibg=NONE guisp=NONE gui=NONE ctermfg=151 ctermbg=NONE cterm=NONE
+hi phpcomparison guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi javascriptnumber guifg=#B3EBBF guibg=NONE guisp=NONE gui=NONE ctermfg=151 ctermbg=NONE cterm=NONE
+hi cssimportant guifg=#EB5D49 guibg=NONE guisp=NONE gui=NONE ctermfg=203 ctermbg=NONE cterm=NONE
+hi diffcomment guifg=#6B6B6B guibg=NONE guisp=NONE gui=NONE ctermfg=242 ctermbg=NONE cterm=NONE
+hi cssfontprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi phpidentifier guifg=#7895B7 guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE
+hi cssauralprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi difffile guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi csscommonattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi rubyfunction guifg=#CBC983 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi cssbraces guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi cssfontattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi phpvarselector guifg=#babdb6 guibg=NONE guisp=NONE gui=NONE ctermfg=250 ctermbg=NONE cterm=NONE
+hi cssrenderprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi diffadded guifg=#ffaa00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi cssgeneratedcontentprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi csspagingprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi csscolor guifg=#B3EBBF guibg=NONE guisp=NONE gui=NONE ctermfg=151 ctermbg=NONE cterm=NONE
+hi csscolorattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi phpspecialfunction guifg=#CBC983 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi csstableprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi cssuiattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi cssuiprop guifg=#d3d7cf guibg=NONE guisp=NONE gui=NONE ctermfg=151 ctermbg=NONE cterm=NONE
+hi rubymodule guifg=#ee6969 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE
+hi diffline guifg=#00ff00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi colorcolumn guifg=NONE guibg=#444444 guisp=#444444 gui=NONE ctermfg=NONE ctermbg=238 cterm=NONE
+hi rubydefine guifg=#ee6969 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE
+hi csstextattr guifg=#92AF72 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi cssfunctionname guifg=#CBC983 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi diffnoeol guifg=#cccccc guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi cssidentifier guifg=#fcaf3e guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE
+hi csstextprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi csscolorprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi diffremoved guifg=#ff0000 guibg=#000000 guisp=#000000 gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi phpc1top guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi csstagname guifg=#fcaf3e guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE
+hi cssclassname guifg=#CBC983 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi phpmemberselector guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi cssfunction guifg=#CBC983 guibg=NONE guisp=NONE gui=NONE ctermfg=186 ctermbg=NONE cterm=NONE
+hi cssboxprop guifg=#F3F2CC guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi djangostatement guifg=#005f00 guibg=#ddffaa guisp=#ddffaa gui=NONE ctermfg=22 ctermbg=193 cterm=NONE
+hi doctrans guifg=#ffffff guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=15 ctermbg=15 cterm=NONE
+hi helpnote guifg=#000000 guibg=#ffd700 guisp=#ffd700 gui=NONE ctermfg=NONE ctermbg=220 cterm=NONE
+hi doccode guifg=#00aa00 guibg=NONE guisp=NONE gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE
+hi docspecial guifg=#4876ff guibg=NONE guisp=NONE gui=NONE ctermfg=69 ctermbg=NONE cterm=NONE
+hi htmlstatement guifg=#af5f87 guibg=NONE guisp=NONE gui=NONE ctermfg=132 ctermbg=NONE cterm=NONE
+hi spellerrors guifg=#000000 guibg=NONE guisp=NONE gui=NONE ctermfg=NONE ctermbg=NONE cterm=NONE
+hi debug guifg=#ffe5ff guibg=#5a645a guisp=#5a645a gui=NONE ctermfg=225 ctermbg=241 cterm=NONE
+hi warningmsg guifg=#ffe5ff guibg=#7d7d8b guisp=#7d7d8b gui=NONE ctermfg=225 ctermbg=245 cterm=NONE
+hi ifdefifout guifg=#a998a9 guibg=NONE guisp=NONE gui=NONE ctermfg=248 ctermbg=NONE cterm=NONE
+hi condtional guifg=#ff0000 guibg=#000000 guisp=#000000 gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+"hi cursorime -- no settings --
+"hi def -- no settings --
+hi vimmodeline guifg=#5fd75f guibg=NONE guisp=NONE gui=NONE ctermfg=77 ctermbg=NONE cterm=NONE
+hi preproc guifg=#e5e5ff guibg=NONE guisp=NONE gui=NONE ctermfg=189 ctermbg=NONE cterm=NONE
+hi taglistcomment guifg=#000000 guibg=#798779 guisp=#798779 gui=NONE ctermfg=NONE ctermbg=65 cterm=NONE
+hi taglisttitle guifg=#ffe5f7 guibg=#000000 guisp=#000000 gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi taglistfilename guifg=#ffe5ff guibg=#877987 guisp=#877987 gui=NONE ctermfg=225 ctermbg=102 cterm=NONE
+hi taglisttagscope guifg=#000000 guibg=#798779 guisp=#798779 gui=NONE ctermfg=NONE ctermbg=65 cterm=NONE
+hi match guifg=#0000ff guibg=#ffff00 guisp=#ffff00 gui=NONE ctermfg=21 ctermbg=11 cterm=NONE
+hi namespace guifg=#006400 guibg=NONE guisp=NONE gui=NONE ctermfg=22 ctermbg=NONE cterm=NONE
+hi tablinefillsel guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+"hi semicolon -- no settings --
+hi regexp guifg=#44B4CC guibg=#008b8b guisp=#008b8b gui=NONE ctermfg=74 ctermbg=30 cterm=NONE
+hi rubymethod guifg=#DDE93D guibg=#ffff00 guisp=#ffff00 gui=NONE ctermfg=227 ctermbg=11 cterm=NONE
+hi rubynumber guifg=#CCFF33 guibg=#ffff00 guisp=#ffff00 gui=NONE ctermfg=191 ctermbg=11 cterm=NONE
+"hi railsuserclass -- no settings --
+"hi railsusermethod -- no settings --
+hi htmlhead guifg=NONE guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+hi javascript guifg=#434343 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=238 ctermbg=15 cterm=NONE
+hi literal guifg=#0000ff guibg=NONE guisp=NONE gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+hi rubyfloat guifg=#8b0000 guibg=NONE guisp=NONE gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi rubyinteger guifg=#8b0000 guibg=NONE guisp=NONE gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi rubysharpbang guifg=#00ff00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi rubydocumentation guifg=#ffffff guibg=#a9a9a9 guisp=#a9a9a9 gui=NONE ctermfg=15 ctermbg=248 cterm=NONE
+hi sourceline guifg=#6eadff guibg=#323238 guisp=#323238 gui=NONE ctermfg=75 ctermbg=237 cterm=NONE
+hi javaexceptions guifg=#dc8972 guibg=NONE guisp=NONE gui=NONE ctermfg=173 ctermbg=NONE cterm=NONE
+hi bufexploreractbuf guifg=#333398 guibg=#1d1d20 guisp=#1d1d20 gui=NONE ctermfg=61 ctermbg=234 cterm=NONE
+hi bufexplorertogglesplit guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi mytaglisttagscope guifg=#4392cf guibg=#242428 guisp=#242428 gui=NONE ctermfg=74 ctermbg=235 cterm=NONE
+hi level14c guifg=#cca073 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE
+hi bufexplorertitle guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi level8c guifg=#ffd0a1 guibg=NONE guisp=NONE gui=NONE ctermfg=223 ctermbg=NONE cterm=NONE
+hi mytaglistcomment guifg=#4392cf guibg=#242428 guisp=#242428 gui=NONE ctermfg=74 ctermbg=235 cterm=NONE
+hi bufexplorersorttype guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi bufexplorermapping guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi bufexploreropenin guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi level11c guifg=#ffd0a1 guibg=NONE guisp=NONE gui=NONE ctermfg=223 ctermbg=NONE cterm=NONE
+hi bufexplorerbufnbr guifg=#141488 guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=18 ctermbg=236 cterm=NONE
+hi level7c guifg=#8b7d8b guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi level16c guifg=#aa7f55 guibg=NONE guisp=NONE gui=NONE ctermfg=137 ctermbg=NONE cterm=NONE
+hi javaclassdecl guifg=#bebebd guibg=NONE guisp=NONE gui=NONE ctermfg=7 ctermbg=NONE cterm=NONE
+hi javatypedef guifg=#a62512 guibg=NONE guisp=NONE gui=NONE ctermfg=124 ctermbg=NONE cterm=NONE
+hi level6c guifg=#8b7d7d guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi level1c guifg=#774f27 guibg=NONE guisp=NONE gui=NONE ctermfg=3 ctermbg=NONE cterm=NONE
+hi level15c guifg=#bb9064 guibg=NONE guisp=NONE gui=NONE ctermfg=137 ctermbg=NONE cterm=NONE
+hi bufexplorerlockedbuf guifg=#141488 guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=18 ctermbg=236 cterm=NONE
+hi bufexplorermodbuf guifg=#141488 guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=18 ctermbg=236 cterm=NONE
+hi level9c guifg=#eec093 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE
+hi bufexplorerhelp guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi javadebug guifg=#59986f guibg=NONE guisp=NONE gui=NONE ctermfg=72 ctermbg=NONE cterm=NONE
+hi javadoccomment guifg=#76b88d guibg=NONE guisp=NONE gui=NONE ctermfg=72 ctermbg=NONE cterm=NONE
+hi level5c guifg=#7d8b8b guibg=NONE guisp=NONE gui=NONE ctermfg=66 ctermbg=NONE cterm=NONE
+hi bufexplorertoggleopen guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi bufexplorersortby guifg=NONE guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=NONE ctermbg=236 cterm=NONE
+hi level10c guifg=#ffe5ff guibg=NONE guisp=NONE gui=NONE ctermfg=225 ctermbg=NONE cterm=NONE
+hi bufexplorercurbuf guifg=#ffe5ff guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=225 ctermbg=236 cterm=NONE
+hi level4c guifg=#5a645a guibg=NONE guisp=NONE gui=NONE ctermfg=241 ctermbg=NONE cterm=NONE
+hi bufexplorerhidbuf guifg=#141488 guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=18 ctermbg=236 cterm=NONE
+hi bufexplorerunlbuf guifg=#141488 guibg=#2b2b30 guisp=#2b2b30 gui=NONE ctermfg=18 ctermbg=236 cterm=NONE
+hi mytaglisttagname guifg=#6eadff guibg=#242428 guisp=#242428 gui=NONE ctermfg=75 ctermbg=235 cterm=NONE
+hi level12c guifg=#eec093 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE
+hi bufexplorerxxxbuf guifg=#6e6eff guibg=#050570 guisp=#050570 gui=NONE ctermfg=63 ctermbg=17 cterm=NONE
+hi level3c guifg=#a998a9 guibg=NONE guisp=NONE gui=NONE ctermfg=248 ctermbg=NONE cterm=NONE
+hi mytaglisttitle guifg=#6eadff guibg=#242428 guisp=#242428 gui=NONE ctermfg=75 ctermbg=235 cterm=NONE
+hi level13c guifg=#ddb083 guibg=NONE guisp=NONE gui=NONE ctermfg=180 ctermbg=NONE cterm=NONE
+hi level2c guifg=#7d7d8b guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi bufexploreraltbuf guifg=#6e6eff guibg=#050570 guisp=#050570 gui=NONE ctermfg=63 ctermbg=17 cterm=NONE
+hi javastring guifg=#b86d37 guibg=NONE guisp=NONE gui=NONE ctermfg=137 ctermbg=NONE cterm=NONE
+hi javarepeat guifg=#bcba75 guibg=NONE guisp=NONE gui=NONE ctermfg=143 ctermbg=NONE cterm=NONE
+hi javafuncdef guifg=#b52411 guibg=NONE guisp=NONE gui=NONE ctermfg=124 ctermbg=NONE cterm=NONE
+hi javascopedecl guifg=#853926 guibg=NONE guisp=NONE gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi javaparen2 guifg=#a0c0ff guibg=NONE guisp=NONE gui=NONE ctermfg=153 ctermbg=NONE cterm=NONE
+hi javaparen1 guifg=#80a0ff guibg=NONE guisp=NONE gui=NONE ctermfg=12 ctermbg=NONE cterm=NONE
+hi javabraces guifg=#406090 guibg=NONE guisp=NONE gui=NONE ctermfg=60 ctermbg=NONE cterm=NONE
+hi javaparen guifg=#6080e0 guibg=NONE guisp=NONE gui=NONE ctermfg=68 ctermbg=NONE cterm=NONE
+hi javaexternal guifg=#666666 guibg=NONE guisp=NONE gui=NONE ctermfg=241 ctermbg=NONE cterm=NONE
+hi javalangobject guifg=#6080c0 guibg=NONE guisp=NONE gui=NONE ctermfg=67 ctermbg=NONE cterm=NONE
+hi mailsubject guifg=#A5C261 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi rubyattribute guifg=#becbf5 guibg=NONE guisp=NONE gui=NONE ctermfg=189 ctermbg=NONE cterm=NONE
+hi rubypredifinedidentifier guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi rubyconditional guifg=#d8f881 guibg=NONE guisp=NONE gui=NONE ctermfg=192 ctermbg=NONE cterm=NONE
+hi rubyeval guifg=#88d1f0 guibg=NONE guisp=NONE gui=NONE ctermfg=117 ctermbg=NONE cterm=NONE
+hi mailheaderkey guifg=#FFC66D guibg=NONE guisp=NONE gui=NONE ctermfg=215 ctermbg=NONE cterm=NONE
+hi rubyconditionalmodifier guifg=#d8f881 guibg=NONE guisp=NONE gui=NONE ctermfg=192 ctermbg=NONE cterm=NONE
+hi rubyinclude guifg=#ee6969 guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE
+hi mailemail guifg=#A5C261 guibg=NONE guisp=NONE gui=NONE ctermfg=107 ctermbg=NONE cterm=NONE
+hi rubyoptionaldo guifg=#d8f881 guibg=NONE guisp=NONE gui=NONE ctermfg=192 ctermbg=NONE cterm=NONE
+hi typedef guifg=#66D9EF guibg=NONE guisp=NONE gui=NONE ctermfg=81 ctermbg=NONE cterm=NONE
+hi yamltab guifg=NONE guibg=#FF0000 guisp=#FF0000 gui=NONE ctermfg=NONE ctermbg=196 cterm=NONE
+"hi yamlbasekey -- no settings --
+hi phpdocblock guifg=#94E1E4 guibg=#050505 guisp=#050505 gui=NONE ctermfg=116 ctermbg=232 cterm=NONE
+hi icursor guifg=NONE guibg=#babdb6 guisp=#babdb6 gui=NONE ctermfg=NONE ctermbg=250 cterm=NONE
+hi charachter guifg=#ffff00 guibg=NONE guisp=NONE gui=NONE ctermfg=11 ctermbg=NONE cterm=NONE
+hi done guifg=#ffffff guibg=#bebebe guisp=#bebebe gui=NONE ctermfg=15 ctermbg=7 cterm=NONE
+hi perlpod guifg=#B86A18 guibg=NONE guisp=NONE gui=NONE ctermfg=130 ctermbg=NONE cterm=NONE
+hi autohigroup guifg=NONE guibg=#ffff00 guisp=#ffff00 gui=NONE ctermfg=NONE ctermbg=11 cterm=NONE
+hi tags guifg=#ffa500 guibg=NONE guisp=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi phprelation guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phpoperator guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phparraypair guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phpunknownselector guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi javascriptoperator guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phppropertyselector guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi htmltitle guifg=#cfcfcf guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi phpsemicolon guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi javascriptbraces guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phpassignbyref guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi csspseudoclassid guifg=#eeeeec guibg=NONE guisp=NONE gui=NONE ctermfg=255 ctermbg=NONE cterm=NONE
+hi phpfunctions guifg=#d3d7cf guibg=NONE guisp=NONE gui=NONE ctermfg=151 ctermbg=NONE cterm=NONE
+hi phppropertyselectorinstring guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi phpregiondelimiter guifg=#ad7fa8 guibg=NONE guisp=NONE gui=NONE ctermfg=139 ctermbg=NONE cterm=NONE
+hi phpparent guifg=#888a85 guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi cssselectorop guifg=#eeeeec guibg=NONE guisp=NONE gui=NONE ctermfg=255 ctermbg=NONE cterm=NONE
+hi perlsharpbang guifg=#c0c090 guibg=#505050 guisp=#505050 gui=NONE ctermfg=144 ctermbg=239 cterm=NONE
+hi diffchanged guifg=#00ccff guibg=#000000 guisp=#000000 gui=NONE ctermfg=45 ctermbg=NONE cterm=NONE
+hi diffoldline guifg=#00cc00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=40 ctermbg=NONE cterm=NONE
+hi doxygenstart guifg=#00ff00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi perlstatement guifg=#c0c090 guibg=NONE guisp=NONE gui=NONE ctermfg=144 ctermbg=NONE cterm=NONE
+hi doxygenstartl guifg=#00ff00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi diffnewfile guifg=#00cc00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=40 ctermbg=NONE cterm=NONE
+hi doxygencommentl guifg=#00aa00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE
+hi vimcommenttitle guifg=#00ff00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=10 ctermbg=NONE cterm=NONE
+hi doxygenparamname guifg=#0000ff guibg=#000000 guisp=#000000 gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+hi diffoldfile guifg=#00cc00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=40 ctermbg=NONE cterm=NONE
+hi doxygenbriefl guifg=#00aa00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE
+hi helphypertextjump guifg=#ffaa00" guibg=#000000 guisp=#000000 gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE
+hi doxygenbriefline guifg=#00aa00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=34 ctermbg=NONE cterm=NONE
+hi doxygenparamdirection guifg=#cccc00 guibg=#000000 guisp=#000000 gui=NONE ctermfg=184 ctermbg=NONE cterm=NONE
+hi perlvarplain guifg=#74c5c6 guibg=#343434 guisp=#343434 gui=NONE ctermfg=116 ctermbg=236 cterm=NONE
+hi perlstatementstorage guifg=#ffffff guibg=#000000 guisp=#000000 gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi perlvarplain2 guifg=#74c6a8 guibg=#343434 guisp=#343434 gui=NONE ctermfg=115 ctermbg=236 cterm=NONE
+hi doxygenargumentword guifg=#0000ff guibg=#000000 guisp=#000000 gui=NONE ctermfg=21 ctermbg=NONE cterm=NONE
+"hi cssattributeselector -- no settings --
+hi tmesupport guifg=#7d6c55 guibg=NONE guisp=NONE gui=NONE ctermfg=101 ctermbg=NONE cterm=NONE
+hi cterm=.((s:fontface==plain) ? none : bold) guifg=#efface guibg=#efface guisp=#efface gui=NONE ctermfg=230 ctermbg=230 cterm=NONE
+hi cterm_style guifg=#efface guibg=NONE guisp=NONE gui=NONE ctermfg=230 ctermbg=NONE cterm=NONE
+hi moremsg guifg=#489000 guibg=NONE guisp=NONE gui=NONE ctermfg=64 ctermbg=NONE cterm=NONE
+hi identifer guifg=#99AAAA guibg=#000000 guisp=#000000 gui=NONE ctermfg=109 ctermbg=NONE cterm=NONE
+hi debugstop guifg=#ffffff guibg=#90ee90 guisp=#90ee90 gui=NONE ctermfg=15 ctermbg=120 cterm=NONE
+hi debugbreak guifg=#ffffff guibg=#8b0000 guisp=#8b0000 gui=NONE ctermfg=15 ctermbg=88 cterm=NONE
+hi htm guifg=#8f8f8f guibg=NONE guisp=NONE gui=NONE ctermfg=245 ctermbg=NONE cterm=NONE
+hi js guifg=#cd5c5c guibg=NONE guisp=NONE gui=NONE ctermfg=167 ctermbg=NONE cterm=NONE
+hi defined guifg=#e0ffff guibg=NONE guisp=NONE gui=NONE ctermfg=195 ctermbg=NONE cterm=NONE
+hi linenr guifg=#686868 guibg=NONE guisp=NONE gui=NONE ctermfg=242 ctermbg=NONE cterm=NONE
+"hi texmath -- no settings --
+hi vimoption guifg=#ffd700 guibg=NONE guisp=NONE gui=NONE ctermfg=220 ctermbg=NONE cterm=NONE
+hi vimerror guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi cincluded guifg=#9acd32 guibg=NONE guisp=NONE gui=NONE ctermfg=149 ctermbg=NONE cterm=NONE
+hi texsection guifg=#adff2f guibg=NONE guisp=NONE gui=NONE ctermfg=118 ctermbg=NONE cterm=NONE
+hi texmatcher guifg=#9acd32 guibg=NONE guisp=NONE gui=NONE ctermfg=149 ctermbg=NONE cterm=NONE
+hi mysemis guifg=#99ff00 guibg=NONE guisp=NONE gui=NONE ctermfg=118 ctermbg=NONE cterm=NONE
+hi mydots guifg=#0099ff guibg=NONE guisp=NONE gui=NONE ctermfg=33 ctermbg=NONE cterm=NONE
+hi myassignments guifg=#99ff00 guibg=NONE guisp=NONE gui=NONE ctermfg=118 ctermbg=NONE cterm=NONE
+hi fortrantype guifg=#0F8200 guibg=NONE guisp=NONE gui=NONE ctermfg=2 ctermbg=NONE cterm=NONE
+hi fortranlabelnumber guifg=#8b0000 guibg=NONE guisp=NONE gui=NONE ctermfg=88 ctermbg=NONE cterm=NONE
+hi fortranunitheader guifg=#a020f0 guibg=NONE guisp=NONE gui=NONE ctermfg=129 ctermbg=NONE cterm=NONE
+hi perlfunctionname guifg=#ffffff guibg=#343434 guisp=#343434 gui=NONE ctermfg=15 ctermbg=236 cterm=NONE
+hi perlstatementinclude guifg=#c0c090 guibg=#3b4038 guisp=#3b4038 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlcontrol guifg=#c0c090 guibg=#404040 guisp=#404040 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perllabel guifg=#c0c090 guibg=#404040 guisp=#404040 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlmatchstartend guifg=#c0c090 guibg=#424242 guisp=#424242 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlrepeat guifg=#c0b790 guibg=#343434 guisp=#343434 gui=NONE ctermfg=144 ctermbg=236 cterm=NONE
+hi perlshellcommand guifg=NONE guibg=#424242 guisp=#424242 gui=NONE ctermfg=NONE ctermbg=238 cterm=NONE
+hi perlstatementfiledesc guifg=#a2c090 guibg=#343434 guisp=#343434 gui=NONE ctermfg=108 ctermbg=236 cterm=NONE
+hi perlstatementsub guifg=#c0c090 guibg=#343434 guisp=#343434 gui=NONE ctermfg=144 ctermbg=236 cterm=NONE
+hi perloperator guifg=#c0c090 guibg=#404040 guisp=#404040 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlvarsimplemembername guifg=#b3b3b3 guibg=#343434 guisp=#343434 gui=NONE ctermfg=249 ctermbg=236 cterm=NONE
+hi perlnumber guifg=#80ac7b guibg=#343434 guisp=#343434 gui=NONE ctermfg=108 ctermbg=236 cterm=NONE
+hi perlvarnotinmatches guifg=#915555 guibg=#343434 guisp=#343434 gui=NONE ctermfg=95 ctermbg=236 cterm=NONE
+hi perlqq guifg=#cccccc guibg=#393939 guisp=#393939 gui=NONE ctermfg=252 ctermbg=237 cterm=NONE
+hi perlstatementcontrol guifg=#dcdb6b guibg=#343434 guisp=#343434 gui=NONE ctermfg=185 ctermbg=236 cterm=NONE
+hi perlstatementhash guifg=#c0c090 guibg=#404040 guisp=#404040 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlvarsimplemember guifg=#c0c090 guibg=#343434 guisp=#343434 gui=NONE ctermfg=144 ctermbg=236 cterm=NONE
+hi perlidentifier guifg=#90c0c0 guibg=NONE guisp=NONE gui=NONE ctermfg=109 ctermbg=NONE cterm=NONE
+hi perlstringstartend guifg=#b07050 guibg=#353535 guisp=#353535 gui=NONE ctermfg=137 ctermbg=236 cterm=NONE
+hi perlspecialbeom guifg=#cccccc guibg=#404040 guisp=#404040 gui=NONE ctermfg=252 ctermbg=238 cterm=NONE
+hi perlstatementnew guifg=#c0c090 guibg=#424242 guisp=#424242 gui=NONE ctermfg=144 ctermbg=238 cterm=NONE
+hi perlpackagedecl guifg=#80ac7b guibg=#404040 guisp=#404040 gui=NONE ctermfg=108 ctermbg=238 cterm=NONE
+hi unitheader guifg=#000000 guibg=#00ffff guisp=#00ffff gui=NONE ctermfg=NONE ctermbg=14 cterm=NONE
+hi io guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi communicator guifg=#000000 guibg=#eeee00 guisp=#eeee00 gui=NONE ctermfg=NONE ctermbg=11 cterm=NONE
+hi tooltip guifg=#000000 guibg=#d3d3d3 guisp=#d3d3d3 gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE
+hi _coperators guifg=#ffffff guibg=NONE guisp=NONE gui=NONE ctermfg=15 ctermbg=NONE cterm=NONE
+hi cream_showmarkshl guifg=#000000 guibg=#aacc77 guisp=#aacc77 gui=NONE ctermfg=NONE ctermbg=150 cterm=NONE
+hi badword guifg=#ff9999 guibg=#003333 guisp=#003333 gui=NONE ctermfg=210 ctermbg=23 cterm=NONE
+hi plsqlconditional guifg=#99CCFF guibg=NONE guisp=NONE gui=NONE ctermfg=153 ctermbg=NONE cterm=NONE
+hi plsqlstorage guifg=#f5deb3 guibg=NONE guisp=NONE gui=NONE ctermfg=223 ctermbg=NONE cterm=NONE
+hi plsqlrepeat guifg=#99CCFF guibg=NONE guisp=NONE gui=NONE ctermfg=153 ctermbg=NONE cterm=NONE
+hi plsqlfunction guifg=#FFAAAA guibg=NONE guisp=NONE gui=NONE ctermfg=217 ctermbg=NONE cterm=NONE
+hi attribute guifg=#CCCCCC guibg=NONE guisp=NONE gui=NONE ctermfg=252 ctermbg=NONE cterm=NONE
+hi vcursor guifg=#ffffff guibg=#efface guisp=#efface gui=NONE ctermfg=15 ctermbg=230 cterm=NONE
+hi ccursor guifg=#ffffff guibg=#8b0000 guisp=#8b0000 gui=NONE ctermfg=15 ctermbg=88 cterm=NONE
+hi ocursor guifg=#ffffff guibg=#008b8b guisp=#008b8b gui=NONE ctermfg=15 ctermbg=30 cterm=NONE
+hi preconduit guifg=#702589 guibg=NONE guisp=NONE gui=NONE ctermfg=54 ctermbg=NONE cterm=NONE
+hi rubyglobalvariable guifg=#5f8700 guibg=NONE guisp=NONE gui=NONE ctermfg=64 ctermbg=NONE cterm=NONE
+hi operatorcurlybrackets guifg=#5fafff guibg=NONE guisp=NONE gui=NONE ctermfg=75 ctermbg=NONE cterm=NONE
+hi comments guifg=#0066ff guibg=NONE guisp=NONE gui=NONE ctermfg=27 ctermbg=NONE cterm=NONE
+hi pmenum guifg=#584f58 guibg=#1c191c guisp=#1c191c gui=NONE ctermfg=240 ctermbg=234 cterm=NONE
+hi mydiffsubname guifg=#00ffff guibg=NONE guisp=NONE gui=NONE ctermfg=14 ctermbg=NONE cterm=NONE
+hi mydiffcommline guifg=#ffffff guibg=#8b0000 guisp=#8b0000 gui=NONE ctermfg=15 ctermbg=88 cterm=NONE
+hi mailqu guifg=#006400 guibg=#000000 guisp=#000000 gui=NONE ctermfg=22 ctermbg=NONE cterm=NONE
+hi mydiffnew guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi mydiffremoved guifg=#ff0000 guibg=NONE guisp=NONE gui=NONE ctermfg=196 ctermbg=NONE cterm=NONE
+hi mydiffnormal guifg=#000000 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+hi mailq guifg=#008b8b guibg=#000000 guisp=#000000 gui=NONE ctermfg=30 ctermbg=NONE cterm=NONE
+hi lisplist guifg=#555555 guibg=NONE guisp=NONE gui=NONE ctermfg=240 ctermbg=NONE cterm=NONE
diff --git a/vim/colors/github.vim b/vim/colors/github.vim
new file mode 100644
index 0000000..ab926ee
--- /dev/null
+++ b/vim/colors/github.vim
@@ -0,0 +1,116 @@
+" Vim color file -- with 256 colour support!
+"
+" Author: Anthony Carapetis <anthony.carapetis@gmail.com>
+" Contributors: Lucas Tadeu <lucastadeuteixeira@gmail.com>
+"
+" Note: Based on github's syntax highlighting theme
+" Used Brian Mock's darkspectrum as a starting point/template
+" Thanks to Ryan Heath for an easy list of some of the colours:
+" http://rpheath.com/posts/356-github-theme-for-syntax-gem
+
+set background=light
+
+if version > 580
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+
+let colors_name = "github"
+
+" {{{ General colors
+hi Normal ctermfg=0 ctermbg=255 guifg=#000000 guibg=#F8F8FF
+hi Cursor ctermfg=239 ctermbg=15 guifg=#F8F8FF guibg=#444454
+hi Visual ctermfg=15 ctermbg=61 guifg=#FFFFFF guibg=#3465a3
+hi VisualNOS ctermfg=15 ctermbg=24 guifg=#FFFFFF guibg=#204a87
+hi Search ctermfg=236 ctermbg=228 guifg=#000000 guibg=#FFFF8C cterm=bold gui=bold
+hi Folded ctermfg=8 ctermbg=15 guifg=#808080 guibg=#ECECEC gui=bold cterm=bold
+hi Title ctermfg=167 guifg=#ef5939
+hi StatusLine ctermfg=238 ctermbg=250 guifg=#404040 guibg=#bbbbbb gui=bold cterm=bold
+hi StatusLineNC ctermfg=238 ctermbg=252 guifg=#404040 guibg=#d4d4d4 gui=italic cterm=italic
+hi VertSplit ctermfg=250 ctermbg=250 guifg=#bbbbbb guibg=#bbbbbb gui=none cterm=none
+hi LineNr ctermfg=246 ctermbg=15 guifg=#959595 guibg=#ECECEC gui=bold cterm=bold
+hi SpecialKey ctermfg=6 guifg=#177F80 gui=italic cterm=italic
+hi WarningMsg ctermfg=167 guifg=#ef5939
+hi ErrorMsg ctermbg=15 ctermfg=196 guibg=#f8f8ff guifg=#ff1100 gui=undercurl cterm=undercurl
+hi ColorColumn ctermbg=254 guibg=#e4e4e4
+" }}}
+
+" {{{ Vim => 7.0 specific colors
+if version >= 700
+ hi CursorLine ctermbg=253 guibg=#D8D8DD
+ hi MatchParen ctermfg=0 ctermbg=252 guifg=#000000 guibg=#cdcdfd
+ hi Pmenu ctermfg=15 ctermbg=8 guifg=#ffffff guibg=#808080 gui=bold cterm=bold
+ hi PmenuSel ctermfg=0 ctermbg=252 guifg=#000000 guibg=#cdcdfd gui=italic cterm=italic
+ hi PmenuSbar ctermfg=238 ctermbg=0 guifg=#444444 guibg=#000000
+ hi PmenuThumb ctermfg=248 ctermbg=248 guifg=#aaaaaa guibg=#aaaaaa
+endif
+" }}}
+
+" {{{ Diff highlighting
+hi DiffAdd ctermfg=233 ctermbg=194 guifg=#003300 guibg=#DDFFDD gui=none cterm=none
+hi DiffChange ctermbg=255 guibg=#ececec gui=none cterm=none
+hi DiffText ctermfg=233 ctermbg=189 guifg=#000033 guibg=#DDDDFF gui=none cterm=none
+hi DiffDelete ctermfg=252 ctermbg=224 guifg=#DDCCCC guibg=#FFDDDD gui=none cterm=none
+" }}}
+
+" {{{ Syntax highlighting
+hi Ignore ctermfg=8 guifg=#808080
+hi Identifier ctermfg=31 guifg=#0086B3
+hi PreProc ctermfg=247 guifg=#A0A0A0 gui=bold cterm=bold
+hi Comment ctermfg=246 guifg=#999988
+hi Constant ctermfg=6 guifg=#177F80 gui=none cterm=none
+hi String ctermfg=161 guifg=#D81745
+hi Function ctermfg=88 guifg=#990000 gui=bold cterm=bold
+hi Statement ctermfg=0 guifg=#000000 gui=bold cterm=bold
+hi Type ctermfg=60 guifg=#445588 gui=bold cterm=bold
+hi Number ctermfg=30 guifg=#1C9898
+hi Todo ctermfg=15 ctermbg=88 guifg=#FFFFFF guibg=#990000 gui=bold cterm=bold
+hi Special ctermfg=28 guifg=#159828 gui=bold cterm=bold
+hi Todo ctermbg=15 ctermfg=196 guibg=#f8f8ff guifg=#ff1100 gui=underline cterm=underline
+hi Label ctermfg=0 guifg=#000000 gui=bold cterm=bold
+hi StorageClass ctermfg=0 guifg=#000000 gui=bold cterm=bold
+hi Structure ctermfg=0 guifg=#000000 gui=bold cterm=bold
+hi TypeDef ctermfg=0 guifg=#000000 gui=bold cterm=bold
+
+" {{{ Links
+hi! link FoldColumn Folded
+hi! link CursorColumn CursorLine
+hi! link NonText LineNr
+" }}}
+
+" {{{ Aliases
+hi link cppSTL Function
+hi link cppSTLType Type
+hi link Character Number
+hi link htmlTag htmlEndTag
+hi link htmlLink Underlined
+hi link pythonFunction Identifier
+hi link Question Type
+hi link CursorIM Cursor
+hi link VisualNOS Visual
+hi link xmlTag Identifier
+hi link xmlTagName Identifier
+hi link shDeref Identifier
+hi link shVariable Function
+hi link rubySharpBang Special
+hi link perlSharpBang Special
+hi link schemeFunc Statement
+" }}}
+
+" {{{ Tabs
+hi TabLine ctermfg=238 ctermbg=188 guifg=#404040 guibg=#dddddd gui=none
+hi TabLineFill ctermfg=238 ctermbg=188 guifg=#404040 guibg=#dddddd gui=none
+hi TabLineSel ctermfg=238 guifg=#404040 gui=bold
+" }}}
+
+" {{{ Spelling
+if has("spell")
+ hi spellBad guisp=#fcaf3e
+ hi spellCap guisp=#73d216
+ hi spellRare guisp=#fcaf3e
+ hi spellLocal guisp=#729fcf
+endif
+" }}}
+
diff --git a/vim/colors/gotham.vim b/vim/colors/gotham.vim
new file mode 100644
index 0000000..7ca6d47
--- /dev/null
+++ b/vim/colors/gotham.vim
@@ -0,0 +1,229 @@
+" _____ _____ _____ _ _ ___ ___ ___
+" | __ \ _ |_ _| | | | / _ \ | \/ |
+" | | \/ | | | | | | |_| |/ /_\ \| . . |
+" | | __| | | | | | | _ || _ || |\/| |
+" | |_\ \ \_/ / | | | | | || | | || | | |
+" \____/\___/ \_/ \_| |_/\_| |_/\_| |_/
+"
+" URL: https://github.com/whatyouhide/vim-gotham
+" Aurhor: Andrea Leopardi <an.leopardi@gmail.com>
+" Version: ϡ
+" License: MIT
+
+
+" Bootstrap ===================================================================
+
+hi clear
+if exists('syntax_on') | syntax reset | endif
+set background=dark
+let g:colors_name = 'gotham'
+
+
+" Helper functions =============================================================
+
+" Execute the 'highlight' command with a List of arguments.
+function! s:Highlight(args)
+ exec 'highlight ' . join(a:args, ' ')
+endfunction
+
+function! s:AddGroundValues(accumulator, ground, color)
+ let new_list = a:accumulator
+ for [where, value] in items(a:color)
+ call add(new_list, where . a:ground . '=' . value)
+ endfor
+
+ return new_list
+endfunction
+
+function! s:Col(group, fg_name, ...)
+ " ... = optional bg_name
+
+ let pieces = [a:group]
+
+ if a:fg_name !=# ''
+ let pieces = s:AddGroundValues(pieces, 'fg', s:colors[a:fg_name])
+ endif
+
+ if a:0 > 0 && a:1 !=# ''
+ let pieces = s:AddGroundValues(pieces, 'bg', s:colors[a:1])
+ endif
+
+ call s:Clear(a:group)
+ call s:Highlight(pieces)
+endfunction
+
+function! s:Attr(group, attr)
+ let l:attrs = [a:group, 'term=' . a:attr, 'cterm=' . a:attr, 'gui=' . a:attr]
+ call s:Highlight(l:attrs)
+endfunction
+
+function! s:Clear(group)
+ exec 'highlight clear ' . a:group
+endfunction
+
+
+" Colors ======================================================================
+
+" Let's store all the colors in a dictionary.
+let s:colors = {}
+
+" Base colors.
+let s:colors.base0 = { 'gui': '#0c1014', 'cterm': 0 }
+let s:colors.base1 = { 'gui': '#11151c', 'cterm': 8 }
+let s:colors.base2 = { 'gui': '#091f2e', 'cterm': 10 }
+let s:colors.base3 = { 'gui': '#0a3749', 'cterm': 12 }
+let s:colors.base4 = { 'gui': '#245361', 'cterm': 11 }
+let s:colors.base5 = { 'gui': '#599cab', 'cterm': 14 }
+let s:colors.base6 = { 'gui': '#99d1ce', 'cterm': 7 }
+let s:colors.base7 = { 'gui': '#d3ebe9', 'cterm': 15 }
+
+" Other colors.
+let s:colors.red = { 'gui': '#c23127', 'cterm': 1 }
+let s:colors.orange = { 'gui': '#d26937', 'cterm': 9 }
+let s:colors.yellow = { 'gui': '#edb443', 'cterm': 3 }
+let s:colors.magenta = { 'gui': '#888ca6', 'cterm': 13 }
+let s:colors.violet = { 'gui': '#4e5166', 'cterm': 5 }
+let s:colors.blue = { 'gui': '#195466', 'cterm': 4 }
+let s:colors.cyan = { 'gui': '#33859E', 'cterm': 6 }
+let s:colors.green = { 'gui': '#2aa889', 'cterm': 2 }
+
+
+" Native highlighting ==========================================================
+
+let s:background = 'base0'
+let s:linenr_background = 'base1'
+
+" Everything starts here.
+call s:Col('Normal', 'base6', s:background)
+
+" Line, cursor and so on.
+call s:Col('Cursor', '', 'base6')
+call s:Col('CursorLine', '', 'base1')
+
+" Sign column, line numbers.
+call s:Col('LineNr', 'base4', s:linenr_background)
+call s:Col('CursorLineNr', 'base5', s:linenr_background)
+call s:Col('SignColumn', '', s:linenr_background)
+call s:Col('ColorColumn', '', s:linenr_background)
+
+" Visual selection.
+call s:Col('Visual', '', 'base3')
+
+" Easy-to-guess code elements.
+call s:Col('Comment', 'base4')
+call s:Col('String', 'green')
+call s:Col('Number', 'orange')
+call s:Col('Statement', 'base5')
+call s:Col('Special', 'orange')
+call s:Col('Identifier', 'base5')
+
+" Constants, Ruby symbols.
+call s:Col('Constant', 'magenta')
+
+" Some HTML tags (<title>, some <h*>s)
+call s:Col('Title', 'orange')
+
+" <a> tags.
+call s:Col('Underlined', 'yellow')
+call s:Attr('Underlined', 'underline')
+
+" Types, HTML attributes, Ruby constants (and class names).
+call s:Col('Type', 'orange')
+
+" Stuff like 'require' in Ruby.
+call s:Col('PreProc', 'red')
+
+" Tildes on the bottom of the page.
+call s:Col('NonText', 'base4')
+
+" TODO and similar tags.
+call s:Col('Todo', 'magenta', s:background)
+
+" The column separating vertical splits.
+call s:Col('VertSplit', 'base2', 'base2')
+call s:Col('StatusLineNC', 'base2', 'base2')
+
+" Matching parenthesis.
+call s:Col('MatchParen', 'base1', 'orange')
+
+" Special keys, e.g. some of the chars in 'listchars'. See ':h listchars'.
+call s:Col('SpecialKey', 'base4')
+
+" Folds.
+call s:Col('Folded', 'base6', 'blue')
+call s:Col('FoldColumn', 'base5', 'base3')
+
+" Searching.
+call s:Col('Search', 'base2', 'yellow')
+call s:Attr('IncSearch', 'reverse')
+
+" Popup menu.
+call s:Col('Pmenu', 'base6', 'base2')
+call s:Col('PmenuSel', 'base7', 'base4')
+call s:Col('PmenuSbar', '', 'base2')
+call s:Col('PmenuThumb', '', 'base4')
+
+" Command line stuff.
+call s:Col('ErrorMsg', 'red', 'base1')
+call s:Col('ModeMsg', 'blue')
+
+" Wild menu.
+" StatusLine determines the color of the non-active entries in the wild menu.
+call s:Col('StatusLine', 'base4', 'base2')
+call s:Col('WildMenu', 'base7', 'cyan')
+
+" The 'Hit ENTER to continue prompt'.
+call s:Col('Question', 'green')
+
+" Tab line.
+call s:Col('TabLineSel', 'base7', 'base4') " the selected tab
+call s:Col('TabLine', 'base6', 'base2') " the non-selected tabs
+call s:Col('TabLineFill', 'base0', 'base0') " the rest of the tab line
+
+" Spelling.
+call s:Col('SpellBad', 'base7', 'red')
+call s:Col('SpellCap', 'base7', 'blue')
+call s:Col('SpellLocal', 'yellow')
+call s:Col('SpellRare', 'base7', 'violet')
+
+" Diffing.
+call s:Col('DiffAdd', 'green')
+call s:Col('DiffChange', 'cyan')
+call s:Col('DiffDelete', 'red')
+call s:Col('DiffText', 'yellow')
+
+
+" Programming languages and filetypes ==========================================
+
+" Ruby.
+call s:Col('rubyDefine', 'blue')
+call s:Col('rubyStringDelimiter', 'green')
+
+" HTML (and often Markdown).
+call s:Col('htmlArg', 'blue')
+call s:Col('htmlItalic', 'magenta')
+call s:Col('htmlBold', 'cyan', '')
+
+
+" Plugin " =====================================================================
+
+" GitGutter
+call s:Col('GitGutterAdd', 'green', s:linenr_background)
+call s:Col('GitGutterChange', 'cyan', s:linenr_background)
+call s:Col('GitGutterDelete', 'orange', s:linenr_background)
+call s:Col('GitGutterChangeDelete', 'magenta', s:linenr_background)
+
+" CtrlP
+call s:Col('CtrlPNoEntries', 'base7', 'orange') " no entries
+call s:Col('CtrlPMatch', 'green') " matching part
+call s:Col('CtrlPPrtBase', 'base4') " '>>>' prompt
+call s:Col('CtrlPPrtText', 'cyan') " text in the prompt
+call s:Col('CtrlPPtrCursor', 'base7') " cursor in the prompt
+
+
+
+" Cleanup =====================================================================
+
+unlet s:colors
+unlet s:background
+unlet s:linenr_background
diff --git a/vim/colors/hybrid-light.vim b/vim/colors/hybrid-light.vim
new file mode 100644
index 0000000..9151a92
--- /dev/null
+++ b/vim/colors/hybrid-light.vim
@@ -0,0 +1,328 @@
+" File: hybrid-light.vim
+" Maintainer: Andrew Wong (w0ng)
+" URL: https://github.com/w0ng/vim-hybrid
+" Modified: 27 Jan 2013 06:05 AM AEST
+" License: MIT
+
+" Description:"{{{
+" ----------------------------------------------------------------------------
+" A clone of Solarized light with a custom colour palette. Currently a WIP.
+
+"}}}
+" Initialisation:"{{{
+" ----------------------------------------------------------------------------
+if !has("gui_running") && &t_Co < 256
+ finish
+endif
+
+set background=light
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "hybrid-light"
+
+"}}}
+" GUI And Cterm Palettes:"{{{
+" ----------------------------------------------------------------------------
+if has("gui_running")
+ let s:vmode = "gui"
+ let s:background = "#e4e4e4"
+ let s:foreground = "#000000"
+ let s:selection = "#bcbcbc"
+ let s:line = "#d0d0d0"
+ let s:comment = "#5f5f5f"
+ let s:red = "#5f0000"
+ let s:orange = "#875f00"
+ let s:yellow = "#5f5f00"
+ let s:green = "#005f00"
+ let s:aqua = "#005f5f"
+ let s:blue = "#00005f"
+ let s:purple = "#5f005f"
+ let s:window = "#9e9e9e"
+ let s:darkcolumn = "#808080"
+ let s:addbg = "#d7ffd7"
+ let s:changebg = "#d7d7ff"
+ let s:delbg = "#ffd7d7"
+else
+ let s:vmode = "cterm"
+ let s:background = "254"
+ let s:foreground = "16"
+ let s:selection = "250"
+ let s:line = "252"
+ let s:comment = "59"
+ let s:red = "52"
+ let s:orange = "94"
+ let s:yellow = "58"
+ let s:green = "22"
+ let s:aqua = "23"
+ let s:blue = "17"
+ let s:purple = "53"
+ let s:window = "247"
+ let s:darkcolumn = "244"
+ let s:addbg = "194"
+ let s:changebg = "189"
+ let s:delbg = "224"
+endif
+
+"}}}
+" Formatting Options:"{{{
+" ----------------------------------------------------------------------------
+let s:none = "NONE"
+let s:t_none = "NONE"
+let s:n = "NONE"
+let s:c = ",undercurl"
+let s:r = ",reverse"
+let s:s = ",standout"
+let s:b = ",bold"
+let s:u = ",underline"
+let s:i = ",italic"
+
+"}}}
+" Highlighting Primitives:"{{{
+" ----------------------------------------------------------------------------
+exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'"
+exe "let s:bg_foreground = ' ".s:vmode."bg=".s:foreground."'"
+exe "let s:bg_background = ' ".s:vmode."bg=".s:background."'"
+exe "let s:bg_selection = ' ".s:vmode."bg=".s:selection ."'"
+exe "let s:bg_line = ' ".s:vmode."bg=".s:line ."'"
+exe "let s:bg_comment = ' ".s:vmode."bg=".s:comment ."'"
+exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'"
+exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'"
+exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'"
+exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'"
+exe "let s:bg_aqua = ' ".s:vmode."bg=".s:aqua ."'"
+exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'"
+exe "let s:bg_purple = ' ".s:vmode."bg=".s:purple ."'"
+exe "let s:bg_window = ' ".s:vmode."bg=".s:window ."'"
+exe "let s:bg_darkcolumn = ' ".s:vmode."bg=".s:darkcolumn."'"
+exe "let s:bg_addbg = ' ".s:vmode."bg=".s:addbg ."'"
+exe "let s:bg_changebg = ' ".s:vmode."bg=".s:changebg ."'"
+exe "let s:bg_delbg = ' ".s:vmode."bg=".s:delbg ."'"
+
+exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'"
+exe "let s:fg_foreground = ' ".s:vmode."fg=".s:foreground."'"
+exe "let s:fg_background = ' ".s:vmode."fg=".s:background."'"
+exe "let s:fg_selection = ' ".s:vmode."fg=".s:selection ."'"
+exe "let s:fg_line = ' ".s:vmode."fg=".s:line ."'"
+exe "let s:fg_comment = ' ".s:vmode."fg=".s:comment ."'"
+exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'"
+exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'"
+exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'"
+exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'"
+exe "let s:fg_aqua = ' ".s:vmode."fg=".s:aqua ."'"
+exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'"
+exe "let s:fg_purple = ' ".s:vmode."fg=".s:purple ."'"
+exe "let s:fg_window = ' ".s:vmode."fg=".s:window ."'"
+exe "let s:fg_darkcolumn = ' ".s:vmode."fg=".s:darkcolumn."'"
+exe "let s:fg_addbg = ' ".s:vmode."fg=".s:addbg ."'"
+exe "let s:fg_changebg = ' ".s:vmode."fg=".s:changebg ."'"
+exe "let s:fg_delbg = ' ".s:vmode."fg=".s:delbg ."'"
+
+exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE" ."'"
+exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c ."'"
+exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i ."'"
+exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s ."'"
+exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r ."'"
+exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"
+
+if has("gui_running")
+ exe "let s:sp_none = ' guisp=".s:none ."'"
+ exe "let s:sp_foreground = ' guisp=".s:foreground."'"
+ exe "let s:sp_background = ' guisp=".s:background."'"
+ exe "let s:sp_selection = ' guisp=".s:selection ."'"
+ exe "let s:sp_line = ' guisp=".s:line ."'"
+ exe "let s:sp_comment = ' guisp=".s:comment ."'"
+ exe "let s:sp_red = ' guisp=".s:red ."'"
+ exe "let s:sp_orange = ' guisp=".s:orange ."'"
+ exe "let s:sp_yellow = ' guisp=".s:yellow ."'"
+ exe "let s:sp_green = ' guisp=".s:green ."'"
+ exe "let s:sp_aqua = ' guisp=".s:aqua ."'"
+ exe "let s:sp_blue = ' guisp=".s:blue ."'"
+ exe "let s:sp_purple = ' guisp=".s:purple ."'"
+ exe "let s:sp_window = ' guisp=".s:window ."'"
+ exe "let s:sp_addbg = ' guisp=".s:addbg ."'"
+ exe "let s:sp_changebg = ' guisp=".s:changebg ."'"
+ exe "let s:sp_delbg = ' guisp=".s:delbg ."'"
+else
+ let s:sp_none = ""
+ let s:sp_foreground = ""
+ let s:sp_background = ""
+ let s:sp_selection = ""
+ let s:sp_line = ""
+ let s:sp_comment = ""
+ let s:sp_red = ""
+ let s:sp_orange = ""
+ let s:sp_yellow = ""
+ let s:sp_green = ""
+ let s:sp_aqua = ""
+ let s:sp_blue = ""
+ let s:sp_purple = ""
+ let s:sp_window = ""
+ let s:sp_addbg = ""
+ let s:sp_changebg = ""
+ let s:sp_delbg = ""
+endif
+
+"}}}
+" Vim Highlighting: (see :help highlight-groups)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! ColorColumn" .s:fg_none .s:bg_line .s:fmt_none
+" Conceal"
+" Cursor"
+" CursorIM"
+exe "hi! CursorColumn" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! CursorLine" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! Directory" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! DiffAdd" .s:fg_green .s:bg_addbg .s:fmt_none
+exe "hi! DiffChange" .s:fg_purple .s:bg_changebg .s:fmt_none
+exe "hi! DiffDelete" .s:fg_red .s:bg_delbg .s:fmt_none
+exe "hi! DiffText" .s:fg_background .s:bg_purple .s:fmt_none
+exe "hi! ErrorMsg" .s:fg_background .s:bg_red .s:fmt_stnd
+exe "hi! VertSplit" .s:fg_window .s:bg_none .s:fmt_none
+exe "hi! Folded" .s:fg_background .s:bg_darkcolumn .s:fmt_none
+exe "hi! FoldColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+exe "hi! SignColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+" Incsearch"
+exe "hi! LineNr" .s:fg_comment .s:bg_line .s:fmt_none
+exe "hi! CursorLineNr" .s:fg_orange .s:bg_none .s:fmt_bold
+exe "hi! MatchParen" .s:fg_background .s:bg_aqua .s:fmt_none
+exe "hi! ModeMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! MoreMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! NonText" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! Normal" .s:fg_foreground .s:bg_background .s:fmt_none
+exe "hi! Pmenu" .s:fg_foreground .s:bg_selection .s:fmt_none
+exe "hi! PmenuSel" .s:fg_foreground .s:bg_selection .s:fmt_revr
+" PmenuSbar"
+" PmenuThumb"
+exe "hi! Question" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! Search" .s:fg_background .s:bg_yellow .s:fmt_none
+exe "hi! SpecialKey" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! SpellBad" .s:fg_red .s:bg_none .s:fmt_undr
+exe "hi! SpellCap" .s:fg_blue .s:bg_none .s:fmt_undr
+exe "hi! SpellLocal" .s:fg_aqua .s:bg_none .s:fmt_undr
+exe "hi! SpellRare" .s:fg_purple .s:bg_none .s:fmt_undr
+exe "hi! StatusLine" .s:fg_comment .s:bg_background .s:fmt_revr
+exe "hi! StatusLineNC" .s:fg_window .s:bg_foreground .s:fmt_revr
+exe "hi! TabLine" .s:fg_foreground .s:bg_darkcolumn .s:fmt_revr
+" TabLineFill"
+" TabLineSel"
+exe "hi! Title" .s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! Visual" .s:fg_none .s:bg_selection .s:fmt_none
+" VisualNos"
+exe "hi! WarningMsg" .s:fg_red .s:bg_none .s:fmt_none
+" WildMenu"
+
+"}}}
+" Generic Syntax Highlighting: (see :help group-name)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! Comment" .s:fg_comment .s:bg_none .s:fmt_none
+
+exe "hi! Constant" .s:fg_aqua .s:bg_none .s:fmt_none
+"exe "hi! String" .s:fg_green .s:bg_none .s:fmt_none
+" Character"
+" Number"
+" Boolean"
+" Float"
+
+exe "hi! Identifier" .s:fg_blue .s:bg_none .s:fmt_none
+"exe "hi! Function" .s:fg_yellow .s:bg_none .s:fmt_none
+
+exe "hi! Statement" .s:fg_green .s:bg_none .s:fmt_none
+" Conditional"
+" Repeat"
+" Label"
+"exe "hi! Operator" .s:fg_foreground .s:bg_none .s:fmt_none
+" Keyword"
+" Exception"
+
+exe "hi! PreProc" .s:fg_orange .s:bg_none .s:fmt_none
+" Include"
+" Define"
+" Macro"
+" PreCondit"
+
+exe "hi! Type" .s:fg_yellow .s:bg_none .s:fmt_none
+" StorageClass"
+"exe "hi! Structure" .s:fg_aqua .s:bg_none .s:fmt_none
+" Typedef"
+
+exe "hi! Special" .s:fg_red .s:bg_none .s:fmt_none
+" SpecialChar"
+" Tag"
+" Delimiter"
+" SpecialComment"
+" Debug"
+"
+exe "hi! Underlined" .s:fg_purple .s:bg_none .s:fmt_none
+
+exe "hi! Ignore" .s:fg_none .s:bg_none .s:fmt_none
+
+exe "hi! Error" .s:fg_red .s:bg_none .s:fmt_undr
+
+exe "hi! Todo" .s:fg_comment .s:bg_addbg .s:fmt_none
+
+" Quickfix window
+exe "hi! qfLineNr" .s:fg_yellow .s:bg_none .s:fmt_none
+" qfFileName"
+" qfLineNr"
+" qfError"
+
+"}}}
+" Diff Syntax Highlighting:"{{{
+" ----------------------------------------------------------------------------
+" Diff
+" diffOldFile
+" diffNewFile
+" diffFile
+" diffOnly
+" diffIdentical
+" diffDiffer
+" diffBDiffer
+" diffIsA
+" diffNoEOL
+" diffCommon
+hi! link diffRemoved Special
+" diffChanged
+hi! link diffAdded Statement
+" diffLine
+" diffSubname
+" diffComment
+
+"}}}
+" Legal:"{{{
+" ----------------------------------------------------------------------------
+" Copyright (c) 2011 Ethan Schoonover
+" Copyright (c) 2013 w0ng
+"
+" Permission is hereby granted, free of charge, to any per‐
+" son obtaining a copy of this software and associated doc‐
+" umentation files (the “Software”), to deal in the Soft‐
+" ware without restriction, including without limitation
+" the rights to use, copy, modify, merge, publish, distrib‐
+" ute, sublicense, and/or sell copies of the Software, and
+" to permit persons to whom the Software is furnished to do
+" so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice
+" shall be included in all copies or substantial portions
+" of the Software.
+"
+" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
+" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
+" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
+" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
+" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+
+" }}}
diff --git a/vim/colors/hybrid.vim b/vim/colors/hybrid.vim
new file mode 100644
index 0000000..166907b
--- /dev/null
+++ b/vim/colors/hybrid.vim
@@ -0,0 +1,441 @@
+" File: hybrid.vim
+" Maintainer: Andrew Wong (w0ng)
+" URL: https://github.com/w0ng/vim-hybrid
+" Modified: 27 Jan 2013 07:33 AM AEST
+" License: MIT
+
+" Description:"{{{
+" ----------------------------------------------------------------------------
+" The RGB colour palette is taken from Tomorrow-Night.vim:
+" https://github.com/chriskempson/vim-tomorrow-theme
+"
+" The syntax highlighting scheme is taken from jellybeans.vim:
+" https://github.com/nanotech/jellybeans.vim
+"
+" The code taken from solarized.vim
+" https://github.com/altercation/vim-colors-solarized
+
+"}}}
+" Requirements And Recommendations:"{{{
+" ----------------------------------------------------------------------------
+" This colourscheme is intended for use on:
+" - gVim 7.3 for Linux, Mac and Windows.
+" - Vim 7.3 for Linux, using a 256 colour enabled terminal.
+"
+" By default, Vim will use the closest matching cterm equivalent of the RGB
+" colours.
+"
+" However, Due to the limited 256 palette, colours in Vim and gVim will still
+" be noticeably different. In order to get a uniform appearance and the way
+" that this colourscheme was intended, it is HIGHLY recommended that you:
+"
+" 1. Add these colours to ~/.Xresources:
+"
+" https://gist.github.com/3278077
+"
+" 2. Use Xresources colours by setting in ~/.vimrc:
+"
+" let g:hybrid_use_Xresources = 1
+" colorscheme hybrid
+"
+" For iTerm2 users:
+" 1. Install this color preset on your iTerm2:
+"
+" https://gist.github.com/luan/6362811
+"
+" 2. Use iTerm colours by setting in ~/.vimrc:
+"
+" let g:hybrid_use_iTerm_colors = 1
+" colorscheme hybrid
+"
+
+"}}}
+" Initialisation:"{{{
+" ----------------------------------------------------------------------------
+if !has("gui_running") && &t_Co < 256
+ finish
+endif
+
+if !exists("g:hybrid_use_Xresources")
+ let g:hybrid_use_Xresources = 0
+endif
+
+if !exists("g:hybrid_use_iTerm_colors")
+ let g:hybrid_use_iTerm_colors = 0
+endif
+
+set background=dark
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "hybrid"
+
+"}}}
+" GUI And Cterm Palettes:"{{{
+" ----------------------------------------------------------------------------
+if has("gui_running")
+ let s:vmode = "gui"
+ let s:background = "#1d1f21"
+ let s:foreground = "#c5c8c6"
+ let s:selection = "#373b41"
+ let s:line = "#282a2e"
+ let s:comment = "#707880"
+ let s:red = "#cc6666"
+ let s:orange = "#de935f"
+ let s:yellow = "#f0c674"
+ let s:green = "#b5bd68"
+ let s:aqua = "#8abeb7"
+ let s:blue = "#81a2be"
+ let s:purple = "#b294bb"
+ let s:window = "#303030"
+ let s:darkcolumn = "#1c1c1c"
+ let s:addbg = "#5F875F"
+ let s:addfg = "#d7ffaf"
+ let s:changebg = "#5F5F87"
+ let s:changefg = "#d7d7ff"
+ let s:darkblue = "#00005f"
+ let s:darkcyan = "#005f5f"
+ let s:darkred = "#5f0000"
+ let s:darkpurple = "#5f005f"
+else
+ let s:vmode = "cterm"
+ let s:background = "234"
+ let s:window = "236"
+ let s:darkcolumn = "234"
+ let s:addbg = "65"
+ let s:addfg = "193"
+ let s:changebg = "60"
+ let s:changefg = "189"
+ let s:darkblue = "17"
+ let s:darkcyan = "24"
+ let s:darkred = "52"
+ let s:darkpurple = "53"
+ if g:hybrid_use_Xresources == 1
+ let s:foreground = "15" " White
+ let s:selection = "8" " DarkGrey
+ let s:line = "0" " Black
+ let s:comment = "7" " LightGrey
+ let s:red = "9" " LightRed
+ let s:orange = "3" " DarkYellow
+ let s:yellow = "11" " LightYellow
+ let s:green = "10" " LightGreen
+ let s:aqua = "14" " LightCyan
+ let s:blue = "12" " LightBlue
+ let s:purple = "13" " LightMagenta
+ elseif g:hybrid_use_iTerm_colors == 1
+ let s:background = "NONE"
+ let s:foreground = "7"
+ let s:selection = "0"
+ let s:line = "0"
+ let s:comment = "15"
+ let s:red = "1"
+ let s:orange = "11"
+ let s:yellow = "3"
+ let s:green = "2"
+ let s:aqua = "6"
+ let s:blue = "4"
+ let s:purple = "5"
+ else
+ let s:foreground = "250"
+ let s:selection = "237"
+ let s:line = "235"
+ let s:comment = "243"
+ let s:red = "167"
+ let s:orange = "173"
+ let s:yellow = "221"
+ let s:green = "143"
+ let s:aqua = "109"
+ let s:blue = "110"
+ let s:purple = "139"
+ endif
+endif
+
+"}}}
+" Formatting Options:"{{{
+" ----------------------------------------------------------------------------
+let s:none = "NONE"
+let s:t_none = "NONE"
+let s:n = "NONE"
+let s:c = ",undercurl"
+let s:r = ",reverse"
+let s:s = ",standout"
+let s:b = ",bold"
+let s:u = ",underline"
+let s:i = ",italic"
+
+"}}}
+" Highlighting Primitives:"{{{
+" ----------------------------------------------------------------------------
+exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'"
+exe "let s:bg_foreground = ' ".s:vmode."bg=".s:foreground."'"
+exe "let s:bg_background = ' ".s:vmode."bg=".s:background."'"
+exe "let s:bg_selection = ' ".s:vmode."bg=".s:selection ."'"
+exe "let s:bg_line = ' ".s:vmode."bg=".s:line ."'"
+exe "let s:bg_comment = ' ".s:vmode."bg=".s:comment ."'"
+exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'"
+exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'"
+exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'"
+exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'"
+exe "let s:bg_aqua = ' ".s:vmode."bg=".s:aqua ."'"
+exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'"
+exe "let s:bg_purple = ' ".s:vmode."bg=".s:purple ."'"
+exe "let s:bg_window = ' ".s:vmode."bg=".s:window ."'"
+exe "let s:bg_darkcolumn = ' ".s:vmode."bg=".s:darkcolumn."'"
+exe "let s:bg_addbg = ' ".s:vmode."bg=".s:addbg ."'"
+exe "let s:bg_addfg = ' ".s:vmode."bg=".s:addfg ."'"
+exe "let s:bg_changebg = ' ".s:vmode."bg=".s:changebg ."'"
+exe "let s:bg_changefg = ' ".s:vmode."bg=".s:changefg ."'"
+exe "let s:bg_darkblue = ' ".s:vmode."bg=".s:darkblue ."'"
+exe "let s:bg_darkcyan = ' ".s:vmode."bg=".s:darkcyan ."'"
+exe "let s:bg_darkred = ' ".s:vmode."bg=".s:darkred ."'"
+exe "let s:bg_darkpurple = ' ".s:vmode."bg=".s:darkpurple."'"
+
+exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'"
+exe "let s:fg_foreground = ' ".s:vmode."fg=".s:foreground."'"
+exe "let s:fg_background = ' ".s:vmode."fg=".s:background."'"
+exe "let s:fg_selection = ' ".s:vmode."fg=".s:selection ."'"
+exe "let s:fg_line = ' ".s:vmode."fg=".s:line ."'"
+exe "let s:fg_comment = ' ".s:vmode."fg=".s:comment ."'"
+exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'"
+exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'"
+exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'"
+exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'"
+exe "let s:fg_aqua = ' ".s:vmode."fg=".s:aqua ."'"
+exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'"
+exe "let s:fg_purple = ' ".s:vmode."fg=".s:purple ."'"
+exe "let s:fg_window = ' ".s:vmode."fg=".s:window ."'"
+exe "let s:fg_darkcolumn = ' ".s:vmode."fg=".s:darkcolumn."'"
+exe "let s:fg_addbg = ' ".s:vmode."fg=".s:addbg ."'"
+exe "let s:fg_addfg = ' ".s:vmode."fg=".s:addfg ."'"
+exe "let s:fg_changebg = ' ".s:vmode."fg=".s:changebg ."'"
+exe "let s:fg_changefg = ' ".s:vmode."fg=".s:changefg ."'"
+exe "let s:fg_darkblue = ' ".s:vmode."fg=".s:darkblue ."'"
+exe "let s:fg_darkcyan = ' ".s:vmode."fg=".s:darkcyan ."'"
+exe "let s:fg_darkred = ' ".s:vmode."fg=".s:darkred ."'"
+exe "let s:fg_darkpurple = ' ".s:vmode."fg=".s:darkpurple."'"
+
+exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE" ."'"
+exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c ."'"
+exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i ."'"
+exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s ."'"
+exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r ."'"
+exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"
+
+if has("gui_running")
+ exe "let s:sp_none = ' guisp=".s:none ."'"
+ exe "let s:sp_foreground = ' guisp=".s:foreground."'"
+ exe "let s:sp_background = ' guisp=".s:background."'"
+ exe "let s:sp_selection = ' guisp=".s:selection ."'"
+ exe "let s:sp_line = ' guisp=".s:line ."'"
+ exe "let s:sp_comment = ' guisp=".s:comment ."'"
+ exe "let s:sp_red = ' guisp=".s:red ."'"
+ exe "let s:sp_orange = ' guisp=".s:orange ."'"
+ exe "let s:sp_yellow = ' guisp=".s:yellow ."'"
+ exe "let s:sp_green = ' guisp=".s:green ."'"
+ exe "let s:sp_aqua = ' guisp=".s:aqua ."'"
+ exe "let s:sp_blue = ' guisp=".s:blue ."'"
+ exe "let s:sp_purple = ' guisp=".s:purple ."'"
+ exe "let s:sp_window = ' guisp=".s:window ."'"
+ exe "let s:sp_addbg = ' guisp=".s:addbg ."'"
+ exe "let s:sp_addfg = ' guisp=".s:addfg ."'"
+ exe "let s:sp_changebg = ' guisp=".s:changebg ."'"
+ exe "let s:sp_changefg = ' guisp=".s:changefg ."'"
+ exe "let s:sp_darkblue = ' guisp=".s:darkblue ."'"
+ exe "let s:sp_darkcyan = ' guisp=".s:darkcyan ."'"
+ exe "let s:sp_darkred = ' guisp=".s:darkred ."'"
+ exe "let s:sp_darkpurple = ' guisp=".s:darkpurple."'"
+else
+ let s:sp_none = ""
+ let s:sp_foreground = ""
+ let s:sp_background = ""
+ let s:sp_selection = ""
+ let s:sp_line = ""
+ let s:sp_comment = ""
+ let s:sp_red = ""
+ let s:sp_orange = ""
+ let s:sp_yellow = ""
+ let s:sp_green = ""
+ let s:sp_aqua = ""
+ let s:sp_blue = ""
+ let s:sp_purple = ""
+ let s:sp_window = ""
+ let s:sp_addbg = ""
+ let s:sp_addfg = ""
+ let s:sp_changebg = ""
+ let s:sp_changefg = ""
+ let s:sp_darkblue = ""
+ let s:sp_darkcyan = ""
+ let s:sp_darkred = ""
+ let s:sp_darkpurple = ""
+endif
+
+"}}}
+" Vim Highlighting: (see :help highlight-groups)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! ColorColumn" .s:fg_none .s:bg_line .s:fmt_none
+" Conceal"
+" Cursor"
+" CursorIM"
+exe "hi! CursorColumn" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! CursorLine" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! Directory" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! DiffAdd" .s:fg_addfg .s:bg_addbg .s:fmt_none
+exe "hi! DiffChange" .s:fg_changefg .s:bg_changebg .s:fmt_none
+exe "hi! DiffDelete" .s:fg_background .s:bg_red .s:fmt_none
+exe "hi! DiffText" .s:fg_background .s:bg_blue .s:fmt_none
+exe "hi! ErrorMsg" .s:fg_background .s:bg_red .s:fmt_stnd
+exe "hi! VertSplit" .s:fg_window .s:bg_none .s:fmt_none
+exe "hi! Folded" .s:fg_comment .s:bg_darkcolumn .s:fmt_none
+exe "hi! FoldColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+exe "hi! SignColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+" Incsearch"
+exe "hi! LineNr" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! CursorLineNr" .s:fg_yellow .s:bg_none .s:fmt_bold
+exe "hi! MatchParen" .s:fg_background .s:bg_changebg .s:fmt_none
+exe "hi! ModeMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! MoreMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! NonText" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! Pmenu" .s:fg_foreground .s:bg_selection .s:fmt_none
+exe "hi! PmenuSel" .s:fg_foreground .s:bg_selection .s:fmt_revr
+" PmenuSbar"
+" PmenuThumb"
+exe "hi! Question" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! Search" .s:fg_background .s:bg_yellow .s:fmt_none
+exe "hi! SpecialKey" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! SpellCap" .s:fg_blue .s:bg_darkblue .s:fmt_undr
+exe "hi! SpellLocal" .s:fg_aqua .s:bg_darkcyan .s:fmt_undr
+exe "hi! SpellBad" .s:fg_red .s:bg_darkred .s:fmt_undr
+exe "hi! SpellRare" .s:fg_purple .s:bg_darkpurple .s:fmt_undr
+exe "hi! StatusLine" .s:fg_comment .s:bg_background .s:fmt_revr
+exe "hi! StatusLineNC" .s:fg_window .s:bg_comment .s:fmt_revr
+exe "hi! TabLine" .s:fg_foreground .s:bg_darkcolumn .s:fmt_revr
+" TabLineFill"
+" TabLineSel"
+exe "hi! Title" .s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! Visual" .s:fg_none .s:bg_selection .s:fmt_none
+" VisualNos"
+exe "hi! WarningMsg" .s:fg_red .s:bg_none .s:fmt_none
+" WildMenu"
+
+" Use Xresources for background colour
+if has('gui_running') || (g:hybrid_use_Xresources != 1 && g:hybrid_use_iTerm_colors != 1)
+ exe "hi! Normal" .s:fg_foreground .s:bg_background .s:fmt_none
+else
+ exe "hi! Normal" .s:fg_foreground .s:bg_none .s:fmt_none
+endif
+
+"}}}
+" Generic Syntax Highlighting: (see :help group-name)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! Comment" .s:fg_comment .s:bg_none .s:fmt_none
+
+exe "hi! Constant" .s:fg_red .s:bg_none .s:fmt_none
+exe "hi! String" .s:fg_green .s:bg_none .s:fmt_none
+" Character"
+" Number"
+" Boolean"
+" Float"
+
+exe "hi! Identifier" .s:fg_purple .s:bg_none .s:fmt_none
+exe "hi! Function" .s:fg_yellow .s:bg_none .s:fmt_none
+
+exe "hi! Statement" .s:fg_blue .s:bg_none .s:fmt_none
+" Conditional"
+" Repeat"
+" Label"
+exe "hi! Operator" .s:fg_aqua .s:bg_none .s:fmt_none
+" Keyword"
+" Exception"
+
+exe "hi! PreProc" .s:fg_aqua .s:bg_none .s:fmt_none
+" Include"
+" Define"
+" Macro"
+" PreCondit"
+
+exe "hi! Type" .s:fg_orange .s:bg_none .s:fmt_none
+" StorageClass"
+exe "hi! Structure" .s:fg_aqua .s:bg_none .s:fmt_none
+" Typedef"
+
+exe "hi! Special" .s:fg_green .s:bg_none .s:fmt_none
+" SpecialChar"
+" Tag"
+" Delimiter"
+" SpecialComment"
+" Debug"
+"
+exe "hi! Underlined" .s:fg_blue .s:bg_none .s:fmt_none
+
+exe "hi! Ignore" .s:fg_none .s:bg_none .s:fmt_none
+
+exe "hi! Error" .s:fg_red .s:bg_darkred .s:fmt_undr
+
+exe "hi! Todo" .s:fg_addfg .s:bg_none .s:fmt_none
+
+" Quickfix window highlighting
+exe "hi! qfLineNr" .s:fg_yellow .s:bg_none .s:fmt_none
+" qfFileName"
+" qfLineNr"
+" qfError"
+
+"}}}
+" Diff Syntax Highlighting:"{{{
+" ----------------------------------------------------------------------------
+" Diff
+" diffOldFile
+" diffNewFile
+" diffFile
+" diffOnly
+" diffIdentical
+" diffDiffer
+" diffBDiffer
+" diffIsA
+" diffNoEOL
+" diffCommon
+hi! link diffRemoved Constant
+" diffChanged
+hi! link diffAdded Special
+" diffLine
+" diffSubname
+" diffComment
+
+"}}}
+" Legal:"{{{
+" ----------------------------------------------------------------------------
+" Copyright (c) 2011 Ethan Schoonover
+" Copyright (c) 2009-2012 NanoTech
+" Copyright (c) 2012 w0ng
+"
+" Permission is hereby granted, free of charge, to any per‐
+" son obtaining a copy of this software and associated doc‐
+" umentation files (the “Software”), to deal in the Soft‐
+" ware without restriction, including without limitation
+" the rights to use, copy, modify, merge, publish, distrib‐
+" ute, sublicense, and/or sell copies of the Software, and
+" to permit persons to whom the Software is furnished to do
+" so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice
+" shall be included in all copies or substantial portions
+" of the Software.
+"
+" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
+" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
+" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
+" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
+" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+
+" }}}
diff --git a/vim/colors/hybrid.vim.1 b/vim/colors/hybrid.vim.1
new file mode 100644
index 0000000..166907b
--- /dev/null
+++ b/vim/colors/hybrid.vim.1
@@ -0,0 +1,441 @@
+" File: hybrid.vim
+" Maintainer: Andrew Wong (w0ng)
+" URL: https://github.com/w0ng/vim-hybrid
+" Modified: 27 Jan 2013 07:33 AM AEST
+" License: MIT
+
+" Description:"{{{
+" ----------------------------------------------------------------------------
+" The RGB colour palette is taken from Tomorrow-Night.vim:
+" https://github.com/chriskempson/vim-tomorrow-theme
+"
+" The syntax highlighting scheme is taken from jellybeans.vim:
+" https://github.com/nanotech/jellybeans.vim
+"
+" The code taken from solarized.vim
+" https://github.com/altercation/vim-colors-solarized
+
+"}}}
+" Requirements And Recommendations:"{{{
+" ----------------------------------------------------------------------------
+" This colourscheme is intended for use on:
+" - gVim 7.3 for Linux, Mac and Windows.
+" - Vim 7.3 for Linux, using a 256 colour enabled terminal.
+"
+" By default, Vim will use the closest matching cterm equivalent of the RGB
+" colours.
+"
+" However, Due to the limited 256 palette, colours in Vim and gVim will still
+" be noticeably different. In order to get a uniform appearance and the way
+" that this colourscheme was intended, it is HIGHLY recommended that you:
+"
+" 1. Add these colours to ~/.Xresources:
+"
+" https://gist.github.com/3278077
+"
+" 2. Use Xresources colours by setting in ~/.vimrc:
+"
+" let g:hybrid_use_Xresources = 1
+" colorscheme hybrid
+"
+" For iTerm2 users:
+" 1. Install this color preset on your iTerm2:
+"
+" https://gist.github.com/luan/6362811
+"
+" 2. Use iTerm colours by setting in ~/.vimrc:
+"
+" let g:hybrid_use_iTerm_colors = 1
+" colorscheme hybrid
+"
+
+"}}}
+" Initialisation:"{{{
+" ----------------------------------------------------------------------------
+if !has("gui_running") && &t_Co < 256
+ finish
+endif
+
+if !exists("g:hybrid_use_Xresources")
+ let g:hybrid_use_Xresources = 0
+endif
+
+if !exists("g:hybrid_use_iTerm_colors")
+ let g:hybrid_use_iTerm_colors = 0
+endif
+
+set background=dark
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "hybrid"
+
+"}}}
+" GUI And Cterm Palettes:"{{{
+" ----------------------------------------------------------------------------
+if has("gui_running")
+ let s:vmode = "gui"
+ let s:background = "#1d1f21"
+ let s:foreground = "#c5c8c6"
+ let s:selection = "#373b41"
+ let s:line = "#282a2e"
+ let s:comment = "#707880"
+ let s:red = "#cc6666"
+ let s:orange = "#de935f"
+ let s:yellow = "#f0c674"
+ let s:green = "#b5bd68"
+ let s:aqua = "#8abeb7"
+ let s:blue = "#81a2be"
+ let s:purple = "#b294bb"
+ let s:window = "#303030"
+ let s:darkcolumn = "#1c1c1c"
+ let s:addbg = "#5F875F"
+ let s:addfg = "#d7ffaf"
+ let s:changebg = "#5F5F87"
+ let s:changefg = "#d7d7ff"
+ let s:darkblue = "#00005f"
+ let s:darkcyan = "#005f5f"
+ let s:darkred = "#5f0000"
+ let s:darkpurple = "#5f005f"
+else
+ let s:vmode = "cterm"
+ let s:background = "234"
+ let s:window = "236"
+ let s:darkcolumn = "234"
+ let s:addbg = "65"
+ let s:addfg = "193"
+ let s:changebg = "60"
+ let s:changefg = "189"
+ let s:darkblue = "17"
+ let s:darkcyan = "24"
+ let s:darkred = "52"
+ let s:darkpurple = "53"
+ if g:hybrid_use_Xresources == 1
+ let s:foreground = "15" " White
+ let s:selection = "8" " DarkGrey
+ let s:line = "0" " Black
+ let s:comment = "7" " LightGrey
+ let s:red = "9" " LightRed
+ let s:orange = "3" " DarkYellow
+ let s:yellow = "11" " LightYellow
+ let s:green = "10" " LightGreen
+ let s:aqua = "14" " LightCyan
+ let s:blue = "12" " LightBlue
+ let s:purple = "13" " LightMagenta
+ elseif g:hybrid_use_iTerm_colors == 1
+ let s:background = "NONE"
+ let s:foreground = "7"
+ let s:selection = "0"
+ let s:line = "0"
+ let s:comment = "15"
+ let s:red = "1"
+ let s:orange = "11"
+ let s:yellow = "3"
+ let s:green = "2"
+ let s:aqua = "6"
+ let s:blue = "4"
+ let s:purple = "5"
+ else
+ let s:foreground = "250"
+ let s:selection = "237"
+ let s:line = "235"
+ let s:comment = "243"
+ let s:red = "167"
+ let s:orange = "173"
+ let s:yellow = "221"
+ let s:green = "143"
+ let s:aqua = "109"
+ let s:blue = "110"
+ let s:purple = "139"
+ endif
+endif
+
+"}}}
+" Formatting Options:"{{{
+" ----------------------------------------------------------------------------
+let s:none = "NONE"
+let s:t_none = "NONE"
+let s:n = "NONE"
+let s:c = ",undercurl"
+let s:r = ",reverse"
+let s:s = ",standout"
+let s:b = ",bold"
+let s:u = ",underline"
+let s:i = ",italic"
+
+"}}}
+" Highlighting Primitives:"{{{
+" ----------------------------------------------------------------------------
+exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'"
+exe "let s:bg_foreground = ' ".s:vmode."bg=".s:foreground."'"
+exe "let s:bg_background = ' ".s:vmode."bg=".s:background."'"
+exe "let s:bg_selection = ' ".s:vmode."bg=".s:selection ."'"
+exe "let s:bg_line = ' ".s:vmode."bg=".s:line ."'"
+exe "let s:bg_comment = ' ".s:vmode."bg=".s:comment ."'"
+exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'"
+exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'"
+exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'"
+exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'"
+exe "let s:bg_aqua = ' ".s:vmode."bg=".s:aqua ."'"
+exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'"
+exe "let s:bg_purple = ' ".s:vmode."bg=".s:purple ."'"
+exe "let s:bg_window = ' ".s:vmode."bg=".s:window ."'"
+exe "let s:bg_darkcolumn = ' ".s:vmode."bg=".s:darkcolumn."'"
+exe "let s:bg_addbg = ' ".s:vmode."bg=".s:addbg ."'"
+exe "let s:bg_addfg = ' ".s:vmode."bg=".s:addfg ."'"
+exe "let s:bg_changebg = ' ".s:vmode."bg=".s:changebg ."'"
+exe "let s:bg_changefg = ' ".s:vmode."bg=".s:changefg ."'"
+exe "let s:bg_darkblue = ' ".s:vmode."bg=".s:darkblue ."'"
+exe "let s:bg_darkcyan = ' ".s:vmode."bg=".s:darkcyan ."'"
+exe "let s:bg_darkred = ' ".s:vmode."bg=".s:darkred ."'"
+exe "let s:bg_darkpurple = ' ".s:vmode."bg=".s:darkpurple."'"
+
+exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'"
+exe "let s:fg_foreground = ' ".s:vmode."fg=".s:foreground."'"
+exe "let s:fg_background = ' ".s:vmode."fg=".s:background."'"
+exe "let s:fg_selection = ' ".s:vmode."fg=".s:selection ."'"
+exe "let s:fg_line = ' ".s:vmode."fg=".s:line ."'"
+exe "let s:fg_comment = ' ".s:vmode."fg=".s:comment ."'"
+exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'"
+exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'"
+exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'"
+exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'"
+exe "let s:fg_aqua = ' ".s:vmode."fg=".s:aqua ."'"
+exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'"
+exe "let s:fg_purple = ' ".s:vmode."fg=".s:purple ."'"
+exe "let s:fg_window = ' ".s:vmode."fg=".s:window ."'"
+exe "let s:fg_darkcolumn = ' ".s:vmode."fg=".s:darkcolumn."'"
+exe "let s:fg_addbg = ' ".s:vmode."fg=".s:addbg ."'"
+exe "let s:fg_addfg = ' ".s:vmode."fg=".s:addfg ."'"
+exe "let s:fg_changebg = ' ".s:vmode."fg=".s:changebg ."'"
+exe "let s:fg_changefg = ' ".s:vmode."fg=".s:changefg ."'"
+exe "let s:fg_darkblue = ' ".s:vmode."fg=".s:darkblue ."'"
+exe "let s:fg_darkcyan = ' ".s:vmode."fg=".s:darkcyan ."'"
+exe "let s:fg_darkred = ' ".s:vmode."fg=".s:darkred ."'"
+exe "let s:fg_darkpurple = ' ".s:vmode."fg=".s:darkpurple."'"
+
+exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE" ."'"
+exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b ."'"
+exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"
+exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u ."'"
+exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c ."'"
+exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i ."'"
+exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s ."'"
+exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r ."'"
+exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"
+
+if has("gui_running")
+ exe "let s:sp_none = ' guisp=".s:none ."'"
+ exe "let s:sp_foreground = ' guisp=".s:foreground."'"
+ exe "let s:sp_background = ' guisp=".s:background."'"
+ exe "let s:sp_selection = ' guisp=".s:selection ."'"
+ exe "let s:sp_line = ' guisp=".s:line ."'"
+ exe "let s:sp_comment = ' guisp=".s:comment ."'"
+ exe "let s:sp_red = ' guisp=".s:red ."'"
+ exe "let s:sp_orange = ' guisp=".s:orange ."'"
+ exe "let s:sp_yellow = ' guisp=".s:yellow ."'"
+ exe "let s:sp_green = ' guisp=".s:green ."'"
+ exe "let s:sp_aqua = ' guisp=".s:aqua ."'"
+ exe "let s:sp_blue = ' guisp=".s:blue ."'"
+ exe "let s:sp_purple = ' guisp=".s:purple ."'"
+ exe "let s:sp_window = ' guisp=".s:window ."'"
+ exe "let s:sp_addbg = ' guisp=".s:addbg ."'"
+ exe "let s:sp_addfg = ' guisp=".s:addfg ."'"
+ exe "let s:sp_changebg = ' guisp=".s:changebg ."'"
+ exe "let s:sp_changefg = ' guisp=".s:changefg ."'"
+ exe "let s:sp_darkblue = ' guisp=".s:darkblue ."'"
+ exe "let s:sp_darkcyan = ' guisp=".s:darkcyan ."'"
+ exe "let s:sp_darkred = ' guisp=".s:darkred ."'"
+ exe "let s:sp_darkpurple = ' guisp=".s:darkpurple."'"
+else
+ let s:sp_none = ""
+ let s:sp_foreground = ""
+ let s:sp_background = ""
+ let s:sp_selection = ""
+ let s:sp_line = ""
+ let s:sp_comment = ""
+ let s:sp_red = ""
+ let s:sp_orange = ""
+ let s:sp_yellow = ""
+ let s:sp_green = ""
+ let s:sp_aqua = ""
+ let s:sp_blue = ""
+ let s:sp_purple = ""
+ let s:sp_window = ""
+ let s:sp_addbg = ""
+ let s:sp_addfg = ""
+ let s:sp_changebg = ""
+ let s:sp_changefg = ""
+ let s:sp_darkblue = ""
+ let s:sp_darkcyan = ""
+ let s:sp_darkred = ""
+ let s:sp_darkpurple = ""
+endif
+
+"}}}
+" Vim Highlighting: (see :help highlight-groups)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! ColorColumn" .s:fg_none .s:bg_line .s:fmt_none
+" Conceal"
+" Cursor"
+" CursorIM"
+exe "hi! CursorColumn" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! CursorLine" .s:fg_none .s:bg_line .s:fmt_none
+exe "hi! Directory" .s:fg_blue .s:bg_none .s:fmt_none
+exe "hi! DiffAdd" .s:fg_addfg .s:bg_addbg .s:fmt_none
+exe "hi! DiffChange" .s:fg_changefg .s:bg_changebg .s:fmt_none
+exe "hi! DiffDelete" .s:fg_background .s:bg_red .s:fmt_none
+exe "hi! DiffText" .s:fg_background .s:bg_blue .s:fmt_none
+exe "hi! ErrorMsg" .s:fg_background .s:bg_red .s:fmt_stnd
+exe "hi! VertSplit" .s:fg_window .s:bg_none .s:fmt_none
+exe "hi! Folded" .s:fg_comment .s:bg_darkcolumn .s:fmt_none
+exe "hi! FoldColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+exe "hi! SignColumn" .s:fg_none .s:bg_darkcolumn .s:fmt_none
+" Incsearch"
+exe "hi! LineNr" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! CursorLineNr" .s:fg_yellow .s:bg_none .s:fmt_bold
+exe "hi! MatchParen" .s:fg_background .s:bg_changebg .s:fmt_none
+exe "hi! ModeMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! MoreMsg" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! NonText" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! Pmenu" .s:fg_foreground .s:bg_selection .s:fmt_none
+exe "hi! PmenuSel" .s:fg_foreground .s:bg_selection .s:fmt_revr
+" PmenuSbar"
+" PmenuThumb"
+exe "hi! Question" .s:fg_green .s:bg_none .s:fmt_none
+exe "hi! Search" .s:fg_background .s:bg_yellow .s:fmt_none
+exe "hi! SpecialKey" .s:fg_selection .s:bg_none .s:fmt_none
+exe "hi! SpellCap" .s:fg_blue .s:bg_darkblue .s:fmt_undr
+exe "hi! SpellLocal" .s:fg_aqua .s:bg_darkcyan .s:fmt_undr
+exe "hi! SpellBad" .s:fg_red .s:bg_darkred .s:fmt_undr
+exe "hi! SpellRare" .s:fg_purple .s:bg_darkpurple .s:fmt_undr
+exe "hi! StatusLine" .s:fg_comment .s:bg_background .s:fmt_revr
+exe "hi! StatusLineNC" .s:fg_window .s:bg_comment .s:fmt_revr
+exe "hi! TabLine" .s:fg_foreground .s:bg_darkcolumn .s:fmt_revr
+" TabLineFill"
+" TabLineSel"
+exe "hi! Title" .s:fg_yellow .s:bg_none .s:fmt_none
+exe "hi! Visual" .s:fg_none .s:bg_selection .s:fmt_none
+" VisualNos"
+exe "hi! WarningMsg" .s:fg_red .s:bg_none .s:fmt_none
+" WildMenu"
+
+" Use Xresources for background colour
+if has('gui_running') || (g:hybrid_use_Xresources != 1 && g:hybrid_use_iTerm_colors != 1)
+ exe "hi! Normal" .s:fg_foreground .s:bg_background .s:fmt_none
+else
+ exe "hi! Normal" .s:fg_foreground .s:bg_none .s:fmt_none
+endif
+
+"}}}
+" Generic Syntax Highlighting: (see :help group-name)"{{{
+" ----------------------------------------------------------------------------
+exe "hi! Comment" .s:fg_comment .s:bg_none .s:fmt_none
+
+exe "hi! Constant" .s:fg_red .s:bg_none .s:fmt_none
+exe "hi! String" .s:fg_green .s:bg_none .s:fmt_none
+" Character"
+" Number"
+" Boolean"
+" Float"
+
+exe "hi! Identifier" .s:fg_purple .s:bg_none .s:fmt_none
+exe "hi! Function" .s:fg_yellow .s:bg_none .s:fmt_none
+
+exe "hi! Statement" .s:fg_blue .s:bg_none .s:fmt_none
+" Conditional"
+" Repeat"
+" Label"
+exe "hi! Operator" .s:fg_aqua .s:bg_none .s:fmt_none
+" Keyword"
+" Exception"
+
+exe "hi! PreProc" .s:fg_aqua .s:bg_none .s:fmt_none
+" Include"
+" Define"
+" Macro"
+" PreCondit"
+
+exe "hi! Type" .s:fg_orange .s:bg_none .s:fmt_none
+" StorageClass"
+exe "hi! Structure" .s:fg_aqua .s:bg_none .s:fmt_none
+" Typedef"
+
+exe "hi! Special" .s:fg_green .s:bg_none .s:fmt_none
+" SpecialChar"
+" Tag"
+" Delimiter"
+" SpecialComment"
+" Debug"
+"
+exe "hi! Underlined" .s:fg_blue .s:bg_none .s:fmt_none
+
+exe "hi! Ignore" .s:fg_none .s:bg_none .s:fmt_none
+
+exe "hi! Error" .s:fg_red .s:bg_darkred .s:fmt_undr
+
+exe "hi! Todo" .s:fg_addfg .s:bg_none .s:fmt_none
+
+" Quickfix window highlighting
+exe "hi! qfLineNr" .s:fg_yellow .s:bg_none .s:fmt_none
+" qfFileName"
+" qfLineNr"
+" qfError"
+
+"}}}
+" Diff Syntax Highlighting:"{{{
+" ----------------------------------------------------------------------------
+" Diff
+" diffOldFile
+" diffNewFile
+" diffFile
+" diffOnly
+" diffIdentical
+" diffDiffer
+" diffBDiffer
+" diffIsA
+" diffNoEOL
+" diffCommon
+hi! link diffRemoved Constant
+" diffChanged
+hi! link diffAdded Special
+" diffLine
+" diffSubname
+" diffComment
+
+"}}}
+" Legal:"{{{
+" ----------------------------------------------------------------------------
+" Copyright (c) 2011 Ethan Schoonover
+" Copyright (c) 2009-2012 NanoTech
+" Copyright (c) 2012 w0ng
+"
+" Permission is hereby granted, free of charge, to any per‐
+" son obtaining a copy of this software and associated doc‐
+" umentation files (the “Software”), to deal in the Soft‐
+" ware without restriction, including without limitation
+" the rights to use, copy, modify, merge, publish, distrib‐
+" ute, sublicense, and/or sell copies of the Software, and
+" to permit persons to whom the Software is furnished to do
+" so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice
+" shall be included in all copies or substantial portions
+" of the Software.
+"
+" THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY
+" KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
+" THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICU‐
+" LAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CON‐
+" TRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CON‐
+" NECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+
+" }}}
diff --git a/vim/colors/railcasts.vim b/vim/colors/railcasts.vim
new file mode 100644
index 0000000..a3a876f
--- /dev/null
+++ b/vim/colors/railcasts.vim
@@ -0,0 +1,137 @@
+" Vim color scheme
+"
+" Name: railscast.vim
+" Maintainer: Josh O'Rourke <joshorourke@me.com>
+" License: public domain
+"
+" A GUI Only port of the RailsCasts TextMate theme [1] to Vim.
+" Some parts of this theme were borrowed from the well-documented Lucius theme [2].
+"
+" [1] http://railscasts.com/about
+" [2] http://www.vim.org/scripts/script.php?script_id=2536
+
+set background=dark
+hi clear
+if exists("syntax_on")
+ syntax reset
+endif
+let g:colors_name = "railscasts"
+
+highlight clear SignColumn " gitgutter settings
+
+" Colors
+" Brown #BC9458
+" Dark Blue #6D9CBE
+" Dark Green #519F50
+" Dark Orange #CC7833
+" Light Blue #D0D0FF
+" Light Green #A5C261
+" Tan #FFC66D
+
+hi Normal guifg=#E6E1DC guibg=#2B2B2B ctermfg=white ctermbg=234
+hi Cursor guifg=#000000 guibg=#FFFFFF ctermfg=0 ctermbg=15
+hi CursorLine guibg=#333435 ctermbg=235 cterm=NONE
+hi Search guibg=#5A647E ctermfg=NONE ctermbg=236 cterm=underline
+hi Visual guibg=#5A647E ctermbg=60
+hi LineNr guifg=#888888 ctermfg=242
+hi StatusLine guibg=#414243 gui=NONE guifg=#E6E1DC
+hi StatusLineNC guibg=#414243 gui=NONE
+hi VertSplit guibg=#414243 gui=NONE guifg=#414243
+hi CursorLineNr guifg=#f4f800 ctermfg=248
+hi ColorColumn guibg=#333435 ctermbg=235
+
+" Folds
+" -----
+" line used for closed folds
+hi Folded guifg=#F6F3E8 guibg=#444444 gui=NONE
+
+" Invisible Characters
+" ------------------
+hi NonText guifg=#777777 gui=NONE
+hi SpecialKey guifg=#777777 gui=NONE
+
+" Misc
+" ----
+" directory names and other special names in listings
+hi Directory guifg=#A5C261 gui=NONE
+
+" Popup Menu
+" ----------
+" normal item in popup
+hi Pmenu guifg=#F6F3E8 guibg=#444444 gui=NONE
+" selected item in popup
+hi PmenuSel guifg=#000000 guibg=#A5C261 gui=NONE
+" scrollbar in popup
+hi PMenuSbar guibg=#5A647E gui=NONE
+" thumb of the scrollbar in the popup
+hi PMenuThumb guibg=#AAAAAA gui=NONE
+
+
+"rubyComment
+hi Comment guifg=#BC9458 gui=italic ctermfg=137
+hi Todo guifg=#BC9458 guibg=NONE gui=italic ctermfg=94
+
+"rubyPseudoVariable
+"nil, self, symbols, etc
+hi Constant guifg=#6D9CBE ctermfg=73
+
+"rubyClass, rubyModule, rubyDefine
+"def, end, include, etc
+hi Define guifg=#CC7833 ctermfg=173
+
+"rubyInterpolation
+hi Delimiter guifg=#519F50
+
+"rubyError, rubyInvalidVariable
+hi Error guifg=#FFFFFF guibg=#990000 ctermfg=221 ctermbg=88
+
+"rubyFunction
+hi Function guifg=#FFC66D gui=NONE ctermfg=221 cterm=NONE
+
+"rubyIdentifier
+"@var, @@var, $var, etc
+hi Identifier guifg=#D0D0FF gui=NONE ctermfg=73 cterm=NONE
+
+"rubyInclude
+"include, autoload, extend, load, require
+hi Include guifg=#CC7833 gui=NONE ctermfg=173 cterm=NONE
+
+"rubyKeyword, rubyKeywordAsMethod
+"alias, undef, super, yield, callcc, caller, lambda, proc
+hi Keyword guifg=#CC7833 ctermfg=172 cterm=NONE
+
+" same as define
+hi Macro guifg=#CC7833 gui=NONE ctermfg=172
+
+"rubyInteger
+hi Number guifg=#A5C261 ctermfg=107
+
+" #if, #else, #endif
+hi PreCondit guifg=#CC7833 gui=NONE ctermfg=172 cterm=NONE
+
+" generic preprocessor
+hi PreProc guifg=#CC7833 gui=NONE ctermfg=103
+
+"rubyControl, rubyAccess, rubyEval
+"case, begin, do, for, if unless, while, until else, etc.
+hi Statement guifg=#CC7833 gui=NONE ctermfg=172 cterm=NONE
+
+"rubyString
+hi String guifg=#A5C261 ctermfg=107
+
+hi Title guifg=#FFFFFF ctermfg=15
+
+"rubyConstant
+hi Type guifg=#DA4939 gui=NONE
+
+hi DiffAdd guifg=#E6E1DC guibg=#144212
+hi DiffDelete guifg=#E6E1DC guibg=#660000
+
+hi link htmlTag xmlTag
+hi link htmlTagName xmlTagName
+hi link htmlEndTag xmlEndTag
+
+hi xmlTag guifg=#E8BF6A
+hi xmlTagName guifg=#E8BF6A
+hi xmlEndTag guifg=#E8BF6A
+
diff --git a/vim/colors/sorcerer.vim b/vim/colors/sorcerer.vim
new file mode 100644
index 0000000..ffe808d
--- /dev/null
+++ b/vim/colors/sorcerer.vim
@@ -0,0 +1,208 @@
+" 'sorcerer.vim' -- Vim color scheme.
+" Maintainer: Andrew Lawson
+" Forked from 'vim-scripts/Sorcerer' by Jeet Sukumaran
+" Based on 'Mustang' by Henrique C. Alves (hcarvalhoalves@gmail.com),
+
+set background=dark
+
+hi clear
+
+if exists("syntax_on")
+ syntax reset
+endif
+
+let colors_name = "sorcerer"
+
+" GUI Colors {{{1
+" ============================================================================
+
+hi Normal guifg=#c2c2b0 guibg=#222222 gui=NONE
+hi ColorColumn guifg=NONE guibg=#1c1c1c
+hi Cursor guifg=NONE guibg=#626262 gui=NONE
+hi CursorColumn guibg=#2d2d2d
+hi CursorLine guibg=#2d2d2d
+hi DiffAdd guifg=#000000 guibg=#3cb371 gui=NONE
+hi DiffDelete guifg=#000000 guibg=#aa4450 gui=NONE
+hi DiffChange guifg=#000000 guibg=#4f94cd gui=NONE
+hi DiffText guifg=#000000 guibg=#8ee5ee gui=NONE
+hi Directory guifg=#1e90ff guibg=NONE gui=NONE
+hi ErrorMsg guifg=#ff6a6a guibg=NONE gui=bold
+hi FoldColumn guifg=#68838b guibg=#4B4B4B gui=bold
+hi Folded guifg=#406060 guibg=#232c2c gui=NONE
+hi IncSearch guifg=#ffffff guibg=#ff4500 gui=bold
+hi LineNr guifg=#686858 guibg=NONE gui=NONE
+hi MatchParen guifg=#fff000 guibg=NONE gui=bold
+hi ModeMsg guifg=#000000 guibg=#00ff00 gui=bold
+hi MoreMsg guifg=#2e8b57 guibg=NONE gui=bold
+hi NonText guifg=#404050 guibg=NONE gui=NONE
+
+hi Pmenu guifg=#ffffff guibg=#444444
+hi PmenuSel guifg=#000000 guibg=#b1d631
+" hi PmenuSbar guifg=#ffffff guibg=#c1cdc1 gui=NONE
+" hi PmenuThumb guifg=#ffffff guibg=#838b83 gui=NONE
+
+hi Question guifg=#00ee00 guibg=NONE gui=bold
+hi Search guifg=#000000 guibg=#d6e770 gui=bold
+hi SignColumn guifg=#ffffff guibg=NONE gui=NONE
+hi SpecialKey guifg=#505060 guibg=NONE gui=NONE
+hi SpellBad guisp=#ee2c2c gui=undercurl
+hi SpellCap guisp=#0000ff gui=undercurl
+hi SpellLocal guisp=#008b8b gui=undercurl
+hi SpellRare guisp=#ff00ff gui=undercurl
+hi StatusLine guifg=#000000 guibg=#808070 gui=bold
+hi StatusLineNC guifg=#000000 guibg=#404c4c gui=italic
+hi VertSplit guifg=#404c4c guibg=#404c4c gui=NONE
+hi TabLine guifg=fg guibg=#d3d3d3 gui=underline
+hi TabLineFill guifg=fg guibg=NONE gui=reverse
+hi TabLineSel guifg=fg guibg=NONE gui=bold
+hi Title guifg=#528b8b guibg=NONE gui=bold
+hi Visual guifg=#000000 guibg=#6688aa gui=NONE
+hi WarningMsg guifg=#ee9a00 guibg=NONE gui=NONE
+hi WildMenu guifg=#000000 guibg=#87ceeb gui=NONE
+hi ExtraWhitespace guifg=fg guibg=#528b8b gui=NONE
+
+" Syntax highlighting
+hi Comment guifg=#686858 gui=italic
+hi Boolean guifg=#ff9800 gui=NONE
+hi String guifg=#779b70 gui=NONE
+hi Identifier guifg=#9ebac2 gui=NONE
+hi Function guifg=#faf4c6 gui=NONE
+hi Type guifg=#7e8aa2 gui=NONE
+hi Statement guifg=#90b0d1 gui=NONE
+hi Keyword guifg=#90b0d1 gui=NONE
+hi Constant guifg=#ff9800 gui=NONE
+hi Number guifg=#cc8800 gui=NONE
+hi Special guifg=#719611 gui=NONE
+hi PreProc guifg=#528b8b gui=NONE
+hi Todo guifg=#8f6f8f guibg=#202020 gui=italic,underline,bold
+
+" Diff
+hi diffOldFile guifg=#88afcb guibg=NONE gui=italic
+hi diffNewFile guifg=#88afcb guibg=NONE gui=italic
+hi diffFile guifg=#88afcb guibg=NONE gui=italic
+hi diffLine guifg=#88afcb guibg=NONE gui=italic
+hi link diffSubname diffLine
+hi diffAdded guifg=#3cb371 guibg=NONE gui=NONE
+hi diffRemoved guifg=#aa4450 guibg=NONE gui=NONE
+hi diffChanged guifg=#4f94cd guibg=NONE gui=NONE
+hi link diffOnly Constant
+hi link diffIdentical Constant
+hi link diffDiffer Constant
+hi link diffBDiffer Constant
+hi link diffIsA Constant
+hi link diffNoEOL Constant
+hi link diffCommon Constant
+hi link diffComment Constant
+
+" Python
+hi pythonException guifg=#90b0d1 guibg=NONE gui=NONE
+hi pythonExClass guifg=#996666 guibg=NONE gui=NONE
+hi pythonDecorator guifg=#888555 guibg=NONE gui=NONE
+hi link pythonDecoratorFunction pythonDecorator
+
+" 1}}}
+
+" 256 Colors {{{1
+" ============================================================================
+hi Normal cterm=NONE ctermbg=NONE ctermfg=145
+hi ColorColumn cterm=NONE ctermbg=16 ctermfg=NONE
+hi Cursor cterm=NONE ctermbg=241 ctermfg=fg
+hi CursorColumn cterm=NONE ctermbg=16 ctermfg=fg
+hi CursorLine cterm=NONE ctermbg=236 ctermfg=fg
+hi DiffAdd cterm=NONE ctermbg=71 ctermfg=16
+hi DiffDelete cterm=NONE ctermbg=124 ctermfg=16
+hi DiffChange cterm=NONE ctermbg=68 ctermfg=16
+hi DiffText cterm=NONE ctermbg=117 ctermfg=16
+hi Directory cterm=NONE ctermbg=234 ctermfg=33
+hi ErrorMsg cterm=bold ctermbg=NONE ctermfg=203
+hi FoldColumn cterm=bold ctermbg=239 ctermfg=66
+hi Folded cterm=NONE ctermbg=16 ctermfg=60
+hi IncSearch cterm=bold ctermbg=202 ctermfg=231
+hi LineNr cterm=NONE ctermbg=NONE ctermfg=59
+hi MatchParen cterm=bold ctermbg=NONE ctermfg=226
+hi ModeMsg cterm=bold ctermbg=46 ctermfg=16
+hi MoreMsg cterm=bold ctermbg=234 ctermfg=29
+hi NonText cterm=NONE ctermbg=NONE ctermfg=59
+hi Pmenu cterm=NONE ctermbg=238 ctermfg=231
+hi PmenuSbar cterm=NONE ctermbg=250 ctermfg=fg
+hi PmenuSel cterm=NONE ctermbg=149 ctermfg=16
+hi Question cterm=bold ctermbg=NONE ctermfg=46
+hi Search cterm=bold ctermbg=185 ctermfg=16
+hi SignColumn cterm=NONE ctermbg=NONE ctermfg=231
+hi SpecialKey cterm=NONE ctermbg=NONE ctermfg=59
+hi SpellBad cterm=undercurl ctermbg=NONE ctermfg=196
+hi SpellCap cterm=undercurl ctermbg=NONE ctermfg=21
+hi SpellLocal cterm=undercurl ctermbg=NONE ctermfg=30
+hi SpellRare cterm=undercurl ctermbg=NONE ctermfg=201
+hi StatusLine cterm=bold ctermbg=101 ctermfg=16
+hi StatusLineNC cterm=NONE ctermbg=102 ctermfg=16
+hi VertSplit cterm=NONE ctermbg=102 ctermfg=102
+hi TabLine cterm=bold ctermbg=102 ctermfg=16
+hi TabLineFill cterm=NONE ctermbg=102 ctermfg=16
+hi TabLineSel cterm=bold ctermbg=16 ctermfg=59
+hi Title cterm=bold ctermbg=NONE ctermfg=66
+hi Visual cterm=NONE ctermbg=67 ctermfg=16
+hi WarningMsg cterm=NONE ctermbg=234 ctermfg=208
+hi WildMenu cterm=NONE ctermbg=116 ctermfg=16
+hi ExtraWhitespace cterm=NONE ctermbg=66 ctermfg=fg
+
+hi Comment cterm=NONE ctermbg=NONE ctermfg=59
+hi Boolean cterm=NONE ctermbg=NONE ctermfg=208
+hi String cterm=NONE ctermbg=NONE ctermfg=101
+hi Identifier cterm=NONE ctermbg=NONE ctermfg=145
+hi Function cterm=NONE ctermbg=NONE ctermfg=230
+hi Type cterm=NONE ctermbg=NONE ctermfg=103
+hi Statement cterm=NONE ctermbg=NONE ctermfg=110
+hi Keyword cterm=NONE ctermbg=NONE ctermfg=110
+hi Constant cterm=NONE ctermbg=NONE ctermfg=208
+hi Number cterm=NONE ctermbg=NONE ctermfg=172
+hi Special cterm=NONE ctermbg=NONE ctermfg=64
+hi PreProc cterm=NONE ctermbg=NONE ctermfg=66
+hi Todo cterm=bold,underline ctermbg=234 ctermfg=96
+
+hi diffOldFile cterm=NONE ctermbg=NONE ctermfg=67
+hi diffNewFile cterm=NONE ctermbg=NONE ctermfg=67
+hi diffFile cterm=NONE ctermbg=NONE ctermfg=67
+hi diffLine cterm=NONE ctermbg=NONE ctermfg=67
+hi diffAdded cterm=NONE ctermfg=NONE ctermfg=71
+hi diffRemoved cterm=NONE ctermfg=NONE ctermfg=124
+hi diffChanged cterm=NONE ctermfg=NONE ctermfg=68
+hi link diffSubname diffLine
+hi link diffOnly Constant
+hi link diffIdentical Constant
+hi link diffDiffer Constant
+hi link diffBDiffer Constant
+hi link diffIsA Constant
+hi link diffNoEOL Constant
+hi link diffCommon Constant
+hi link diffComment Constant
+
+hi pythonClass cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonDecorator cterm=NONE ctermbg=NONE ctermfg=101
+hi pythonExClass cterm=NONE ctermbg=NONE ctermfg=95
+hi pythonException cterm=NONE ctermbg=NONE ctermfg=110
+hi pythonFunc cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonFuncParams cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonKeyword cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonParam cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonRawEscape cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonSuperclasses cterm=NONE ctermbg=NONE ctermfg=fg
+hi pythonSync cterm=NONE ctermbg=NONE ctermfg=fg
+
+hi Conceal cterm=NONE ctermbg=248 ctermfg=252
+hi Error cterm=NONE ctermbg=196 ctermfg=231
+hi Ignore cterm=NONE ctermbg=NONE ctermfg=234
+hi InsertModeCursorLine cterm=NONE ctermbg=16 ctermfg=fg
+hi NormalModeCursorLine cterm=NONE ctermbg=235 ctermfg=fg
+hi PmenuThumb cterm=reverse ctermbg=NONE ctermfg=fg
+hi StatusLineAlert cterm=NONE ctermbg=160 ctermfg=231
+hi StatusLineUnalert cterm=NONE ctermbg=238 ctermfg=144
+hi Test cterm=NONE ctermbg=NONE ctermfg=fg
+hi Underlined cterm=underline ctermbg=NONE ctermfg=111
+hi VisualNOS cterm=bold,underline ctermbg=NONE ctermfg=fg
+hi cCursor cterm=reverse ctermbg=NONE ctermfg=fg
+hi iCursor cterm=NONE ctermbg=210 ctermfg=16
+hi lCursor cterm=NONE ctermbg=145 ctermfg=234
+hi nCursor cterm=NONE ctermbg=46 ctermfg=16
+hi vCursor cterm=NONE ctermbg=201 ctermfg=16
+" 1}}}
diff --git a/vim/colors/tango2.vim b/vim/colors/tango2.vim
new file mode 100644
index 0000000..16918ea
--- /dev/null
+++ b/vim/colors/tango2.vim
@@ -0,0 +1,101 @@
+" Vim color file - tango2
+" Generated by http://bytefluent.com/vivify 2014-08-07
+set background=dark
+if version > 580
+ hi clear
+ if exists("syntax_on")
+ syntax reset
+ endif
+endif
+
+set t_Co=256
+let g:colors_name = "tango2"
+
+"hi IncSearch -- no settings --
+"hi WildMenu -- no settings --
+"hi SignColumn -- no settings --
+hi SpecialComment guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+hi Typedef guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi Title -- no settings --
+hi Folded guifg=NONE guibg=#d2d2d2 guisp=#d2d2d2 gui=NONE ctermfg=NONE ctermbg=252 cterm=NONE
+hi PreCondit guifg=#e9ba6e guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+hi Include guifg=#e9ba6e guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+"hi TabLineSel -- no settings --
+"hi StatusLineNC -- no settings --
+"hi CTagsMember -- no settings --
+"hi NonText -- no settings --
+"hi CTagsGlobalConstant -- no settings --
+"hi DiffText -- no settings --
+"hi ErrorMsg -- no settings --
+"hi Ignore -- no settings --
+hi Debug guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+hi PMenuSbar guifg=NONE guibg=#848688 guisp=#848688 gui=NONE ctermfg=NONE ctermbg=102 cterm=NONE
+hi Identifier guifg=#AD7FA8 guibg=NONE guisp=NONE gui=NONE ctermfg=139 ctermbg=NONE cterm=NONE
+hi SpecialChar guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+hi Conditional guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi StorageClass guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi Todo guifg=#EBC450 guibg=NONE guisp=NONE gui=NONE ctermfg=221 ctermbg=NONE cterm=NONE
+hi Special guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+"hi LineNr -- no settings --
+"hi StatusLine -- no settings --
+hi Normal guifg=#eeeeec guibg=#2E3436 guisp=#2E3436 gui=NONE ctermfg=255 ctermbg=237 cterm=NONE
+hi Label guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi CTagsImport -- no settings --
+hi PMenuSel guifg=#88dd88 guibg=#949698 guisp=#949698 gui=NONE ctermfg=114 ctermbg=246 cterm=NONE
+hi Search guifg=NONE guibg=#81ABBD guisp=#81ABBD gui=NONE ctermfg=NONE ctermbg=109 cterm=NONE
+"hi CTagsGlobalVariable -- no settings --
+hi Delimiter guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+hi Statement guifg=#729FCF guibg=NONE guisp=NONE gui=NONE ctermfg=110 ctermbg=NONE cterm=NONE
+"hi SpellRare -- no settings --
+"hi EnumerationValue -- no settings --
+hi Comment guifg=#6d7e8a guibg=NONE guisp=NONE gui=italic ctermfg=66 ctermbg=NONE cterm=NONE
+hi Character guifg=#8ae234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi Float -- no settings --
+hi Number guifg=#8ae234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi Boolean guifg=#729FCF guibg=NONE guisp=NONE gui=NONE ctermfg=110 ctermbg=NONE cterm=NONE
+hi Operator guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi CursorLine -- no settings --
+"hi Union -- no settings --
+"hi TabLineFill -- no settings --
+"hi Question -- no settings --
+"hi WarningMsg -- no settings --
+"hi VisualNOS -- no settings --
+"hi DiffDelete -- no settings --
+"hi ModeMsg -- no settings --
+"hi CursorColumn -- no settings --
+hi Define guifg=#e9ba6e guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+hi Function guifg=#9BCF8D guibg=NONE guisp=NONE gui=bold ctermfg=114 ctermbg=NONE cterm=bold
+"hi FoldColumn -- no settings --
+hi PreProc guifg=#e9ba6e guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+"hi EnumerationName -- no settings --
+"hi Visual -- no settings --
+"hi MoreMsg -- no settings --
+"hi SpellCap -- no settings --
+"hi VertSplit -- no settings --
+hi Exception guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi Keyword guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi Type guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi DiffChange -- no settings --
+hi Cursor guifg=#000000 guibg=#ffffff guisp=#ffffff gui=NONE ctermfg=NONE ctermbg=15 cterm=NONE
+"hi SpellLocal -- no settings --
+"hi Error -- no settings --
+hi PMenu guifg=#dddddd guibg=#545658 guisp=#545658 gui=NONE ctermfg=253 ctermbg=240 cterm=NONE
+"hi SpecialKey -- no settings --
+hi Constant guifg=#8ae234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi DefinedName -- no settings --
+hi Tag guifg=#5EAFE5 guibg=NONE guisp=NONE gui=NONE ctermfg=74 ctermbg=NONE cterm=NONE
+hi String guifg=#8ae234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi PMenuThumb guifg=NONE guibg=#a4a6a8 guisp=#a4a6a8 gui=NONE ctermfg=NONE ctermbg=248 cterm=NONE
+"hi MatchParen -- no settings --
+"hi LocalVariable -- no settings --
+hi Repeat guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+"hi SpellBad -- no settings --
+"hi CTagsClass -- no settings --
+"hi Directory -- no settings --
+hi Structure guifg=#8AE234 guibg=NONE guisp=NONE gui=NONE ctermfg=113 ctermbg=NONE cterm=NONE
+hi Macro guifg=#e9ba6e guibg=NONE guisp=NONE gui=NONE ctermfg=179 ctermbg=NONE cterm=NONE
+"hi Underlined -- no settings --
+"hi DiffAdd -- no settings --
+"hi TabLine -- no settings --
+hi cursorim guifg=#192224 guibg=#536991 guisp=#536991 gui=NONE ctermfg=235 ctermbg=60 cterm=NONE
+"hi clear -- no settings --
diff --git a/vimrc b/vimrc
new file mode 100644
index 0000000..d351918
--- /dev/null
+++ b/vimrc
@@ -0,0 +1,117 @@
+filetype plugin indent on
+syntax on
+
+set runtimepath+=/usr/share/vim/vimfiles/
+
+call pathogen#infect()
+
+" Color
+"let g:hybrid_use_Xresources = 1
+
+if has("gui_running")
+ set guioptions=c
+ colo gruvbox
+ set bg=dark
+ set guifont=Envy\ Code\ R\ 9
+else
+ set bg=light
+endif
+
+" Settings
+set noerrorbells
+set novisualbell
+
+set showcmd
+set autoread
+
+set nobackup
+set nowb
+set noswapfile
+set wrap
+set scrolloff=3
+set autochdir
+
+if expand("%:p") =~ '\.*blender\.*'
+ set tabstop=4
+ set shiftwidth=4
+ set smarttab
+ set autoindent
+ set smartindent
+ set ci
+ set cin
+ set ofu=syntaxcomplete#Complete
+ set showmatch
+ set incsearch
+else
+ set expandtab
+ set smarttab
+ set sw=4
+ set ts=4
+ set sts=4
+ set ai
+ set si
+endif
+
+let NERDTreeIgnore=['.pyc$']
+
+" Filetyp dependent
+
+au BufRead /tmp/mutt-* set tw=80
+au BufRead,BufNewFile *.md set tw=80 ft=markdown
+au Bufread,BufNewFile *.go set ft=go
+
+au Bufread,BufNewFile *.oz set ft=oz
+
+au Bufread,BufNewFile *.rb set sw=2 ts=2 sts=2
+
+au BufRead,BufNewFile *.html call HtmlDjangoSettings()
+
+function! HtmlDjangoSettings()
+ if (&ft=='htmldjango')
+ inoremap <Leader>t {% %}<Esc>hhi
+ inoremap <Leader>s {{ }}<Esc>hhi
+ endif
+endfunction
+
+" Some functions
+set colorcolumn=0
+function! Toggle_colorcolumn()
+ if &colorcolumn == 0
+ set colorcolumn=80
+ else
+ set colorcolumn=0
+ endif
+endfunction
+
+
+""""" Mappings """"""
+" Setting nop to the arrows keys
+nmap <F1> <Esc>
+map <up> <nop>
+map <down> <nop>
+map <right> <nop>
+map <left> <nop>
+imap <up> <nop>
+imap <down> <nop>
+imap <right> <nop>
+imap <left> <nop>
+
+nnoremap <F2> :NERDTreeToggle<cr>
+nmap <F3> :TagbarToggle<cr>
+
+map <c-h> <c-w>h
+map <c-j> <c-w>j
+map <c-k> <c-w>k
+map <c-l> <c-w>l
+
+" Yank behaves really good
+map Y y$
+
+" Nice for wrapped lines
+nnoremap j gj
+nnoremap k gk
+inoremap jk <Esc>
+
+nnoremap <Leader>p :call Toggle_colorcolumn() <cr>
+" Diff
+nnoremap <F4> :diffg 3 <cr>