init
Signed-off-by: fbt <fbt@fleshless.org>
This commit is contained in:
commit
c78cb78ff0
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
homedir/.vim/.netrwhist
|
||||||
|
homedir/.vim/syntax
|
||||||
|
homedir/.bashrc.d/99-local
|
||||||
|
homedir/.config/zsh.d/local
|
||||||
|
homedir/.ncmpcpp/error.log
|
23
homedir/.Xresources
Normal file
23
homedir/.Xresources
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
! Xft settings ---------------------------------------------------------------
|
||||||
|
|
||||||
|
Xft.dpi: 95
|
||||||
|
!Xft.antialias: true
|
||||||
|
!Xft.rgba: rgb
|
||||||
|
!Xft.hinting: true
|
||||||
|
!Xft.hintstyle: hintslight
|
||||||
|
|
||||||
|
! rofi
|
||||||
|
|
||||||
|
rofi.key-run: Mod4+r
|
||||||
|
rofi.lines: 3
|
||||||
|
rofi.bw: 2
|
||||||
|
rofi.separator-style: solid
|
||||||
|
rofi.hide-scrollbar: true
|
||||||
|
rofi.glob: true
|
||||||
|
rofi.width: 33
|
||||||
|
rofi.bc: #467EC2
|
||||||
|
rofi.fg: #f9f9f9
|
||||||
|
rofi.bg: #29303A
|
||||||
|
rofi.hlbg: #467EC2
|
||||||
|
rofi.font: Terminus 12
|
||||||
|
rofi.opacity: 85
|
44
homedir/.bashrc
Normal file
44
homedir/.bashrc
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
# vim: ft=sh
|
||||||
|
# Do nothing if not interactive
|
||||||
|
[[ "$PS1" ]] || return
|
||||||
|
|
||||||
|
# Modules
|
||||||
|
mpath=( $HOME/.config/bash.d )
|
||||||
|
|
||||||
|
function msg { printf '%s\n' "$*"; }
|
||||||
|
function err { printf '%s\n' "$*" >&2; }
|
||||||
|
|
||||||
|
function use {
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
(-n) flag_nofail=1;;
|
||||||
|
(--) shift; break;;
|
||||||
|
(*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
declare mname=$1
|
||||||
|
|
||||||
|
for p in "${mpath[@]}"; do
|
||||||
|
if [[ -f "$mpath/$mname" ]]; then
|
||||||
|
if source "$mpath/$mname"; then
|
||||||
|
msg "Loaded: $mname"
|
||||||
|
else
|
||||||
|
err "Something went wrong while loading $mname"
|
||||||
|
(( flag_nofail )) || return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
err "Module $mname not found"
|
||||||
|
(( flag_nofail )) || return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
use common
|
||||||
|
use colours
|
||||||
|
use config
|
||||||
|
use -n local
|
||||||
|
use prompt
|
30
homedir/.config/bash.d/colours
Normal file
30
homedir/.config/bash.d/colours
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
# Colours
|
||||||
|
|
||||||
|
# Console colours
|
||||||
|
# Black 0;30 Dark Gray 1;30
|
||||||
|
# Blue 0;34 Light Blue 1;34
|
||||||
|
# Green 0;32 Light Green 1;32
|
||||||
|
# Cyan 0;36 Light Cyan 1;36
|
||||||
|
# Red 0;31 Light Red 1;31
|
||||||
|
# Purple 0;35 Light Purple 1;35
|
||||||
|
# Brown 0;33 Yellow 1;33
|
||||||
|
# Light Gray 0;37 White 1;37
|
||||||
|
|
||||||
|
c_black="\[\033[0;30m\]"
|
||||||
|
c_blue="\[\033[0;34m\]"
|
||||||
|
c_green="\[\033[0;32m\]"
|
||||||
|
c_cyan="\[\033[0;36m\]"
|
||||||
|
c_red="\[\033[0;31m\]"
|
||||||
|
c_purple="\[\033[0;35m\]"
|
||||||
|
c_brown="\[\033[0;33m\]"
|
||||||
|
c_lightgray="\[\033[0;37m\]"
|
||||||
|
c_darkgray="\[\033[1;30m\]"
|
||||||
|
c_lightblue="\[\033[1;34m\]"
|
||||||
|
c_lightgreen="\[\033[1;32m\]"
|
||||||
|
c_lightcyan="\[\033[1;36m\]"
|
||||||
|
c_lightred="\[\033[1;31m\]"
|
||||||
|
c_lightpurple="\[\033[1;35m\]"
|
||||||
|
c_yellow="\[\033[1;33m\]"
|
||||||
|
c_white="\[\033[1;37m\]"
|
||||||
|
|
||||||
|
c_reset="\[\e[00m\]"
|
41
homedir/.config/bash.d/common
Normal file
41
homedir/.config/bash.d/common
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo() { printf '%s\n' "$*"; }
|
||||||
|
msg() { printf '%s\n' "$*"; }
|
||||||
|
err() { printf '%s\n' "$*" >&2; }
|
||||||
|
|
||||||
|
set_title() { printf '\033]0;%s\007' "$1"; }
|
||||||
|
|
||||||
|
trap_error() { err "The command has returned a non-zero exit code ($?)."; }
|
||||||
|
|
||||||
|
x() { exec xinit -- -nolisten tcp vt9; }
|
||||||
|
|
||||||
|
is_coreutils() {
|
||||||
|
declare out
|
||||||
|
out=$( df --version 2>/dev/null )
|
||||||
|
|
||||||
|
(( $? )) && {
|
||||||
|
err 'df --version exited with an error. This is not GNU coreutils'
|
||||||
|
return 3
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ "$out" =~ 'GNU coreutils' ]] || {
|
||||||
|
err 'Version output does not contain "GNU coreutils". This is not GNU coreutils.'
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fuck() { sudo $(history -p \!\!); }
|
||||||
|
|
||||||
|
err() { printf '%s\n' "$*"; }
|
||||||
|
|
||||||
|
is_function() {
|
||||||
|
[[ $(type -t "$1") == 'function' ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
if is_coreutils; then
|
||||||
|
ls() { $(type -P ls) -l -hb --group-directories-first --color=auto "$@"; }
|
||||||
|
mv() { $(type -P mv) -v "$@"; }
|
||||||
|
cp() { $(type -P cp) -v "$@"; }
|
||||||
|
rm() { $(type -P rm) -v "$@"; }
|
||||||
|
fi
|
28
homedir/.config/bash.d/config
Normal file
28
homedir/.config/bash.d/config
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# BASH options
|
||||||
|
bash_opts=(
|
||||||
|
'checkwinsize' 'histappend' 'autocd'
|
||||||
|
'checkhash'
|
||||||
|
)
|
||||||
|
shopt -s "${bash_opts[@]}"
|
||||||
|
shopt -u sourcepath
|
||||||
|
|
||||||
|
PROMPT_COMMAND='set_prompt'
|
||||||
|
|
||||||
|
HISTCONTROL="$HISTCONTROL${HISTCONTROL+,}ignoredups"
|
||||||
|
HISTCONTROL='ignoreboth'
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
export LC_ALL='en_US.UTF-8'
|
||||||
|
export EDITOR='editor'
|
||||||
|
export WINEARCH='win32'
|
||||||
|
|
||||||
|
# GPG
|
||||||
|
GPG_TTY=$(tty)
|
||||||
|
export GPG_TTY
|
||||||
|
|
||||||
|
#export TERM='xterm-256color'
|
||||||
|
export COLORTERM='xterm-256color'
|
||||||
|
|
||||||
|
# Specific to this setup
|
||||||
|
alias dotfiles_pull='git -C ~/git/dotfiles pull'
|
||||||
|
alias dotfiles_push='git -C ~/git/dotfiles commit -a; git -C ~/git/dotfiles push'
|
3
homedir/.config/bash.d/local
Normal file
3
homedir/.config/bash.d/local
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# SSH
|
||||||
|
SSH_AUTH_SOCK="/tmp/${USER}-ssh-auth.sock"
|
||||||
|
export SSH_AUTH_SOCK
|
75
homedir/.config/bash.d/prompt
Normal file
75
homedir/.config/bash.d/prompt
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set_prompt() {
|
||||||
|
last_exitcode="$?"
|
||||||
|
|
||||||
|
declare checkmark fancy_x timestamp git_prompt_msg git_status_short git_status_colour git_unstaged git_untracked
|
||||||
|
|
||||||
|
PS1="${c_reset}"
|
||||||
|
|
||||||
|
# Set a fancy symbol to indicate the last exitcode
|
||||||
|
if (( last_exitcode )); then
|
||||||
|
last_exitcode_indicator="${c_red}!${c_reset}"
|
||||||
|
else
|
||||||
|
last_exitcode_indicator="${c_green}.${c_reset}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the username colour
|
||||||
|
if (( UID )); then
|
||||||
|
user_colour="${c_green}"
|
||||||
|
user_indicator='$'
|
||||||
|
else
|
||||||
|
user_colour="${c_red}"
|
||||||
|
user_indicator='#'
|
||||||
|
fi
|
||||||
|
|
||||||
|
user_indicator='>'
|
||||||
|
|
||||||
|
# Set the git prompt message
|
||||||
|
git rev-parse --git-dir &>/dev/null && {
|
||||||
|
git_current_branch="$(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
|
||||||
|
while read; do
|
||||||
|
case "$REPLY" in
|
||||||
|
(' M'*|A*|D*) git_unstaged=1;;
|
||||||
|
(\?\?*) git_untracked=1;;
|
||||||
|
esac
|
||||||
|
done < <( git status --short )
|
||||||
|
|
||||||
|
(( git_unstaged )) && {
|
||||||
|
git_status_short+='c'
|
||||||
|
git_status_colour="${c_red}"
|
||||||
|
}
|
||||||
|
|
||||||
|
(( git_untracked )) && {
|
||||||
|
git_status_short+='f'
|
||||||
|
git_status_colour="${c_red}"
|
||||||
|
}
|
||||||
|
|
||||||
|
git_status_short=${git_status_short:-ok}
|
||||||
|
git_status_colour=${git_status_colour:-"${c_green}"}
|
||||||
|
|
||||||
|
git_prompt_msg="(${c_cyan}$git_current_branch${c_reset}[${git_status_colour}${git_status_short}${c_reset}]) "
|
||||||
|
}
|
||||||
|
|
||||||
|
set_title "${USER}@${HOSTNAME}"
|
||||||
|
|
||||||
|
if [[ "$PWD" == "$HOME" ]]; then
|
||||||
|
prompt_pwd='~'
|
||||||
|
elif [[ "$PWD" =~ ^"$HOME" ]]; then
|
||||||
|
prompt_pwd="~/${PWD##*${HOME}/}"
|
||||||
|
else
|
||||||
|
prompt_pwd="$PWD"
|
||||||
|
fi
|
||||||
|
|
||||||
|
prompt=(
|
||||||
|
"${c_reset}"
|
||||||
|
"[${last_exitcode_indicator}]"
|
||||||
|
"${user_colour}${USER}${c_reset}@${c_lightblue}${HOSTNAME}"
|
||||||
|
"$prompt_pwd"
|
||||||
|
"${git_prompt_msg}${user_colour}${user_indicator}"
|
||||||
|
"$c_reset"
|
||||||
|
)
|
||||||
|
|
||||||
|
PS1="${prompt[@]}"
|
||||||
|
}
|
9
homedir/.config/bspwm/bin/bspfloat
Executable file
9
homedir/.config/bspwm/bin/bspfloat
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
while read -r _ _ did wid _; do
|
||||||
|
for d in "$@"; do
|
||||||
|
if [[ $d == "$did" ]]; then
|
||||||
|
bspc node "$wid" -t floating
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done < <( bspc subscribe node_manage )
|
45
homedir/.config/bspwm/bin/bspset
Executable file
45
homedir/.config/bspwm/bin/bspset
Executable file
|
@ -0,0 +1,45 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
printf 'No help available'
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
while (( $# )); do
|
||||||
|
case "$1" in
|
||||||
|
(-h) usage;;
|
||||||
|
(-d) desktop=$2; shift;;
|
||||||
|
|
||||||
|
(--) shift; break;;
|
||||||
|
(*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
setting=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
desktop=${desktop:-"focused"}
|
||||||
|
|
||||||
|
case "$setting" in
|
||||||
|
(padding)
|
||||||
|
if [[ "$1" =~ ^(north|west|south|east)$ ]]; then
|
||||||
|
direction=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$direction" ]]; then
|
||||||
|
bspc config -d "$desktop" "${direction}_padding" "$1"
|
||||||
|
else
|
||||||
|
for d in top bottom right left; do
|
||||||
|
bspc config -d "$desktop" "${d}_padding" "$1"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
(gaps)
|
||||||
|
bspc config -d "$desktop" window_gap "$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
main "$@"
|
43
homedir/.config/bspwm/bin/bspstate
Executable file
43
homedir/.config/bspwm/bin/bspstate
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/bash
|
||||||
|
|
||||||
|
ensure_dir() {
|
||||||
|
declare d
|
||||||
|
|
||||||
|
for d in "$@"; do
|
||||||
|
if ! [[ -d "$d" ]]; then
|
||||||
|
if ! mkdir -p "$d"; then
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set XDG_RUNTIME_DIR
|
||||||
|
if ! [[ "$XDG_RUNTIME_DIR" ]]; then
|
||||||
|
XDG_RUNTIME_DIR="/run/user/$UID"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Define some workdirs
|
||||||
|
bspwm_rundir="$XDG_RUNTIME_DIR/bspwm"
|
||||||
|
bspwm_statedir="$bspwm_rundir/state"
|
||||||
|
|
||||||
|
# Ensure the workdirs exist
|
||||||
|
ensure_dir "$bspwm_rundir" "$bspwm_statedir" || exit $?
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
(save)
|
||||||
|
# Save state
|
||||||
|
bspc query -T > "$bspwm_statedir/tree"
|
||||||
|
bspc query -H > "$bspwm_statedir/hist"
|
||||||
|
bspc query -S > "$bspwm_statedir/stack"
|
||||||
|
;;
|
||||||
|
|
||||||
|
(restore)
|
||||||
|
# Restore state, if any
|
||||||
|
[[ -f "$bspwm_statedir/tree" ]] && bspc restore -T "$bspwm_statedir/tree"
|
||||||
|
[[ -f "$bspwm_statedir/hist" ]] && bspc restore -H "$bspwm_statedir/hist"
|
||||||
|
[[ -f "$bspwm_statedir/stack" ]] && bspc restore -S "$bspwm_statedir/stack"
|
||||||
|
;;
|
||||||
|
esac
|
67
homedir/.config/bspwm/bspwmrc
Executable file
67
homedir/.config/bspwm/bspwmrc
Executable file
|
@ -0,0 +1,67 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
nullexec() {
|
||||||
|
"$@" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
PATH+=":$HOME/.config/alternatives"
|
||||||
|
PATH+=":$HOME/.config/bspwm/bin"
|
||||||
|
|
||||||
|
# Cursor for the root window
|
||||||
|
xsetroot -cursor_name left_ptr
|
||||||
|
|
||||||
|
# Global config
|
||||||
|
bspc config focused_sticky_border_color "#030061"
|
||||||
|
bspc config focused_border_color "#467EC2"
|
||||||
|
bspc config normal_border_color "#1f1f1f"
|
||||||
|
bspc config urgent_border_color "#f9f9f9"
|
||||||
|
bspc config window_gap "9"
|
||||||
|
bspc config border_width '2'
|
||||||
|
bspc config split_ratio '0.52'
|
||||||
|
bspc config borderless_monocle 'false'
|
||||||
|
bspc config gapless_monocle 'false'
|
||||||
|
bspc config focus_by_distance 'true'
|
||||||
|
bspc config ignore_ewmh_focus 'true'
|
||||||
|
bspc config initial_polarity 'second_child'
|
||||||
|
bspc config auto_cancel 'true'
|
||||||
|
bspc config click_to_focus 'true'
|
||||||
|
|
||||||
|
# Workspaces and monitors
|
||||||
|
bspc monitor -d 1 2 3 4 5 6 7 8 9 h
|
||||||
|
|
||||||
|
# Float some bastards
|
||||||
|
bspfloat 1 &
|
||||||
|
|
||||||
|
# Individual padding
|
||||||
|
for d in 1 3; do
|
||||||
|
bspset -d "$d" padding 48
|
||||||
|
done
|
||||||
|
|
||||||
|
# Clear the rules before adding any
|
||||||
|
while read -r rule _; do bspc rule -r "$rule"; done < <(bspc rule -l)
|
||||||
|
|
||||||
|
# Now add the rules
|
||||||
|
bspc rule -a Steam state=floating desktop=^8
|
||||||
|
bspc rule -a Firefox:Navigator state=tiled desktop=^2
|
||||||
|
bspc rule -a \*:Hearthstone.exe desktop=^5
|
||||||
|
bspc rule -a \* state=floating
|
||||||
|
|
||||||
|
|
||||||
|
# start some services
|
||||||
|
services=( sxhkd dunst )
|
||||||
|
for s in "${services[@]}"; do
|
||||||
|
if ! service "$s" status; then
|
||||||
|
service "$s" start
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Always restart the panel
|
||||||
|
service moltenbar restart
|
||||||
|
|
||||||
|
nullexec browser &
|
||||||
|
nullexec terminal &
|
||||||
|
nullexec telegram &
|
||||||
|
nullexec dropbox &
|
||||||
|
|
||||||
|
terminal -e 'ssh-add-all' &
|
||||||
|
terminal -e 'sudo wrkvpn' &
|
72
homedir/.config/bspwm/sxhkdrc
Normal file
72
homedir/.config/bspwm/sxhkdrc
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#
|
||||||
|
# bspwm hotkeys
|
||||||
|
#
|
||||||
|
|
||||||
|
super + {_,shift + } w
|
||||||
|
bspc node {-c,-k}
|
||||||
|
|
||||||
|
super + q
|
||||||
|
bspc node -t '~fullscreen'
|
||||||
|
|
||||||
|
super + {j,k}
|
||||||
|
bspc node -f {next,prev}.local
|
||||||
|
|
||||||
|
control + {h,j,k,l}
|
||||||
|
bspc node {@east -r -32,@south -r +32,@south -r -32,@east -r +32}
|
||||||
|
|
||||||
|
super + {_,shift + } space
|
||||||
|
bspc node -t '~'{tiled,floating}
|
||||||
|
|
||||||
|
super + Return
|
||||||
|
bspc node -s biggest
|
||||||
|
|
||||||
|
super + {1-9,h}
|
||||||
|
bspc desktop -f {1-9,h}
|
||||||
|
|
||||||
|
super + shift + {1-9,h}
|
||||||
|
bspc node -d {1-9,h}
|
||||||
|
|
||||||
|
super + m
|
||||||
|
bspc monitor -f next
|
||||||
|
|
||||||
|
super + shift + m
|
||||||
|
bspc node -m next
|
||||||
|
|
||||||
|
super + t
|
||||||
|
bspc desktop -l next
|
||||||
|
|
||||||
|
super + shift + t
|
||||||
|
bspc node -t '~pseudo_tiled'
|
||||||
|
|
||||||
|
super + x
|
||||||
|
terminal
|
||||||
|
|
||||||
|
super + {r,u,p}
|
||||||
|
dmenu-extras -l 9 {run,bmark,pass}
|
||||||
|
|
||||||
|
super + z
|
||||||
|
ssm lockd lock
|
||||||
|
|
||||||
|
Print
|
||||||
|
snap -f
|
||||||
|
|
||||||
|
super + {Left,Up,Right,Down}
|
||||||
|
bspc node --presel-dir '~'{west,north,east,south}
|
||||||
|
|
||||||
|
super + {_,shift + } c
|
||||||
|
win-hd-center {1280x720,854x480}
|
||||||
|
|
||||||
|
super + {a,s,n,p}
|
||||||
|
mpc {play,stop,next,prev}
|
||||||
|
|
||||||
|
super + bracketright
|
||||||
|
bspc node '@/' -R 90
|
||||||
|
|
||||||
|
super + f
|
||||||
|
bspc rule -a \* -o state=floating
|
||||||
|
|
||||||
|
super + XF86AudioLowerVolume
|
||||||
|
amixer -c 0 set PCM 2dB-
|
||||||
|
|
||||||
|
super + XF86AudioRaiseVolume
|
||||||
|
amixer -c 0 set PCM 2dB+
|
8
homedir/.config/common/colours
Normal file
8
homedir/.config/common/colours
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# vim: ft=sh
|
||||||
|
|
||||||
|
colour_fg='#f9f9f9'
|
||||||
|
colour_fg_active=$colour_fg
|
||||||
|
colour_bg='#1f1f1f'
|
||||||
|
colour_bg_active='#467EC2'
|
||||||
|
|
||||||
|
colour_urgent='#f9f9f9'
|
1
homedir/.config/common/fonts
Normal file
1
homedir/.config/common/fonts
Normal file
|
@ -0,0 +1 @@
|
||||||
|
common_x_fontspec='-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*'
|
246
homedir/.config/dunst/dunstrc
Normal file
246
homedir/.config/dunst/dunstrc
Normal file
|
@ -0,0 +1,246 @@
|
||||||
|
[global]
|
||||||
|
font = xos4 Terminus 12
|
||||||
|
|
||||||
|
# Allow a small subset of html markup:
|
||||||
|
# <b>bold</b>
|
||||||
|
# <i>italic</i>
|
||||||
|
# <s>strikethrough</s>
|
||||||
|
# <u>underline</u>
|
||||||
|
#
|
||||||
|
# For a complete reference see
|
||||||
|
# <http://developer.gnome.org/pango/stable/PangoMarkupFormat.html>.
|
||||||
|
# If markup is not allowed, those tags will be stripped out of the
|
||||||
|
# message.
|
||||||
|
allow_markup = yes
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# Markup is allowed
|
||||||
|
format = "<b>%s</b>\n%b"
|
||||||
|
|
||||||
|
# Sort messages by urgency.
|
||||||
|
sort = yes
|
||||||
|
|
||||||
|
# Show how many messages are currently hidden (because of geometry).
|
||||||
|
indicate_hidden = yes
|
||||||
|
|
||||||
|
# Alignment of message text.
|
||||||
|
# Possible values are "left", "center" and "right".
|
||||||
|
alignment = left
|
||||||
|
|
||||||
|
# The frequency with wich text that is longer than the notification
|
||||||
|
# window allows bounces back and forth.
|
||||||
|
# This option conflicts with "word_wrap".
|
||||||
|
# Set to 0 to disable.
|
||||||
|
bounce_freq = 0
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60
|
||||||
|
|
||||||
|
# Split notifications into multiple lines if they don't fit into
|
||||||
|
# geometry.
|
||||||
|
word_wrap = yes
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = no
|
||||||
|
|
||||||
|
|
||||||
|
# The geometry of the window:
|
||||||
|
# [{width}]x{height}[+/-{x}+/-{y}]
|
||||||
|
# The geometry of the message window.
|
||||||
|
# The height is measured in number of notifications everything else
|
||||||
|
# in pixels. If the width is omitted but the height is given
|
||||||
|
# ("-geometry x2"), the message window expands over the whole screen
|
||||||
|
# (dmenu-like). If width is 0, the window expands to the longest
|
||||||
|
# message displayed. A positive x is measured from the left, a
|
||||||
|
# negative from the right side of the screen. Y is measured from
|
||||||
|
# the top and down respectevly.
|
||||||
|
# The width can be negative. In this case the actual width is the
|
||||||
|
# screen width minus the width defined in within the geometry option.
|
||||||
|
geometry = "500x32-710+32"
|
||||||
|
|
||||||
|
# Shrink window if it's smaller than the width. Will be ignored if
|
||||||
|
# width is 0.
|
||||||
|
shrink = no
|
||||||
|
|
||||||
|
# The transparency of the window. Range: [0; 100].
|
||||||
|
# This option will only work if a compositing windowmanager is
|
||||||
|
# present (e.g. xcompmgr, compiz, etc.).
|
||||||
|
transparency = 25
|
||||||
|
|
||||||
|
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||||
|
# for longer than idle_threshold seconds.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
idle_threshold = 120
|
||||||
|
|
||||||
|
# Which monitor should the notifications be displayed on.
|
||||||
|
monitor = 0
|
||||||
|
|
||||||
|
# Display notification on focused monitor. Possible modes are:
|
||||||
|
# mouse: follow mouse pointer
|
||||||
|
# keyboard: follow window with keyboard focus
|
||||||
|
# none: don't follow anything
|
||||||
|
#
|
||||||
|
# "keyboard" needs a windowmanager that exports the
|
||||||
|
# _NET_ACTIVE_WINDOW property.
|
||||||
|
# This should be the case for almost all modern windowmanagers.
|
||||||
|
#
|
||||||
|
# If this option is set to mouse or keyboard, the monitor option
|
||||||
|
# will be ignored.
|
||||||
|
follow = mouse
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = yes
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = yes
|
||||||
|
|
||||||
|
# The height of a single line. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
# This adds empty space above and under the text.
|
||||||
|
line_height = 0
|
||||||
|
|
||||||
|
# Draw a line of "separatpr_height" pixel height between two
|
||||||
|
# notifications.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
separator_height = 2
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 8
|
||||||
|
|
||||||
|
# Define a color for the separator.
|
||||||
|
# possible values are:
|
||||||
|
# * auto: dunst tries to find a color fitting to the background;
|
||||||
|
# * foreground: use the same color as the foreground;
|
||||||
|
# * frame: use the same color as the frame;
|
||||||
|
# * anything else will be interpreted as a X color.
|
||||||
|
separator_color = frame
|
||||||
|
|
||||||
|
# Print a notification on startup.
|
||||||
|
# This is mainly for error detection, since dbus (re-)starts dunst
|
||||||
|
# automatically after a crash.
|
||||||
|
startup_notification = true
|
||||||
|
|
||||||
|
# dmenu path.
|
||||||
|
dmenu = /usr/bin/dmenu -p dunst:
|
||||||
|
#dmenu = /usr/bin/rofi -dmenu
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = /usr/bin/firefox -new-tab
|
||||||
|
|
||||||
|
# Align icons left/right/off
|
||||||
|
icon_position = off
|
||||||
|
|
||||||
|
# Paths to default icons.
|
||||||
|
icon_folders = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/
|
||||||
|
|
||||||
|
[frame]
|
||||||
|
width = 2
|
||||||
|
color = "#467EC2"
|
||||||
|
|
||||||
|
[shortcuts]
|
||||||
|
|
||||||
|
# Shortcuts are specified as [modifier+][modifier+]...key
|
||||||
|
# Available modifiers are "ctrl", "mod1" (the alt-key), "mod2",
|
||||||
|
# "mod3" and "mod4" (windows-key).
|
||||||
|
# Xev might be helpful to find names for keys.
|
||||||
|
|
||||||
|
# Close notification.
|
||||||
|
close = ctrl+space
|
||||||
|
|
||||||
|
# Close all notifications.
|
||||||
|
close_all = ctrl+shift+space
|
||||||
|
|
||||||
|
# Redisplay last message(s).
|
||||||
|
# On the US keyboard layout "grave" is normally above TAB and left
|
||||||
|
# of "1".
|
||||||
|
history = mod4+d
|
||||||
|
|
||||||
|
# Context menu.
|
||||||
|
context = mod4+shift+d
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
# IMPORTANT: colors have to be defined in quotation marks.
|
||||||
|
# Otherwise the "#" and following would be interpreted as a comment.
|
||||||
|
background = "#1f1f1f"
|
||||||
|
foreground = "#f9f9f9"
|
||||||
|
timeout = 10
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
background = "#1f1f1f"
|
||||||
|
foreground = "#f9f9f9"
|
||||||
|
timeout = 10
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
background = "#78090C"
|
||||||
|
foreground = "#f9f9f9"
|
||||||
|
timeout = 0
|
||||||
|
|
||||||
|
|
||||||
|
# Every section that isn't one of the above is interpreted as a rules to
|
||||||
|
# override settings for certain messages.
|
||||||
|
# Messages can be matched by "appname", "summary", "body", "icon", "category",
|
||||||
|
# "msg_urgency" and you can override the "timeout", "urgency", "foreground",
|
||||||
|
# "background", "new_icon" and "format".
|
||||||
|
# Shell-like globbing will get expanded.
|
||||||
|
#
|
||||||
|
# SCRIPTING
|
||||||
|
# You can specify a script that gets run when the rule matches by
|
||||||
|
# setting the "script" option.
|
||||||
|
# The script will be called as follows:
|
||||||
|
# script appname summary body icon urgency
|
||||||
|
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||||
|
#
|
||||||
|
# NOTE: if you don't want a notification to be displayed, set the format
|
||||||
|
# to "".
|
||||||
|
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||||
|
# to find fitting options for rules.
|
||||||
|
|
||||||
|
#[espeak]
|
||||||
|
# summary = "*"
|
||||||
|
# script = dunst_espeak.sh
|
||||||
|
|
||||||
|
#[script-test]
|
||||||
|
# summary = "*script*"
|
||||||
|
# script = dunst_test.sh
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
# # This notification will not be displayed
|
||||||
|
# summary = "foobar"
|
||||||
|
# format = ""
|
||||||
|
|
||||||
|
#[signed_on]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = "*signed on*"
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[signed_off]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *signed off*
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[says]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *says*
|
||||||
|
# urgency = critical
|
||||||
|
#
|
||||||
|
#[twitter]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *twitter.com*
|
||||||
|
# urgency = normal
|
||||||
|
#
|
||||||
|
# vim: ft=cfg
|
12
homedir/.config/frozenbar/bin/simple_launcher_run
Executable file
12
homedir/.config/frozenbar/bin/simple_launcher_run
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/bin/zsh
|
||||||
|
|
||||||
|
frozenbar_cfgdir="$XDG_CONFIG_HOME/frozenbar"
|
||||||
|
|
||||||
|
declare e cmd position=1
|
||||||
|
declare -a cmds
|
||||||
|
|
||||||
|
while IFS=':' read -r name _ cmd args; do
|
||||||
|
cmds+=( "$cmd" ${(s: :)args} )
|
||||||
|
done < "$frozenbar_cfgdir/rc.d/simple_launcher.rc"
|
||||||
|
|
||||||
|
$cmds[$1]
|
1
homedir/.config/frozenbar/mod
Symbolic link
1
homedir/.config/frozenbar/mod
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/home/fbt/git/frozenbar/mod
|
139
homedir/.config/frozenbar/rc
Normal file
139
homedir/.config/frozenbar/rc
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
# Which modules to load
|
||||||
|
mods=(
|
||||||
|
bspwm_desktop_pager
|
||||||
|
bspwm_taskbar
|
||||||
|
network_status
|
||||||
|
date
|
||||||
|
load
|
||||||
|
)
|
||||||
|
|
||||||
|
# Define the *look* of your panel here
|
||||||
|
function panel_draw {
|
||||||
|
panel_data=(
|
||||||
|
"$out[bspwm_desktop_pager]"
|
||||||
|
"$out[bspwm_taskbar]"
|
||||||
|
"%{r}"
|
||||||
|
"%{F$panel_bg_focused}%{F-}%{B$panel_bg_focused}"
|
||||||
|
""
|
||||||
|
"LA: $out[load]"
|
||||||
|
""
|
||||||
|
"Network: $out[network_status]"
|
||||||
|
" "
|
||||||
|
"$out[date]"
|
||||||
|
""
|
||||||
|
"%{B-}"
|
||||||
|
)
|
||||||
|
|
||||||
|
printf '%s\n' "$panel_data"
|
||||||
|
}
|
||||||
|
|
||||||
|
function panel_pre_start {
|
||||||
|
# Set bspwm top padding
|
||||||
|
bspc config top_padding "$(( panel_h + bspwm_window_gap ))"
|
||||||
|
}
|
||||||
|
|
||||||
|
function panel_post_start {
|
||||||
|
# Set the layer on which lemonbar resides
|
||||||
|
xdo above -t $( xdo id -n root ) $( xdo id -a $panel_window_name )
|
||||||
|
}
|
||||||
|
|
||||||
|
function panel_cleanup_misc {
|
||||||
|
# Reset bspwm top padding
|
||||||
|
bspc config top_padding 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# General config
|
||||||
|
# ==============
|
||||||
|
|
||||||
|
# fifo location
|
||||||
|
#panel_fifo="$XDG_RUNTIME_DIR/frozenbar.fifo"
|
||||||
|
|
||||||
|
# Window name
|
||||||
|
panel_window_name='frozenbar'
|
||||||
|
|
||||||
|
## Colours
|
||||||
|
# I source a common config so that all my scripts share the same colours
|
||||||
|
source ~/.config/common/colours
|
||||||
|
panel_fg_normal=$colour_fg
|
||||||
|
panel_fg_focused=$colour_fg_active
|
||||||
|
panel_bg_normal=$colour_bg
|
||||||
|
panel_bg_focused=$colour_bg_active
|
||||||
|
|
||||||
|
## Fonts
|
||||||
|
panel_fontspec='-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*'
|
||||||
|
|
||||||
|
## Get root window data to automatically set up the panel's dimensions and position
|
||||||
|
get_rootwin_data
|
||||||
|
|
||||||
|
## We use bspwm, and we need to know its settings
|
||||||
|
source ~/.config/common/bspwm
|
||||||
|
|
||||||
|
## Set the panel dimensions and position
|
||||||
|
panel_h='14'
|
||||||
|
panel_w=$(( root_win_w - ( bspwm_window_gap * 2 ) ))
|
||||||
|
panel_geometry="${panel_w}x${panel_h}+${bspwm_window_gap}+${bspwm_window_gap}"
|
||||||
|
|
||||||
|
## How many clickable areas are available to use:
|
||||||
|
panel_clickable_areas='128'
|
||||||
|
|
||||||
|
# Module configs
|
||||||
|
# ==============
|
||||||
|
|
||||||
|
# bspwm_desktop_pager
|
||||||
|
# -------------------
|
||||||
|
declare -A bspwm_desktop_pager
|
||||||
|
bspwm_desktop_pager[colour_focused]=$panel_bg_focused
|
||||||
|
bspwm_desktop_pager[show_empty_tags]=0
|
||||||
|
|
||||||
|
declare -a bspwm_desktop_pager_blacklist
|
||||||
|
bspwm_desktop_pager_blacklist=( 'h' )
|
||||||
|
|
||||||
|
# bspwm_taskbar
|
||||||
|
# -------------
|
||||||
|
declare -A bspwm_taskbar
|
||||||
|
declare -a bspwm_taskbar_blacklist
|
||||||
|
bspwm_taskbar[focused_only]=0
|
||||||
|
bspwm_taskbar[counter]=1
|
||||||
|
bspwm_taskbar[fg_normal]='#bebebe'
|
||||||
|
bspwm_taskbar[fg_focused]=$panel_fg_normal
|
||||||
|
bspwm_taskbar[start]="%{F$panel_bg_normal}%{B$panel_bg_focused}%{F-} "
|
||||||
|
bspwm_taskbar[end]="%{F$panel_bg_focused} %{B-}%{F-}"
|
||||||
|
bspwm_taskbar[max_size]=132
|
||||||
|
bspwm_taskbar_blacklist=( 'h' )
|
||||||
|
|
||||||
|
# bspwm_date
|
||||||
|
# ----------
|
||||||
|
declare -A date
|
||||||
|
date[format]='%A, %Y.%m.%d %H:%M:%S'
|
||||||
|
|
||||||
|
# simple_launcher
|
||||||
|
# ---------------
|
||||||
|
declare -A simple_launcher
|
||||||
|
simple_launcher[start]="%{F$panel_bg_normal}%{B$panel_bg_focused}%{F-}"
|
||||||
|
simple_launcher[end]="%{F$panel_bg_focused} %{B-}%{F-}"
|
||||||
|
|
||||||
|
# network_status
|
||||||
|
# --------------
|
||||||
|
mod_network_status_check_rate=10
|
||||||
|
mod_network_status_ok='%{F#00FF00}ok%{F-}'
|
||||||
|
mod_network_status_warn='%{F#FFFF00}WARN%{F-}'
|
||||||
|
mod_network_status_fail='%{F#FF0000}FAIL%{F-}'
|
||||||
|
|
||||||
|
network_status_hosts=(
|
||||||
|
de-ber-as20647.anchors.atlas.ripe.net
|
||||||
|
nl-ams-as1101.anchors.atlas.ripe.net
|
||||||
|
uk-boh-as196745.anchors.atlas.ripe.net
|
||||||
|
)
|
||||||
|
|
||||||
|
out[network_status]='%{F#FFFF00}checking...%{F-}'
|
||||||
|
|
||||||
|
# mod_load
|
||||||
|
# --------
|
||||||
|
mod_load_crit=4
|
||||||
|
mod_load_warn=3
|
||||||
|
|
||||||
|
mod_load_warn_colour='#FFFF00'
|
||||||
|
mod_load_crit_colour='#FF0000'
|
||||||
|
mod_load_ok_colour='#00FF00'
|
2
homedir/.config/frozenbar/rc.d/simple_launcher.rc
Normal file
2
homedir/.config/frozenbar/rc.d/simple_launcher.rc
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
browser::browser
|
||||||
|
terminal::terminal
|
1
homedir/.config/moltenbar/mod
Symbolic link
1
homedir/.config/moltenbar/mod
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/home/fbt/git/moltenbar/mod
|
58
homedir/.config/moltenbar/rc.yaml
Normal file
58
homedir/.config/moltenbar/rc.yaml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
# vim: ft=yaml sw=2 et
|
||||||
|
|
||||||
|
#geometry: '1262x14+9+9'
|
||||||
|
height: 14
|
||||||
|
gap: 9
|
||||||
|
fontspec: '-*-terminesspowerline-medium-*-normal-*-14-*-*-*-*-*-iso10646-*'
|
||||||
|
window_name: 'moltenbar'
|
||||||
|
active_areas: '128'
|
||||||
|
modules:
|
||||||
|
- bspwm_pager
|
||||||
|
- date
|
||||||
|
- bspwm_taskbar
|
||||||
|
- load_average
|
||||||
|
- network
|
||||||
|
- newmail
|
||||||
|
format: "<%= @panel_data['bspwm_pager'] %><%= @panel_data['bspwm_taskbar'] %>%{r}%{F<%= @config['colours']['bg_focused'] %>} %{F-}%{B<%= @config['colours']['bg_focused'] %>} New mail: <%= @panel_data['newmail'] %> LA: <%= @panel_data['load_average'] %> Network: <%= @panel_data['network'] %> <%= @panel_data['date'] %> %{B-}"
|
||||||
|
colours:
|
||||||
|
fg: '#f9f9f9'
|
||||||
|
fg_focused: '#f9f9f9'
|
||||||
|
bg: '#001f1f1f'
|
||||||
|
bg_focused: '#467EC2'
|
||||||
|
|
||||||
|
# Module settings
|
||||||
|
mod:
|
||||||
|
bspwm_pager:
|
||||||
|
colour_focused: '#f9f9f9'
|
||||||
|
show_empty_desktops: false
|
||||||
|
# monitors:
|
||||||
|
# - "WMHDMI1"
|
||||||
|
blacklist:
|
||||||
|
-h
|
||||||
|
bspwm_taskbar:
|
||||||
|
begin: "%{F<%= @config['colours']['bg'] %>}%{B<%= @config['colours']['bg_focused'] %>}%{F-} "
|
||||||
|
end: "%{F<%= @config['colours']['bg_focused'] %>} %{B-} "
|
||||||
|
date:
|
||||||
|
format: '%A, %Y.%m.%d %H:%M:%S'
|
||||||
|
load_average:
|
||||||
|
warn_value: 3
|
||||||
|
crit_value: 4
|
||||||
|
ok_colour: "#00FF00"
|
||||||
|
warn_colour: "#FFFF00"
|
||||||
|
crit_colour: "#FF0000"
|
||||||
|
network:
|
||||||
|
hosts:
|
||||||
|
- de-ber-as20647.anchors.atlas.ripe.net
|
||||||
|
- nl-ams-as1101.anchors.atlas.ripe.net
|
||||||
|
- uk-boh-as196745.anchors.atlas.ripe.net
|
||||||
|
ok_colour: "#00FF00"
|
||||||
|
warn_colour: "#FFFF00"
|
||||||
|
crit_colour: "#FF0000"
|
||||||
|
newmail:
|
||||||
|
ok_message: "*"
|
||||||
|
ok_colour: "#00FF00"
|
||||||
|
crit_message: "***"
|
||||||
|
crit_colour: "#FF0000"
|
||||||
|
maildirs:
|
||||||
|
- /home/fbt/sync/maildir/.ops
|
||||||
|
- /home/fbt/sync/maildir/.inbox
|
1
homedir/.config/sxhkd/sxhkdrc
Symbolic link
1
homedir/.config/sxhkd/sxhkdrc
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../bspwm/sxhkdrc
|
29
homedir/.config/sxhkd/sxhkdrc-zwm
Normal file
29
homedir/.config/sxhkd/sxhkdrc-zwm
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
super + x
|
||||||
|
terminal
|
||||||
|
|
||||||
|
super + j
|
||||||
|
zwm-focus
|
||||||
|
|
||||||
|
super + w
|
||||||
|
killw $(pfw)
|
||||||
|
|
||||||
|
super + Return
|
||||||
|
zwm-tile
|
||||||
|
|
||||||
|
super + r
|
||||||
|
dmenu_run -fn '-*-terminus-medium-r-*-*-16-*-*-*-*-*-*-*' -nb '#222222' -nf '#bbbbbb' -sb '#005577'
|
||||||
|
|
||||||
|
super + m
|
||||||
|
zwm-monocle
|
||||||
|
|
||||||
|
super + t
|
||||||
|
zwm-tile
|
||||||
|
|
||||||
|
super + l
|
||||||
|
lock
|
||||||
|
|
||||||
|
super + {1-9}
|
||||||
|
zwm-tags switch {1-9}
|
||||||
|
|
||||||
|
super + shift + {1-9}
|
||||||
|
zwm-tags mv {1-9}
|
41
homedir/.config/termite/config
Normal file
41
homedir/.config/termite/config
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
[options]
|
||||||
|
font = xos4 terminus 10
|
||||||
|
#allow_bold = false
|
||||||
|
cursor_blink = off
|
||||||
|
cursor_shape = ibeam
|
||||||
|
browser = browser
|
||||||
|
mouse_autohide = true
|
||||||
|
audible_bell = true
|
||||||
|
|
||||||
|
[hints]
|
||||||
|
font = terminus 10
|
||||||
|
roundness = 0.0
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
foreground = #839496
|
||||||
|
foreground_bold = #eee8d5
|
||||||
|
foreground_dim = #888888
|
||||||
|
background = #141414
|
||||||
|
#background = rgba(18, 21, 26, 0.9)
|
||||||
|
cursor = #93a1a1
|
||||||
|
|
||||||
|
# if unset, will reverse foreground and background
|
||||||
|
#highlight = #839496
|
||||||
|
|
||||||
|
# colors from color0 to color254 can be set
|
||||||
|
color0 = #073642
|
||||||
|
color1 = #dc322f
|
||||||
|
color2 = #859900
|
||||||
|
color3 = #b58900
|
||||||
|
color4 = #268bd2
|
||||||
|
color5 = #d33682
|
||||||
|
color6 = #2aa198
|
||||||
|
color7 = #eee8d5
|
||||||
|
color8 = #002b36
|
||||||
|
color9 = #cb4b16
|
||||||
|
color10 = #586e75
|
||||||
|
color11 = #657b83
|
||||||
|
color12 = #839496
|
||||||
|
color13 = #6c71c4
|
||||||
|
color14 = #93a1a1
|
||||||
|
color15 = #fdf6e3
|
22
homedir/.config/termite/gotham
Normal file
22
homedir/.config/termite/gotham
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Gotham color scheme
|
||||||
|
[colors]
|
||||||
|
foreground = #98d1ce
|
||||||
|
foreground_bold = #98d1ce
|
||||||
|
cursor = #98d1ce
|
||||||
|
background = #0a0f14
|
||||||
|
color0 = #0a0f14
|
||||||
|
color8 = #10151b
|
||||||
|
color1 = #c33027
|
||||||
|
color9 = #d26939
|
||||||
|
color2 = #26a98b
|
||||||
|
color10 = #081f2d
|
||||||
|
color3 = #edb54b
|
||||||
|
color11 = #245361
|
||||||
|
color4 = #195465
|
||||||
|
color12 = #093748
|
||||||
|
color5 = #4e5165
|
||||||
|
color13 = #888ba5
|
||||||
|
color6 = #33859d
|
||||||
|
color14 = #599caa
|
||||||
|
color7 = #98d1ce
|
||||||
|
color15 = #d3ebe9
|
27
homedir/.config/termite/solarized
Normal file
27
homedir/.config/termite/solarized
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
[colors]
|
||||||
|
foreground = #839496
|
||||||
|
foreground_bold = #eee8d5
|
||||||
|
foreground_dim = #888888
|
||||||
|
background = #00141A
|
||||||
|
cursor = #93a1a1
|
||||||
|
|
||||||
|
# if unset, will reverse foreground and background
|
||||||
|
#highlight = #839496
|
||||||
|
|
||||||
|
# colors from color0 to color254 can be set
|
||||||
|
color0 = #073642
|
||||||
|
color1 = #dc322f
|
||||||
|
color2 = #859900
|
||||||
|
color3 = #b58900
|
||||||
|
color4 = #268bd2
|
||||||
|
color5 = #d33682
|
||||||
|
color6 = #2aa198
|
||||||
|
color7 = #eee8d5
|
||||||
|
color8 = #002b36
|
||||||
|
color9 = #cb4b16
|
||||||
|
color10 = #586e75
|
||||||
|
color11 = #657b83
|
||||||
|
color12 = #839496
|
||||||
|
color13 = #6c71c4
|
||||||
|
color14 = #93a1a1
|
||||||
|
color15 = #fdf6e3
|
4
homedir/.config/watchman/init.d/compton
Executable file
4
homedir/.config/watchman/init.d/compton
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
service_command='/bin/compton'
|
||||||
|
service_args=( --vsync opengl -f -D 3 -e 1.0 )
|
4
homedir/.config/watchman/init.d/dunst
Executable file
4
homedir/.config/watchman/init.d/dunst
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command='/usr/bin/dunst'
|
4
homedir/.config/watchman/init.d/jackd
Executable file
4
homedir/.config/watchman/init.d/jackd
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/env watchman
|
||||||
|
|
||||||
|
service_command='/usr/bin/jackd'
|
||||||
|
service_args=( -d alsa )
|
5
homedir/.config/watchman/init.d/lockd
Executable file
5
homedir/.config/watchman/init.d/lockd
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
service_respawn='true'
|
||||||
|
service_command="$HOME/bin/lockd"
|
||||||
|
service_args=( -- i3lock-extra -s -o ~/pics/lock.png -g -p )
|
21
homedir/.config/watchman/init.d/moltenbar
Executable file
21
homedir/.config/watchman/init.d/moltenbar
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command='/home/fbt/bin/moltenbar'
|
||||||
|
|
||||||
|
service_depends_ready=( compton )
|
||||||
|
|
||||||
|
post_start() {
|
||||||
|
# Die if the thing didn't start
|
||||||
|
timer 5 nullexec xdo id -a moltenbar || return 1
|
||||||
|
|
||||||
|
# Set the layer on which lemonbar resides
|
||||||
|
xdo above -t $( xdo id -n root ) $( xdo id -a moltenbar )
|
||||||
|
|
||||||
|
# Set the top badding for bspwm
|
||||||
|
bspc config top_padding $(( 14 + 9 )) &>/tmp/debug.log
|
||||||
|
}
|
||||||
|
|
||||||
|
pre_stop() {
|
||||||
|
bspc config top_padding 0
|
||||||
|
}
|
4
homedir/.config/watchman/init.d/mpc-notify
Executable file
4
homedir/.config/watchman/init.d/mpc-notify
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command="$HOME/bin/mpc-notify"
|
8
homedir/.config/watchman/init.d/mpd
Executable file
8
homedir/.config/watchman/init.d/mpd
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/usr/bin/env ssm
|
||||||
|
|
||||||
|
service_tmpfiles=( "/run/user/$UID/mpd:dir" )
|
||||||
|
service_respawn=1
|
||||||
|
service_command='/usr/bin/mpd'
|
||||||
|
service_args=( --no-daemon -v )
|
||||||
|
|
||||||
|
post_start() { ready; }
|
21
homedir/.config/watchman/init.d/privoxy
Executable file
21
homedir/.config/watchman/init.d/privoxy
Executable file
|
@ -0,0 +1,21 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
privoxy_configfile="$HOME/.config/privoxy/config"
|
||||||
|
|
||||||
|
service_respawn='true'
|
||||||
|
service_command='/usr/bin/privoxy'
|
||||||
|
service_args=( --no-daemon "$privoxy_configfile" )
|
||||||
|
|
||||||
|
privoxy::configtest() {
|
||||||
|
"$service_command" --config-test "${service_args[@]}"
|
||||||
|
}
|
||||||
|
|
||||||
|
restart() {
|
||||||
|
privoxy::configtest || {
|
||||||
|
watchman.err "Config test failed, not restarting!"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
14
homedir/.config/watchman/init.d/pulseaudio
Executable file
14
homedir/.config/watchman/init.d/pulseaudio
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
#!/bin/env watchman
|
||||||
|
|
||||||
|
service_depends=( jackd )
|
||||||
|
|
||||||
|
service_command='/usr/bin/pulseaudio'
|
||||||
|
service_args=(
|
||||||
|
--realtime=false
|
||||||
|
--exit-idle-time=-1
|
||||||
|
-L module-jack-sink
|
||||||
|
-L module-jack-source
|
||||||
|
-L module-native-protocol-tcp
|
||||||
|
)
|
||||||
|
|
||||||
|
stop () { "$service_command" -k; }
|
5
homedir/.config/watchman/init.d/scron
Executable file
5
homedir/.config/watchman/init.d/scron
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
service_respawn='true'
|
||||||
|
service_command='/usr/bin/crond'
|
||||||
|
service_args=( -n -f ~/.config/crontab )
|
5
homedir/.config/watchman/init.d/socks
Executable file
5
homedir/.config/watchman/init.d/socks
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/watchman
|
||||||
|
|
||||||
|
service_respaen=true
|
||||||
|
service_command='/usr/bin/ssh'
|
||||||
|
service_args=( -i ~/.ssh/proxy/id_ecdsa -ND 8080 proxy@malganis.priv )
|
4
homedir/.config/watchman/init.d/ssh-agent
Executable file
4
homedir/.config/watchman/init.d/ssh-agent
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
service_command='/usr/bin/ssh-agent'
|
||||||
|
service_args=( -d -a "/tmp/${USER}-ssh-auth.sock" )
|
5
homedir/.config/watchman/init.d/sxhkd
Executable file
5
homedir/.config/watchman/init.d/sxhkd
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command='/usr/bin/sxhkd'
|
||||||
|
service_reload_signal='USR1'
|
4
homedir/.config/watchman/init.d/syncthing
Executable file
4
homedir/.config/watchman/init.d/syncthing
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command='/usr/bin/syncthing'
|
4
homedir/.config/watchman/init.d/transmission-daemon
Executable file
4
homedir/.config/watchman/init.d/transmission-daemon
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/env watchman
|
||||||
|
|
||||||
|
service_command='/usr/bin/transmission-daemon'
|
||||||
|
service_args=( -f )
|
5
homedir/.config/watchman/init.d/ufwd
Executable file
5
homedir/.config/watchman/init.d/ufwd
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env watchman
|
||||||
|
|
||||||
|
#service_respawn='true'
|
||||||
|
service_command='/usr/bin/ufwd'
|
||||||
|
service_args=( -n -c -- -p )
|
54
homedir/.config/zsh.d/modules/config
Normal file
54
homedir/.config/zsh.d/modules/config
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# Basic zsh configuration
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
# Custom completion
|
||||||
|
fpath=( /etc/zsh/completion $fpath )
|
||||||
|
|
||||||
|
# Completion
|
||||||
|
setopt noautomenu nomenucomplete
|
||||||
|
|
||||||
|
# Interactive comments
|
||||||
|
setopt interactive_comments
|
||||||
|
|
||||||
|
# Disable autocd
|
||||||
|
unsetopt autocd
|
||||||
|
|
||||||
|
# Command completion
|
||||||
|
autoload -U compinit
|
||||||
|
compinit
|
||||||
|
|
||||||
|
# Complete dotfiles
|
||||||
|
_comp_options+=( globdots )
|
||||||
|
|
||||||
|
# History
|
||||||
|
setopt HIST_IGNORE_DUPS
|
||||||
|
|
||||||
|
HISTFILE=~/.zsh_history
|
||||||
|
SAVEHIST=9001
|
||||||
|
HISTSIZE=9001
|
||||||
|
HISTCONTROL=erasedups
|
||||||
|
HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S"
|
||||||
|
|
||||||
|
# Fix retarded things
|
||||||
|
NULLCMD=true
|
||||||
|
READNULLCMD=true
|
||||||
|
|
||||||
|
# Locale
|
||||||
|
export LC_ALL='en_US.UTF-8'
|
||||||
|
|
||||||
|
# dotfiles config
|
||||||
|
dotfiles_dir="$HOME/git/dotfiles"
|
||||||
|
|
||||||
|
# PATH
|
||||||
|
set_misc_path "$HOME/ruby/bin" "$HOME/games/bin" "$HOME/.config/alternatives" "$HOME/.local/bin" "$HOME/bin" "$HOME/.gem/ruby/2.3.0/bin/"
|
||||||
|
|
||||||
|
# GPG
|
||||||
|
GPG_TTY=$(tty)
|
||||||
|
export GPG_TTY
|
||||||
|
|
||||||
|
# EDITOR
|
||||||
|
EDITOR=vim
|
||||||
|
export EDITOR
|
||||||
|
|
||||||
|
# jspass completion
|
||||||
|
compdef _pass jspass
|
24
homedir/.config/zsh.d/modules/core
Normal file
24
homedir/.config/zsh.d/modules/core
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Functions common to other modules
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
# Run the supplied command and null all the output
|
||||||
|
function nullexec {
|
||||||
|
"$@" &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
# Compile all includes
|
||||||
|
function newconf {
|
||||||
|
for i in ~/.zshrc ~/.config/zsh.d/*; do
|
||||||
|
if ! [[ $i =~ .+\.zwc ]]; then
|
||||||
|
msg "Compiling $i..."
|
||||||
|
zcompile $i
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# set PATH from misc_path
|
||||||
|
function set_misc_path {
|
||||||
|
for p in $@; do
|
||||||
|
PATH="$p:$PATH"
|
||||||
|
done
|
||||||
|
}
|
14
homedir/.config/zsh.d/modules/dotfiles
Normal file
14
homedir/.config/zsh.d/modules/dotfiles
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Functions for manipulating my dotfiles repo
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
function dotfiles() {
|
||||||
|
declare act=$1
|
||||||
|
|
||||||
|
case $act in
|
||||||
|
pull|diff) git -C $dotfiles_dir $1;;
|
||||||
|
push)
|
||||||
|
git -C $dotfiles_dir commit -a
|
||||||
|
git -C $dotfiles_dir push
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
8
homedir/.config/zsh.d/modules/helpers
Normal file
8
homedir/.config/zsh.d/modules/helpers
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Helper functions
|
||||||
|
|
||||||
|
xcopy() { xclip -selection clipboard }
|
||||||
|
xpaste() { xclip -selection clipboard -o }
|
||||||
|
|
||||||
|
xclip() {
|
||||||
|
/usr/bin/xclip -selection clipboard "$@"
|
||||||
|
}
|
28
homedir/.config/zsh.d/modules/keys
Normal file
28
homedir/.config/zsh.d/modules/keys
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Keys
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
bindkey -e
|
||||||
|
|
||||||
|
declare -A key
|
||||||
|
key[Home]=$terminfo[khome]
|
||||||
|
key[End]=$terminfo[kend]
|
||||||
|
key[Delete]=$terminfo[kdch1]
|
||||||
|
|
||||||
|
declare -A bindings
|
||||||
|
bindings=(
|
||||||
|
Home 'beginning-of-line'
|
||||||
|
End 'end-of-line'
|
||||||
|
Delete 'delete-char'
|
||||||
|
^R 'history-incremental-search-backward'
|
||||||
|
)
|
||||||
|
|
||||||
|
for b in ${(k)bindings}; do
|
||||||
|
if [[ $key[$b] ]]; then
|
||||||
|
bindkey $key[$b] $bindings[$b]
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
function zle-line-init () { echoti smkx; }
|
||||||
|
function zle-line-finish () { echoti rmkx; }
|
||||||
|
zle -N zle-line-init
|
||||||
|
zle -N zle-line-finish
|
8
homedir/.config/zsh.d/modules/local
Normal file
8
homedir/.config/zsh.d/modules/local
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Local zsh config, not to be synced.
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
# SSH
|
||||||
|
SSH_AUTH_SOCK="/tmp/${USER}-ssh-auth.sock"
|
||||||
|
export SSH_AUTH_SOCK
|
||||||
|
|
||||||
|
function x { exec xinit -- -nolisten tcp vt9; }
|
128
homedir/.config/zsh.d/modules/prompt
Normal file
128
homedir/.config/zsh.d/modules/prompt
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
# Prompt
|
||||||
|
# vim: ft=zsh
|
||||||
|
autoload -U colors && colors
|
||||||
|
|
||||||
|
nullexec() { "$@" &>/dev/null; }
|
||||||
|
|
||||||
|
precmd.title() {
|
||||||
|
printf '%b' "\e]2;$1\a"
|
||||||
|
}
|
||||||
|
|
||||||
|
precmd.svn() {
|
||||||
|
if [[ -f .novcsprompt ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if nullexec svn info; then
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case $line in
|
||||||
|
(M*|A*|D*) svn_unstaged=1;;
|
||||||
|
(\!*) svn_missing=1;;
|
||||||
|
(\?*) svn_untracked=1;;
|
||||||
|
esac
|
||||||
|
done < <( svn st )
|
||||||
|
|
||||||
|
(( svn_unstaged )) && {
|
||||||
|
svn_st+='c'
|
||||||
|
svn_st_col='red'
|
||||||
|
}
|
||||||
|
|
||||||
|
(( svn_missing )) && {
|
||||||
|
svn_st+='m'
|
||||||
|
svn_st_col='red'
|
||||||
|
}
|
||||||
|
|
||||||
|
(( svn_untracked )) && {
|
||||||
|
svn_st+='f'
|
||||||
|
svn_st_col='red'
|
||||||
|
}
|
||||||
|
|
||||||
|
svn_st_col=${svn_st_col:-"green"}
|
||||||
|
svn_st=${svn_st:-"ok"}
|
||||||
|
|
||||||
|
printf '%s' "(%F{cyan}svn%f:%F{$svn_st_col}$svn_st%f) "
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
precmd.git() {
|
||||||
|
declare git_unstaged git_untracked git_status_short git_status_colour git_prompt_msg
|
||||||
|
|
||||||
|
if [[ -f .novcsprompt ]]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if git rev-parse --git-dir &>/dev/null; then
|
||||||
|
git_current_branch=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case $line in
|
||||||
|
' M'*|A*|D*) git_unstaged=1;;
|
||||||
|
\?\?*) git_untracked=1;;
|
||||||
|
esac
|
||||||
|
done < <( git status --short )
|
||||||
|
|
||||||
|
(( git_unstaged )) && {
|
||||||
|
git_status_short+='c'
|
||||||
|
git_status_colour='red'
|
||||||
|
}
|
||||||
|
|
||||||
|
(( git_untracked )) && {
|
||||||
|
git_status_short+='f'
|
||||||
|
git_status_colour='red'
|
||||||
|
}
|
||||||
|
|
||||||
|
git_status_short=${git_status_short:-"ok"}
|
||||||
|
git_status_colour=${git_status_colour:-"green"}
|
||||||
|
|
||||||
|
git_prompt_msg="(%F{cyan}$git_current_branch%f[%F{$git_status_colour}${git_status_short}%f]) "
|
||||||
|
|
||||||
|
printf '%s' $git_prompt_msg
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
rprompt() {
|
||||||
|
{ precmd.svn; precmd.git } > "$XDG_RUNTIME_DIR/zsh_rprompt_$$.tmp"
|
||||||
|
kill -s USR1 $$
|
||||||
|
}
|
||||||
|
|
||||||
|
TRAPUSR1() {
|
||||||
|
prompt_async_data=$(<"$XDG_RUNTIME_DIR/zsh_rprompt_$$.tmp")
|
||||||
|
draw_prompt
|
||||||
|
zle && zle reset-prompt
|
||||||
|
}
|
||||||
|
|
||||||
|
draw_prompt() {
|
||||||
|
prompt_custom=(
|
||||||
|
"%F{$cmd_colour}$cmd_msg%f"
|
||||||
|
"%F{$user_colour}$USER%f@$HOST"
|
||||||
|
"${PWD//$HOME/~}"
|
||||||
|
"$prompt_async_data%F{$user_colour}>%f"
|
||||||
|
)
|
||||||
|
|
||||||
|
PROMPT=" $prompt_custom "
|
||||||
|
}
|
||||||
|
|
||||||
|
precmd() {
|
||||||
|
declare last_exit_code=$?
|
||||||
|
declare -g cmd_colour cmd_msg
|
||||||
|
|
||||||
|
if (( last_exit_code )); then
|
||||||
|
cmd_colour='red'
|
||||||
|
cmd_msg='!'
|
||||||
|
else
|
||||||
|
cmd_colour='green'
|
||||||
|
cmd_msg='.'
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( UID )); then
|
||||||
|
user_colour='green'
|
||||||
|
else
|
||||||
|
user_colour='red'
|
||||||
|
fi
|
||||||
|
|
||||||
|
precmd.title "$USER@$HOST ${PWD//$HOME/~}"
|
||||||
|
|
||||||
|
draw_prompt
|
||||||
|
|
||||||
|
rprompt &!
|
||||||
|
}
|
7
homedir/.config/zsh.d/modules/shell
Normal file
7
homedir/.config/zsh.d/modules/shell
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Functions meant to be used interactively.
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
# Source the .zshrc again
|
||||||
|
function reload {
|
||||||
|
exec zsh -i
|
||||||
|
}
|
6
homedir/.config/zsh.d/modules/xdg
Normal file
6
homedir/.config/zsh.d/modules/xdg
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
|
export XDG_DATA_HOME=$HOME/.local/share
|
||||||
|
export XDG_CACHE_HOME=$HOME/.cache
|
||||||
|
export XDG_RUNTIME_DIR=/run/user/$UID
|
||||||
|
export XDG_CONFIG_HOME=$HOME/.config
|
||||||
|
|
59
homedir/.config/zsh.d/zshrc
Normal file
59
homedir/.config/zsh.d/zshrc
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# vim: ft=zsh
|
||||||
|
# Modules
|
||||||
|
|
||||||
|
function msg {
|
||||||
|
if ! (( flag_quiet )); then
|
||||||
|
printf '%s\n' "$*"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function err { msg "$*" >&2; }
|
||||||
|
|
||||||
|
function modpath {
|
||||||
|
case $1 in
|
||||||
|
(=) ZSHRC_MODPATH=( "$@" );;
|
||||||
|
(*) ZSHRC_MODPATH+=( "$@" );;
|
||||||
|
esac
|
||||||
|
|
||||||
|
export ZSHRC_MODPATH
|
||||||
|
}
|
||||||
|
|
||||||
|
function use {
|
||||||
|
declare flag_nofail flag_quiet mname m_nofirst
|
||||||
|
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
(-n) flag_nofail=1;;
|
||||||
|
(-q) flag_quiet=1;;
|
||||||
|
(--) shift; break;;
|
||||||
|
(*) break;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
printf '[zshrc] Loading modules: '
|
||||||
|
for mname in $@; do
|
||||||
|
if ! (( m_nofirst )); then
|
||||||
|
printf '%s' $mname
|
||||||
|
else
|
||||||
|
printf ', %s' $mname
|
||||||
|
fi
|
||||||
|
|
||||||
|
for p in $ZSHRC_MODPATH; do
|
||||||
|
if [[ -f $p/$mname ]]; then
|
||||||
|
if ! source $p/$mname; then
|
||||||
|
printf '(fail)'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf '(not found)'
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
m_nofirst=1
|
||||||
|
done
|
||||||
|
|
||||||
|
printf '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Default ZSHRC_MODPATH
|
||||||
|
modpath "$HOME/.config/zsh.d/modules"
|
70
homedir/.config/zxinit/common
Normal file
70
homedir/.config/zxinit/common
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Resources
|
||||||
|
resources=( '/etc/X11/xinit/.Xresources' "$HOME/.Xresources" )
|
||||||
|
modmaps=( '/etc/X11/xinit/.Xmodmap' "$HOME/.Xmodmap" )
|
||||||
|
|
||||||
|
# Set DPI
|
||||||
|
xrandr --dpi 95
|
||||||
|
|
||||||
|
for r in "${resources[@]}"; do
|
||||||
|
if [[ -f "$r" ]]; then
|
||||||
|
xrdb -merge "$r"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
for m in modmaps; do
|
||||||
|
if [[ -f "$m" ]]; then
|
||||||
|
xmodmap "$m"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Common services
|
||||||
|
common_services+=( pulseaudio lockd )
|
||||||
|
for i in "${common_services[@]}"; do
|
||||||
|
service "$i" start
|
||||||
|
done
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
xset +fp /usr/share/fonts/local
|
||||||
|
|
||||||
|
# Screensaver settings
|
||||||
|
xset -dpms
|
||||||
|
xset s 300
|
||||||
|
xset s noblank
|
||||||
|
xset s noexpose
|
||||||
|
|
||||||
|
# Solid black root window
|
||||||
|
# chameleon is available at https://github.com/fbt/misc
|
||||||
|
chameleon -C '#151515'
|
||||||
|
|
||||||
|
# Set a wallpaper if it exists
|
||||||
|
if [[ -f "$HOME/wallpaper.png" ]]; then
|
||||||
|
chameleon "$HOME/wallpaper.png"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Input settings
|
||||||
|
setxkbmap "min(us),min(ru)" -option "lv3:rwin_switch,grp:caps_toggle,grp_led:caps,compose:ralt,terminate:ctrl_alt_bksp"
|
||||||
|
xmodmap -e 'remove lock = Caps_Lock' \
|
||||||
|
-e 'keycode 135 = KP_Insert' \
|
||||||
|
-e 'keycode 49 = Escape asciitilde'
|
||||||
|
|
||||||
|
# Start a dbus session
|
||||||
|
if ! [[ "$DBUS_SESSION_BUS_ADDRESS" ]]; then
|
||||||
|
export $(dbus-launch)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Some nvidia tweaks
|
||||||
|
export VDPAU_NVIDIA_NO_OVERLAY=1
|
||||||
|
#export __GL_THREADED_OPTIMIZATIONS=1
|
||||||
|
nvidia-settings -l
|
||||||
|
nvidia-settings -a InitialPixmapPlacement=2
|
||||||
|
|
||||||
|
# Custom functions
|
||||||
|
services() {
|
||||||
|
for i in "${session_services[@]}"; do
|
||||||
|
service "$i" "$1"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
6
homedir/.config/zxinit/sessions/bspwm
Normal file
6
homedir/.config/zxinit/sessions/bspwm
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# A simple dwm session
|
||||||
|
PATH+=":$HOME/.config/bspwm/bin"
|
||||||
|
|
||||||
|
start_session() {
|
||||||
|
exec bspwm
|
||||||
|
}
|
1
homedir/.config/zxinit/sessions/default
Symbolic link
1
homedir/.config/zxinit/sessions/default
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
bspwm
|
13
homedir/.config/zxinit/sessions/dwm
Normal file
13
homedir/.config/zxinit/sessions/dwm
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# A simple dwm session
|
||||||
|
session.cleanup() { service dwm-status stop; }
|
||||||
|
|
||||||
|
trap session.cleanup EXIT
|
||||||
|
|
||||||
|
start_session() {
|
||||||
|
wmname LG3D
|
||||||
|
service dwm-status start
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
dwm
|
||||||
|
done
|
||||||
|
}
|
5
homedir/.config/zxinit/sessions/session-wrapper
Normal file
5
homedir/.config/zxinit/sessions/session-wrapper
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Start nothing, the DM will start it for us
|
||||||
|
|
||||||
|
start_session() {
|
||||||
|
:
|
||||||
|
}
|
16
homedir/.config/zxinit/sessions/zwm
Normal file
16
homedir/.config/zxinit/sessions/zwm
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# A simple dwm session
|
||||||
|
session.cleanup() {
|
||||||
|
service zwm-daemon stop
|
||||||
|
service sxhkd stop
|
||||||
|
}
|
||||||
|
|
||||||
|
trap session.cleanup EXIT
|
||||||
|
|
||||||
|
start_session() {
|
||||||
|
rm -r "/tmp/$USER/zwm"
|
||||||
|
|
||||||
|
service zwm-daemon start
|
||||||
|
service sxhkd start
|
||||||
|
|
||||||
|
sleep infinity
|
||||||
|
}
|
9
homedir/.gitconfig
Normal file
9
homedir/.gitconfig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[user]
|
||||||
|
name = fbt
|
||||||
|
email = fbt@fleshless.org
|
||||||
|
[push]
|
||||||
|
default = simple
|
||||||
|
[alias]
|
||||||
|
ci = commit -a
|
||||||
|
co = checkout
|
||||||
|
st = status --short
|
3
homedir/.inputrc
Normal file
3
homedir/.inputrc
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
$include /etc/inputrc
|
||||||
|
|
||||||
|
set completion-ignore-case On
|
71
homedir/.ncmpcpp/config
Normal file
71
homedir/.ncmpcpp/config
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
### Colours
|
||||||
|
## - 0 - default window color (discards all other colors)
|
||||||
|
## - 1 - black
|
||||||
|
## - 2 - red
|
||||||
|
## - 3 - green
|
||||||
|
## - 4 - yellow
|
||||||
|
## - 5 - blue
|
||||||
|
## - 6 - magenta
|
||||||
|
## - 7 - cyan
|
||||||
|
## - 8 - white
|
||||||
|
## - 9 - end of current color
|
||||||
|
###
|
||||||
|
|
||||||
|
visualizer_in_stereo = yes
|
||||||
|
#visualizer_sample_multiplier = 1
|
||||||
|
#visualizer_sync_interval = 30
|
||||||
|
|
||||||
|
## Available values: spectrum, wave.
|
||||||
|
visualizer_type = spectrum
|
||||||
|
visualizer_look = ●▊
|
||||||
|
|
||||||
|
#song_columns_list_format = (20)[]{a} (50)[]{tr} (6f)[]{NE}
|
||||||
|
#song_columns_list_format = (7f)[]{NEr} (20)[]{a} (80)[white]{tr} (6f)[]{l}
|
||||||
|
|
||||||
|
# Playlist look
|
||||||
|
playlist_display_mode = "classic"
|
||||||
|
song_list_format = " {%a}|{%A} - %t "
|
||||||
|
|
||||||
|
now_playing_prefix = "$8"
|
||||||
|
now_playing_suffix = "$9"
|
||||||
|
|
||||||
|
selected_item_prefix = "$4"
|
||||||
|
selected_item_suffix = "$9"
|
||||||
|
|
||||||
|
#playlist_separate_albums = no
|
||||||
|
|
||||||
|
#progressbar_look = "▃▃ "
|
||||||
|
progressbar_look = "▄▄ "
|
||||||
|
progressbar_boldness = yes
|
||||||
|
|
||||||
|
header_visibility = no
|
||||||
|
statusbar_visibility = no
|
||||||
|
titles_visibility = no
|
||||||
|
|
||||||
|
## Screens available for use: help, playlist, browser, search_engine,
|
||||||
|
## media_library, playlist_editor, tag_editor, outputs, visualizer, clock.
|
||||||
|
startup_screen = playlist
|
||||||
|
|
||||||
|
mouse_support = no
|
||||||
|
external_editor = vim
|
||||||
|
use_console_editor = yes
|
||||||
|
|
||||||
|
##### colors definitions #####
|
||||||
|
colors_enabled = yes
|
||||||
|
empty_tag_color = cyan
|
||||||
|
header_window_color = default
|
||||||
|
volume_color = default
|
||||||
|
state_line_color = default
|
||||||
|
state_flags_color = default
|
||||||
|
main_window_color = default
|
||||||
|
color1 = white
|
||||||
|
color2 = green
|
||||||
|
main_window_highlight_color = white
|
||||||
|
progressbar_color = black
|
||||||
|
progressbar_elapsed_color = default
|
||||||
|
statusbar_color = default
|
||||||
|
alternative_ui_separator_color = black
|
||||||
|
active_column_color = red
|
||||||
|
visualizer_color = blue
|
||||||
|
window_border_color = green
|
||||||
|
active_window_border = red
|
422
homedir/.vim/autoload/acp.vim
Normal file
422
homedir/.vim/autoload/acp.vim
Normal file
|
@ -0,0 +1,422 @@
|
||||||
|
"=============================================================================
|
||||||
|
" Copyright (c) 2007-2009 Takeshi NISHIDA
|
||||||
|
"
|
||||||
|
"=============================================================================
|
||||||
|
" LOAD GUARD {{{1
|
||||||
|
|
||||||
|
if !l9#guardScriptLoading(expand('<sfile>:p'), 0, 0, [])
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
"=============================================================================
|
||||||
|
" GLOBAL FUNCTIONS: {{{1
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#enable()
|
||||||
|
call acp#disable()
|
||||||
|
|
||||||
|
augroup AcpGlobalAutoCommand
|
||||||
|
autocmd!
|
||||||
|
autocmd InsertEnter * unlet! s:posLast s:lastUncompletable
|
||||||
|
autocmd InsertLeave * call s:finishPopup(1)
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
if g:acp_mappingDriven
|
||||||
|
call s:mapForMappingDriven()
|
||||||
|
else
|
||||||
|
autocmd AcpGlobalAutoCommand CursorMovedI * call s:feedPopup()
|
||||||
|
endif
|
||||||
|
|
||||||
|
nnoremap <silent> i i<C-r>=<SID>feedPopup()<CR>
|
||||||
|
nnoremap <silent> a a<C-r>=<SID>feedPopup()<CR>
|
||||||
|
nnoremap <silent> R R<C-r>=<SID>feedPopup()<CR>
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#disable()
|
||||||
|
call s:unmapForMappingDriven()
|
||||||
|
augroup AcpGlobalAutoCommand
|
||||||
|
autocmd!
|
||||||
|
augroup END
|
||||||
|
nnoremap i <Nop> | nunmap i
|
||||||
|
nnoremap a <Nop> | nunmap a
|
||||||
|
nnoremap R <Nop> | nunmap R
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#lock()
|
||||||
|
let s:lockCount += 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#unlock()
|
||||||
|
let s:lockCount -= 1
|
||||||
|
if s:lockCount < 0
|
||||||
|
let s:lockCount = 0
|
||||||
|
throw "AutoComplPop: not locked"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForSnipmate(context)
|
||||||
|
if g:acp_behaviorSnipmateLength < 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let matches = matchlist(a:context, '\(^\|\s\|\<\)\(\u\{' .
|
||||||
|
\ g:acp_behaviorSnipmateLength . ',}\)$')
|
||||||
|
return !empty(matches) && !empty(s:getMatchingSnipItems(matches[2]))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForKeyword(context)
|
||||||
|
if g:acp_behaviorKeywordLength < 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let matches = matchlist(a:context, '\(\k\{' . g:acp_behaviorKeywordLength . ',}\)$')
|
||||||
|
if empty(matches)
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
for ignore in g:acp_behaviorKeywordIgnores
|
||||||
|
if stridx(ignore, matches[1]) == 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForFile(context)
|
||||||
|
if g:acp_behaviorFileLength < 0
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
if has('win32') || has('win64')
|
||||||
|
let separator = '[/\\]'
|
||||||
|
else
|
||||||
|
let separator = '\/'
|
||||||
|
endif
|
||||||
|
if a:context !~ '\f' . separator . '\f\{' . g:acp_behaviorFileLength . ',}$'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return a:context !~ '[*/\\][/\\]\f*$\|[^[:print:]]\f*$'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForRubyOmni(context)
|
||||||
|
if !has('ruby')
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
if g:acp_behaviorRubyOmniMethodLength >= 0 &&
|
||||||
|
\ a:context =~ '[^. \t]\(\.\|::\)\k\{' .
|
||||||
|
\ g:acp_behaviorRubyOmniMethodLength . ',}$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
if g:acp_behaviorRubyOmniSymbolLength >= 0 &&
|
||||||
|
\ a:context =~ '\(^\|[^:]\):\k\{' .
|
||||||
|
\ g:acp_behaviorRubyOmniSymbolLength . ',}$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForPythonOmni(context)
|
||||||
|
return has('python') && g:acp_behaviorPythonOmniLength >= 0 &&
|
||||||
|
\ a:context =~ '\k\.\k\{' . g:acp_behaviorPythonOmniLength . ',}$'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForPerlOmni(context)
|
||||||
|
return g:acp_behaviorPerlOmniLength >= 0 &&
|
||||||
|
\ a:context =~ '\w->\k\{' . g:acp_behaviorPerlOmniLength . ',}$'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForXmlOmni(context)
|
||||||
|
return g:acp_behaviorXmlOmniLength >= 0 &&
|
||||||
|
\ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' .
|
||||||
|
\ g:acp_behaviorXmlOmniLength . ',}$'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForHtmlOmni(context)
|
||||||
|
return g:acp_behaviorHtmlOmniLength >= 0 &&
|
||||||
|
\ a:context =~ '\(<\|<\/\|<[^>]\+ \|<[^>]\+=\"\)\k\{' .
|
||||||
|
\ g:acp_behaviorHtmlOmniLength . ',}$'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#meetsForCssOmni(context)
|
||||||
|
if g:acp_behaviorCssOmniPropertyLength >= 0 &&
|
||||||
|
\ a:context =~ '\(^\s\|[;{]\)\s*\k\{' .
|
||||||
|
\ g:acp_behaviorCssOmniPropertyLength . ',}$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
if g:acp_behaviorCssOmniValueLength >= 0 &&
|
||||||
|
\ a:context =~ '[:@!]\s*\k\{' .
|
||||||
|
\ g:acp_behaviorCssOmniValueLength . ',}$'
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#completeSnipmate(findstart, base)
|
||||||
|
if a:findstart
|
||||||
|
let s:posSnipmateCompletion = len(matchstr(s:getCurrentText(), '.*\U'))
|
||||||
|
return s:posSnipmateCompletion
|
||||||
|
endif
|
||||||
|
let lenBase = len(a:base)
|
||||||
|
let items = filter(GetSnipsInCurrentScope(),
|
||||||
|
\ 'strpart(v:key, 0, lenBase) ==? a:base')
|
||||||
|
return map(sort(items(items)), 's:makeSnipmateItem(v:val[0], v:val[1])')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#onPopupCloseSnipmate()
|
||||||
|
let word = s:getCurrentText()[s:posSnipmateCompletion :]
|
||||||
|
for trigger in keys(GetSnipsInCurrentScope())
|
||||||
|
if word ==# trigger
|
||||||
|
call feedkeys("\<C-r>=TriggerSnippet()\<CR>", "n")
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#onPopupPost()
|
||||||
|
" to clear <C-r>= expression on command-line
|
||||||
|
echo ''
|
||||||
|
if pumvisible()
|
||||||
|
inoremap <silent> <expr> <C-h> acp#onBs()
|
||||||
|
inoremap <silent> <expr> <BS> acp#onBs()
|
||||||
|
" a command to restore to original text and select the first match
|
||||||
|
return (s:behavsCurrent[s:iBehavs].command =~# "\<C-p>" ? "\<C-n>\<Up>"
|
||||||
|
\ : "\<C-p>\<Down>")
|
||||||
|
endif
|
||||||
|
let s:iBehavs += 1
|
||||||
|
if len(s:behavsCurrent) > s:iBehavs
|
||||||
|
call s:setCompletefunc()
|
||||||
|
return printf("\<C-e>%s\<C-r>=acp#onPopupPost()\<CR>",
|
||||||
|
\ s:behavsCurrent[s:iBehavs].command)
|
||||||
|
else
|
||||||
|
let s:lastUncompletable = {
|
||||||
|
\ 'word': s:getCurrentWord(),
|
||||||
|
\ 'commands': map(copy(s:behavsCurrent), 'v:val.command')[1:],
|
||||||
|
\ }
|
||||||
|
call s:finishPopup(0)
|
||||||
|
return "\<C-e>"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function acp#onBs()
|
||||||
|
" using "matchstr" and not "strpart" in order to handle multi-byte
|
||||||
|
" characters
|
||||||
|
if call(s:behavsCurrent[s:iBehavs].meets,
|
||||||
|
\ [matchstr(s:getCurrentText(), '.*\ze.')])
|
||||||
|
return "\<BS>"
|
||||||
|
endif
|
||||||
|
return "\<C-e>\<BS>"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
"=============================================================================
|
||||||
|
" LOCAL FUNCTIONS: {{{1
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:mapForMappingDriven()
|
||||||
|
call s:unmapForMappingDriven()
|
||||||
|
let s:keysMappingDriven = [
|
||||||
|
\ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||||||
|
\ 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
||||||
|
\ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||||
|
\ 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
||||||
|
\ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||||
|
\ '-', '_', '~', '^', '.', ',', ':', '!', '#', '=', '%', '$', '@', '<', '>', '/', '\',
|
||||||
|
\ '<Space>', '<C-h>', '<BS>', ]
|
||||||
|
for key in s:keysMappingDriven
|
||||||
|
execute printf('inoremap <silent> %s %s<C-r>=<SID>feedPopup()<CR>',
|
||||||
|
\ key, key)
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:unmapForMappingDriven()
|
||||||
|
if !exists('s:keysMappingDriven')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
for key in s:keysMappingDriven
|
||||||
|
execute 'iunmap ' . key
|
||||||
|
endfor
|
||||||
|
let s:keysMappingDriven = []
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:getCurrentWord()
|
||||||
|
return matchstr(s:getCurrentText(), '\k*$')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:getCurrentText()
|
||||||
|
return strpart(getline('.'), 0, col('.') - 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:getPostText()
|
||||||
|
return strpart(getline('.'), col('.') - 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:isModifiedSinceLastCall()
|
||||||
|
if exists('s:posLast')
|
||||||
|
let posPrev = s:posLast
|
||||||
|
let nLinesPrev = s:nLinesLast
|
||||||
|
let textPrev = s:textLast
|
||||||
|
endif
|
||||||
|
let s:posLast = getpos('.')
|
||||||
|
let s:nLinesLast = line('$')
|
||||||
|
let s:textLast = getline('.')
|
||||||
|
if !exists('posPrev')
|
||||||
|
return 1
|
||||||
|
elseif posPrev[1] != s:posLast[1] || nLinesPrev != s:nLinesLast
|
||||||
|
return (posPrev[1] - s:posLast[1] == nLinesPrev - s:nLinesLast)
|
||||||
|
elseif textPrev ==# s:textLast
|
||||||
|
return 0
|
||||||
|
elseif posPrev[2] > s:posLast[2]
|
||||||
|
return 1
|
||||||
|
elseif has('gui_running') && has('multi_byte')
|
||||||
|
" NOTE: auto-popup causes a strange behavior when IME/XIM is working
|
||||||
|
return posPrev[2] + 1 == s:posLast[2]
|
||||||
|
endif
|
||||||
|
return posPrev[2] != s:posLast[2]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:makeCurrentBehaviorSet()
|
||||||
|
let modified = s:isModifiedSinceLastCall()
|
||||||
|
if exists('s:behavsCurrent[s:iBehavs].repeat') && s:behavsCurrent[s:iBehavs].repeat
|
||||||
|
let behavs = [ s:behavsCurrent[s:iBehavs] ]
|
||||||
|
elseif exists('s:behavsCurrent[s:iBehavs]')
|
||||||
|
return []
|
||||||
|
elseif modified
|
||||||
|
let behavs = copy(exists('g:acp_behavior[&filetype]')
|
||||||
|
\ ? g:acp_behavior[&filetype]
|
||||||
|
\ : g:acp_behavior['*'])
|
||||||
|
else
|
||||||
|
return []
|
||||||
|
endif
|
||||||
|
let text = s:getCurrentText()
|
||||||
|
call filter(behavs, 'call(v:val.meets, [text])')
|
||||||
|
let s:iBehavs = 0
|
||||||
|
if exists('s:lastUncompletable') &&
|
||||||
|
\ stridx(s:getCurrentWord(), s:lastUncompletable.word) == 0 &&
|
||||||
|
\ map(copy(behavs), 'v:val.command') ==# s:lastUncompletable.commands
|
||||||
|
let behavs = []
|
||||||
|
else
|
||||||
|
unlet! s:lastUncompletable
|
||||||
|
endif
|
||||||
|
return behavs
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:feedPopup()
|
||||||
|
" NOTE: CursorMovedI is not triggered while the popup menu is visible. And
|
||||||
|
" it will be triggered when popup menu is disappeared.
|
||||||
|
if s:lockCount > 0 || pumvisible() || &paste
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
if exists('s:behavsCurrent[s:iBehavs].onPopupClose')
|
||||||
|
if !call(s:behavsCurrent[s:iBehavs].onPopupClose, [])
|
||||||
|
call s:finishPopup(1)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let s:behavsCurrent = s:makeCurrentBehaviorSet()
|
||||||
|
if empty(s:behavsCurrent)
|
||||||
|
call s:finishPopup(1)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
" In case of dividing words by symbols (e.g. "for(int", "ab==cd") while a
|
||||||
|
" popup menu is visible, another popup is not available unless input <C-e>
|
||||||
|
" or try popup once. So first completion is duplicated.
|
||||||
|
call insert(s:behavsCurrent, s:behavsCurrent[s:iBehavs])
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&spell', 0)
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&completeopt', 'menuone' . (g:acp_completeoptPreview ? ',preview' : ''))
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&complete', g:acp_completeOption)
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&ignorecase', g:acp_ignorecaseOption)
|
||||||
|
" NOTE: With CursorMovedI driven, Set 'lazyredraw' to avoid flickering.
|
||||||
|
" With Mapping driven, set 'nolazyredraw' to make a popup menu visible.
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&lazyredraw', !g:acp_mappingDriven)
|
||||||
|
" NOTE: 'textwidth' must be restored after <C-e>.
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP1,
|
||||||
|
\ '&textwidth', 0)
|
||||||
|
call s:setCompletefunc()
|
||||||
|
call feedkeys(s:behavsCurrent[s:iBehavs].command . "\<C-r>=acp#onPopupPost()\<CR>", 'n')
|
||||||
|
return '' " this function is called by <C-r>=
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:finishPopup(fGroup1)
|
||||||
|
inoremap <C-h> <Nop> | iunmap <C-h>
|
||||||
|
inoremap <BS> <Nop> | iunmap <BS>
|
||||||
|
let s:behavsCurrent = []
|
||||||
|
call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP0)
|
||||||
|
if a:fGroup1
|
||||||
|
call l9#tempvariables#end(s:TEMP_VARIABLES_GROUP1)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:setCompletefunc()
|
||||||
|
if exists('s:behavsCurrent[s:iBehavs].completefunc')
|
||||||
|
call l9#tempvariables#set(s:TEMP_VARIABLES_GROUP0,
|
||||||
|
\ '&completefunc', s:behavsCurrent[s:iBehavs].completefunc)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:makeSnipmateItem(key, snip)
|
||||||
|
if type(a:snip) == type([])
|
||||||
|
let descriptions = map(copy(a:snip), 'v:val[0]')
|
||||||
|
let snipFormatted = '[MULTI] ' . join(descriptions, ', ')
|
||||||
|
else
|
||||||
|
let snipFormatted = substitute(a:snip, '\(\n\|\s\)\+', ' ', 'g')
|
||||||
|
endif
|
||||||
|
return {
|
||||||
|
\ 'word': a:key,
|
||||||
|
\ 'menu': strpart(snipFormatted, 0, 80),
|
||||||
|
\ }
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
"
|
||||||
|
function s:getMatchingSnipItems(base)
|
||||||
|
let key = a:base . "\n"
|
||||||
|
if !exists('s:snipItems[key]')
|
||||||
|
let s:snipItems[key] = items(GetSnipsInCurrentScope())
|
||||||
|
call filter(s:snipItems[key], 'strpart(v:val[0], 0, len(a:base)) ==? a:base')
|
||||||
|
call map(s:snipItems[key], 's:makeSnipmateItem(v:val[0], v:val[1])')
|
||||||
|
endif
|
||||||
|
return s:snipItems[key]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
"=============================================================================
|
||||||
|
" INITIALIZATION {{{1
|
||||||
|
|
||||||
|
let s:TEMP_VARIABLES_GROUP0 = "AutoComplPop0"
|
||||||
|
let s:TEMP_VARIABLES_GROUP1 = "AutoComplPop1"
|
||||||
|
let s:lockCount = 0
|
||||||
|
let s:behavsCurrent = []
|
||||||
|
let s:iBehavs = 0
|
||||||
|
let s:snipItems = {}
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
"=============================================================================
|
||||||
|
" vim: set fdm=marker:
|
244
homedir/.vim/colors/apprentice.vim
Normal file
244
homedir/.vim/colors/apprentice.vim
Normal file
|
@ -0,0 +1,244 @@
|
||||||
|
" 'apprentice.vim' -- Vim color scheme.
|
||||||
|
" Maintainer: Romain Lafourcade (romainlafourcade@gmail.com)
|
||||||
|
" Essentially a streamlining and conversion to xterm colors of
|
||||||
|
" 'sorcerer' by Jeet Sukumaran (jeetsukumaran@gmailcom)
|
||||||
|
|
||||||
|
" MADE-UP NAME HEX RGB XTERM ANSI
|
||||||
|
" ========================================================================
|
||||||
|
" almost black #1c1c1c rgb(28, 28, 28) 234 0
|
||||||
|
" darker grey #262626 rgb(38, 38, 38) 235 background color
|
||||||
|
" dark grey #303030 rgb(48, 48, 48) 236 8
|
||||||
|
" grey #444444 rgb(68, 68, 68) 238 8
|
||||||
|
" medium grey #585858 rgb(88, 88, 88) 240 8
|
||||||
|
" light grey #6c6c6c rgb(108, 108, 108) 242 7
|
||||||
|
" lighter grey #bcbcbc rgb(188, 188, 188) 250 foreground color
|
||||||
|
" white #ffffff rgb(255, 255, 255) 231 15
|
||||||
|
" purple #5f5f87 rgb(95, 95, 135) 60 5
|
||||||
|
" light purple #8787af rgb(135, 135, 175) 103 13
|
||||||
|
" green #5f875f rgb(95, 135, 95) 65 2
|
||||||
|
" light green #87af87 rgb(135, 175, 135) 108 10
|
||||||
|
" aqua #5f8787 rgb(95, 135, 135) 66 6
|
||||||
|
" light aqua #5fafaf rgb(95, 175, 175) 73 14
|
||||||
|
" blue #5f87af rgb(95, 135, 175) 67 4
|
||||||
|
" light blue #8fafd7 rgb(143, 175, 215) 110 12
|
||||||
|
" red #af5f5f rgb(175, 95, 95) 131 1
|
||||||
|
" orange #ff8700 rgb(255, 135, 0) 208 9
|
||||||
|
" ocre #87875f rgb(135, 135, 95) 101 3
|
||||||
|
" yellow #ffffaf rgb(255, 255, 175) 229 11
|
||||||
|
|
||||||
|
hi clear
|
||||||
|
|
||||||
|
if exists('syntax_on')
|
||||||
|
syntax reset
|
||||||
|
endif
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
|
||||||
|
let colors_name = 'apprentice'
|
||||||
|
|
||||||
|
if &t_Co >= 256 || has('gui_running')
|
||||||
|
hi Normal ctermbg=235 ctermfg=250 guibg=#262626 guifg=#bcbcbc cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
|
||||||
|
hi Comment ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE
|
||||||
|
hi Constant ctermbg=NONE ctermfg=208 guibg=NONE guifg=#ff8700 cterm=NONE gui=NONE
|
||||||
|
hi Error ctermbg=NONE ctermfg=131 guibg=NONE guifg=#af5f5f cterm=reverse gui=reverse
|
||||||
|
hi Identifier ctermbg=NONE ctermfg=67 guibg=NONE guifg=#5f87af cterm=NONE gui=NONE
|
||||||
|
hi Ignore ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi PreProc ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=NONE gui=NONE
|
||||||
|
hi Special ctermbg=NONE ctermfg=65 guibg=NONE guifg=#5f875f cterm=NONE gui=NONE
|
||||||
|
hi Statement ctermbg=NONE ctermfg=110 guibg=NONE guifg=#8fafd7 cterm=NONE gui=NONE
|
||||||
|
hi String ctermbg=NONE ctermfg=108 guibg=NONE guifg=#87af87 cterm=NONE gui=NONE
|
||||||
|
hi Todo ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=reverse gui=reverse
|
||||||
|
hi Type ctermbg=NONE ctermfg=103 guibg=NONE guifg=#8787af cterm=NONE gui=NONE
|
||||||
|
hi Underlined ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=underline gui=underline
|
||||||
|
|
||||||
|
hi LineNr ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE
|
||||||
|
hi NonText ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi Pmenu ctermbg=238 ctermfg=250 guibg=#444444 guifg=#bcbcbc cterm=NONE gui=NONE
|
||||||
|
hi PmenuSbar ctermbg=240 ctermfg=NONE guibg=#585858 guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi PmenuSel ctermbg=66 ctermfg=235 guibg=#5f8787 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi PmenuThumb ctermbg=66 ctermfg=66 guibg=#5f8787 guifg=#5f8787 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi ErrorMsg ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi ModeMsg ctermbg=108 ctermfg=235 guibg=#87af87 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi MoreMsg ctermbg=NONE ctermfg=66 guibg=NONE guifg=#5f8787 cterm=NONE gui=NONE
|
||||||
|
hi Question ctermbg=NONE ctermfg=108 guibg=NONE guifg=#87af87 cterm=NONE gui=NONE
|
||||||
|
hi WarningMsg ctermbg=NONE ctermfg=131 guibg=NONE guifg=#af5f5f cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi TabLine ctermbg=238 ctermfg=101 guibg=#444444 guifg=#87875f cterm=NONE gui=NONE
|
||||||
|
hi TabLineFill ctermbg=238 ctermfg=238 guibg=#444444 guifg=#444444 cterm=NONE gui=NONE
|
||||||
|
hi TabLineSel ctermbg=101 ctermfg=235 guibg=#87875f guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi Cursor ctermbg=242 ctermfg=NONE guibg=#6c6c6c guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi CursorColumn ctermbg=236 ctermfg=NONE guibg=#303030 guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi CursorLine ctermbg=236 ctermfg=NONE guibg=#303030 guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi CursorLineNr ctermbg=236 ctermfg=73 guibg=#303030 guifg=#5fafaf cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi helpLeadBlank ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi helpNormal ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi StatusLine ctermbg=101 ctermfg=235 guibg=#87875f guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi StatusLineNC ctermbg=238 ctermfg=101 guibg=#444444 guifg=#87875f cterm=NONE gui=italic
|
||||||
|
|
||||||
|
hi Visual ctermbg=110 ctermfg=235 guibg=#8fafd7 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi VisualNOS ctermbg=NONE ctermfg=NONE guibg=NONE guifg=NONE cterm=underline gui=underline
|
||||||
|
|
||||||
|
hi FoldColumn ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE
|
||||||
|
hi Folded ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi VertSplit ctermbg=238 ctermfg=238 guibg=#444444 guifg=#444444 cterm=NONE gui=NONE
|
||||||
|
hi WildMenu ctermbg=110 ctermfg=235 guibg=#8fafd7 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi Function ctermbg=NONE ctermfg=229 guibg=NONE guifg=#ffffaf cterm=NONE gui=NONE
|
||||||
|
hi SpecialKey ctermbg=NONE ctermfg=240 guibg=NONE guifg=#585858 cterm=NONE gui=NONE
|
||||||
|
hi Title ctermbg=NONE ctermfg=231 guibg=NONE guifg=#ffffff cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi DiffAdd ctermbg=108 ctermfg=235 guibg=#87af87 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi DiffChange ctermbg=60 ctermfg=235 guibg=#5f5f87 guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi DiffDelete ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi DiffText ctermbg=103 ctermfg=235 guibg=#8787af guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi IncSearch ctermbg=131 ctermfg=235 guibg=#af5f5f guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
hi Search ctermbg=229 ctermfg=235 guibg=#ffffaf guifg=#262626 cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi Directory ctermbg=NONE ctermfg=73 guibg=NONE guifg=#5fafaf cterm=NONE gui=NONE
|
||||||
|
hi MatchParen ctermbg=234 ctermfg=229 guibg=#1c1c1c guifg=#ffffaf cterm=NONE gui=NONE
|
||||||
|
|
||||||
|
hi SpellBad ctermbg=NONE ctermfg=131 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#af5f5f
|
||||||
|
hi SpellCap ctermbg=NONE ctermfg=73 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#5fafaf
|
||||||
|
hi SpellLocal ctermbg=NONE ctermfg=65 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#5f875f
|
||||||
|
hi SpellRare ctermbg=NONE ctermfg=208 guibg=NONE guifg=NONE cterm=undercurl gui=undercurl guisp=#ff8700
|
||||||
|
|
||||||
|
hi ColorColumn ctermbg=131 ctermfg=NONE guibg=#af5f5f guifg=NONE cterm=NONE gui=NONE
|
||||||
|
hi signColumn ctermbg=234 ctermfg=242 guibg=#1c1c1c guifg=#6c6c6c cterm=NONE gui=NONE
|
||||||
|
elseif &t_Co == 8 || $TERM !~# '^linux' || &t_Co == 16
|
||||||
|
set t_Co=16
|
||||||
|
|
||||||
|
hi Normal ctermbg=NONE ctermfg=15 cterm=NONE
|
||||||
|
|
||||||
|
set background=dark
|
||||||
|
|
||||||
|
hi Comment ctermbg=NONE ctermfg=8 cterm=NONE
|
||||||
|
hi Constant ctermbg=NONE ctermfg=9 cterm=NONE
|
||||||
|
hi Function ctermbg=NONE ctermfg=11 cterm=NONE
|
||||||
|
hi Identifier ctermbg=NONE ctermfg=4 cterm=NONE
|
||||||
|
hi PreProc ctermbg=NONE ctermfg=6 cterm=NONE
|
||||||
|
hi Special ctermbg=NONE ctermfg=2 cterm=NONE
|
||||||
|
hi Statement ctermbg=NONE ctermfg=12 cterm=NONE
|
||||||
|
hi String ctermbg=NONE ctermfg=10 cterm=NONE
|
||||||
|
hi Todo ctermbg=NONE ctermfg=NONE cterm=reverse
|
||||||
|
hi Type ctermbg=NONE ctermfg=13 cterm=NONE
|
||||||
|
|
||||||
|
hi Error ctermbg=NONE ctermfg=1 cterm=reverse
|
||||||
|
hi Ignore ctermbg=NONE ctermfg=NONE cterm=NONE
|
||||||
|
hi Underlined ctermbg=NONE ctermfg=6 cterm=underline
|
||||||
|
|
||||||
|
hi LineNr ctermbg=0 ctermfg=7 cterm=NONE
|
||||||
|
hi NonText ctermbg=NONE ctermfg=8 cterm=NONE
|
||||||
|
|
||||||
|
hi Pmenu ctermbg=8 ctermfg=15 cterm=NONE
|
||||||
|
hi PmenuSbar ctermbg=7 ctermfg=NONE cterm=NONE
|
||||||
|
hi PmenuSel ctermbg=6 ctermfg=0 cterm=NONE
|
||||||
|
hi PmenuThumb ctermbg=6 ctermfg=NONE cterm=NONE
|
||||||
|
|
||||||
|
hi ErrorMsg ctermbg=1 ctermfg=0 cterm=NONE
|
||||||
|
hi ModeMsg ctermbg=2 ctermfg=0 cterm=NONE
|
||||||
|
hi MoreMsg ctermbg=NONE ctermfg=6 cterm=NONE
|
||||||
|
hi Question ctermbg=NONE ctermfg=10 cterm=NONE
|
||||||
|
hi WarningMsg ctermbg=NONE ctermfg=1 cterm=NONE
|
||||||
|
|
||||||
|
hi TabLine ctermbg=8 ctermfg=3 cterm=NONE
|
||||||
|
hi TabLineFill ctermbg=8 ctermfg=0 cterm=NONE
|
||||||
|
hi TabLineSel ctermbg=3 ctermfg=0 cterm=NONE
|
||||||
|
|
||||||
|
hi Cursor ctermbg=NONE ctermfg=NONE cterm=NONE
|
||||||
|
hi CursorColumn ctermbg=8 ctermfg=NONE cterm=NONE
|
||||||
|
hi CursorLine ctermbg=NONE ctermfg=NONE cterm=underline
|
||||||
|
hi CursorLineNr ctermbg=0 ctermfg=14 cterm=NONE
|
||||||
|
|
||||||
|
hi helpLeadBlank ctermbg=NONE ctermfg=NONE cterm=NONE
|
||||||
|
hi helpNormal ctermbg=NONE ctermfg=NONE cterm=NONE
|
||||||
|
|
||||||
|
hi StatusLine ctermbg=3 ctermfg=0 cterm=NONE
|
||||||
|
hi StatusLineNC ctermbg=8 ctermfg=0 cterm=NONE
|
||||||
|
|
||||||
|
hi Visual ctermbg=12 ctermfg=0 cterm=NONE
|
||||||
|
hi VisualNOS ctermbg=NONE ctermfg=NONE cterm=underline
|
||||||
|
|
||||||
|
hi FoldColumn ctermbg=0 ctermfg=8 cterm=NONE
|
||||||
|
hi Folded ctermbg=0 ctermfg=8 cterm=NONE
|
||||||
|
|
||||||
|
hi VertSplit ctermbg=8 ctermfg=8 cterm=NONE
|
||||||
|
hi WildMenu ctermbg=12 ctermfg=0 cterm=NONE
|
||||||
|
|
||||||
|
hi SpecialKey ctermbg=NONE ctermfg=8 cterm=NONE
|
||||||
|
hi Title ctermbg=NONE ctermfg=15 cterm=NONE
|
||||||
|
|
||||||
|
hi DiffAdd ctermbg=2 ctermfg=0 cterm=NONE
|
||||||
|
hi DiffChange ctermbg=6 ctermfg=0 cterm=NONE
|
||||||
|
hi DiffDelete ctermbg=1 ctermfg=0 cterm=NONE
|
||||||
|
hi DiffText ctermbg=11 ctermfg=0 cterm=NONE
|
||||||
|
|
||||||
|
hi IncSearch ctermbg=1 ctermfg=0 cterm=NONE
|
||||||
|
hi Search ctermbg=11 ctermfg=0 cterm=NONE
|
||||||
|
|
||||||
|
hi Directory ctermbg=NONE ctermfg=14 cterm=NONE
|
||||||
|
hi MatchParen ctermbg=0 ctermfg=11 cterm=NONE
|
||||||
|
|
||||||
|
hi SpellBad ctermbg=NONE ctermfg=1 cterm=undercurl
|
||||||
|
hi SpellCap ctermbg=NONE ctermfg=3 cterm=undercurl
|
||||||
|
hi SpellLocal ctermbg=NONE ctermfg=2 cterm=undercurl
|
||||||
|
hi SpellRare ctermbg=NONE ctermfg=5 cterm=undercurl
|
||||||
|
|
||||||
|
hi ColorColumn ctermbg=1 ctermfg=NONE cterm=NONE
|
||||||
|
hi SignColumn ctermbg=0 ctermfg=8 cterm=NONE
|
||||||
|
endif
|
||||||
|
|
||||||
|
hi link Boolean Constant
|
||||||
|
hi link Character Constant
|
||||||
|
hi link Conceal Normal
|
||||||
|
hi link Conditional Statement
|
||||||
|
hi link Debug Special
|
||||||
|
hi link Define PreProc
|
||||||
|
hi link Delimiter Special
|
||||||
|
hi link Exception Statement
|
||||||
|
hi link Float Number
|
||||||
|
hi link HelpCommand Statement
|
||||||
|
hi link HelpExample Statement
|
||||||
|
hi link Include PreProc
|
||||||
|
hi link Keyword Statement
|
||||||
|
hi link Label Statement
|
||||||
|
hi link Macro PreProc
|
||||||
|
hi link Number Constant
|
||||||
|
hi link Operator Statement
|
||||||
|
hi link PreCondit PreProc
|
||||||
|
hi link Repeat Statement
|
||||||
|
hi link SpecialChar Special
|
||||||
|
hi link SpecialComment Special
|
||||||
|
hi link StorageClass Type
|
||||||
|
hi link Structure Type
|
||||||
|
hi link Tag Special
|
||||||
|
hi link Typedef Type
|
||||||
|
|
||||||
|
hi link htmlEndTag htmlTagName
|
||||||
|
hi link htmlLink Function
|
||||||
|
hi link htmlSpecialTagName htmlTagName
|
||||||
|
hi link htmlTag htmlTagName
|
||||||
|
hi link xmlTag Statement
|
||||||
|
hi link xmlTagName Statement
|
||||||
|
hi link xmlEndTag Statement
|
||||||
|
|
||||||
|
hi link markdownItalic Preproc
|
||||||
|
|
||||||
|
hi link diffBDiffer WarningMsg
|
||||||
|
hi link diffCommon WarningMsg
|
||||||
|
hi link diffDiffer WarningMsg
|
||||||
|
hi link diffIdentical WarningMsg
|
||||||
|
hi link diffIsA WarningMsg
|
||||||
|
hi link diffNoEOL WarningMsg
|
||||||
|
hi link diffOnly WarningMsg
|
||||||
|
hi link diffRemoved WarningMsg
|
||||||
|
hi link diffAdded String
|
519
homedir/.vim/doc/acp.txt
Normal file
519
homedir/.vim/doc/acp.txt
Normal file
|
@ -0,0 +1,519 @@
|
||||||
|
*acp.txt* Automatically opens popup menu for completions.
|
||||||
|
|
||||||
|
Copyright (c) 2007-2009 Takeshi NISHIDA
|
||||||
|
|
||||||
|
AutoComplPop *autocomplpop* *acp*
|
||||||
|
|
||||||
|
INTRODUCTION |acp-introduction|
|
||||||
|
INSTALLATION |acp-installation|
|
||||||
|
USAGE |acp-usage|
|
||||||
|
COMMANDS |acp-commands|
|
||||||
|
OPTIONS |acp-options|
|
||||||
|
SPECIAL THANKS |acp-thanks|
|
||||||
|
CHANGELOG |acp-changelog|
|
||||||
|
ABOUT |acp-about|
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INTRODUCTION *acp-introduction*
|
||||||
|
|
||||||
|
With this plugin, your vim comes to automatically opens popup menu for
|
||||||
|
completions when you enter characters or move the cursor in Insert mode. It
|
||||||
|
won't prevent you continuing entering characters.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
INSTALLATION *acp-installation*
|
||||||
|
|
||||||
|
Put all files into your runtime directory. If you have the zip file, extract
|
||||||
|
it to your runtime directory.
|
||||||
|
|
||||||
|
You should place the files as follows:
|
||||||
|
>
|
||||||
|
<your runtime directory>/plugin/acp.vim
|
||||||
|
<your runtime directory>/doc/acp.txt
|
||||||
|
...
|
||||||
|
<
|
||||||
|
If you are disgusted to make your runtime directory confused with a lot of
|
||||||
|
plugins, put each of the plugins into a directory individually and just add
|
||||||
|
the directory path to 'runtimepath'. It's easy to uninstall plugins.
|
||||||
|
|
||||||
|
Then update your help tags files to enable help for this plugin. See
|
||||||
|
|add-local-help| for details.
|
||||||
|
|
||||||
|
Requirements: ~
|
||||||
|
|
||||||
|
- L9 library (vimscript #3252)
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
USAGE *acp-usage*
|
||||||
|
|
||||||
|
Once this plugin is installed, auto-popup is enabled at startup by default.
|
||||||
|
|
||||||
|
Which completion method is used depends on the text before the cursor. The
|
||||||
|
default behavior is as follows:
|
||||||
|
|
||||||
|
kind filetype text before the cursor ~
|
||||||
|
Keyword * two keyword characters
|
||||||
|
Filename * a filename character + a path separator
|
||||||
|
+ 0 or more filename character
|
||||||
|
Omni ruby ".", "::" or non-word character + ":"
|
||||||
|
(|+ruby| required.)
|
||||||
|
Omni python "." (|+python| required.)
|
||||||
|
Omni xml "<", "</" or ("<" + non-">" characters + " ")
|
||||||
|
Omni html/xhtml "<", "</" or ("<" + non-">" characters + " ")
|
||||||
|
Omni css (":", ";", "{", "^", "@", or "!")
|
||||||
|
+ 0 or 1 space
|
||||||
|
|
||||||
|
Also, you can make user-defined completion and snipMate's trigger completion
|
||||||
|
(|acp-snipMate|) auto-popup if the options are set.
|
||||||
|
|
||||||
|
These behavior are customizable.
|
||||||
|
|
||||||
|
*acp-snipMate*
|
||||||
|
snipMate's Trigger Completion ~
|
||||||
|
|
||||||
|
snipMate's trigger completion enables you to complete a snippet trigger
|
||||||
|
provided by snipMate plugin
|
||||||
|
(http://www.vim.org/scripts/script.php?script_id=2540) and expand it.
|
||||||
|
|
||||||
|
|
||||||
|
To enable auto-popup for this completion, add following function to
|
||||||
|
plugin/snipMate.vim:
|
||||||
|
>
|
||||||
|
fun! GetSnipsInCurrentScope()
|
||||||
|
let snips = {}
|
||||||
|
for scope in [bufnr('%')] + split(&ft, '\.') + ['_']
|
||||||
|
call extend(snips, get(s:snippets, scope, {}), 'keep')
|
||||||
|
call extend(snips, get(s:multi_snips, scope, {}), 'keep')
|
||||||
|
endfor
|
||||||
|
return snips
|
||||||
|
endf
|
||||||
|
<
|
||||||
|
And set |g:acp_behaviorSnipmateLength| option to 1.
|
||||||
|
|
||||||
|
There is the restriction on this auto-popup, that the word before cursor must
|
||||||
|
consist only of uppercase characters.
|
||||||
|
|
||||||
|
*acp-perl-omni*
|
||||||
|
Perl Omni-Completion ~
|
||||||
|
|
||||||
|
AutoComplPop supports perl-completion.vim
|
||||||
|
(http://www.vim.org/scripts/script.php?script_id=2852).
|
||||||
|
|
||||||
|
To enable auto-popup for this completion, set |g:acp_behaviorPerlOmniLength|
|
||||||
|
option to 0 or more.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
COMMANDS *acp-commands*
|
||||||
|
|
||||||
|
*:AcpEnable*
|
||||||
|
:AcpEnable
|
||||||
|
enables auto-popup.
|
||||||
|
|
||||||
|
*:AcpDisable*
|
||||||
|
:AcpDisable
|
||||||
|
disables auto-popup.
|
||||||
|
|
||||||
|
*:AcpLock*
|
||||||
|
:AcpLock
|
||||||
|
suspends auto-popup temporarily.
|
||||||
|
|
||||||
|
For the purpose of avoiding interruption to another script, it is
|
||||||
|
recommended to insert this command and |:AcpUnlock| than |:AcpDisable|
|
||||||
|
and |:AcpEnable| .
|
||||||
|
|
||||||
|
*:AcpUnlock*
|
||||||
|
:AcpUnlock
|
||||||
|
resumes auto-popup suspended by |:AcpLock| .
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
OPTIONS *acp-options*
|
||||||
|
|
||||||
|
*g:acp_enableAtStartup* >
|
||||||
|
let g:acp_enableAtStartup = 1
|
||||||
|
<
|
||||||
|
If non-zero, auto-popup is enabled at startup.
|
||||||
|
|
||||||
|
*g:acp_mappingDriven* >
|
||||||
|
let g:acp_mappingDriven = 0
|
||||||
|
<
|
||||||
|
If non-zero, auto-popup is triggered by key mappings instead of
|
||||||
|
|CursorMovedI| event. This is useful to avoid auto-popup by moving
|
||||||
|
cursor in Insert mode.
|
||||||
|
|
||||||
|
*g:acp_ignorecaseOption* >
|
||||||
|
let g:acp_ignorecaseOption = 1
|
||||||
|
<
|
||||||
|
Value set to 'ignorecase' temporarily when auto-popup.
|
||||||
|
|
||||||
|
*g:acp_completeOption* >
|
||||||
|
let g:acp_completeOption = '.,w,b,k'
|
||||||
|
<
|
||||||
|
Value set to 'complete' temporarily when auto-popup.
|
||||||
|
|
||||||
|
*g:acp_completeoptPreview* >
|
||||||
|
let g:acp_completeoptPreview = 0
|
||||||
|
<
|
||||||
|
If non-zero, "preview" is added to 'completeopt' when auto-popup.
|
||||||
|
|
||||||
|
*g:acp_behaviorUserDefinedFunction* >
|
||||||
|
let g:acp_behaviorUserDefinedFunction = ''
|
||||||
|
<
|
||||||
|
|g:acp_behavior-completefunc| for user-defined completion. If empty,
|
||||||
|
this completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorUserDefinedMeets* >
|
||||||
|
let g:acp_behaviorUserDefinedMeets = ''
|
||||||
|
<
|
||||||
|
|g:acp_behavior-meets| for user-defined completion. If empty, this
|
||||||
|
completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorSnipmateLength* >
|
||||||
|
let g:acp_behaviorSnipmateLength = -1
|
||||||
|
<
|
||||||
|
Pattern before the cursor, which are needed to attempt
|
||||||
|
snipMate-trigger completion.
|
||||||
|
|
||||||
|
*g:acp_behaviorKeywordCommand* >
|
||||||
|
let g:acp_behaviorKeywordCommand = "\<C-n>"
|
||||||
|
<
|
||||||
|
Command for keyword completion. This option is usually set "\<C-n>" or
|
||||||
|
"\<C-p>".
|
||||||
|
|
||||||
|
*g:acp_behaviorKeywordLength* >
|
||||||
|
let g:acp_behaviorKeywordLength = 2
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt keyword completion. If negative value, this completion will be
|
||||||
|
never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorKeywordIgnores* >
|
||||||
|
let g:acp_behaviorKeywordIgnores = []
|
||||||
|
<
|
||||||
|
List of string. If a word before the cursor matches to the front part
|
||||||
|
of one of them, keyword completion won't be attempted.
|
||||||
|
|
||||||
|
E.g., when there are too many keywords beginning with "get" for the
|
||||||
|
completion and auto-popup by entering "g", "ge", or "get" causes
|
||||||
|
response degradation, set ["get"] to this option and avoid it.
|
||||||
|
|
||||||
|
*g:acp_behaviorFileLength* >
|
||||||
|
let g:acp_behaviorFileLength = 0
|
||||||
|
<
|
||||||
|
Length of filename characters before the cursor, which are needed to
|
||||||
|
attempt filename completion. If negative value, this completion will
|
||||||
|
be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorRubyOmniMethodLength* >
|
||||||
|
let g:acp_behaviorRubyOmniMethodLength = 0
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt ruby omni-completion for methods. If negative value, this
|
||||||
|
completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorRubyOmniSymbolLength* >
|
||||||
|
let g:acp_behaviorRubyOmniSymbolLength = 1
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt ruby omni-completion for symbols. If negative value, this
|
||||||
|
completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorPythonOmniLength* >
|
||||||
|
let g:acp_behaviorPythonOmniLength = 0
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt python omni-completion. If negative value, this completion
|
||||||
|
will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorPerlOmniLength* >
|
||||||
|
let g:acp_behaviorPerlOmniLength = -1
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt perl omni-completion. If negative value, this completion will
|
||||||
|
be never attempted.
|
||||||
|
|
||||||
|
See also: |acp-perl-omni|
|
||||||
|
|
||||||
|
*g:acp_behaviorXmlOmniLength* >
|
||||||
|
let g:acp_behaviorXmlOmniLength = 0
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt XML omni-completion. If negative value, this completion will
|
||||||
|
be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorHtmlOmniLength* >
|
||||||
|
let g:acp_behaviorHtmlOmniLength = 0
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt HTML omni-completion. If negative value, this completion will
|
||||||
|
be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorCssOmniPropertyLength* >
|
||||||
|
let g:acp_behaviorCssOmniPropertyLength = 1
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt CSS omni-completion for properties. If negative value, this
|
||||||
|
completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behaviorCssOmniValueLength* >
|
||||||
|
let g:acp_behaviorCssOmniValueLength = 0
|
||||||
|
<
|
||||||
|
Length of keyword characters before the cursor, which are needed to
|
||||||
|
attempt CSS omni-completion for values. If negative value, this
|
||||||
|
completion will be never attempted.
|
||||||
|
|
||||||
|
*g:acp_behavior* >
|
||||||
|
let g:acp_behavior = {}
|
||||||
|
<
|
||||||
|
This option is for advanced users. This setting overrides other
|
||||||
|
behavior options. This is a |Dictionary|. Each key corresponds to a
|
||||||
|
filetype. '*' is default. Each value is a list. These are attempted in
|
||||||
|
sequence until completion item is found. Each element is a
|
||||||
|
|Dictionary| which has following items:
|
||||||
|
|
||||||
|
"command": *g:acp_behavior-command*
|
||||||
|
Command to be fed to open popup menu for completions.
|
||||||
|
|
||||||
|
"completefunc": *g:acp_behavior-completefunc*
|
||||||
|
'completefunc' will be set to this user-provided function during the
|
||||||
|
completion. Only makes sense when "command" is "<C-x><C-u>".
|
||||||
|
|
||||||
|
"meets": *g:acp_behavior-meets*
|
||||||
|
Name of the function which dicides whether or not to attempt this
|
||||||
|
completion. It will be attempted if this function returns non-zero.
|
||||||
|
This function takes a text before the cursor.
|
||||||
|
|
||||||
|
"onPopupClose": *g:acp_behavior-onPopupClose*
|
||||||
|
Name of the function which is called when popup menu for this
|
||||||
|
completion is closed. Following completions will be suppressed if
|
||||||
|
this function returns zero.
|
||||||
|
|
||||||
|
"repeat": *g:acp_behavior-repeat*
|
||||||
|
If non-zero, the last completion is automatically repeated.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
SPECIAL THANKS *acp-thanks*
|
||||||
|
|
||||||
|
- Daniel Schierbeck
|
||||||
|
- Ingo Karkat
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
CHANGELOG *acp-changelog*
|
||||||
|
|
||||||
|
3.0: [TODO]
|
||||||
|
- From this version, L9 library (vimscript #3252) is required.
|
||||||
|
|
||||||
|
2.14.1
|
||||||
|
- Changed the way of auto-popup for avoiding an issue about filename
|
||||||
|
completion.
|
||||||
|
- Fixed a bug that popup menu was opened twice when auto-popup was done.
|
||||||
|
|
||||||
|
2.14
|
||||||
|
- Added the support for perl-completion.vim.
|
||||||
|
|
||||||
|
2.13
|
||||||
|
- Changed to sort snipMate's triggers.
|
||||||
|
- Fixed a bug that a wasted character was inserted after snipMate's trigger
|
||||||
|
completion.
|
||||||
|
|
||||||
|
2.12.1
|
||||||
|
- Changed to avoid a strange behavior with Microsoft IME.
|
||||||
|
|
||||||
|
2.12
|
||||||
|
- Added g:acp_behaviorKeywordIgnores option.
|
||||||
|
- Added g:acp_behaviorUserDefinedMeets option and removed
|
||||||
|
g:acp_behaviorUserDefinedPattern.
|
||||||
|
- Changed to do auto-popup only when a buffer is modified.
|
||||||
|
- Changed the structure of g:acp_behavior option.
|
||||||
|
- Changed to reflect a change of behavior options (named g:acp_behavior*)
|
||||||
|
any time it is done.
|
||||||
|
- Fixed a bug that completions after omni completions or snipMate's trigger
|
||||||
|
completion were never attempted when no candidate for the former
|
||||||
|
completions was found.
|
||||||
|
|
||||||
|
2.11.1
|
||||||
|
- Fixed a bug that a snipMate's trigger could not be expanded when it was
|
||||||
|
completed.
|
||||||
|
|
||||||
|
2.11
|
||||||
|
- Implemented experimental feature which is snipMate's trigger completion.
|
||||||
|
|
||||||
|
2.10
|
||||||
|
- Improved the response by changing not to attempt any completion when
|
||||||
|
keyword characters are entered after a word which has been found that it
|
||||||
|
has no completion candidate at the last attempt of completions.
|
||||||
|
- Improved the response by changing to close popup menu when <BS> was
|
||||||
|
pressed and the text before the cursor would not match with the pattern of
|
||||||
|
current behavior.
|
||||||
|
|
||||||
|
2.9
|
||||||
|
- Changed default behavior to support XML omni completion.
|
||||||
|
- Changed default value of g:acp_behaviorKeywordCommand option.
|
||||||
|
The option with "\<C-p>" cause a problem which inserts a match without
|
||||||
|
<CR> when 'dictionary' has been set and keyword completion is done.
|
||||||
|
- Changed to show error message when incompatible with a installed vim.
|
||||||
|
|
||||||
|
2.8.1
|
||||||
|
- Fixed a bug which inserted a selected match to the next line when
|
||||||
|
auto-wrapping (enabled with 'formatoptions') was performed.
|
||||||
|
|
||||||
|
2.8
|
||||||
|
- Added g:acp_behaviorUserDefinedFunction option and
|
||||||
|
g:acp_behaviorUserDefinedPattern option for users who want to make custom
|
||||||
|
completion auto-popup.
|
||||||
|
- Fixed a bug that setting 'spell' on a new buffer made typing go crazy.
|
||||||
|
|
||||||
|
2.7
|
||||||
|
- Changed naming conventions for filenames, functions, commands, and options
|
||||||
|
and thus renamed them.
|
||||||
|
- Added g:acp_behaviorKeywordCommand option. If you prefer the previous
|
||||||
|
behavior for keyword completion, set this option "\<C-n>".
|
||||||
|
- Changed default value of g:acp_ignorecaseOption option.
|
||||||
|
|
||||||
|
The following were done by Ingo Karkat:
|
||||||
|
|
||||||
|
- ENH: Added support for setting a user-provided 'completefunc' during the
|
||||||
|
completion, configurable via g:acp_behavior.
|
||||||
|
- BUG: When the configured completion is <C-p> or <C-x><C-p>, the command to
|
||||||
|
restore the original text (in on_popup_post()) must be reverted, too.
|
||||||
|
- BUG: When using a custom completion function (<C-x><C-u>) that also uses
|
||||||
|
an s:...() function name, the s:GetSidPrefix() function dynamically
|
||||||
|
determines the wrong SID. Now calling s:DetermineSidPrefix() once during
|
||||||
|
sourcing and caching the value in s:SID.
|
||||||
|
- BUG: Should not use custom defined <C-X><C-...> completion mappings. Now
|
||||||
|
consistently using unmapped completion commands everywhere. (Beforehand,
|
||||||
|
s:PopupFeeder.feed() used mappings via feedkeys(..., 'm'), but
|
||||||
|
s:PopupFeeder.on_popup_post() did not due to its invocation via
|
||||||
|
:map-expr.)
|
||||||
|
|
||||||
|
2.6:
|
||||||
|
- Improved the behavior of omni completion for HTML/XHTML.
|
||||||
|
|
||||||
|
2.5:
|
||||||
|
- Added some options to customize behavior easily:
|
||||||
|
g:AutoComplPop_BehaviorKeywordLength
|
||||||
|
g:AutoComplPop_BehaviorFileLength
|
||||||
|
g:AutoComplPop_BehaviorRubyOmniMethodLength
|
||||||
|
g:AutoComplPop_BehaviorRubyOmniSymbolLength
|
||||||
|
g:AutoComplPop_BehaviorPythonOmniLength
|
||||||
|
g:AutoComplPop_BehaviorHtmlOmniLength
|
||||||
|
g:AutoComplPop_BehaviorCssOmniPropertyLength
|
||||||
|
g:AutoComplPop_BehaviorCssOmniValueLength
|
||||||
|
|
||||||
|
2.4:
|
||||||
|
- Added g:AutoComplPop_MappingDriven option.
|
||||||
|
|
||||||
|
2.3.1:
|
||||||
|
- Changed to set 'lazyredraw' while a popup menu is visible to avoid
|
||||||
|
flickering.
|
||||||
|
- Changed a behavior for CSS.
|
||||||
|
- Added support for GetLatestVimScripts.
|
||||||
|
|
||||||
|
2.3:
|
||||||
|
- Added a behavior for Python to support omni completion.
|
||||||
|
- Added a behavior for CSS to support omni completion.
|
||||||
|
|
||||||
|
2.2:
|
||||||
|
- Changed not to work when 'paste' option is set.
|
||||||
|
- Fixed AutoComplPopEnable command and AutoComplPopDisable command to
|
||||||
|
map/unmap "i" and "R".
|
||||||
|
|
||||||
|
2.1:
|
||||||
|
- Fixed the problem caused by "." command in Normal mode.
|
||||||
|
- Changed to map "i" and "R" to feed completion command after starting
|
||||||
|
Insert mode.
|
||||||
|
- Avoided the problem caused by Windows IME.
|
||||||
|
|
||||||
|
2.0:
|
||||||
|
- Changed to use CursorMovedI event to feed a completion command instead of
|
||||||
|
key mapping. Now the auto-popup is triggered by moving the cursor.
|
||||||
|
- Changed to feed completion command after starting Insert mode.
|
||||||
|
- Removed g:AutoComplPop_MapList option.
|
||||||
|
|
||||||
|
1.7:
|
||||||
|
- Added behaviors for HTML/XHTML. Now supports the omni completion for
|
||||||
|
HTML/XHTML.
|
||||||
|
- Changed not to show expressions for CTRL-R =.
|
||||||
|
- Changed not to set 'nolazyredraw' while a popup menu is visible.
|
||||||
|
|
||||||
|
1.6.1:
|
||||||
|
- Changed not to trigger the filename completion by a text which has
|
||||||
|
multi-byte characters.
|
||||||
|
|
||||||
|
1.6:
|
||||||
|
- Redesigned g:AutoComplPop_Behavior option.
|
||||||
|
- Changed default value of g:AutoComplPop_CompleteOption option.
|
||||||
|
- Changed default value of g:AutoComplPop_MapList option.
|
||||||
|
|
||||||
|
1.5:
|
||||||
|
- Implemented continuous-completion for the filename completion. And added
|
||||||
|
new option to g:AutoComplPop_Behavior.
|
||||||
|
|
||||||
|
1.4:
|
||||||
|
- Fixed the bug that the auto-popup was not suspended in fuzzyfinder.
|
||||||
|
- Fixed the bug that an error has occurred with Ruby-omni-completion unless
|
||||||
|
Ruby interface.
|
||||||
|
|
||||||
|
1.3:
|
||||||
|
- Supported Ruby-omni-completion by default.
|
||||||
|
- Supported filename completion by default.
|
||||||
|
- Added g:AutoComplPop_Behavior option.
|
||||||
|
- Added g:AutoComplPop_CompleteoptPreview option.
|
||||||
|
- Removed g:AutoComplPop_MinLength option.
|
||||||
|
- Removed g:AutoComplPop_MaxLength option.
|
||||||
|
- Removed g:AutoComplPop_PopupCmd option.
|
||||||
|
|
||||||
|
1.2:
|
||||||
|
- Fixed bugs related to 'completeopt'.
|
||||||
|
|
||||||
|
1.1:
|
||||||
|
- Added g:AutoComplPop_IgnoreCaseOption option.
|
||||||
|
- Added g:AutoComplPop_NotEnableAtStartup option.
|
||||||
|
- Removed g:AutoComplPop_LoadAndEnable option.
|
||||||
|
1.0:
|
||||||
|
- g:AutoComplPop_LoadAndEnable option for a startup activation is added.
|
||||||
|
- AutoComplPopLock command and AutoComplPopUnlock command are added to
|
||||||
|
suspend and resume.
|
||||||
|
- 'completeopt' and 'complete' options are changed temporarily while
|
||||||
|
completing by this script.
|
||||||
|
|
||||||
|
0.4:
|
||||||
|
- The first match are selected when the popup menu is Opened. You can insert
|
||||||
|
the first match with CTRL-Y.
|
||||||
|
|
||||||
|
0.3:
|
||||||
|
- Fixed the problem that the original text is not restored if 'longest' is
|
||||||
|
not set in 'completeopt'. Now the plugin works whether or not 'longest' is
|
||||||
|
set in 'completeopt', and also 'menuone'.
|
||||||
|
|
||||||
|
0.2:
|
||||||
|
- When completion matches are not found, insert CTRL-E to stop completion.
|
||||||
|
- Clear the echo area.
|
||||||
|
- Fixed the problem in case of dividing words by symbols, popup menu is
|
||||||
|
not opened.
|
||||||
|
|
||||||
|
0.1:
|
||||||
|
- First release.
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
ABOUT *acp-about* *acp-contact* *acp-author*
|
||||||
|
|
||||||
|
Author: Takeshi NISHIDA <ns9tks@DELETE-ME.gmail.com>
|
||||||
|
Licence: MIT Licence
|
||||||
|
URL: http://www.vim.org/scripts/script.php?script_id=1879
|
||||||
|
http://bitbucket.org/ns9tks/vim-autocomplpop/
|
||||||
|
|
||||||
|
Bugs/Issues/Suggestions/Improvements ~
|
||||||
|
|
||||||
|
Please submit to http://bitbucket.org/ns9tks/vim-autocomplpop/issues/ .
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
|
1
homedir/.vim/init.vim
Symbolic link
1
homedir/.vim/init.vim
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
/home/fbt/.vimrc
|
542
homedir/.vim/plugin/AutoClose.vim
Normal file
542
homedir/.vim/plugin/AutoClose.vim
Normal file
|
@ -0,0 +1,542 @@
|
||||||
|
scriptencoding utf-8
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" AutoClose.vim - Automatically close pair of characters: ( with ), [ with ], { with }, etc.
|
||||||
|
" Version: 2.0
|
||||||
|
" Author: Thiago Alves <talk@thiagoalves.com.br>
|
||||||
|
" Maintainer: Thiago Alves <talk@thiagoalves.com.br>
|
||||||
|
" URL: http://thiagoalves.com.br
|
||||||
|
" Licence: This script is released under the Vim License.
|
||||||
|
" Last modified: 02/02/2011
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
|
||||||
|
" check if script is already loaded
|
||||||
|
if !exists("g:debug_AutoClose") && exists("g:loaded_AutoClose")
|
||||||
|
finish "stop loading the script"
|
||||||
|
endif
|
||||||
|
let g:loaded_AutoClose = 1
|
||||||
|
|
||||||
|
let s:global_cpo = &cpo " store compatible-mode in local variable
|
||||||
|
set cpo&vim " go into nocompatible-mode
|
||||||
|
|
||||||
|
if !exists('g:AutoClosePreserveDotReg')
|
||||||
|
let g:AutoClosePreserveDotReg = 1
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:AutoClosePreserveDotReg
|
||||||
|
" Because dot register preservation code remaps escape we have to remap
|
||||||
|
" some terminal specific escape sequences first
|
||||||
|
if &term =~ 'xterm' || &term =~ 'rxvt' || &term =~ 'screen' || &term =~ 'linux' || &term =~ 'gnome'
|
||||||
|
imap <silent> <Esc>OA <Up>
|
||||||
|
imap <silent> <Esc>OB <Down>
|
||||||
|
imap <silent> <Esc>OC <Right>
|
||||||
|
imap <silent> <Esc>OD <Left>
|
||||||
|
imap <silent> <Esc>OH <Home>
|
||||||
|
imap <silent> <Esc>OF <End>
|
||||||
|
imap <silent> <Esc>[5~ <PageUp>
|
||||||
|
imap <silent> <Esc>[6~ <PageDown>
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" Functions
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
function! s:GetCharAhead(len)
|
||||||
|
if col('$') == col('.')
|
||||||
|
return "\0"
|
||||||
|
endif
|
||||||
|
return strpart(getline('.'), col('.')-2 + a:len, 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetCharBehind(len)
|
||||||
|
if col('.') == 1
|
||||||
|
return "\0"
|
||||||
|
endif
|
||||||
|
return strpart(getline('.'), col('.') - (1 + a:len), 1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetNextChar()
|
||||||
|
return s:GetCharAhead(1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetPrevChar()
|
||||||
|
return s:GetCharBehind(1)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" used to implement automatic deletion of closing character when opening
|
||||||
|
" counterpart is deleted and by space expansion
|
||||||
|
function! s:IsEmptyPair()
|
||||||
|
let l:prev = s:GetPrevChar()
|
||||||
|
let l:next = s:GetNextChar()
|
||||||
|
return (l:next != "\0") && (get(b:AutoClosePairs, l:prev, "\0") == l:next)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetCurrentSyntaxRegion()
|
||||||
|
return synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:GetCurrentSyntaxRegionIf(char)
|
||||||
|
let l:origin_line = getline('.')
|
||||||
|
let l:changed_line = strpart(l:origin_line, 0, col('.')-1) . a:char . strpart(l:origin_line, col('.')-1)
|
||||||
|
call setline('.', l:changed_line)
|
||||||
|
let l:region = synIDattr(synIDtrans(synID(line('.'), col('.'), 1)), 'name')
|
||||||
|
call setline('.', l:origin_line)
|
||||||
|
return l:region
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsForbidden(char)
|
||||||
|
let l:result = index(b:AutoCloseProtectedRegions, s:GetCurrentSyntaxRegion()) >= 0
|
||||||
|
if l:result
|
||||||
|
return l:result
|
||||||
|
endif
|
||||||
|
let l:region = s:GetCurrentSyntaxRegionIf(a:char)
|
||||||
|
let l:result = index(b:AutoCloseProtectedRegions, l:region) >= 0
|
||||||
|
return l:result || l:region == 'Comment'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:AllowQuote(char, isBS)
|
||||||
|
let l:result = 1
|
||||||
|
if b:AutoCloseSmartQuote
|
||||||
|
let l:initPos = 1 + (a:isBS ? 1 : 0)
|
||||||
|
let l:charBehind = s:GetCharBehind(l:initPos)
|
||||||
|
let l:prev = l:charBehind
|
||||||
|
let l:backSlashCount = 0
|
||||||
|
while l:charBehind == '\'
|
||||||
|
let l:backSlashCount = l:backSlashCount + 1
|
||||||
|
let l:charBehind = s:GetCharBehind(l:initPos + l:backSlashCount)
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
if l:backSlashCount % 2
|
||||||
|
let l:result = 0
|
||||||
|
else
|
||||||
|
if a:char == "'" && l:prev =~ '[a-zA-Z0-9]'
|
||||||
|
let l:result = 0
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return l:result
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CountQuotes(char)
|
||||||
|
let l:currPos = col('.')-1
|
||||||
|
let l:line = strpart(getline('.'), 0, l:currPos)
|
||||||
|
let l:result = 0
|
||||||
|
|
||||||
|
if l:currPos >= 0
|
||||||
|
for [q,closer] in items(b:AutoClosePairs)
|
||||||
|
" only consider twin pairs
|
||||||
|
if q != closer | continue | endif
|
||||||
|
|
||||||
|
if b:AutoCloseSmartQuote != 0
|
||||||
|
let l:regex = q . '[ˆ\\' . q . ']*(\\.[ˆ\\' . q . ']*)*' . q
|
||||||
|
else
|
||||||
|
let l:regex = q . '[ˆ' . q . ']*' . q
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:closedQuoteIdx = match(l:line, l:regex)
|
||||||
|
while l:closedQuoteIdx >= 0
|
||||||
|
let l:matchedStr = matchstr(l:line, l:regex, l:closedQuoteIdx)
|
||||||
|
let l:line = strpart(l:line, 0, l:closedQuoteIdx) . strpart(l:line, l:closedQuoteIdx + strlen(l:matchedStr))
|
||||||
|
let l:closedQuoteIdx = match(l:line, l:regex)
|
||||||
|
endwhile
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for c in split(l:line, '\zs')
|
||||||
|
if c == a:char
|
||||||
|
let l:result = l:result + 1
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
return l:result
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" The auto-close buffer is used in a fix of the redo functionality.
|
||||||
|
" As we insert characters after cursor, we remember them and at the moment
|
||||||
|
" that vim would normally collect the last entered string into dot register
|
||||||
|
" (:help ".) - i.e. when esc or a motion key is typed in insert mode - we
|
||||||
|
" erase the inserted symbols and pretend that we have just now typed them.
|
||||||
|
" This way vim picks them up into dot register as well and user can repeat the
|
||||||
|
" typed bit with . command.
|
||||||
|
function! s:PushBuffer(char)
|
||||||
|
if !exists("b:AutoCloseBuffer")
|
||||||
|
let b:AutoCloseBuffer = []
|
||||||
|
endif
|
||||||
|
call insert(b:AutoCloseBuffer, a:char)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:PopBuffer()
|
||||||
|
if exists("b:AutoCloseBuffer") && len(b:AutoCloseBuffer) > 0
|
||||||
|
call remove(b:AutoCloseBuffer, 0)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:EmptyBuffer()
|
||||||
|
if exists("b:AutoCloseBuffer")
|
||||||
|
let b:AutoCloseBuffer = []
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:FlushBuffer()
|
||||||
|
let l:result = ''
|
||||||
|
if exists("b:AutoCloseBuffer")
|
||||||
|
let l:len = len(b:AutoCloseBuffer)
|
||||||
|
if l:len > 0
|
||||||
|
let l:result = join(b:AutoCloseBuffer, '') . repeat("\<Left>", l:len)
|
||||||
|
let b:AutoCloseBuffer = []
|
||||||
|
call s:EraseNCharsAtCursor(l:len)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
return l:result
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:InsertStringAtCursor(str)
|
||||||
|
let l:line = getline('.')
|
||||||
|
let l:column = col('.')-2
|
||||||
|
|
||||||
|
if l:column < 0
|
||||||
|
call setline('.', a:str . l:line)
|
||||||
|
else
|
||||||
|
call setline('.', l:line[:l:column] . a:str . l:line[l:column+1:])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:EraseNCharsAtCursor(len)
|
||||||
|
let l:line = getline('.')
|
||||||
|
let l:column = col('.')-2
|
||||||
|
|
||||||
|
if l:column < 0
|
||||||
|
call setline('.', l:line[a:len + 1:])
|
||||||
|
else
|
||||||
|
call setline('.', l:line[:l:column] . l:line[l:column + a:len + 1:])
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" returns the opener, after having inserted its closer if necessary
|
||||||
|
function! s:InsertPair(opener)
|
||||||
|
if ! b:AutoCloseOn || ! has_key(b:AutoClosePairs, a:opener) || s:IsForbidden(a:opener)
|
||||||
|
return a:opener
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:save_ve = &ve
|
||||||
|
set ve=all
|
||||||
|
|
||||||
|
let l:next = s:GetNextChar()
|
||||||
|
" only add closing pair before space or any of the closepair chars
|
||||||
|
let close_before = '\s\|\V\[,.;' . escape(join(keys(b:AutoClosePairs) + values(b:AutoClosePairs), ''), ']').']'
|
||||||
|
if (l:next == "\0" || l:next =~ close_before) && s:AllowQuote(a:opener, 0)
|
||||||
|
call s:InsertStringAtCursor(b:AutoClosePairs[a:opener])
|
||||||
|
call s:PushBuffer(b:AutoClosePairs[a:opener])
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec "set ve=" . l:save_ve
|
||||||
|
return a:opener
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" returns the closer, after having eaten identical one if necessary
|
||||||
|
function! s:ClosePair(closer)
|
||||||
|
let l:save_ve = &ve
|
||||||
|
set ve=all
|
||||||
|
|
||||||
|
if b:AutoCloseOn && s:GetNextChar() == a:closer
|
||||||
|
call s:EraseNCharsAtCursor(1)
|
||||||
|
call s:PopBuffer()
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec "set ve=" . l:save_ve
|
||||||
|
return a:closer
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" in case closer is identical with its opener - heuristically decide which one
|
||||||
|
" is being typed and act accordingly
|
||||||
|
function! s:OpenOrCloseTwinPair(char)
|
||||||
|
if s:CountQuotes(a:char) % 2 == 0
|
||||||
|
" act as opening char
|
||||||
|
return s:InsertPair(a:char)
|
||||||
|
else
|
||||||
|
" act as closing char
|
||||||
|
return s:ClosePair(a:char)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" maintain auto-close buffer when delete key is pressed
|
||||||
|
function! s:Delete()
|
||||||
|
let l:save_ve = &ve
|
||||||
|
set ve=all
|
||||||
|
|
||||||
|
if exists("b:AutoCloseBuffer") && len(b:AutoCloseBuffer) > 0 && b:AutoCloseBuffer[0] == s:GetNextChar()
|
||||||
|
call s:PopBuffer()
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec "set ve=" . l:save_ve
|
||||||
|
return "\<Del>"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" when backspace is pressed:
|
||||||
|
" - erase an empty pair if backspacing from inside one
|
||||||
|
" - maintain auto-close buffer
|
||||||
|
function! s:Backspace()
|
||||||
|
let l:save_ve = &ve
|
||||||
|
let l:prev = s:GetPrevChar()
|
||||||
|
let l:next = s:GetNextChar()
|
||||||
|
set ve=all
|
||||||
|
|
||||||
|
if b:AutoCloseOn && s:IsEmptyPair() && (l:prev != l:next || s:AllowQuote(l:prev, 1))
|
||||||
|
call s:EraseNCharsAtCursor(1)
|
||||||
|
call s:PopBuffer()
|
||||||
|
endif
|
||||||
|
|
||||||
|
exec "set ve=" . l:save_ve
|
||||||
|
return "\<BS>"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Space()
|
||||||
|
if b:AutoCloseOn && s:IsEmptyPair()
|
||||||
|
call s:PushBuffer("\<Space>")
|
||||||
|
return "\<Space>\<Space>\<Left>"
|
||||||
|
else
|
||||||
|
return "\<Space>"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:Enter()
|
||||||
|
if has_key(b:AutoClosePumvisible, 'ENTER') && pumvisible()
|
||||||
|
let b:snippet_chosen = 1
|
||||||
|
return b:AutoClosePumvisible['ENTER']
|
||||||
|
elseif b:AutoCloseOn && s:IsEmptyPair() && stridx( b:AutoCloseExpandEnterOn, s:GetPrevChar() ) >= 0
|
||||||
|
return "\<CR>\<Esc>O"
|
||||||
|
endif
|
||||||
|
return "\<CR>"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ToggleAutoClose()
|
||||||
|
let b:AutoCloseOn = !b:AutoCloseOn
|
||||||
|
if b:AutoCloseOn
|
||||||
|
echo "AutoClose ON"
|
||||||
|
else
|
||||||
|
echo "AutoClose OFF"
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Parse a whitespace separated line of pairs
|
||||||
|
" single characters are assumed to be twin pairs (closer identical to
|
||||||
|
" opener)
|
||||||
|
function! AutoClose#ParsePairs(string)
|
||||||
|
if type(a:string) == type({})
|
||||||
|
return a:string
|
||||||
|
elseif type(a:string) != type("")
|
||||||
|
echoerr "AutoClose#ParsePairs(): Argument not a dictionary or a string"
|
||||||
|
return {}
|
||||||
|
endif
|
||||||
|
|
||||||
|
let l:dict = {}
|
||||||
|
for pair in split(a:string)
|
||||||
|
" strlen is length in bytes, we want in (wide) characters
|
||||||
|
let l:pairLen = strlen(substitute(pair,'.','x','g'))
|
||||||
|
if l:pairLen == 1
|
||||||
|
" assume a twin pair
|
||||||
|
let l:dict[pair] = pair
|
||||||
|
elseif l:pairLen == 2
|
||||||
|
let l:dict[pair[0]] = pair[1]
|
||||||
|
else
|
||||||
|
echoerr "AutoClose: Bad pair string - a pair longer then two character"
|
||||||
|
echoerr " `- String: " . a:sring
|
||||||
|
echoerr " `- Pair: " . pair . " Pair len: " . l:pairLen
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
return l:dict
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" this function is made visible for the sake of users
|
||||||
|
function! AutoClose#DefaultPairs()
|
||||||
|
return AutoClose#ParsePairs(g:AutoClosePairs)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ModifyPairsList(list, pairsToAdd, openersToRemove)
|
||||||
|
return filter(
|
||||||
|
\ extend(a:list, AutoClose#ParsePairs(a:pairsToAdd), "force"),
|
||||||
|
\ "stridx(a:openersToRemove,v:key)<0")
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! AutoClose#DefaultPairsModified(pairsToAdd,openersToRemove)
|
||||||
|
return s:ModifyPairsList(AutoClose#DefaultPairs(), a:pairsToAdd, a:openersToRemove)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Define variables (in the buffer namespace).
|
||||||
|
function! s:DefineVariables()
|
||||||
|
" All the following variables can be set per buffer or global.
|
||||||
|
" The buffer namespace is used internally
|
||||||
|
let defaults = {
|
||||||
|
\ 'AutoClosePairs': AutoClose#DefaultPairs(),
|
||||||
|
\ 'AutoCloseProtectedRegions': ["Comment", "String", "Character"],
|
||||||
|
\ 'AutoCloseSmartQuote': 1,
|
||||||
|
\ 'AutoCloseOn': 1,
|
||||||
|
\ 'AutoCloseSelectionWrapPrefix': '<LEADER>a',
|
||||||
|
\ 'AutoClosePumvisible': {"ENTER": "\<C-Y>", "ESC": "\<C-E>"},
|
||||||
|
\ 'AutoCloseExpandEnterOn': "",
|
||||||
|
\ 'AutoCloseExpandSpace': 1,
|
||||||
|
\ }
|
||||||
|
|
||||||
|
" Let the user define if he/she wants the plugin to do special actions when the
|
||||||
|
" popup menu is visible and a movement key is pressed.
|
||||||
|
" Movement keys used in the menu get mapped to themselves
|
||||||
|
" (Up/Down/PageUp/PageDown).
|
||||||
|
for key in s:movementKeys
|
||||||
|
if key == 'ENTER' || key == 'ESC'
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let defaults['AutoClosePumvisible'][key] = ''
|
||||||
|
endfor
|
||||||
|
for key in s:pumMovementKeys
|
||||||
|
if key == 'ENTER' || key == 'ESC'
|
||||||
|
continue
|
||||||
|
endif
|
||||||
|
let defaults['AutoClosePumvisible'][key] = '<'.key.'>'
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if exists ('b:AutoClosePairs') && type('b:AutoClosePairs') == type("")
|
||||||
|
let tmp = AutoClose#ParsePairs(b:AutoClosePairs)
|
||||||
|
unlet b:AutoClosePairs
|
||||||
|
let b:AutoClosePairs = tmp
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Now handle/assign values
|
||||||
|
for key in keys(defaults)
|
||||||
|
if key == 'AutoClosePumvisible'
|
||||||
|
let tempVisible = defaults['AutoClosePumvisible']
|
||||||
|
if exists('g:AutoClosePumvisible') && type(eval('g:AutoClosePumvisible')) == type(defaults['AutoClosePumvisible'])
|
||||||
|
for childKey in keys(g:AutoClosePumvisible)
|
||||||
|
let tempVisible[toupper(childKey)] = g:AutoClosePumvisible[childKey]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
if exists('b:AutoClosePumvisible') && type(eval('b:AutoClosePumvisible')) == type(defaults['AutoClosePumvisible'])
|
||||||
|
for childKey in keys(b:AutoClosePumvisible)
|
||||||
|
let tempVisible[toupper(childKey)] = b:AutoClosePumvisible[childKey]
|
||||||
|
endfor
|
||||||
|
endif
|
||||||
|
let b:AutoClosePumvisible = tempVisible
|
||||||
|
else
|
||||||
|
if exists('b:'.key) && type(eval('b:'.key)) == type(defaults[key])
|
||||||
|
continue
|
||||||
|
elseif exists('g:'.key) && type(eval('g:'.key)) == type(defaults[key])
|
||||||
|
exec 'let b:' . key . ' = g:' . key
|
||||||
|
else
|
||||||
|
exec 'let b:' . key . ' = ' . string(defaults[key])
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CreatePairsMaps()
|
||||||
|
" create appropriate maps to defined open/close characters
|
||||||
|
for key in keys(b:AutoClosePairs)
|
||||||
|
let opener = s:keyName(key)
|
||||||
|
let closer = s:keyName(b:AutoClosePairs[key])
|
||||||
|
let quoted_opener = s:quoteAndEscape(opener)
|
||||||
|
let quoted_closer = s:quoteAndEscape(closer)
|
||||||
|
|
||||||
|
exec "xnoremap <buffer> <silent> ". b:AutoCloseSelectionWrapPrefix
|
||||||
|
\ . opener . " <Esc>`>a" . closer . "<Esc>`<i" . opener . "<Esc>"
|
||||||
|
exec "xnoremap <buffer> <silent> ". b:AutoCloseSelectionWrapPrefix
|
||||||
|
\ . closer . " <Esc>`>a" . closer . "<Esc>`<i" . opener . "<Esc>"
|
||||||
|
if key == b:AutoClosePairs[key]
|
||||||
|
exec "inoremap <buffer> <silent> " . opener
|
||||||
|
\ . " <C-R>=<SID>OpenOrCloseTwinPair(" . quoted_opener . ")<CR>"
|
||||||
|
else
|
||||||
|
exec "inoremap <buffer> <silent> " . opener
|
||||||
|
\ . " <C-R>=<SID>InsertPair(" . quoted_opener . ")<CR>"
|
||||||
|
exec "inoremap <buffer> <silent> " . closer
|
||||||
|
\ . " <C-R>=<SID>ClosePair(" . quoted_closer . ")<CR>"
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CreateExtraMaps()
|
||||||
|
" Extra mapping
|
||||||
|
inoremap <buffer> <silent> <BS> <C-R>=<SID>Backspace()<CR>
|
||||||
|
inoremap <buffer> <silent> <Del> <C-R>=<SID>Delete()<CR>
|
||||||
|
if b:AutoCloseExpandSpace
|
||||||
|
inoremap <buffer> <silent> <Space> <C-R>=<SID>Space()<CR>
|
||||||
|
endif
|
||||||
|
if len(b:AutoCloseExpandEnterOn) > 0
|
||||||
|
inoremap <buffer> <silent> <CR> <C-R>=<SID>Enter()<CR>
|
||||||
|
endif
|
||||||
|
|
||||||
|
if g:AutoClosePreserveDotReg
|
||||||
|
" Fix the re-do feature by flushing the char buffer on key movements (including Escape):
|
||||||
|
for key in s:movementKeys
|
||||||
|
let l:pvisiblemap = b:AutoClosePumvisible[key]
|
||||||
|
let key = "<".key.">"
|
||||||
|
let l:currentmap = maparg(key,"i")
|
||||||
|
if (l:currentmap=="")|let l:currentmap=key|endif
|
||||||
|
if len(l:pvisiblemap)
|
||||||
|
exec "inoremap <buffer> <silent> <expr> " . key . " pumvisible() ? '" . l:pvisiblemap . "' : '<C-R>=<SID>FlushBuffer()<CR>" . l:currentmap . "'"
|
||||||
|
else
|
||||||
|
exec "inoremap <buffer> <silent> " . key . " <C-R>=<SID>FlushBuffer()<CR>" . l:currentmap
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Flush the char buffer on mouse click:
|
||||||
|
inoremap <buffer> <silent> <LeftMouse> <C-R>=<SID>FlushBuffer()<CR><LeftMouse>
|
||||||
|
inoremap <buffer> <silent> <RightMouse> <C-R>=<SID>FlushBuffer()<CR><RightMouse>
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:CreateMaps()
|
||||||
|
silent doautocmd FileType
|
||||||
|
call s:DefineVariables()
|
||||||
|
call s:CreatePairsMaps()
|
||||||
|
call s:CreateExtraMaps()
|
||||||
|
|
||||||
|
let b:loaded_AutoClose = 1
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:IsLoadedOnBuffer()
|
||||||
|
return (exists("b:loaded_AutoClose") && b:loaded_AutoClose)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" map some characters to their key names
|
||||||
|
function! s:keyName(char)
|
||||||
|
let s:keyNames = {'|': '<Bar>', ' ': '<Space>'}
|
||||||
|
return get(s:keyNames,a:char,a:char)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" escape some characters for use in strings
|
||||||
|
function! s:quoteAndEscape(char)
|
||||||
|
let s:escapedChars = {'"': '\"'}
|
||||||
|
return '"' . get(s:escapedChars,a:char,a:char) . '"'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
" Configuration
|
||||||
|
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
let s:AutoClosePairs_FactoryDefaults = AutoClose#ParsePairs("() {} [] ` \" '")
|
||||||
|
if !exists("g:AutoClosePairs_add") | let g:AutoClosePairs_add = "" | endif
|
||||||
|
if !exists("g:AutoClosePairs_del") | let g:AutoClosePairs_del = "" | endif
|
||||||
|
if !exists("g:AutoClosePairs")
|
||||||
|
let g:AutoClosePairs = s:ModifyPairsList(
|
||||||
|
\ s:AutoClosePairs_FactoryDefaults,
|
||||||
|
\ g:AutoClosePairs_add,
|
||||||
|
\ g:AutoClosePairs_del )
|
||||||
|
endif
|
||||||
|
|
||||||
|
let s:movementKeys = split('ESC UP DOWN LEFT RIGHT HOME END PAGEUP PAGEDOWN')
|
||||||
|
" list of keys that get mapped to themselves for pumvisible()
|
||||||
|
let s:pumMovementKeys = split('UP DOWN PAGEUP PAGEDOWN')
|
||||||
|
|
||||||
|
|
||||||
|
if has("gui_macvim")
|
||||||
|
call extend(s:movementKeys, split("D-LEFT D-RIGHT D-UP D-DOWN M-LEFT M-RIGHT M-UP M-DOWN"))
|
||||||
|
endif
|
||||||
|
|
||||||
|
augroup <Plug>(autoclose)
|
||||||
|
autocmd!
|
||||||
|
autocmd BufNewFile,BufRead,BufEnter * if !<SID>IsLoadedOnBuffer() | call <SID>CreateMaps() | endif
|
||||||
|
autocmd InsertEnter * call <SID>EmptyBuffer()
|
||||||
|
autocmd BufEnter * if mode() == 'i' | call <SID>EmptyBuffer() | endif
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
" Define convenient commands
|
||||||
|
command! AutoCloseOn :let b:AutoCloseOn = 1
|
||||||
|
command! AutoCloseOff :let b:AutoCloseOn = 0
|
||||||
|
command! AutoCloseToggle :call s:ToggleAutoClose()
|
||||||
|
" vim:sw=4:sts=4:
|
5
homedir/.vimperatorrc
Normal file
5
homedir/.vimperatorrc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
"3.8.2 (created: 2014/02/13 23:52:43)
|
||||||
|
|
||||||
|
source! /home/fbt/.vimperatorrc.local
|
||||||
|
|
||||||
|
" vim: set ft=vimperator:
|
11
homedir/.vimperatorrc.local
Normal file
11
homedir/.vimperatorrc.local
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
:set gui=nonavigation
|
||||||
|
:set autocomplete=false
|
||||||
|
:map O :tabopen
|
||||||
|
:map P :set apptab<CR>
|
||||||
|
:map D :tabclose!<CR>
|
||||||
|
|
||||||
|
highlight CmdLine background: #29303A; color: #f9f9f9; transition: all 0.25s;
|
||||||
|
highlight CompItem[selected] background: #3A4452; color: #f9f9f9;
|
||||||
|
highlight Filter font-style: italic; color: red;
|
||||||
|
highlight Normal background: #29303A; color: #f9f9f9; transition: all 0.25s;
|
||||||
|
highlight InfoMsg background: #29303A; color: magenta;
|
46
homedir/.vimrc
Normal file
46
homedir/.vimrc
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
" Personal vim config
|
||||||
|
scriptencoding utf-8
|
||||||
|
set encoding=utf-8
|
||||||
|
|
||||||
|
set backspace=2
|
||||||
|
|
||||||
|
set modeline
|
||||||
|
|
||||||
|
set nocompatible
|
||||||
|
set cindent
|
||||||
|
set tabstop=3
|
||||||
|
set shiftwidth=3
|
||||||
|
set noexpandtab
|
||||||
|
|
||||||
|
set scrolloff=6
|
||||||
|
set cursorline
|
||||||
|
|
||||||
|
set listchars=tab:».,trail:.
|
||||||
|
|
||||||
|
set mouse=
|
||||||
|
|
||||||
|
set number
|
||||||
|
set relativenumber
|
||||||
|
|
||||||
|
syntax enable
|
||||||
|
set background=dark
|
||||||
|
|
||||||
|
"colorscheme apprentice
|
||||||
|
|
||||||
|
if has("autocmd")
|
||||||
|
au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
|
||||||
|
\| exe "normal! g'\"" | endif
|
||||||
|
endif "
|
||||||
|
|
||||||
|
" Custom mappings
|
||||||
|
nmap rr "_dd
|
||||||
|
nmap <leader>l :setlocal list!<cr>
|
||||||
|
|
||||||
|
" visual mode mappings
|
||||||
|
vmap r "_d
|
||||||
|
vmap R "_dP
|
||||||
|
|
||||||
|
"set foldmethod=indent
|
||||||
|
|
||||||
|
" set fmr={,}
|
||||||
|
"set foldnestmax=1
|
15
homedir/.zshrc
Normal file
15
homedir/.zshrc
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# vim: ft=zsh
|
||||||
|
|
||||||
|
source "$HOME/.config/zsh.d/zshrc"
|
||||||
|
|
||||||
|
# Load modules
|
||||||
|
use \
|
||||||
|
core \
|
||||||
|
xdg \
|
||||||
|
config \
|
||||||
|
keys \
|
||||||
|
dotfiles \
|
||||||
|
prompt \
|
||||||
|
helpers \
|
||||||
|
local \
|
||||||
|
shell
|
45
mozilla/chrome/userChrome.css
Normal file
45
mozilla/chrome/userChrome.css
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
.tabbrowser-tab {
|
||||||
|
font: 14px xos4 terminus, Monospace !important;
|
||||||
|
color: #bebebe !important;
|
||||||
|
border: none !important;
|
||||||
|
background: #29303A !important;
|
||||||
|
min-height: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabbrowser-tab[selected] {
|
||||||
|
color: #f9f9f9 !important;
|
||||||
|
background: #3A4452 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-icon-image:not([pinned]) { display: none !important; }
|
||||||
|
|
||||||
|
#TabsToolbar {
|
||||||
|
background: #29303A !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* these styles are required to cover narrow scrollbars. */
|
||||||
|
.tabbrowser-tabs[treestyletab-mode="vertical"]
|
||||||
|
.scrollbox-innerbox {
|
||||||
|
background: #29303A !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabbrowser-tabs[treestyletab-tabbar-position="left"][treestyletab-invert-scrollbar="true"]
|
||||||
|
.scrollbox-innerbox {
|
||||||
|
background: #29303A !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
statusbar,
|
||||||
|
menubar,
|
||||||
|
toolbox,
|
||||||
|
toolbar {
|
||||||
|
border-style: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
toolbar {
|
||||||
|
border-width: 0px !important;
|
||||||
|
border-bottom: 1px solid #29303A !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* toolbar {
|
||||||
|
border-bottom: 1px solid red !important;
|
||||||
|
} */
|
Loading…
Reference in New Issue
Block a user