200426.1 · 36c995dad7a8bd843a3e6d5fdfc8c1deffe770ee
initial commit
This brings over mostly everything from my old $HOME-only repository. I remove some unused scripts. This commit does not include work-related stuff, which will be encrypted and added in a subsequent commit.
This also does not include my SSH configuration. There's nothing particularly sensitive in it, but it seems prudent to encrypt that too.
reading declarations
@@ -0,0 +1,87 @@+#!mouse cursor settings--------------------------------+#Xcursor.theme: Vanilla-DMZ-AA+# +#!urxvt settings---------------------------------------+#URxvt.iconFile: /usr/share/icons/Tango/32x32/apps/gnome-terminal.png+#URxvt.transparent: true+#URxvt.background: #000000+#URxvt.foreground: white+#URxvt.cursorColor: gray+#URxvt.underlineColor: gray+#URxvt.font: xft:dina:pixelsize=16:antialias=false+#URxvt.boldFont: xft:dina:bold:size=14;antialias=false+#URxvt.scrollBar_right: true+#URxvt.scrollstyle: plain+#!URxvt.url-launcher: /usr/bin/chromium+#URxvt.url-select.launcher: /usr/bin/chromium+#URxvt.colorUL: #4682B4+#URxvt.perl-ext-common: default,matcher,url-select+#URxvt.matcher.button: 1+#URxvt.underlineURLs: true+#URxvt.keysym.M-u: perl:url-select:select_next+# +#!terminal color settings------------------------------+#*foreground: rgb:dd/dd/dd+#*background: rgb:22/22/22+#!black+#*color0: rgb:19/19/19+#*color8: rgb:25/25/25+#!red+#*color1: rgb:80/32/32+#*color9: rgb:98/2b/2b+#!green+#*color2: rgb:5b/76/2f+#*color10: rgb:89/b8/3f+#!brown/yellow+#*color3: rgb:aa/99/43+#*color11: rgb:ef/ef/60+#!blue+#*color4: rgb:32/4c/80+#*color12: rgb:2b/4f/98+#!magenta+#*color5: rgb:70/6c/9a+#*color13: rgb:82/6a/b1+#!cyan+#*color6: rgb:92/b1/9e+#*color14: rgb:a1/cd/cd+#!white+#*color7: rgb:ff/ff/ff+#*color15: rgb:dd/dd/dd+++#URxvt*font: xft:Bitstream Vera Sans Mono:pixelsize=12+#URxvt*font: xft:Monospace:pixelsize=14+#URxvt*depth: 32+#URxvt*foreground: white+#URxvt*saveLines: 65535+#URxvt*scrollBar: false+#URxvt*background: black+++#URxvt*background: rgba:0000/0000/0000/cccc+#URxvt*transparent: true+#URxvt*shading: 50+#URxvt*tint: red+#URxvt*inheritPixmap: true+#URxvt*borderLess: true+#URxvt*geometry: 124x24 +0+0+#URxvt*foreground: black++#Mrxvt.smoothResize: True+##Mrxvt.opacity: 10+#Mrxvt.showMenu: False+#Mrxvt.autohideTabbar: True+#Mrxvt.scrollBar: False+#Mrxvt.saveLines: 65535+#Mrxvt.foreground: white+#Mrxvt.cursorColor: yellow+#Mrxvt.cursorBlink: False+#Mrxvt.xft: True+#Mrxvt.xftFont: Bitstream Vera Sans Mono+#Mrxvt.xftSize: 9+#Mrxvt.Antialias: True+#Mrxvt.xftHinting: True+#Mrxvt.xftAutoHint: True+#Mrxvt.xftGlobalAdvance: True+#Mrxvt.xftPFont: Bitstream Vera Sans+#Mrxvt.xftPSize: 8
@@ -0,0 +1,121 @@+# vim: ft=sh sw=2 ts=2 sts=2++if [ -f ~/.systemd.sh ]; then+ . ~/.systemd.sh+fi++# Aliases.++if is-mac; then+ alias ls='ls -G'+ alias l='ls -lhG'+else+ alias ls='ls -N --color=auto --group-directories-first'+ alias l='ls -lhN'+fi++alias y='yay'+alias p="ps axo pid,cmd | sed 's/^\\s*\\([0-9]\\+\\)\\s\\+/\\1\\t/g' | grep -v grep | grep"+alias b="bpython2"+alias diff="colordiff"+alias less="less -R"+alias sqlite3="sqlite3 -column -nullvalue 'NULL' -header"+alias rd="regex-debug"+alias clr="echo -ne '\\033[0m'"+alias j="ledger"+alias ports='lsof -iTCP -sTCP:LISTEN -n -P'+alias N='nh terminal -d "$PWD" -e tmux new'+alias image='feh -dFZ'+alias mpv="mpv --keep-open=yes"++alias g="git"+alias gs="g status"+alias gp="g push home master && g push origin master"+alias gpt="g push home master --tags && g push origin master --tags"+alias gy="g diffy | less -RFX"++alias grep="grep --color=auto"+alias egrep="egrep --color=auto"+alias fgrep="fgrep --color=auto"++# Alias for filtering output of cargo crev to only contain the dependencies+# in the main crate root.+alias crev-verify="cargo crev verify | rg --color never -Ff <(cargo tree --no-dev-dependencies --no-indent | cut -d' ' -f1)"++# Temporary work-around to get colors working.+alias cargo="TERM=xterm cargo"++# Functions.+man() {+ env \+ LESS_TERMCAP_mb=$(printf "\\e[1;31m") \+ LESS_TERMCAP_md=$(printf "\\e[1;31m") \+ LESS_TERMCAP_me=$(printf "\\e[0m") \+ LESS_TERMCAP_se=$(printf "\\e[0m") \+ LESS_TERMCAP_so=$(printf "\\e[1;44;33m") \+ LESS_TERMCAP_ue=$(printf "\\e[0m") \+ LESS_TERMCAP_us=$(printf "\\e[0;32m") \+ man "$@"+}++paths() {+ echo "$1" | sed 's/:/\n/g'+}++nh() {+ nohup "$@" > /dev/null 2>&1 &+}++ssh_reagent() {+ for agent in /tmp/ssh-*/agent.*; do+ export SSH_AUTH_SOCK="$agent"+ if ssh-add -L > /dev/null 2>&1; then+ return+ fi+ unset SSH_AUTH_SOCK+ done+ echo "No valid SSH forwarding socket found." >&2+ exit 1+}++mkcd() {+ mkdir -p "$1" && cd "$1" || exit+}++prependpath() {+ paths="$1"+ toadd="$2"+ case ":$paths:" in+ *:"$toadd":*)+ echo "$paths"+ ;;+ *)+ echo "$toadd${paths:+:$paths}"+ ;;+ esac+}++appendpath() {+ paths="$1"+ toadd="$2"+ case ":$paths:" in+ *:"$toadd":*)+ echo "$paths"+ ;;+ *)+ echo "${paths:+$paths:}$toadd"+ ;;+ esac+}++rgf() {+ regex=+ args=+ for v in "$@"; do+ case $v in+ -*) args+="$v" ;;+ *) regex="$v" ;;+ esac+ done+ rg --files $args | rg "$regex"+}
@@ -0,0 +1,9 @@+# vim: ft=sh sw=2 ts=2 sts=2++. "$HOME/.bashrc"++if cmd-exists startx; then+ if [[ -z "$DISPLAY" ]] && [[ "$XDG_VTNR" = 1 ]] && [[ -z "$TMUX" ]]; then+ exec ssh-agent startx "$HOME/.config/ag/startup/wingo.xinitrc"+ fi+fi
@@ -0,0 +1,60 @@+# Check for an interactive session+[ -z "$PS1" ] && return++# Define aliases and generic shell variables.+[[ -f ~/.pathrc ]] && . ~/.pathrc+[[ -f ~/.aliasrc ]] && . ~/.aliasrc+[[ -f ~/.envrc ]] && . ~/.envrc++# Setup umask.+umask 0002++# Disable beeping.+setterm --blength 0 > /dev/null 2>&1+# Dunno what this does.+stty -ixon++# Various completion and history settings.+set +o ignoreeof+complete -cf sudo+complete -cf man+if complete | grep -q '_rg rg'; then+ complete -r rg+fi+shopt -s histappend+if ! is-mac; then+ shopt -s direxpand+fi++# Setup LS_COLORS.+if command -v dircolors > /dev/null 2>&1; then+ source <(dircolors)+fi++# Configure basic prompt.+ps0() {+ cmd="$(history 1 | cut -d' ' -f2- | xargs -0 echo)"+ cwd="$(pwd)"+ title="${cwd/#$HOME/\~}"+ if [ -n "$cmd" ]; then+ title+=" - $cmd"+ fi+ echo -n -e "\\e]0;$title\\007"+}++prompt_command() {+ if is-mac; then+ return+ fi+ cwd="$PWD"+ title="${cwd/#$HOME/\~}"+ echo -n -e "\\e]0;$title\\007"+}++PS0="\$(ps0)"+PS1="\$(ps1)"+PS1="[\\u@\\h \\W] "+PROMPT_COMMAND="prompt_command"+export PS0 PS1 PROMPT_COMMAND++[ -f ~/.fzf.bash ] && source ~/.fzf.bash
@@ -0,0 +1 @@+color_patches=yes
@@ -0,0 +1,23 @@+/Unknown Organization+/baloofilerc+/coc+/dconf+/dolphinrc+/gohead+/google-chrome+/gtk-2.0+/gtk-3.0+/guvcview2+/htop+/hub+/knfsshare+/konsolerc+/libreoffice+/mimeapps.list+/mirage+/nitrogen+/okularpartrc+/okularrc+/pulse+/wingo+/zoomus.conf
.config/ag/startup/wingo-frink.xinitrc
@@ -0,0 +1,24 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ xset m 1 1+ xinput --set-prop 'Logitech Anywhere MX' 'libinput Accel Speed' -0.75+ xinput --set-prop 'pointer:Logitech MX Anywhere 2' 'libinput Accel Speed' -0.75+) &++media+video left middle right+nitrogen --restore+# (sleep 2 && compton --backend glx --vsync opengl-swc) &+gkrellm &+dunst &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-jaguar.xinitrc
@@ -0,0 +1,24 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys+ numlockx on+ dpms-settings+ no-blanking+ xset m 2 1+) &++sleep 2+video tv+nitrogen --restore+compton --backend glx --vsync opengl-swc &+gkrellm &+idesk &+no-blanking-loop &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-krusty.xinitrc
@@ -0,0 +1,26 @@+#!/bin/sh++(+ xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ autobright+ system76-darter-set-kbd-backlight+ system76-darter-configure-touchpad+) &++nitrogen --restore+(+ sleep 0.3+ video laptop+ dunst &+ nm-applet &+ gkrellm &+) &+exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-leopard.xinitrc
@@ -0,0 +1,30 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys+ numlockx on+ dpms-settings+ no-blanking+ xset m 3 1+) &++sleep 2+video tv+nitrogen --restore+# compton --backend glx --vsync opengl --vsync-aggressive &+gkrellm &+idesk &+no-blanking-loop &+dunst &+media &++#if [ -z "$(ls /m)" ]; then+# media >> $HOME/data/log/media.log 2>&1 &+#fi++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-liger.xinitrc
@@ -0,0 +1,23 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ xset m 1 1+) &++video left middle right+nitrogen --restore+(sleep 1 && video left middle right) &+compton --backend glx --vsync opengl-swc &+gkrellm &+kmix --keepvisibility &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+
.config/ag/startup/wingo-monty.xinitrc
@@ -0,0 +1,28 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ xset m 2 1+ autobright+) &++nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+ sleep 0.1+ video laptop+ kmix --keepvisibility &+ nm-applet &+ # wicd-client --tray &+ gkrellm &+) &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-ocelot.xinitrc
@@ -0,0 +1,25 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc-media+ numlockx on+ dpms-settings+ no-blanking+ xset m 2 1+) &++video one+nitrogen --restore+compton --vsync drm &+gkrellm &+rox -p default++no-blanking-loop &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+
.config/ag/startup/wingo-serval.xinitrc
@@ -0,0 +1,30 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ xset m 1 1+ xinput --set-prop 'Logitech Anywhere MX' 'libinput Accel Speed' -0.75+ xinput --set-prop 'pointer:Logitech MX Anywhere 2' 'libinput Accel Speed' -0.75+) &++video left middle right+nitrogen --restore+(sleep 1 && video left middle right) &+restart-xcompmgr &+gkrellm &+kmix --keepvisibility &++if [ -n "$SSH_AGENT_PID" ]; then+ ssh-add+fi++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'+
.config/ag/startup/wingo-tiger.xinitrc
@@ -0,0 +1,27 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc+ numlockx on+ dpms-settings+ xset m 2 1+ autobright+) &++nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+ sleep 0.1+ video laptop+ kmix --keepvisibility &+ wicd-client --tray &+ gkrellm &+) &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo-turtle.xinitrc
@@ -0,0 +1,33 @@+#!/bin/sh++dunst &+( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys -f $HOME/.xbindkeysrc-turtle+ numlockx on+ dpms-settings+ xset m 2 1+ autobright+) &++xinput set-prop 'SynPS/2 Synaptics TouchPad' 'libinput Tapping Enabled' 1+nitrogen --restore+compton --backend glx --vsync opengl-swc &+(+ sleep 0.1+ video laptop+ kmix --keepvisibility &+ nm-applet &+) &++# This runs the global keyboard shortcut listened for KDE.+# In other words, this gives us nice volume controls.+# kglobalaccel5 &++# exec dbus-launch run-wingo+# exec bash -c '(/home/kait/.gox11/bin/wingo && cat)'+exec bash -c 'run-wingo && cat'
.config/ag/startup/wingo-wiggum.xinitrc
@@ -0,0 +1,27 @@+#!/bin/sh++( xrdb $HOME/.Xresources+ xsetroot -cursor_name left_ptr+ setxkbmap -option terminate:ctrl_alt_bksp+ xset r rate 200+ xset b 0+ xmodmap $HOME/.xmodmaprc+ xbindkeys+ numlockx on+ dpms-settings+ no-blanking+ xset m 3 1+) &++sleep 2+# (sleep 1 && video tv) &+video tv+nitrogen --restore+gkrellm &+idesk &+no-blanking-loop &+dunst &+nm-applet &+kmix --keepvisibility &++exec bash -c '(dbus-launch run-wingo ; (while true; do sleep 1000; done))'
.config/ag/startup/wingo.xinitrc
@@ -0,0 +1,28 @@+#!/bin/sh++# vim: ft=sh sw=2 ts=2 sts=2++base="$HOME/.config/ag/startup"+case "$(hostname)" in+ Turtle)+ exec "$base/wingo-turtle.xinitrc"+ ;;+ Leopard)+ exec "$base/wingo-leopard.xinitrc"+ ;;+ Jaguar)+ exec "$base/wingo-jaguar.xinitrc"+ ;;+ monty)+ exec "$base/wingo-monty.xinitrc"+ ;;+ krusty)+ exec "$base/wingo-krusty.xinitrc"+ ;;+ frink)+ exec "$base/wingo-frink.xinitrc"+ ;;+ wiggum)+ exec "$base/wingo-wiggum.xinitrc"+ ;;+esac
.config/alacritty/alacritty.yml
@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+ # TERM env customization.+ #+ # If this property is not set, alacritty will set it to xterm-256color.+ #+ # Note that some xterm terminfo databases don't declare support for italics.+ # You can verify this by checking for the presence of `smso` and `sitm` in+ # `infocmp xterm-256color`.+ TERM: xterm-256color++window:+ # Window dimensions in character columns and lines+ # Falls back to size specified by window manager if set to 0x0.+ # (changes require restart)+ dimensions:+ columns: 0+ lines: 0++ # Adds this many blank pixels of padding around the window+ # Units are physical pixels; this is not DPI aware.+ # (change requires restart)+ padding:+ x: 2+ y: 2++ # Window decorations+ # Setting this to false will result in window without borders and title bar.+ decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+ # The normal (roman) font face to use.+ normal:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Regular++ # The bold font face+ bold:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Bold++ # The italic font face+ italic:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Italic++ # Point size of the font+ size: 11.0++ # Offset is the extra space around each character. offset.y can be thought of+ # as modifying the linespacing, and offset.x as modifying the letter spacing.+ offset:+ x: 0+ y: 0++ # Glyph offset determines the locations of the glyphs within their cells with+ # the default being at the bottom. Increase the x offset to move the glyph to+ # the right, increase the y offset to move the glyph upward.+ glyph_offset:+ x: 0+ y: 0++ # OS X only: use thin stroke font rendering. Thin strokes are suitable+ # for retina displays, but for non-retina you probably want this set to+ # false.+ use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+ # Default colors+ primary:+ background: '0xffffff'+ foreground: '0x000000'++ # Colors the cursor will use if `custom_cursor_colors` is true+ cursor:+ text: '0xffffff'+ cursor: '0x000000'++ # Normal colors+ normal:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++ # Bright colors+ bright:+ black: '0x686868'+ red: '0xff5454'+ green: '0x00aa00'+ yellow: '0xffa061'+ blue: '0x5454ff'+ magenta: '0xff64ff'+ cyan: '0x54ffff'+ white: '0xffffff'++ # Dim colors (Optional)+ dim:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+ animation: EaseOutExpo+ duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+ - { mouse: Middle, action: PasteSelection }++mouse:+ hide_when_typing: true++ # Click settings+ #+ # The `double_click` and `triple_click` settings control the time+ # alacritty should wait for accepting multiple clicks as one double+ # or triple click.+ double_click: { threshold: 300 }+ triple_click: { threshold: 300 }++ # Faux Scrollback+ #+ # The `faux_scrollback_lines` setting controls the number+ # of lines the terminal should scroll when the alternate+ # screen buffer is active. This is used to allow mouse+ # scrolling for applications like `man`.+ #+ # To disable this completely, set `faux_scrollback_lines` to 0.+ faux_scrolling_lines: 5++selection:+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+ style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+# program: /bin/bash+# args:+# - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc. These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+# `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+# `chars` writes the specified string every time that binding is activated.+# These should generally be escape sequences, but they can be configured to+# send arbitrary strings of bytes.+# `command` must be a map containing a `program` string, and `args` array of+# strings. For example:+# - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+ # - { key: N, mods: Control|Shift, command: { program: "alacritty" } }+ - { key: V, mods: Control|Shift, action: Paste }+ - { key: C, mods: Control|Shift, action: Copy }+ - { key: Q, mods: Command, action: Quit }+ - { key: W, mods: Command, action: Quit }+ - { key: Insert, mods: Shift, action: PasteSelection }+ - { key: Key0, mods: Control, action: ResetFontSize }+ - { key: Equals, mods: Control, action: IncreaseFontSize }+ - { key: Subtract, mods: Control, action: DecreaseFontSize }+ - { key: Home, chars: "\x1bOH", mode: AppCursor }+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }+ - { key: End, chars: "\x1bOF", mode: AppCursor }+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }+ - { key: PageUp, chars: "\x1b[5~" }+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }+ - { key: PageDown, chars: "\x1b[6~" }+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }+ - { key: Back, chars: "\x7f" }+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }+ - { key: Insert, chars: "\x1b[2~" }+ - { key: Delete, chars: "\x1b[3~" }+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }+ - { key: Left, chars: "\x1bOD", mode: AppCursor }+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }+ - { key: Right, chars: "\x1bOC", mode: AppCursor }+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }+ - { key: Up, chars: "\x1bOA", mode: AppCursor }+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }+ - { key: Down, chars: "\x1bOB", mode: AppCursor }+ - { key: F1, chars: "\x1bOP" }+ - { key: F2, chars: "\x1bOQ" }+ - { key: F3, chars: "\x1bOR" }+ - { key: F4, chars: "\x1bOS" }+ - { key: F5, chars: "\x1b[15~" }+ - { key: F6, chars: "\x1b[17~" }+ - { key: F7, chars: "\x1b[18~" }+ - { key: F8, chars: "\x1b[19~" }+ - { key: F9, chars: "\x1b[20~" }+ - { key: F10, chars: "\x1b[21~" }+ - { key: F11, chars: "\x1b[23~" }+ - { key: F12, chars: "\x1b[24~" }+ - { key: F1, mods: Shift, chars: "\x1b[1;2P" }+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }+ - { key: F3, mods: Shift, chars: "\x1b[1;2R" }+ - { key: F4, mods: Shift, chars: "\x1b[1;2S" }+ - { key: F5, mods: Shift, chars: "\x1b[15;2~" }+ - { key: F6, mods: Shift, chars: "\x1b[17;2~" }+ - { key: F7, mods: Shift, chars: "\x1b[18;2~" }+ - { key: F8, mods: Shift, chars: "\x1b[19;2~" }+ - { key: F9, mods: Shift, chars: "\x1b[20;2~" }+ - { key: F10, mods: Shift, chars: "\x1b[21;2~" }+ - { key: F11, mods: Shift, chars: "\x1b[23;2~" }+ - { key: F12, mods: Shift, chars: "\x1b[24;2~" }+ - { key: F1, mods: Control, chars: "\x1b[1;5P" }+ - { key: F2, mods: Control, chars: "\x1b[1;5Q" }+ - { key: F3, mods: Control, chars: "\x1b[1;5R" }+ - { key: F4, mods: Control, chars: "\x1b[1;5S" }+ - { key: F5, mods: Control, chars: "\x1b[15;5~" }+ - { key: F6, mods: Control, chars: "\x1b[17;5~" }+ - { key: F7, mods: Control, chars: "\x1b[18;5~" }+ - { key: F8, mods: Control, chars: "\x1b[19;5~" }+ - { key: F9, mods: Control, chars: "\x1b[20;5~" }+ - { key: F10, mods: Control, chars: "\x1b[21;5~" }+ - { key: F11, mods: Control, chars: "\x1b[23;5~" }+ - { key: F12, mods: Control, chars: "\x1b[24;5~" }+ - { key: F1, mods: Alt, chars: "\x1b[1;6P" }+ - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }+ - { key: F3, mods: Alt, chars: "\x1b[1;6R" }+ - { key: F4, mods: Alt, chars: "\x1b[1;6S" }+ - { key: F5, mods: Alt, chars: "\x1b[15;6~" }+ - { key: F6, mods: Alt, chars: "\x1b[17;6~" }+ - { key: F7, mods: Alt, chars: "\x1b[18;6~" }+ - { key: F8, mods: Alt, chars: "\x1b[19;6~" }+ - { key: F9, mods: Alt, chars: "\x1b[20;6~" }+ - { key: F10, mods: Alt, chars: "\x1b[21;6~" }+ - { key: F11, mods: Alt, chars: "\x1b[23;6~" }+ - { key: F12, mods: Alt, chars: "\x1b[24;6~" }+ - { key: F1, mods: Super, chars: "\x1b[1;3P" }+ - { key: F2, mods: Super, chars: "\x1b[1;3Q" }+ - { key: F3, mods: Super, chars: "\x1b[1;3R" }+ - { key: F4, mods: Super, chars: "\x1b[1;3S" }+ - { key: F5, mods: Super, chars: "\x1b[15;3~" }+ - { key: F6, mods: Super, chars: "\x1b[17;3~" }+ - { key: F7, mods: Super, chars: "\x1b[18;3~" }+ - { key: F8, mods: Super, chars: "\x1b[19;3~" }+ - { key: F9, mods: Super, chars: "\x1b[20;3~" }+ - { key: F10, mods: Super, chars: "\x1b[21;3~" }+ - { key: F11, mods: Super, chars: "\x1b[23;3~" }+ - { key: F12, mods: Super, chars: "\x1b[24;3~" }
.config/alacritty/jaguar.yml
@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+ # TERM env customization.+ #+ # If this property is not set, alacritty will set it to xterm-256color.+ #+ # Note that some xterm terminfo databases don't declare support for italics.+ # You can verify this by checking for the presence of `smso` and `sitm` in+ # `infocmp xterm-256color`.+ TERM: xterm-256color++window:+ # Window dimensions in character columns and lines+ # Falls back to size specified by window manager if set to 0x0.+ # (changes require restart)+ dimensions:+ columns: 0+ lines: 0++ # Adds this many blank pixels of padding around the window+ # Units are physical pixels; this is not DPI aware.+ # (change requires restart)+ padding:+ x: 2+ y: 2++ # Window decorations+ # Setting this to false will result in window without borders and title bar.+ decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+ # The normal (roman) font face to use.+ normal:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Regular++ # The bold font face+ bold:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Bold++ # The italic font face+ italic:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Italic++ # Point size of the font+ size: 18.0++ # Offset is the extra space around each character. offset.y can be thought of+ # as modifying the linespacing, and offset.x as modifying the letter spacing.+ offset:+ x: 0+ y: 0++ # Glyph offset determines the locations of the glyphs within their cells with+ # the default being at the bottom. Increase the x offset to move the glyph to+ # the right, increase the y offset to move the glyph upward.+ glyph_offset:+ x: 0+ y: 0++ # OS X only: use thin stroke font rendering. Thin strokes are suitable+ # for retina displays, but for non-retina you probably want this set to+ # false.+ use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+ # Default colors+ primary:+ background: '0xffffff'+ foreground: '0x000000'++ # Colors the cursor will use if `custom_cursor_colors` is true+ cursor:+ text: '0xffffff'+ cursor: '0x000000'++ # Normal colors+ normal:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++ # Bright colors+ bright:+ black: '0x686868'+ red: '0xff5454'+ green: '0x00aa00'+ yellow: '0xffa061'+ blue: '0x5454ff'+ magenta: '0xff64ff'+ cyan: '0x54ffff'+ white: '0xffffff'++ # Dim colors (Optional)+ dim:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+ animation: EaseOutExpo+ duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+ - { mouse: Middle, action: PasteSelection }++mouse:+ hide_when_typing: true++ # Click settings+ #+ # The `double_click` and `triple_click` settings control the time+ # alacritty should wait for accepting multiple clicks as one double+ # or triple click.+ double_click: { threshold: 300 }+ triple_click: { threshold: 300 }++ # Faux Scrollback+ #+ # The `faux_scrollback_lines` setting controls the number+ # of lines the terminal should scroll when the alternate+ # screen buffer is active. This is used to allow mouse+ # scrolling for applications like `man`.+ #+ # To disable this completely, set `faux_scrollback_lines` to 0.+ faux_scrolling_lines: 5++selection:+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+ style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+# program: /bin/bash+# args:+# - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc. These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+# `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+# `chars` writes the specified string every time that binding is activated.+# These should generally be escape sequences, but they can be configured to+# send arbitrary strings of bytes.+# `command` must be a map containing a `program` string, and `args` array of+# strings. For example:+# - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+ # - { key: N, mods: Control|Shift, command: { program: "alacritty" } }+ - { key: V, mods: Control|Shift, action: Paste }+ - { key: C, mods: Control|Shift, action: Copy }+ - { key: Q, mods: Command, action: Quit }+ - { key: W, mods: Command, action: Quit }+ - { key: Insert, mods: Shift, action: PasteSelection }+ - { key: Key0, mods: Control, action: ResetFontSize }+ - { key: Equals, mods: Control, action: IncreaseFontSize }+ - { key: Subtract, mods: Control, action: DecreaseFontSize }+ - { key: Home, chars: "\x1bOH", mode: AppCursor }+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }+ - { key: End, chars: "\x1bOF", mode: AppCursor }+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }+ - { key: PageUp, chars: "\x1b[5~" }+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }+ - { key: PageDown, chars: "\x1b[6~" }+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }+ - { key: Back, chars: "\x7f" }+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }+ - { key: Insert, chars: "\x1b[2~" }+ - { key: Delete, chars: "\x1b[3~" }+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }+ - { key: Left, chars: "\x1bOD", mode: AppCursor }+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }+ - { key: Right, chars: "\x1bOC", mode: AppCursor }+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }+ - { key: Up, chars: "\x1bOA", mode: AppCursor }+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }+ - { key: Down, chars: "\x1bOB", mode: AppCursor }+ - { key: F1, chars: "\x1bOP" }+ - { key: F2, chars: "\x1bOQ" }+ - { key: F3, chars: "\x1bOR" }+ - { key: F4, chars: "\x1bOS" }+ - { key: F5, chars: "\x1b[15~" }+ - { key: F6, chars: "\x1b[17~" }+ - { key: F7, chars: "\x1b[18~" }+ - { key: F8, chars: "\x1b[19~" }+ - { key: F9, chars: "\x1b[20~" }+ - { key: F10, chars: "\x1b[21~" }+ - { key: F11, chars: "\x1b[23~" }+ - { key: F12, chars: "\x1b[24~" }+ - { key: F1, mods: Shift, chars: "\x1b[1;2P" }+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }+ - { key: F3, mods: Shift, chars: "\x1b[1;2R" }+ - { key: F4, mods: Shift, chars: "\x1b[1;2S" }+ - { key: F5, mods: Shift, chars: "\x1b[15;2~" }+ - { key: F6, mods: Shift, chars: "\x1b[17;2~" }+ - { key: F7, mods: Shift, chars: "\x1b[18;2~" }+ - { key: F8, mods: Shift, chars: "\x1b[19;2~" }+ - { key: F9, mods: Shift, chars: "\x1b[20;2~" }+ - { key: F10, mods: Shift, chars: "\x1b[21;2~" }+ - { key: F11, mods: Shift, chars: "\x1b[23;2~" }+ - { key: F12, mods: Shift, chars: "\x1b[24;2~" }+ - { key: F1, mods: Control, chars: "\x1b[1;5P" }+ - { key: F2, mods: Control, chars: "\x1b[1;5Q" }+ - { key: F3, mods: Control, chars: "\x1b[1;5R" }+ - { key: F4, mods: Control, chars: "\x1b[1;5S" }+ - { key: F5, mods: Control, chars: "\x1b[15;5~" }+ - { key: F6, mods: Control, chars: "\x1b[17;5~" }+ - { key: F7, mods: Control, chars: "\x1b[18;5~" }+ - { key: F8, mods: Control, chars: "\x1b[19;5~" }+ - { key: F9, mods: Control, chars: "\x1b[20;5~" }+ - { key: F10, mods: Control, chars: "\x1b[21;5~" }+ - { key: F11, mods: Control, chars: "\x1b[23;5~" }+ - { key: F12, mods: Control, chars: "\x1b[24;5~" }+ - { key: F1, mods: Alt, chars: "\x1b[1;6P" }+ - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }+ - { key: F3, mods: Alt, chars: "\x1b[1;6R" }+ - { key: F4, mods: Alt, chars: "\x1b[1;6S" }+ - { key: F5, mods: Alt, chars: "\x1b[15;6~" }+ - { key: F6, mods: Alt, chars: "\x1b[17;6~" }+ - { key: F7, mods: Alt, chars: "\x1b[18;6~" }+ - { key: F8, mods: Alt, chars: "\x1b[19;6~" }+ - { key: F9, mods: Alt, chars: "\x1b[20;6~" }+ - { key: F10, mods: Alt, chars: "\x1b[21;6~" }+ - { key: F11, mods: Alt, chars: "\x1b[23;6~" }+ - { key: F12, mods: Alt, chars: "\x1b[24;6~" }+ - { key: F1, mods: Super, chars: "\x1b[1;3P" }+ - { key: F2, mods: Super, chars: "\x1b[1;3Q" }+ - { key: F3, mods: Super, chars: "\x1b[1;3R" }+ - { key: F4, mods: Super, chars: "\x1b[1;3S" }+ - { key: F5, mods: Super, chars: "\x1b[15;3~" }+ - { key: F6, mods: Super, chars: "\x1b[17;3~" }+ - { key: F7, mods: Super, chars: "\x1b[18;3~" }+ - { key: F8, mods: Super, chars: "\x1b[19;3~" }+ - { key: F9, mods: Super, chars: "\x1b[20;3~" }+ - { key: F10, mods: Super, chars: "\x1b[21;3~" }+ - { key: F11, mods: Super, chars: "\x1b[23;3~" }+ - { key: F12, mods: Super, chars: "\x1b[24;3~" }
.config/alacritty/tiger-big.yml
@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+ # TERM env customization.+ #+ # If this property is not set, alacritty will set it to xterm-256color.+ #+ # Note that some xterm terminfo databases don't declare support for italics.+ # You can verify this by checking for the presence of `smso` and `sitm` in+ # `infocmp xterm-256color`.+ TERM: xterm-256color++window:+ # Window dimensions in character columns and lines+ # Falls back to size specified by window manager if set to 0x0.+ # (changes require restart)+ dimensions:+ columns: 0+ lines: 0++ # Adds this many blank pixels of padding around the window+ # Units are physical pixels; this is not DPI aware.+ # (change requires restart)+ padding:+ x: 2+ y: 2++ # Window decorations+ # Setting this to false will result in window without borders and title bar.+ decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+ # The normal (roman) font face to use.+ normal:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Regular++ # The bold font face+ bold:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Bold++ # The italic font face+ italic:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Italic++ # Point size of the font+ size: 24.0++ # Offset is the extra space around each character. offset.y can be thought of+ # as modifying the linespacing, and offset.x as modifying the letter spacing.+ offset:+ x: 0+ y: 0++ # Glyph offset determines the locations of the glyphs within their cells with+ # the default being at the bottom. Increase the x offset to move the glyph to+ # the right, increase the y offset to move the glyph upward.+ glyph_offset:+ x: 0+ y: 0++ # OS X only: use thin stroke font rendering. Thin strokes are suitable+ # for retina displays, but for non-retina you probably want this set to+ # false.+ use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+ # Default colors+ primary:+ background: '0xffffff'+ foreground: '0x000000'++ # Colors the cursor will use if `custom_cursor_colors` is true+ cursor:+ text: '0xffffff'+ cursor: '0x000000'++ # Normal colors+ normal:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++ # Bright colors+ bright:+ black: '0x686868'+ red: '0xff5454'+ green: '0x00aa00'+ yellow: '0xffa061'+ blue: '0x5454ff'+ magenta: '0xff64ff'+ cyan: '0x54ffff'+ white: '0xffffff'++ # Dim colors (Optional)+ dim:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+ animation: EaseOutExpo+ duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+ - { mouse: Middle, action: PasteSelection }++mouse:+ hide_when_typing: true++ # Click settings+ #+ # The `double_click` and `triple_click` settings control the time+ # alacritty should wait for accepting multiple clicks as one double+ # or triple click.+ double_click: { threshold: 300 }+ triple_click: { threshold: 300 }++ # Faux Scrollback+ #+ # The `faux_scrollback_lines` setting controls the number+ # of lines the terminal should scroll when the alternate+ # screen buffer is active. This is used to allow mouse+ # scrolling for applications like `man`.+ #+ # To disable this completely, set `faux_scrollback_lines` to 0.+ faux_scrolling_lines: 5++selection:+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+ style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+# program: /bin/bash+# args:+# - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc. These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+# `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+# `chars` writes the specified string every time that binding is activated.+# These should generally be escape sequences, but they can be configured to+# send arbitrary strings of bytes.+# `command` must be a map containing a `program` string, and `args` array of+# strings. For example:+# - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+ # - { key: N, mods: Control|Shift, command: { program: "alacritty" } }+ - { key: V, mods: Control|Shift, action: Paste }+ - { key: C, mods: Control|Shift, action: Copy }+ - { key: Q, mods: Command, action: Quit }+ - { key: W, mods: Command, action: Quit }+ - { key: Insert, mods: Shift, action: PasteSelection }+ - { key: Key0, mods: Control, action: ResetFontSize }+ - { key: Equals, mods: Control, action: IncreaseFontSize }+ - { key: Subtract, mods: Control, action: DecreaseFontSize }+ - { key: Home, chars: "\x1bOH", mode: AppCursor }+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }+ - { key: End, chars: "\x1bOF", mode: AppCursor }+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }+ - { key: PageUp, chars: "\x1b[5~" }+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }+ - { key: PageDown, chars: "\x1b[6~" }+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }+ - { key: Back, chars: "\x7f" }+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }+ - { key: Insert, chars: "\x1b[2~" }+ - { key: Delete, chars: "\x1b[3~" }+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }+ - { key: Left, chars: "\x1bOD", mode: AppCursor }+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }+ - { key: Right, chars: "\x1bOC", mode: AppCursor }+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }+ - { key: Up, chars: "\x1bOA", mode: AppCursor }+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }+ - { key: Down, chars: "\x1bOB", mode: AppCursor }+ - { key: F1, chars: "\x1bOP" }+ - { key: F2, chars: "\x1bOQ" }+ - { key: F3, chars: "\x1bOR" }+ - { key: F4, chars: "\x1bOS" }+ - { key: F5, chars: "\x1b[15~" }+ - { key: F6, chars: "\x1b[17~" }+ - { key: F7, chars: "\x1b[18~" }+ - { key: F8, chars: "\x1b[19~" }+ - { key: F9, chars: "\x1b[20~" }+ - { key: F10, chars: "\x1b[21~" }+ - { key: F11, chars: "\x1b[23~" }+ - { key: F12, chars: "\x1b[24~" }+ - { key: F1, mods: Shift, chars: "\x1b[1;2P" }+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }+ - { key: F3, mods: Shift, chars: "\x1b[1;2R" }+ - { key: F4, mods: Shift, chars: "\x1b[1;2S" }+ - { key: F5, mods: Shift, chars: "\x1b[15;2~" }+ - { key: F6, mods: Shift, chars: "\x1b[17;2~" }+ - { key: F7, mods: Shift, chars: "\x1b[18;2~" }+ - { key: F8, mods: Shift, chars: "\x1b[19;2~" }+ - { key: F9, mods: Shift, chars: "\x1b[20;2~" }+ - { key: F10, mods: Shift, chars: "\x1b[21;2~" }+ - { key: F11, mods: Shift, chars: "\x1b[23;2~" }+ - { key: F12, mods: Shift, chars: "\x1b[24;2~" }+ - { key: F1, mods: Control, chars: "\x1b[1;5P" }+ - { key: F2, mods: Control, chars: "\x1b[1;5Q" }+ - { key: F3, mods: Control, chars: "\x1b[1;5R" }+ - { key: F4, mods: Control, chars: "\x1b[1;5S" }+ - { key: F5, mods: Control, chars: "\x1b[15;5~" }+ - { key: F6, mods: Control, chars: "\x1b[17;5~" }+ - { key: F7, mods: Control, chars: "\x1b[18;5~" }+ - { key: F8, mods: Control, chars: "\x1b[19;5~" }+ - { key: F9, mods: Control, chars: "\x1b[20;5~" }+ - { key: F10, mods: Control, chars: "\x1b[21;5~" }+ - { key: F11, mods: Control, chars: "\x1b[23;5~" }+ - { key: F12, mods: Control, chars: "\x1b[24;5~" }+ - { key: F1, mods: Alt, chars: "\x1b[1;6P" }+ - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }+ - { key: F3, mods: Alt, chars: "\x1b[1;6R" }+ - { key: F4, mods: Alt, chars: "\x1b[1;6S" }+ - { key: F5, mods: Alt, chars: "\x1b[15;6~" }+ - { key: F6, mods: Alt, chars: "\x1b[17;6~" }+ - { key: F7, mods: Alt, chars: "\x1b[18;6~" }+ - { key: F8, mods: Alt, chars: "\x1b[19;6~" }+ - { key: F9, mods: Alt, chars: "\x1b[20;6~" }+ - { key: F10, mods: Alt, chars: "\x1b[21;6~" }+ - { key: F11, mods: Alt, chars: "\x1b[23;6~" }+ - { key: F12, mods: Alt, chars: "\x1b[24;6~" }+ - { key: F1, mods: Super, chars: "\x1b[1;3P" }+ - { key: F2, mods: Super, chars: "\x1b[1;3Q" }+ - { key: F3, mods: Super, chars: "\x1b[1;3R" }+ - { key: F4, mods: Super, chars: "\x1b[1;3S" }+ - { key: F5, mods: Super, chars: "\x1b[15;3~" }+ - { key: F6, mods: Super, chars: "\x1b[17;3~" }+ - { key: F7, mods: Super, chars: "\x1b[18;3~" }+ - { key: F8, mods: Super, chars: "\x1b[19;3~" }+ - { key: F9, mods: Super, chars: "\x1b[20;3~" }+ - { key: F10, mods: Super, chars: "\x1b[21;3~" }+ - { key: F11, mods: Super, chars: "\x1b[23;3~" }+ - { key: F12, mods: Super, chars: "\x1b[24;3~" }
.config/alacritty/tiger.yml
@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+ # TERM env customization.+ #+ # If this property is not set, alacritty will set it to xterm-256color.+ #+ # Note that some xterm terminfo databases don't declare support for italics.+ # You can verify this by checking for the presence of `smso` and `sitm` in+ # `infocmp xterm-256color`.+ TERM: xterm-256color++window:+ # Window dimensions in character columns and lines+ # Falls back to size specified by window manager if set to 0x0.+ # (changes require restart)+ dimensions:+ columns: 0+ lines: 0++ # Adds this many blank pixels of padding around the window+ # Units are physical pixels; this is not DPI aware.+ # (change requires restart)+ padding:+ x: 2+ y: 2++ # Window decorations+ # Setting this to false will result in window without borders and title bar.+ decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+ # The normal (roman) font face to use.+ normal:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Regular++ # The bold font face+ bold:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Bold++ # The italic font face+ italic:+ family: 'Hack Nerd Font' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Italic++ # Point size of the font+ size: 8.0++ # Offset is the extra space around each character. offset.y can be thought of+ # as modifying the linespacing, and offset.x as modifying the letter spacing.+ offset:+ x: 0+ y: 0++ # Glyph offset determines the locations of the glyphs within their cells with+ # the default being at the bottom. Increase the x offset to move the glyph to+ # the right, increase the y offset to move the glyph upward.+ glyph_offset:+ x: 0+ y: 0++ # OS X only: use thin stroke font rendering. Thin strokes are suitable+ # for retina displays, but for non-retina you probably want this set to+ # false.+ use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+ # Default colors+ primary:+ background: '0xffffff'+ foreground: '0x000000'++ # Colors the cursor will use if `custom_cursor_colors` is true+ cursor:+ text: '0xffffff'+ cursor: '0x000000'++ # Normal colors+ normal:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++ # Bright colors+ bright:+ black: '0x686868'+ red: '0xff5454'+ green: '0x00aa00'+ yellow: '0xffa061'+ blue: '0x5454ff'+ magenta: '0xff64ff'+ cyan: '0x54ffff'+ white: '0xffffff'++ # Dim colors (Optional)+ dim:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+ animation: EaseOutExpo+ duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+ - { mouse: Middle, action: PasteSelection }++mouse:+ hide_when_typing: true++ # Click settings+ #+ # The `double_click` and `triple_click` settings control the time+ # alacritty should wait for accepting multiple clicks as one double+ # or triple click.+ double_click: { threshold: 300 }+ triple_click: { threshold: 300 }++ # Faux Scrollback+ #+ # The `faux_scrollback_lines` setting controls the number+ # of lines the terminal should scroll when the alternate+ # screen buffer is active. This is used to allow mouse+ # scrolling for applications like `man`.+ #+ # To disable this completely, set `faux_scrollback_lines` to 0.+ faux_scrolling_lines: 5++selection:+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+ style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+# program: /bin/bash+# args:+# - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc. These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+# `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+# `chars` writes the specified string every time that binding is activated.+# These should generally be escape sequences, but they can be configured to+# send arbitrary strings of bytes.+# `command` must be a map containing a `program` string, and `args` array of+# strings. For example:+# - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+ # - { key: N, mods: Control|Shift, command: { program: "alacritty" } }+ - { key: V, mods: Control|Shift, action: Paste }+ - { key: C, mods: Control|Shift, action: Copy }+ - { key: Q, mods: Command, action: Quit }+ - { key: W, mods: Command, action: Quit }+ - { key: Insert, mods: Shift, action: PasteSelection }+ - { key: Key0, mods: Control, action: ResetFontSize }+ - { key: Equals, mods: Control, action: IncreaseFontSize }+ - { key: Subtract, mods: Control, action: DecreaseFontSize }+ - { key: Home, chars: "\x1bOH", mode: AppCursor }+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }+ - { key: End, chars: "\x1bOF", mode: AppCursor }+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }+ - { key: PageUp, chars: "\x1b[5~" }+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }+ - { key: PageDown, chars: "\x1b[6~" }+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }+ - { key: Back, chars: "\x7f" }+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }+ - { key: Insert, chars: "\x1b[2~" }+ - { key: Delete, chars: "\x1b[3~" }+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }+ - { key: Left, chars: "\x1bOD", mode: AppCursor }+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }+ - { key: Right, chars: "\x1bOC", mode: AppCursor }+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }+ - { key: Up, chars: "\x1bOA", mode: AppCursor }+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }+ - { key: Down, chars: "\x1bOB", mode: AppCursor }+ - { key: F1, chars: "\x1bOP" }+ - { key: F2, chars: "\x1bOQ" }+ - { key: F3, chars: "\x1bOR" }+ - { key: F4, chars: "\x1bOS" }+ - { key: F5, chars: "\x1b[15~" }+ - { key: F6, chars: "\x1b[17~" }+ - { key: F7, chars: "\x1b[18~" }+ - { key: F8, chars: "\x1b[19~" }+ - { key: F9, chars: "\x1b[20~" }+ - { key: F10, chars: "\x1b[21~" }+ - { key: F11, chars: "\x1b[23~" }+ - { key: F12, chars: "\x1b[24~" }+ - { key: F1, mods: Shift, chars: "\x1b[1;2P" }+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }+ - { key: F3, mods: Shift, chars: "\x1b[1;2R" }+ - { key: F4, mods: Shift, chars: "\x1b[1;2S" }+ - { key: F5, mods: Shift, chars: "\x1b[15;2~" }+ - { key: F6, mods: Shift, chars: "\x1b[17;2~" }+ - { key: F7, mods: Shift, chars: "\x1b[18;2~" }+ - { key: F8, mods: Shift, chars: "\x1b[19;2~" }+ - { key: F9, mods: Shift, chars: "\x1b[20;2~" }+ - { key: F10, mods: Shift, chars: "\x1b[21;2~" }+ - { key: F11, mods: Shift, chars: "\x1b[23;2~" }+ - { key: F12, mods: Shift, chars: "\x1b[24;2~" }+ - { key: F1, mods: Control, chars: "\x1b[1;5P" }+ - { key: F2, mods: Control, chars: "\x1b[1;5Q" }+ - { key: F3, mods: Control, chars: "\x1b[1;5R" }+ - { key: F4, mods: Control, chars: "\x1b[1;5S" }+ - { key: F5, mods: Control, chars: "\x1b[15;5~" }+ - { key: F6, mods: Control, chars: "\x1b[17;5~" }+ - { key: F7, mods: Control, chars: "\x1b[18;5~" }+ - { key: F8, mods: Control, chars: "\x1b[19;5~" }+ - { key: F9, mods: Control, chars: "\x1b[20;5~" }+ - { key: F10, mods: Control, chars: "\x1b[21;5~" }+ - { key: F11, mods: Control, chars: "\x1b[23;5~" }+ - { key: F12, mods: Control, chars: "\x1b[24;5~" }+ - { key: F1, mods: Alt, chars: "\x1b[1;6P" }+ - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }+ - { key: F3, mods: Alt, chars: "\x1b[1;6R" }+ - { key: F4, mods: Alt, chars: "\x1b[1;6S" }+ - { key: F5, mods: Alt, chars: "\x1b[15;6~" }+ - { key: F6, mods: Alt, chars: "\x1b[17;6~" }+ - { key: F7, mods: Alt, chars: "\x1b[18;6~" }+ - { key: F8, mods: Alt, chars: "\x1b[19;6~" }+ - { key: F9, mods: Alt, chars: "\x1b[20;6~" }+ - { key: F10, mods: Alt, chars: "\x1b[21;6~" }+ - { key: F11, mods: Alt, chars: "\x1b[23;6~" }+ - { key: F12, mods: Alt, chars: "\x1b[24;6~" }+ - { key: F1, mods: Super, chars: "\x1b[1;3P" }+ - { key: F2, mods: Super, chars: "\x1b[1;3Q" }+ - { key: F3, mods: Super, chars: "\x1b[1;3R" }+ - { key: F4, mods: Super, chars: "\x1b[1;3S" }+ - { key: F5, mods: Super, chars: "\x1b[15;3~" }+ - { key: F6, mods: Super, chars: "\x1b[17;3~" }+ - { key: F7, mods: Super, chars: "\x1b[18;3~" }+ - { key: F8, mods: Super, chars: "\x1b[19;3~" }+ - { key: F9, mods: Super, chars: "\x1b[20;3~" }+ - { key: F10, mods: Super, chars: "\x1b[21;3~" }+ - { key: F11, mods: Super, chars: "\x1b[23;3~" }+ - { key: F12, mods: Super, chars: "\x1b[24;3~" }
.config/alacritty/work-laptop.yml
@@ -0,0 +1,391 @@+# Configuration for Alacritty, the GPU enhanced terminal emulator+++# Any items in the `env` entry below will be added as+# environment variables. Some entries may override variables+# set by alacritty it self.+env:+ # TERM env customization.+ #+ # If this property is not set, alacritty will set it to xterm-256color.+ #+ # Note that some xterm terminfo databases don't declare support for italics.+ # You can verify this by checking for the presence of `smso` and `sitm` in+ # `infocmp xterm-256color`.+ TERM: xterm-256color++window:+ # Window dimensions in character columns and lines+ # Falls back to size specified by window manager if set to 0x0.+ # (changes require restart)+ dimensions:+ columns: 0+ lines: 0++ # Adds this many blank pixels of padding around the window+ # Units are physical pixels; this is not DPI aware.+ # (change requires restart)+ padding:+ x: 2+ y: 2++ # Window decorations+ # Setting this to false will result in window without borders and title bar.+ decorations: full++# Display tabs using this many cells (changes require restart)+# tabspaces: 4++# When true, bold text is drawn using the bright variant of colors.+draw_bold_text_with_bright_colors: true++# Font configuration (changes require restart)+#+# Important font attributes like antialiasing, subpixel aa, and hinting can be+# controlled through fontconfig. Specifically, the following attributes should+# have an effect:+#+# * hintstyle+# * antialias+# * lcdfilter+# * rgba+#+# For instance, if you wish to disable subpixel antialiasing, you might set the+# rgba property to "none". If you wish to completely disable antialiasing, you+# can set antialias to false.+#+# Please see these resources for more information on how to use fontconfig+#+# * https://wiki.archlinux.org/index.php/font_configuration#Fontconfig_configuration+# * file:///usr/share/doc/fontconfig/fontconfig-user.html+font:+ # The normal (roman) font face to use.+ normal:+ family: 'Hack' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Regular++ # The bold font face+ bold:+ family: 'Hack' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Bold++ # The italic font face+ italic:+ family: 'Hack' # should be "Menlo" or something on macOS.+ # Style can be specified to pick a specific face.+ # style: Italic++ # Point size of the font+ size: 11.0++ # Offset is the extra space around each character. offset.y can be thought of+ # as modifying the linespacing, and offset.x as modifying the letter spacing.+ offset:+ x: 0+ y: 0++ # Glyph offset determines the locations of the glyphs within their cells with+ # the default being at the bottom. Increase the x offset to move the glyph to+ # the right, increase the y offset to move the glyph upward.+ glyph_offset:+ x: 0+ y: 0++ # OS X only: use thin stroke font rendering. Thin strokes are suitable+ # for retina displays, but for non-retina you probably want this set to+ # false.+ use_thin_strokes: true++# Use custom cursor colors. If true, display the cursor in the cursor.foreground+# and cursor.background colors, otherwise invert the colors of the cursor.+# custom_cursor_colors: false++# Colors+colors:+ # Default colors+ primary:+ background: '0xffffff'+ foreground: '0x000000'++ # Colors the cursor will use if `custom_cursor_colors` is true+ cursor:+ text: '0xffffff'+ cursor: '0x000000'++ # Normal colors+ normal:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++ # Bright colors+ bright:+ black: '0x686868'+ red: '0xff5454'+ green: '0x00aa00'+ yellow: '0xffa061'+ blue: '0x5454ff'+ magenta: '0xff64ff'+ cyan: '0x54ffff'+ white: '0xffffff'++ # Dim colors (Optional)+ dim:+ black: '0x000000'+ red: '0xb21818'+ green: '0x18b218'+ yellow: '0xb26818'+ blue: '0x1818b2'+ magenta: '0xb218b2'+ cyan: '0x18b2b2'+ white: '0xb2b2b2'++# Visual Bell+#+# Any time the BEL code is received, Alacritty "rings" the visual bell. Once+# rung, the terminal background will be set to white and transition back to the+# default background color. You can control the rate of this transition by+# setting the `duration` property (represented in milliseconds). You can also+# configure the transition function by setting the `animation` property.+#+# Possible values for `animation`+# `Ease`+# `EaseOut`+# `EaseOutSine`+# `EaseOutQuad`+# `EaseOutCubic`+# `EaseOutQuart`+# `EaseOutQuint`+# `EaseOutExpo`+# `EaseOutCirc`+# `Linear`+#+# To completely disable the visual bell, set its duration to 0.+#+visual_bell:+ animation: EaseOutExpo+ duration: 0++# Background opacity+background_opacity: 1.0++# Mouse bindings+#+# Currently doesn't support modifiers. Both the `mouse` and `action` fields must+# be specified.+#+# Values for `mouse`:+# - Middle+# - Left+# - Right+# - Numeric identifier such as `5`+#+# Values for `action`:+# - Paste+# - PasteSelection+# - Copy (TODO)+mouse_bindings:+ - { mouse: Middle, action: PasteSelection }++mouse:+ hide_when_typing: true++ # Click settings+ #+ # The `double_click` and `triple_click` settings control the time+ # alacritty should wait for accepting multiple clicks as one double+ # or triple click.+ double_click: { threshold: 300 }+ triple_click: { threshold: 300 }++ # Faux Scrollback+ #+ # The `faux_scrollback_lines` setting controls the number+ # of lines the terminal should scroll when the alternate+ # screen buffer is active. This is used to allow mouse+ # scrolling for applications like `man`.+ #+ # To disable this completely, set `faux_scrollback_lines` to 0.+ faux_scrolling_lines: 5++selection:+ semantic_escape_chars: ",│`|:\"' ()[]{}<>"++dynamic_title: true++# hide_cursor_when_typing: true+++# Style of the cursor+#+# Values for 'cursor_style':+# - Block+# - Underline+# - Beam+cursor:+ style: Block++# Live config reload (changes require restart)+live_config_reload: true++# Shell+#+# You can set shell.program to the path of your favorite shell, e.g. /bin/fish.+# Entries in shell.args are passed unmodified as arguments to the shell.+#+# shell:+# program: /bin/bash+# args:+# - --login++# Key bindings+#+# Each binding is defined as an object with some properties. Most of the+# properties are optional. All of the alphabetical keys should have a letter for+# the `key` value such as `V`. Function keys are probably what you would expect+# as well (F1, F2, ..). The number keys above the main keyboard are encoded as+# `Key1`, `Key2`, etc. Keys on the number pad are encoded `Number1`, `Number2`,+# etc. These all match the glutin::VirtualKeyCode variants.+#+# A list with all available `key` names can be found here:+# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants+#+# Possible values for `mods`+# `Command`, `Super` refer to the super/command/windows key+# `Control` for the control key+# `Shift` for the Shift key+# `Alt` and `Option` refer to alt/option+#+# mods may be combined with a `|`. For example, requiring control and shift+# looks like:+#+# mods: Control|Shift+#+# The parser is currently quite sensitive to whitespace and capitalization -+# capitalization must match exactly, and piped items must not have whitespace+# around them.+#+# Either an `action`, `chars`, or `command` field must be present.+# `action` must be one of `Paste`, `PasteSelection`, `Copy`, or `Quit`.+# `chars` writes the specified string every time that binding is activated.+# These should generally be escape sequences, but they can be configured to+# send arbitrary strings of bytes.+# `command` must be a map containing a `program` string, and `args` array of+# strings. For example:+# - { ... , command: { program: "alacritty", args: ["-e", "vttest"] } }+#+# Want to add a binding (e.g. "PageUp") but are unsure what the X sequence+# (e.g. "\x1b[5~") is? Open another terminal (like xterm) without tmux,+# then run `showkey -a` to get the sequence associated to a key combination.+key_bindings:+ # - { key: N, mods: Control|Shift, command: { program: "alacritty" } }+ - { key: V, mods: Control|Shift, action: Paste }+ - { key: C, mods: Control|Shift, action: Copy }+ - { key: Q, mods: Command, action: Quit }+ - { key: W, mods: Command, action: Quit }+ - { key: Insert, mods: Shift, action: PasteSelection }+ - { key: Key0, mods: Control, action: ResetFontSize }+ - { key: Equals, mods: Control, action: IncreaseFontSize }+ - { key: Subtract, mods: Control, action: DecreaseFontSize }+ - { key: Home, chars: "\x1bOH", mode: AppCursor }+ - { key: Home, chars: "\x1b[H", mode: ~AppCursor }+ - { key: End, chars: "\x1bOF", mode: AppCursor }+ - { key: End, chars: "\x1b[F", mode: ~AppCursor }+ - { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }+ - { key: PageUp, mods: Control, chars: "\x1b[5;5~" }+ - { key: PageUp, chars: "\x1b[5~" }+ - { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }+ - { key: PageDown, mods: Control, chars: "\x1b[6;5~" }+ - { key: PageDown, chars: "\x1b[6~" }+ - { key: Tab, mods: Shift, chars: "\x1b[Z" }+ - { key: Back, chars: "\x7f" }+ - { key: Back, mods: Alt, chars: "\x1b\x7f" }+ - { key: Insert, chars: "\x1b[2~" }+ - { key: Delete, chars: "\x1b[3~" }+ - { key: Left, mods: Shift, chars: "\x1b[1;2D" }+ - { key: Left, mods: Control, chars: "\x1b[1;5D" }+ - { key: Left, mods: Alt, chars: "\x1b[1;3D" }+ - { key: Left, chars: "\x1b[D", mode: ~AppCursor }+ - { key: Left, chars: "\x1bOD", mode: AppCursor }+ - { key: Right, mods: Shift, chars: "\x1b[1;2C" }+ - { key: Right, mods: Control, chars: "\x1b[1;5C" }+ - { key: Right, mods: Alt, chars: "\x1b[1;3C" }+ - { key: Right, chars: "\x1b[C", mode: ~AppCursor }+ - { key: Right, chars: "\x1bOC", mode: AppCursor }+ - { key: Up, mods: Shift, chars: "\x1b[1;2A" }+ - { key: Up, mods: Control, chars: "\x1b[1;5A" }+ - { key: Up, mods: Alt, chars: "\x1b[1;3A" }+ - { key: Up, chars: "\x1b[A", mode: ~AppCursor }+ - { key: Up, chars: "\x1bOA", mode: AppCursor }+ - { key: Down, mods: Shift, chars: "\x1b[1;2B" }+ - { key: Down, mods: Control, chars: "\x1b[1;5B" }+ - { key: Down, mods: Alt, chars: "\x1b[1;3B" }+ - { key: Down, chars: "\x1b[B", mode: ~AppCursor }+ - { key: Down, chars: "\x1bOB", mode: AppCursor }+ - { key: F1, chars: "\x1bOP" }+ - { key: F2, chars: "\x1bOQ" }+ - { key: F3, chars: "\x1bOR" }+ - { key: F4, chars: "\x1bOS" }+ - { key: F5, chars: "\x1b[15~" }+ - { key: F6, chars: "\x1b[17~" }+ - { key: F7, chars: "\x1b[18~" }+ - { key: F8, chars: "\x1b[19~" }+ - { key: F9, chars: "\x1b[20~" }+ - { key: F10, chars: "\x1b[21~" }+ - { key: F11, chars: "\x1b[23~" }+ - { key: F12, chars: "\x1b[24~" }+ - { key: F1, mods: Shift, chars: "\x1b[1;2P" }+ - { key: F2, mods: Shift, chars: "\x1b[1;2Q" }+ - { key: F3, mods: Shift, chars: "\x1b[1;2R" }+ - { key: F4, mods: Shift, chars: "\x1b[1;2S" }+ - { key: F5, mods: Shift, chars: "\x1b[15;2~" }+ - { key: F6, mods: Shift, chars: "\x1b[17;2~" }+ - { key: F7, mods: Shift, chars: "\x1b[18;2~" }+ - { key: F8, mods: Shift, chars: "\x1b[19;2~" }+ - { key: F9, mods: Shift, chars: "\x1b[20;2~" }+ - { key: F10, mods: Shift, chars: "\x1b[21;2~" }+ - { key: F11, mods: Shift, chars: "\x1b[23;2~" }+ - { key: F12, mods: Shift, chars: "\x1b[24;2~" }+ - { key: F1, mods: Control, chars: "\x1b[1;5P" }+ - { key: F2, mods: Control, chars: "\x1b[1;5Q" }+ - { key: F3, mods: Control, chars: "\x1b[1;5R" }+ - { key: F4, mods: Control, chars: "\x1b[1;5S" }+ - { key: F5, mods: Control, chars: "\x1b[15;5~" }+ - { key: F6, mods: Control, chars: "\x1b[17;5~" }+ - { key: F7, mods: Control, chars: "\x1b[18;5~" }+ - { key: F8, mods: Control, chars: "\x1b[19;5~" }+ - { key: F9, mods: Control, chars: "\x1b[20;5~" }+ - { key: F10, mods: Control, chars: "\x1b[21;5~" }+ - { key: F11, mods: Control, chars: "\x1b[23;5~" }+ - { key: F12, mods: Control, chars: "\x1b[24;5~" }+ - { key: F1, mods: Alt, chars: "\x1b[1;6P" }+ - { key: F2, mods: Alt, chars: "\x1b[1;6Q" }+ - { key: F3, mods: Alt, chars: "\x1b[1;6R" }+ - { key: F4, mods: Alt, chars: "\x1b[1;6S" }+ - { key: F5, mods: Alt, chars: "\x1b[15;6~" }+ - { key: F6, mods: Alt, chars: "\x1b[17;6~" }+ - { key: F7, mods: Alt, chars: "\x1b[18;6~" }+ - { key: F8, mods: Alt, chars: "\x1b[19;6~" }+ - { key: F9, mods: Alt, chars: "\x1b[20;6~" }+ - { key: F10, mods: Alt, chars: "\x1b[21;6~" }+ - { key: F11, mods: Alt, chars: "\x1b[23;6~" }+ - { key: F12, mods: Alt, chars: "\x1b[24;6~" }+ - { key: F1, mods: Super, chars: "\x1b[1;3P" }+ - { key: F2, mods: Super, chars: "\x1b[1;3Q" }+ - { key: F3, mods: Super, chars: "\x1b[1;3R" }+ - { key: F4, mods: Super, chars: "\x1b[1;3S" }+ - { key: F5, mods: Super, chars: "\x1b[15;3~" }+ - { key: F6, mods: Super, chars: "\x1b[17;3~" }+ - { key: F7, mods: Super, chars: "\x1b[18;3~" }+ - { key: F8, mods: Super, chars: "\x1b[19;3~" }+ - { key: F9, mods: Super, chars: "\x1b[20;3~" }+ - { key: F10, mods: Super, chars: "\x1b[21;3~" }+ - { key: F11, mods: Super, chars: "\x1b[23;3~" }+ - { key: F12, mods: Super, chars: "\x1b[24;3~" }
@@ -0,0 +1,418 @@+[global]+ ### Display ###++ # 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 window manager that exports the+ # _NET_ACTIVE_WINDOW property.+ # This should be the case for almost all modern window managers.+ #+ # If this option is set to mouse or keyboard, the monitor option+ # will be ignored.+ follow = mouse++ # 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 respectively.+ # 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 = "300x5-30+20"+ #geometry = "800x5+30-20"+ geometry = "0x5+30-20"++ # Show how many messages are currently hidden (because of geometry).+ indicate_hidden = yes++ # 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 window manager is+ # present (e.g. xcompmgr, compiz, etc.).+ transparency = 0++ # The height of the entire notification. If the height is smaller+ # than the font height and padding combined, it will be raised+ # to the font height and padding.+ notification_height = 0++ # Draw a line of "separator_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++ # Defines width in pixels of frame around the notification window.+ # Set to 0 to disable.+ frame_width = 3++ # Defines color of the frame around the notification window.+ frame_color = "#aaaaaa"++ # 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++ # Sort messages by urgency.+ sort = yes++ # 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.+ # A client can set the 'transient' hint to bypass this. See the rules+ # section for how to disable this if necessary+ idle_threshold = 30++ ### Text ###++ # font = Ubuntuo Mono 16+ font = Hack Nerd Font 16++ # The spacing between lines. If the height is smaller than the+ # font height, it will get raised to the font height.+ line_height = 0++ # Possible values are:+ # full: Allow a small subset of html markup in notifications:+ # <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>.+ #+ # strip: This setting is provided for compatibility with some broken+ # clients that send markup even though it's not enabled on the+ # server. Dunst will try to strip the markup but the parsing is+ # simplistic so using this option outside of matching rules for+ # specific applications *IS GREATLY DISCOURAGED*.+ #+ # no: Disable markup parsing, incoming notifications will be treated as+ # plain text. Dunst will not advertise that it has the body-markup+ # capability if this is set as a global setting.+ #+ # It's important to note that markup inside the format option will be parsed+ # regardless of what this is set to.+ markup = full++ # 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+ # %n progress value if set without any extra characters+ # %% Literal %+ # Markup is allowed+ format = "<b>%s</b>\n%b"++ # Alignment of message text.+ # Possible values are "left", "center" and "right".+ alignment = left++ # 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++ # When word_wrap is set to no, specify where to make an ellipsis in long lines.+ # Possible values are "start", "middle" and "end".+ ellipsize = middle++ # Ignore newlines '\n' in notifications.+ ignore_newline = no++ # Stack together notifications with the same content+ stack_duplicates = true++ # Hide the count of stacked notifications with the same content+ hide_duplicate_count = false++ # Display indicators for URLs (U) and actions (A).+ show_indicators = yes++ ### Icons ###++ # Align icons left/right/off+ icon_position = left++ # Scale larger icons down to this size, set to 0 to disable+ max_icon_size = 32++ # Paths to default icons.+ # icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/+ icon_path = /usr/share/icons/Adwaita/32x32/status/:/usr/share/icons/Adwaita/32x32/devices/++ ### History ###++ # 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++ ### Misc/Advanced ###++ # dmenu path.+ dmenu = /usr/bin/dmenu -p dunst:++ # Browser for opening urls in context menu.+ browser = /usr/bin/firefox -new-tab++ # Always run rule-defined scripts, even if the notification is suppressed+ always_run_script = true++ # Define the title of the windows spawned by dunst+ title = Dunst++ # Define the class of the windows spawned by dunst+ class = Dunst++ # Print a notification on startup.+ # This is mainly for error detection, since dbus (re-)starts dunst+ # automatically after a crash.+ startup_notification = false++ # Manage dunst's desire for talking+ # Can be one of the following values:+ # crit: Critical features. Dunst aborts+ # warn: Only non-fatal warnings+ # mesg: Important Messages+ # info: all unimportant stuff+ # debug: all less than unimportant stuff+ verbosity = mesg++ # Define the corner radius of the notification window+ # in pixel size. If the radius is 0, you have no rounded+ # corners.+ # The radius will be automatically lowered if it exceeds half of the+ # notification height to avoid clipping text and/or icons.+ corner_radius = 0++ ### Legacy++ # Use the Xinerama extension instead of RandR for multi-monitor support.+ # This setting is provided for compatibility with older nVidia drivers that+ # do not support RandR and using it on systems that support RandR is highly+ # discouraged.+ #+ # By enabling this setting dunst will not be able to detect when a monitor+ # is connected or disconnected which might break follow mode if the screen+ # layout changes.+ force_xinerama = false++ ### mouse++ # Defines action of mouse event+ # Possible values are:+ # * none: Don't do anything.+ # * do_action: If the notification has exactly one action, or one is marked as default,+ # invoke it. If there are multiple and no default, open the context menu.+ # * close_current: Close current notification.+ # * close_all: Close all notifications.+ mouse_left_click = close_current+ mouse_middle_click = do_action+ mouse_right_click = close_all++# Experimental features that may or may not work correctly. Do not expect them+# to have a consistent behaviour across releases.+[experimental]+ # Calculate the dpi to use on a per-monitor basis.+ # If this setting is enabled the Xft.dpi value will be ignored and instead+ # dunst will attempt to calculate an appropriate dpi value for each monitor+ # using the resolution and physical size. This might be useful in setups+ # where there are multiple screens with very different dpi values.+ per_monitor_dpi = false++[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". Make sure this key actually exists on your keyboard layout,+ # e.g. check output of 'xmodmap -pke'+ history = ctrl+grave++ # Context menu.+ context = ctrl+shift+period++[urgency_low]+ # IMPORTANT: colors have to be defined in quotation marks.+ # Otherwise the "#" and following would be interpreted as a comment.+ background = "#dfdcdf"+ foreground = "#000000"+ timeout = 5+ # Icon for notifications with low urgency, uncomment to enable+ #icon = /path/to/icon++[urgency_normal]+ background = "#dfdcdf"+ foreground = "#000000"+ timeout = 5+ # Icon for notifications with normal urgency, uncomment to enable+ #icon = /path/to/icon++[urgency_critical]+ background = "#900000"+ foreground = "#ffffff"+ frame_color = "#ff0000"+ timeout = 0+ # Icon for notifications with critical urgency, uncomment to enable+ #icon = /path/to/icon++# 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 (discouraged, see desktop_entry)+# body+# category+# desktop_entry+# icon+# match_transient+# msg_urgency+# stack_tag+# summary+#+# and you can override the+# background+# foreground+# format+# frame_color+# fullscreen+# new_icon+# set_stack_tag+# set_transient+# timeout+# urgency+#+# Shell-like globbing will get expanded.+#+# Instead of the appname filter, it's recommended to use the desktop_entry filter.+# GLib based applications export their desktop-entry name. In comparison to the appname,+# the desktop-entry won't get localized.+#+# 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.++# Disable the transient hint so that idle_threshold cannot be bypassed from the+# client+#[transient_disable]+# match_transient = yes+# set_transient = no+#+# Make the handling of transient notifications more strict by making them not+# be placed in history.+#[transient_history_ignore]+# match_transient = yes+# history_ignore = yes++# fullscreen values+# show: show the notifications, regardless if there is a fullscreen window opened+# delay: displays the new notification, if there is no fullscreen window active+# If the notification is already drawn, it won't get undrawn.+# pushback: same as delay, but when switching into fullscreen, the notification will get+# withdrawn from screen again and will get delayed like a new notification+#[fullscreen_delay_everything]+# fullscreen = delay+#[fullscreen_show_critical]+# msg_urgency = critical+# fullscreen = show++#[espeak]+# summary = "*"+# script = dunst_espeak.sh++#[script-test]+# summary = "*script*"+# script = dunst_test.sh++#[ignore]+# # This notification will not be displayed+# summary = "foobar"+# format = ""++#[history-ignore]+# # This notification will not be saved in history+# summary = "foobar"+# history_ignore = yes++#[skip-display]+# # This notification will not be displayed, but will be included in the history+# summary = "foobar"+# skip_display = yes++#[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+#+#[stack-volumes]+# appname = "some_volume_notifiers"+# set_stack_tag = "volume"+#+# vim: ft=cfg
.config/highlight/langDefs/sml.lang
@@ -0,0 +1,31 @@+-- Language definition generated by lang2to3++Description="Standard ML"++Keywords={+ { Id=1,+ List={"abstraction", "abstype", "and", "andalso", "as", "before", "case", "datatype", "else", "end", "eqtype", "exception", "do", "fn", "fun", "functor", "handle", "if", "in", "include", "infix", "infixr", "let", "local", "nonfix", "of", "op", "open", "orelse", "overload", "raise", "rec", "sharing", "sig", "signature", "struct", "structure", "then", "type", "val", "where", "while", "with", "withtype", "o", "true", "false", "", "Bool", "String", "Int", "Real", "Word", "Char", "StringCvt", "Word8", "List", "ListPair", "Vector", "TextIO", "BinIO", "div", "mod"},+ },+ { Id=2,+ List={"bool", "string", "int", "real", "word"},+ },+ { Id=4,+ Regex=[[(\w+)\s*\(]],+ },+}++Strings={+ Delimiter=[["]],+}++Comments = {+ { Block = true, Nested = false,+ Delimiter = { [[\(\*]], [[\*\)]] }+ }+}++IgnoreCase=false++Operators=[[\(|\)|\[|\]|\{|\}|\,|\;|\:|\&|\<|\>|\!|\=|\/|\*|\%|\+|\-|\'|\.]]++--FIXME no default escchar param: regex(\\\d{3}|\\x\p{XDigit}{2}|\\[ntvbrfa\\\?'"])
.config/highlight/themes/bclear.theme
@@ -0,0 +1,22 @@+-- Theme generated by vim2theme++Description = "vim bclear"++Default = { Colour="#323232" }+Canvas = { Colour="#ffffff" }+Number = { Colour="#1094a0" }+Escape = { Colour="#dc6816" }+String = { Colour="#1094a0" }+BlockComment = { Colour="#969696" }+StringPreProc = String+LineComment = BlockComment+Operator = Default+LineNum = BlockComment+PreProcessor = { Colour="#69c73a" }++Keywords = {+ { Colour="#3b6ac8" },+ { Colour="#a00050" },+ { Colour="#00a150" },+ { Colour="#c73a69" },+}
@@ -0,0 +1,4 @@+sub-auto=all+sub-file-paths=Subs:subs+af=dynaudnorm=g=7+demuxer-max-bytes=1500MiB
.config/nvim/coc-settings.json
@@ -0,0 +1,12 @@+{+ "diagnostic.virtualText": false,+ "diagnostic.joinMessageLines": true,+ "diagnostic.checkCurrentLine": true,+ "diagnostic.messageTarget": "float",+ "diagnostic.level": "information",+ "suggest.autoTrigger": "none",+ "signature.enable": false,+ "coc.preferences.snippets.enable": false,+ "rust-analyzer.diagnostics.enable": false,+ "rust-analyzer.serverPath": "/home/andrew/bin/rust-analyzer-wrapper"+}
.config/nvim/colors/summerfruit256.vim
@@ -0,0 +1,323 @@+" Vim color file+" Maintainer: Martin Baeuml <baeuml@gmail.com>+" Last Change: 2008-02-09+"+" This color file is a modification of the "summerfruit" color scheme by Armin Ronacher+" so that it can be used on 88- and 256-color xterms. The colors are translated+" using Henry So's programmatic approximation of gui colors from his "desert256"+" color scheme.+"+" I removed the "italic" option and the background color from+" comment-coloring because that looks odd on my console.+"+" The original "summerfruit" color scheme and "desert256" are available from vim.org.++set background=light+if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ hi clear+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="summerfruit256"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+ " functions {{{+ " returns an approximate grey index for the given grey level+ fun <SID>grey_number(x)+ if &t_Co == 88+ if a:x < 23+ return 0+ elseif a:x < 69+ return 1+ elseif a:x < 103+ return 2+ elseif a:x < 127+ return 3+ elseif a:x < 150+ return 4+ elseif a:x < 173+ return 5+ elseif a:x < 196+ return 6+ elseif a:x < 219+ return 7+ elseif a:x < 243+ return 8+ else+ return 9+ endif+ else+ if a:x < 14+ return 0+ else+ let l:n = (a:x - 8) / 10+ let l:m = (a:x - 8) % 10+ if l:m < 5+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual grey level represented by the grey index+ fun <SID>grey_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 46+ elseif a:n == 2+ return 92+ elseif a:n == 3+ return 115+ elseif a:n == 4+ return 139+ elseif a:n == 5+ return 162+ elseif a:n == 6+ return 185+ elseif a:n == 7+ return 208+ elseif a:n == 8+ return 231+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 8 + (a:n * 10)+ endif+ endif+ endfun++ " returns the palette index for the given grey index+ fun <SID>grey_color(n)+ if &t_Co == 88+ if a:n == 0+ return 16+ elseif a:n == 9+ return 79+ else+ return 79 + a:n+ endif+ else+ if a:n == 0+ return 16+ elseif a:n == 25+ return 231+ else+ return 231 + a:n+ endif+ endif+ endfun++ " returns an approximate color index for the given color level+ fun <SID>rgb_number(x)+ if &t_Co == 88+ if a:x < 69+ return 0+ elseif a:x < 172+ return 1+ elseif a:x < 230+ return 2+ else+ return 3+ endif+ else+ if a:x < 75+ return 0+ else+ let l:n = (a:x - 55) / 40+ let l:m = (a:x - 55) % 40+ if l:m < 20+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual color level for the given color index+ fun <SID>rgb_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 139+ elseif a:n == 2+ return 205+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 55 + (a:n * 40)+ endif+ endif+ endfun++ " returns the palette index for the given R/G/B color indices+ fun <SID>rgb_color(x, y, z)+ if &t_Co == 88+ return 16 + (a:x * 16) + (a:y * 4) + a:z+ else+ return 16 + (a:x * 36) + (a:y * 6) + a:z+ endif+ endfun++ " returns the palette index to approximate the given R/G/B color levels+ fun <SID>color(r, g, b)+ " get the closest grey+ let l:gx = <SID>grey_number(a:r)+ let l:gy = <SID>grey_number(a:g)+ let l:gz = <SID>grey_number(a:b)++ " get the closest color+ let l:x = <SID>rgb_number(a:r)+ let l:y = <SID>rgb_number(a:g)+ let l:z = <SID>rgb_number(a:b)++ if l:gx == l:gy && l:gy == l:gz+ " there are two possibilities+ let l:dgr = <SID>grey_level(l:gx) - a:r+ let l:dgg = <SID>grey_level(l:gy) - a:g+ let l:dgb = <SID>grey_level(l:gz) - a:b+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+ let l:dr = <SID>rgb_level(l:gx) - a:r+ let l:dg = <SID>rgb_level(l:gy) - a:g+ let l:db = <SID>rgb_level(l:gz) - a:b+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+ if l:dgrey < l:drgb+ " use the grey+ return <SID>grey_color(l:gx)+ else+ " use the color+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ else+ " only one possibility+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ endfun++ " returns the palette index to approximate the 'rrggbb' hex string+ fun <SID>rgb(rgb)+ let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+ let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+ let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++ return <SID>color(l:r, l:g, l:b)+ endfun++ " sets the highlighting for the given group+ fun <SID>X(group, fg, bg, attr)+ if a:fg != ""+ exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)+ endif+ if a:bg != ""+ exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)+ endif+ if a:attr != ""+ exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr+ endif+ endfun+ " }}}++ " Global+ call <SID>X("Normal", "000000", "ffffff", "")+ " call <SID>X("NonText", "438ec3", "b7dce8", "")++ " Search+ call <SID>X("Search", "800000", "ffae00", "")+ call <SID>X("IncSearch", "800000", "ffae00", "")++ " Interface Elements+ call <SID>X("StatusLine", "ffffff", "43c464", "bold")+ call <SID>X("StatusLineNC", "9bd4a9", "51b069", "")+ call <SID>X("VertSplit", "3687a2", "3687a2", "")+ call <SID>X("Folded", "3c78a2", "c3daea", "")+ call <SID>X("IncSearch", "708090", "f0e68c", "")+ call <SID>X("Pmenu", "000000", "e8ebff", "")+ call <SID>X("PmenuSel", "ffffff", "000000", "")+ call <SID>X("SignColumn", "", "", "")+ call <SID>X("CursorLine", "", "c0d9eb", "")+ " call <SID>X("LineNr", "eeeeee", "438ec3", "bold")+ call <SID>X("MatchParen", "", "", "")++ " Specials+ call <SID>X("Todo", "e50808", "dbf3cd", "bold")+ call <SID>X("Title", "000000", "", "")+ call <SID>X("Special", "fd8900", "", "")++ " Syntax Elements+ call <SID>X("String", "0086d2", "", "")+ call <SID>X("Constant", "0086d2", "", "")+ call <SID>X("Number", "0086f7", "", "")+ call <SID>X("Statement", "fb660a", "", "")+ call <SID>X("Function", "ff0086", "", "")+ call <SID>X("PreProc", "ff0007", "", "")+ call <SID>X("Comment", "22a21f", "", "bold")+ call <SID>X("Type", "70796b", "", "")+ call <SID>X("Error", "ffffff", "d40000", "")+ call <SID>X("Identifier", "ff0086", "", "")+ call <SID>X("Label", "ff0086", "", "")++ " Python Highlighting+ call <SID>X("pythonCoding", "ff0086", "", "")+ call <SID>X("pythonRun", "ff0086", "", "")+ call <SID>X("pythonBuiltinObj", "2b6ba2", "", "")+ call <SID>X("pythonBuiltinFunc", "2b6ba2", "", "")+ call <SID>X("pythonException", "ee0000", "", "")+ call <SID>X("pythonExClass", "66cd66", "", "")+ call <SID>X("pythonSpaceError", "", "", "")+ call <SID>X("pythonDocTest", "2f5f49", "", "")+ call <SID>X("pythonDocTest2", "3b916a", "", "")+ call <SID>X("pythonFunction", "ee0000", "", "")+ call <SID>X("pythonClass", "ff0086", "", "")++ " HTML Highlighting+ call <SID>X("htmlTag", "00bdec", "", "")+ call <SID>X("htmlEndTag", "00bdec", "", "")+ call <SID>X("htmlSpecialTagName", "4aa04a", "", "")+ call <SID>X("htmlTagName", "4aa04a", "", "")+ call <SID>X("htmlTagN", "4aa04a", "", "")++ " Jinja Highlighting+ call <SID>X("jinjaTagBlock", "ff0007", "fbf4c7", "bold")+ call <SID>X("jinjaVarBlock", "ff0007", "fbf4c7", "")+ call <SID>X("jinjaString", "0086d2", "fbf4c7", "")+ call <SID>X("jinjaNumber", "bf0945", "fbf4c7", "bold")+ call <SID>X("jinjaStatement", "fb660a", "fbf4c7", "bold")+ call <SID>X("jinjaComment", "008800", "002300", "italic")+ call <SID>X("jinjaFilter", "ff0086", "fbf4c7", "")+ call <SID>X("jinjaRaw", "aaaaaa", "fbf4c7", "")+ call <SID>X("jinjaOperator", "ffffff", "fbf4c7", "")+ call <SID>X("jinjaVariable", "92cd35", "fbf4c7", "")+ call <SID>X("jinjaAttribute", "dd7700", "fbf4c7", "")+ call <SID>X("jinjaSpecial", "008ffd", "fbf4c7", "")++ " delete functions {{{+ delf <SID>X+ delf <SID>rgb+ delf <SID>color+ delf <SID>rgb_color+ delf <SID>rgb_level+ delf <SID>rgb_number+ delf <SID>grey_color+ delf <SID>grey_level+ delf <SID>grey_number+ " }}}+endif++" vim: set fdl=0 fdm=marker:+
.config/nvim/include/autos.vim
@@ -0,0 +1,8 @@+" Strip trailing whitespace on every save.+fun! StripTrailingWhitespace()+ let l = line(".")+ let c = col(".")+ %s/\s\+$//e+ call cursor(l, c)+endfun+autocmd BufWritePre * :call StripTrailingWhitespace()
.config/nvim/include/comment.vim
@@ -0,0 +1,26 @@+" Some quick hacks to automatically insert line-by-line comments of highlighted+" source code. This requires that the Comment and EndComment variables are set,+" usually via include/lang.vim.++if !exists("b:Comment")+ let b:Comment="" | let b:EndComment=""+endif++fun! RegexLiteral(str)+ return escape(a:str, "*$.^/")+endfun++fun! CommentLines()+ if b:Comment != ""+ exe ":s/^\\(\\s*\\)/\\1".escape(b:Comment, '/')." /e"+ exe ":s/$/ ".escape(b:EndComment, '/')."/e"+ endif+endfun++fun! UncommentLines()+ exe ":s/^\\(\\s*\\)".RegexLiteral(b:Comment)."\\s*/\\1/e"+ exe ":s/\\s*".RegexLiteral(b:EndComment)."\\s*$//e"+endfun++noremap ,, :call CommentLines()<CR>+noremap ,. :call UncommentLines()<CR>
.config/nvim/include/keybinds.vim
@@ -0,0 +1,46 @@+" Convenience for inserting a newline from normal mode.+noremap Q :put=''<CR>++" Hitting escape twice should clear any search highlights.+nnoremap <ESC><ESC> :nohlsearch<CR>++" CTRL-S saves current buffer. Muscle memory from Windows years ago.+noremap <C-s> :w<CR>+inoremap <C-s> <ESC>l:w<CR>++" Keybindings for invoking 'par' to reflow text.+" 'f' is for reflowing to shorter lines, usually for commit messages.+" 'g' is for standard 79 columns with 4 space tabs.+" 'h' is like 'g', except it's for 8 space tabs. (e.g., Go.)+vnoremap <Leader>f !par T4 'B=.,?_A_a' 71qr<CR>+nmap <Leader>f <S-v><Leader>f+vnoremap <Leader>g !par T4 'B=.,?_A_a' 79qr<CR>+nmap <Leader>g <S-v><Leader>g+vnoremap <Leader>h !par T8 'B=.,?_A_a' 79qr<CR>+nmap <Leader>h <S-v><Leader>h++" Convenience keybinding for writing the current date.+noremap <Leader>d :read !date +"\%B \%-d, \%Y"<CR>++" Writer dividers equivalence to the length of the previous line.+fun! Divider(char)+ let len = strlen(getline('.'))+ call append('.', repeat(a:char, len))+ normal j+endfun+noremap <Leader>= :call Divider('=')<CR>+noremap <Leader>- :call Divider('-')<CR>+noremap <Leader>~ :call Divider('~')<CR>++" Shortcut for reloading neovim config.+noremap <F2> :source ~/.vimrc<CR>+" Shortcut for enabling text mode.+noremap <F12> :source ~/.vim/text.vim<CR>++" Shortcut for writing current file with 'sudo'.+command! W w !sudo tee % > /dev/null++" fzf entrypoint.+nmap <Leader>e :Files<CR>+" ripgrep entrypoint.+nmap <Leader>r :Rg<CR>
.config/nvim/include/lang.vim
@@ -0,0 +1,163 @@+au FileType rust runtime! include/lang/rust.vim++au FileType go runtime! include/lang/go.vim++au FileType ledger+ \ let b:Comment=";"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/four.vim++au FileType wini+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim++au FileType conf+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType toml+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType yaml+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType java+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/four.vim++au FileType javascript+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"+ \ | runtime! include/spacing/two.vim++au FileType c+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"+ \ | runtime! include/spacing/four.vim++au FileType cpp+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/four.vim++au FileType nginx+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/four.vim+ \ | set smartindent++au FileType tex+ \ let &mp="clear; pdflatex %"+ \ | let b:Comment="%"+ \ | let b:EndComment=""++au FileType lua+ \ let &mp="clear; lua %"+ \ | let &efm="lua: %f:%l:%m,%-G%.%#"+ \ | let b:Comment="--"+ \ | let b:EndComment=""++au FileType python+ \ let &mp="clear; python2 %"+ \ | let &efm='%A %#File "%f"\, line %l\,%.%#,%-GTrace%.%#,%C %.%#,%Z%m,%-G%.%#'+ \ | let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/four.vim++au FileType php+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim++" Make PHP use smartindent dammit!+" (This is so HTML indenting is sane.)+au BufRead,BufNewFile *.html set smartindent+au BufRead,BufNewFile *.php set smartindent+au BufRead,BufNewFile *.jgr set smartindent++au FileType haskell+ \ let &mp="clear; ghc --make %"+ \ | let &efm='%f:%l:%c:'+ \ | let b:Comment="--"+ \ | let b:EndComment=""+ \ | set smartindent++au FileType cabal+ \ let b:Comment="--"+ \ | let b:EndComment=""+ \ | set smartindent++au FileType sml+ \ let &mp="ledit -x -h ~/.ledit/mosml mosml -P full %"+ \ | let b:Comment="(*"+ \ | let b:EndComment="*)"++au FileType lisp+ \ let b:Comment=";"+ \ | let b:EndComment=""++au FileType sh+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim++au FileType zsh+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | runtime! include/spacing/two.vim++au FileType utln+ \ let &mp="clear; validate-utlnx %"+ \ | let &efm='%f\, line %#%l:%m'+ \ | let b:Comment="(X:"+ \ | let b:EndComment=")"+ \ | set smartindent++au FileType mako+ \ let b:Comment="<%doc>"+ \ | let b:EndComment="</%doc>"+ \ | set smartindent++au FileType crontab+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType conf+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType make+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType html+ \ let b:Comment="<!--"+ \ | let b:EndComment="-->"++au BufEnter *.html setlocal smartindent+au BufEnter *.tpl setlocal smartindent++au FileType htmldjango+ \ let b:Comment="{% comment %}"+ \ | let b:EndComment="{% endcomment %}"++au FileType css+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"++au FileType vim+ \ let b:Comment='"'+ \ | let b:EndComment=""
.config/nvim/include/lang/go.vim
@@ -0,0 +1,13 @@+let b:Comment="//"+let b:EndComment=""+runtime! include/spacing/eight.vim+setlocal noexpandtab+setlocal colorcolumn=100+noremap <Leader>i :GoImports<CR>++let g:gofmt_command="goimports"+let g:go_jump_to_error = 0+let g:go_autodetect_gopath = 0+let g:go_template_autocreate = 0+let g:go_def_mode='gopls'+let g:go_def_mapping_enabled = 1
.config/nvim/include/lang/rust.vim
@@ -0,0 +1,44 @@+" For custom commenting functions.+let b:Comment="//"+let b:EndComment=""++" Four space indents.+runtime! include/spacing/four.vim++" Make syntax highlighting more efficient.+syntax sync fromstart++" 'recommended style' uses 99-column lines. No thanks.+let g:rust_recommended_style = 0++" Always run rustfmt is applicable and always use stable.+let g:rustfmt_autosave_if_config_present = 1+let g:rustfmt_command = "rustfmt +stable"++" Make CTRL-T work correctly with goto-definition.+setlocal tagfunc=CocTagFunc++nmap <Leader>gt <Plug>(coc-type-definition)+nmap <Leader>gre <Plug>(coc-references)+nmap <Leader>grn <Plug>(coc-rename)+nmap <Leader>gd <Plug>(coc-diagnostic-info)+nmap <Leader>gp <Plug>(coc-diagnostic-prev)+nmap <Leader>gn <Plug>(coc-diagnostic-next)++" Trigger auto-completion with C-space.+inoremap <silent><expr> <c-space> coc#refresh()+" Make <TAB> select next completion and Shift-<TAB> to select previous.+function! s:check_back_space() abort+ let col = col('.') - 1+ return !col || getline('.')[col - 1] =~ '\s'+endfunction+inoremap <silent><expr> <TAB>+ \ pumvisible() ? "\<C-n>" :+ \ <SID>check_back_space() ? "\<TAB>" :+ \ coc#refresh()+inoremap <silent><expr> <S-TAB>+ \ pumvisible() ? "\<C-p>" :+ \ <SID>check_back_space() ? "\<S-TAB>" :+ \ coc#refresh()+" Make <CR> confirm completion.+inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
.config/nvim/include/options.vim
@@ -0,0 +1,35 @@+" Show line numbers.+set number++" Always expand tabs to spaces.+set expandtab++" Keep a buffer around even when abandoned.+" Without this, jump-to-definition in LSP clients seems to complain if the+" file hasn't been saved. In other words, let us go to other buffers even if+" the current one isn't saved.+set hidden++" This causes neovim to use the system clipboard for all yanking operations,+" instead of needing to use the '+' or '*' registers explicitly.+set clipboard+=unnamedplus++" There's no need to do syntax highlighting past this many columns. The default+" of 3000 is a bit and degrades performance.+set synmaxcol=200++" While typing a search, start highlighting results.+set incsearch++" When scrolling, always keep the cursor N lines from the edges.+set scrolloff=10++" By default, use two space indents and don't wrap automatically.+set textwidth=0+runtime! include/spacing/two.vim++" Don't switch window focus when using HTTP client.+let g:http_client_focus_output_window=0++" Don't conceal things in markup languages.+let g:pandoc#syntax#conceal#use = 0
.config/nvim/include/plugins.vim
@@ -0,0 +1,86 @@+call plug#begin(stdpath('data') . '/plugged')++" The standard Rust vim plugin. There's quite a bit of overlap with LSPs here,+" but it has useful settings for indentation and what not.+Plug 'rust-lang/rust.vim'++" Bulk renaming of files in vim.+Plug 'qpkorr/vim-renamer'++" TOML syntax support.+Plug 'cespare/vim-toml'++" Go plugin.+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }++" FZF plugin for fuzzy searching files.+Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }+Plug 'junegunn/fzf.vim'++" For autowrapping function declarations.+Plug 'FooSoft/vim-argwrap'+nnoremap <silent> \q :ArgWrap<CR>+let g:argwrap_tail_comma = 1++" Install common neovim LSP client configurations.+" Plug 'neovim/nvim-lsp'+" TODO: There appears to currently be a bug where nvim-lsp always reports a+" syntax error at the bottom of a Rust source file. So use COC for now.+Plug 'neoclide/coc.nvim', {'branch': 'release'}++" This plugin is used to configure how nvim-lsp displays errors/diagnostics.+" TODO: Since we're using COC for now, we don't need this.+" Plug 'haorenW1025/diagnostic-nvim'+" let g:diagnostic_insert_delay = 1+" let g:diagnostic_enable_virtual_text = 1++" We use ALE for Go, because it supports additional linting tools.+Plug 'dense-analysis/ale'+let g:ale_linters = {+ \ 'go': ['gofmt', 'golint', 'go vet', 'go build', 'gosimple']+ \ }+let g:ale_lint_on_enter = 1+let g:ale_lint_on_filetype_changed = 1+let g:ale_lint_on_save = 1+let g:ale_lint_on_text_changed = 'never'+let g:ale_lint_on_insert_leave = 0+let g:ale_completion_enabled = 0+" N.B. This is the default value, but it serves as a reminder that vim+" on Ubuntu 18.04 is broken. Namely, the cursor disappears on any line+" that echos an error message in the status bar. The way to fix this is to+" install an updated version of vim:+"+" sudo add-apt-repository ppa:jonathonf/vim+" sudo apt-get update+" sudo apt-get upgrade+"+" Presumably this doesn't impact neovim, since we use the latest pre-release.+let g:ale_echo_cursor = 1++" This must be called before importing any Lua modules added above.+call plug#end()++" Configure Rust LSP plugin.+" This apparently must be here, before ftdetect loads lang-specific settings.+"+" TODO: There appears to currently be a bug where nvim-lsp always reports a+" syntax error at the bottom of a Rust source file. So use COC for now.+" lua <<EOF+" -- local lsp = require 'nvim_lsp'+" -- lsp.rust_analyzer.setup({+" -- })+" require'nvim_lsp'.rust_analyzer.setup{+" -- on_attach = require'diagnostic'.on_attach,+" }+" -- settings = {+" -- ["rust-analyzer"] = {+" -- checkOnSave = {+" -- enable = true;+" -- },+" -- diagnostics = {+" -- enable = false;+" -- }+" -- }+" -- }+" --}+" EOF
.config/nvim/include/spacing/eight.vim
@@ -0,0 +1,3 @@+setlocal tabstop=8+setlocal shiftwidth=8+setlocal softtabstop=8
.config/nvim/include/spacing/four.vim
@@ -0,0 +1,3 @@+setlocal tabstop=4+setlocal shiftwidth=4+setlocal softtabstop=4
.config/nvim/include/spacing/text.vim
@@ -0,0 +1,3 @@+runtime! include/spacing/two.vim+setlocal textwidth=79+setlocal smartindent
.config/nvim/include/spacing/tridactyl.vim
@@ -0,0 +1,4 @@+runtime! include/spacing/text.vim+set binary+set noeol+set expandtab
.config/nvim/include/spacing/two.vim
@@ -0,0 +1,3 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2
.config/nvim/include/style.vim
@@ -0,0 +1,9 @@+" Force neovim to emit true colors.+set termguicolors+" Colors a vertical bar at the given column.+set colorcolumn=80+" Because dark backgrounds suck. Also, using a naturally light colorscheme+" with a dark background ends up looking pretty bad.+set background=light+" Beautiful theme.+colorscheme summerfruit256
.config/nvim/include/windows.vim
@@ -0,0 +1,25 @@+function! WinMove(key) + let l:curwin = winnr()+ exec "wincmd " . a:key+ if (l:curwin == winnr()) "we havent moved+ let l:curview = winsaveview()+ if match(a:key, '[jk]') > -1 "were we going up/down+ wincmd s+ else + wincmd v+ endif+ call winrestview(l:curview)+ exec "wincmd " . a:key+ call winrestview(l:curview)+ endif+endfunction+ +map <C-W>h :call WinMove('h')<cr>+map <C-W>k :call WinMove('k')<cr>+map <C-W>l :call WinMove('l')<cr>+map <C-W>j :call WinMove('j')<cr>++map <C-left> :wincmd <<cr>+map <C-right> :wincmd ><cr>+map <C-up> :wincmd +<cr>+map <C-down> :wincmd -<cr>
.config/nvim/init.vim
@@ -0,0 +1,11 @@+" Install plugins first. We may configure plugins for specific languages later.+runtime! include/plugins.vim+" This is next because it sets language specific variables.+runtime! include/lang.vim++runtime! include/autos.vim+runtime! include/comment.vim+runtime! include/keybinds.vim+runtime! include/options.vim+runtime! include/style.vim+runtime! include/windows.vim
.config/tridactyl/rustdoc-condensed.js
@@ -0,0 +1,69 @@+(function() {+ // This function forces rustdoc to collapse documentation for all items,+ // except for the methods defined in an impl block and the primary type's+ // declaration. This is the most natural view IMO, since it provides the+ // primary type along with an easy to scan overview of available methods.+ //+ // rustdoc does seemingly have user settings that purport to make this the+ // default, but I could never cause them to work in a reliably consistent+ // way. This is especially useful when writing documents, where you commonly+ // want to refresh and look at the docs for the specific item you're working+ // on. This mini-script will automatically scroll to and expand the currently+ // selected method.+ //+ // I used the tridactyl Firefox extension to bind this script to `,z` with+ // the following in my tridactylrc:+ //+ // bind ,z composite jsb tri.native.run('cat path/to/rustdoc-condensed.js') | js -p eval(JS_ARG.content)++ // get the currently selected doc item from URL's hash fragment+ // e.g., in `struct.BStr.html#method.words`, this returns `method.words`.+ function getPageId() {+ var id = document.location.href.split("#")[1];+ if (id) {+ return id.split("?")[0].split("&")[0];+ }+ return null;+ }++ // collapse everything, with an extra click in case things are partially+ // collapased already+ const toggleAll = document.getElementById('toggle-all-docs');+ if (toggleAll.className.indexOf('will-expand') > -1) {+ toggleAll.click();+ }+ toggleAll.click();++ // re-expand primary impls+ const impls = document.getElementsByClassName('impl');+ for (let i = 0; i < impls.length; i++) {+ // but don't expand every impl, just the ones on this type+ if (!/^impl(-\d+)?$/.test(impls[i].id)) {+ continue;+ }++ const toggles = impls[i].getElementsByClassName('collapse-toggle');+ for (let j = 0; j < toggles.length; j++) {+ // If it's already expanded, then let it be. In newer versions of+ // rustdoc, collapsing everything doesn't collapse the methods, so we+ // don't need to do anything.+ if (toggles[j].innerText == '[−]') {+ continue;+ }+ toggles[j].click();+ }+ }++ // expand type declaration docs+ const main = document.getElementById('main');+ const wrapper = document.getElementsByClassName('toggle-wrapper')[0];+ wrapper.getElementsByTagName('a')[0].click();++ // re-expand specific method declaration, and scroll to it+ const pageId = getPageId();+ if (pageId !== null) {+ const method = document.getElementById(pageId);+ method.getElementsByClassName('collapse-toggle')[0].click();+ method.scrollIntoView();+ }+})()
@@ -0,0 +1,56 @@+" vim: filetype=vim++" This wipes all existing settings. This means that if a setting in this file+" is removed, then it will return to default. In other words, this file serves+" as an enforced single point of truth for Tridactyl's configuration.+sanitize tridactyllocal tridactylsync++" Just use a blank page for new tab. It would be nicer to use the standard+" Firefox homepage, but Tridactyl doesn't support this yet.+set newtab about:blank++" Use neovim in tmux for editor.+set editorcmd terminal -e tmux -u new nvim -S /home/andrew/.config/nvim/include/spacing/tridactyl.vim++" Ctrl-F should use the browser's native 'find' functionality.+unbind <C-f>++" But also support Tridactyl search too.+bind / fillcmdline find+bind ? fillcmdline find -?+bind n findnext 1+bind N findnext -1+" Remove search highlighting.+bind ,<Space> nohlsearch+" Use sensitive case. Smart case would be nice here, but it doesn't work.+set findcase sensitive++" Smooth scrolling, yes please. This is still a bit janky in Tridactyl.+" ... actually, it's just too janky. Disable it. Sigh.+set smoothscroll false++" The default jump of 10 is a bit much.+bind j scrollline 5+bind k scrollline -5++" K and J should move between tabs. x should close them.+bind J tabprev+bind K tabnext+bind x tabclose++" For opening videos in mpv.+" bind zv hint -W exclaim mpv+bind zv composite js document.location.href | exclaim_quiet mpv --loop++" Don't run Tridactyl on some web sites because it doesn't work well, or+" because the web site has its own keybindings.+autocmd DocStart mail.google.com mode ignore+autocmd DocStart meet.google.com mode ignore+autocmd DocStart discordapp.com mode ignore++" Sometimes the status bar in the bottom left corner overlaps the Tridactyl+" command line, so set an option to move the status bar to the right.+guiset_quiet hoverlink right++" Set up some shortcuts for running custom scripts.+bind zz composite jsb tri.native.run('cat /home/andrew/.config/tridactyl/rustdoc-condensed.js') | js -p eval(JS_ARG.content)
@@ -0,0 +1,58 @@+# vim: ft=sh sw=2 ts=2 sts=2++# Various settings.+export EDITOR="vim"+export MOST_EDITOR="$EDITOR"+export MANPAGER="less -R"+export MANPATH="$HOME/man:"+export XDG_DATA_HOME="$HOME/.local/share"+export XDG_CONFIG_HOME="$HOME/.config"+export XDG_CACHE_HOME="$HOME/.cache"+# shellcheck disable=SC2155+export GPG_TTY="$(tty)"+export SHELLCHECK_OPTS="-e SC2086 -e SC2016 -e SC2046 -e SC1090 -e SC2001 -e SC2236"+export QT_QPA_PLATFORMTHEME=qt5ct+export MAKEOPTS="-j12"+export PYTHONDONTWRITEBYTECODE=1++# Looks like GOPATH has gone the way of the do-do.+unset GOPATH++# Set config path for ripgrep.+if is-cygwin; then+ RIPGREP_CONFIG_PATH=C:/cygwin/home/andrew/.ripgreprc+else+ RIPGREP_CONFIG_PATH="$HOME/.ripgreprc"+fi+export RIPGREP_CONFIG_PATH++# Set config for fzf.+export FZF_DEFAULT_COMMAND="rg --files"+export FZF_DEFAULT_OPTS="+ --height 40% --border+ --bind 'tab:down' --bind 'btab:up' --bind 'ctrl-s:toggle'+"++# Considered harmful by https://wiki.archlinux.org/index.php/Locale+export LC_ALL=++# Personal variables.+export LOG="$HOME/data/log"+export EMAIL="jamslam@gmail.com"+export PUBPATH="$HOME/data/pubs"+export BROWSER="google-chrome"+export MOVIES="$HOME/media/movies/sd"+export MOVIESHD="$HOME/media/movies/hd"+export TV="$HOME/media/tv"+export MUSIC="$HOME/media/music"++# Ledger vars.+export LEDGER_FILE=/m/data/home/finance/accounts.ldg+export LEDGER_PRICE_DB=/m/data/home/finance/pricedb.ldg+export FIN_CONFIG=/m/data/home/finance/config.toml++# Mac specific overrides.+if is-mac; then+ # Our TERM is typically tmux-256color. macOS doesn't seem to recognize it.+ export TERM=xterm+fi
.gitconfig.default
@@ -0,0 +1,27 @@+[user]+ email = jamslam@gmail.com+ name = Andrew Gallant+ signingkey = jamslam@gmail.com+[rerere]+ enabled = true+[commit]+ gpgsign = true+[tag]+ forceSignAnnotated = true+[merge]+ ff = only+[pull]+ rebase = true+[rebase]+ autoSquash = true+[absorb]+ maxStack = 50+[alias]+ pushf = push --force-with-lease+ diffy = difftool --no-prompt --trust-exit-code --extcmd 'icdiff -N -U3'+ amend = commit -a --amend -C HEAD+ co = checkout+[url "git@github.com:"]+ insteadOf = https://github.com/+[gui]+ gcwarning = false
@@ -0,0 +1,55 @@+# Because I'm paranoid and because I want to see untracked files, I maintain+# an exhaustive gitignore list. This also makes searching my home directory+# with ripgrep convenient, since it won't descend into most directories.++# top-level hidden files/directories+/.Xauthority+/.aws+/.bash_history+/.cache+/.cargo+/.debug+/.docker+/.fzf*+/.gist+/.gitconfig+/.git-old+/.gkrellm2+/.gmrun_history+/.gnupg+/.gox11+/.laptop+/.lesshst+/.local+/.mozilla+/.old+/.password-store+/.pki+/.pythonhist+/.pyx11+/.qgrep+/.rustup+/.sane+/.thumbnails+/.tig_history+/.vim-cache+/.viminfo+/.wmWeatherReports+/.zcompdump+/.zoom+/.zsh_history++# top-level directories+/Desktop+/Downloads+/clones+/code+/data+/go+/man+/rust+/tmp+/work++# Files we always want to ignore+.netrwhist
@@ -0,0 +1,50 @@+# gmrun configuration file+# gmrun is (C) Mihai Bazon, <mishoo@infoiasi.ro>+# GPL v2.0 applies++# Set terminal+Terminal = lxterminal+TermExec = ${Terminal} -e+AlwaysInTerm = ssh telnet ftp lynx mc vi vim pine centericq perldoc man cmus++# Set window geometry (except height)+Width = 400+Top = 450+# Left = 2360 ++# History size+History = 999999999++# Shows last history line selected when invoked+ShowLast = 1++# Show files starting with '.'+# Default is 0 (off), set it to 1 if you want "hidden" files to show up+# in the completion window+ShowDotFiles = 1++# Timeout (in milliseconds) after which gmrun will simulate a TAB press+# Set this to NULL if don't like this feature.+TabTimeout = 0++# URL handlers+# If the entered text is "http://www.google.com" then:+# - %u gets replaced with the whole URL ("http://www.google.com")+# - %s gets replaced with "//www.google.com". This is useful for URL-s+# like "man:printf" --> %s will get replaced with "printf"+# URL_http = mozilla -remote "openURL(%u, new-window)"+# URL_http = /home/andrew/bin/chrome "openURL(%u, new-window)"+URL_http = google-chrome --new-window %s+URL_mailto = mozilla -remote "mailto(%s)"+URL_man = ${TermExec} 'man -P "less -R" %s'+URL_info = ${TermExec} 'info %s'+URL_pd = ${TermExec} 'perldoc %s'+URL_file = nautilus %s+URL_readme = ${TermExec} 'less /usr/share/doc/%s/README'+URL_info = ${TermExec} 'info %s'+URL_sh = sh -c '%s'++# extension handlers+EXT:doc,rtf = libreoffice -writer %s+EXT:txt,cc,cpp,h,java,html,htm,epl,tex,latex,js,css,xml,xsl,am = vim %s+EXT:pdf,ps = okular %s
@@ -0,0 +1,43 @@+table Config+ FontName: gothic+ FontSize: 14+ FontColor: #FFFFFF+ ToolTip.FontSize: 14+ ToolTip.FontName: gothic+ ToolTip.ForeColor: #0000FF+ ToolTip.BackColor: #FFFFFF+ ToolTip.CaptionOnHover: true+ ToolTip.CaptionPlacement: Right+ Locked: false+ Transparency: 0+ Shadow: true+ ShadowColor: #000000+ ShadowX: 1+ ShadowY: 1+ Bold: true+ ClickDelay: 300+ IconSnap: true+ SnapWidth: 100+ SnapHeight: 100+ SnapOrigin: BottomRight+ SnapShadow: false+ SnapShadowTrans: 200+ CaptionOnHover: false+ CaptionPlacement: bottom+ FillStyle: fillinvert+ Background.Delay: 0+ Background.Source: None+ Background.File: None+ Background.Mode: Center+ Background.Color: #C2CCFF+end++table Actions+ Lock: control right doubleClk+ Reload: middle doubleClk+ Drag: left hold+ EndDrag: left singleClk+ Execute[0]: left doubleClk+ Execute[1]: right doubleClk+end+
@@ -0,0 +1,8 @@+table Icon+ Caption: movies+ Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+ X: 402+ Y: 0+ Command[0]: dolphin /m/media/movies+end+
@@ -0,0 +1,8 @@+table Icon+ Caption: stage+ Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+ X: 202+ Y: 0+ Command[0]: dolphin /m/media/stage+end+
@@ -0,0 +1,8 @@+table Icon+ Caption: tv+ Icon: /usr/share/icons/oxygen/base/64x64/places/folder-blue.png+ X: 302+ Y: 0+ Command[0]: dolphin /m/media/tv+end+
@@ -0,0 +1,14 @@+"\e[A": history-search-backward+"\e[B": history-search-forward+set show-all-if-ambiguous on+# set completion-ignore-case on+set mark-symlinked-directories on++# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving+"\e[1;5C": forward-word+"\e[1;5D": backward-word+"\e[5C": forward-word+"\e[5D": backward-word+"\e\e[C": forward-word+"\e\e[D": backward-word+
@@ -0,0 +1,45 @@+# vim: ft=sh sw=2 ts=2 sts=2++prependpath() {+ paths="$1"+ toadd="$2"+ case ":$paths:" in+ *:"$toadd":*)+ echo "$paths"+ ;;+ *)+ echo "$toadd${paths:+:$paths}"+ ;;+ esac+}++# Set the Cargo installation directory.+CARGO_INSTALL_ROOT="$HOME/.local/cargo"++# Setup PATH.+# shellcheck disable=SC2123+PATH=""+# System paths.+PATH="$(prependpath "$PATH" /sbin)"+PATH="$(prependpath "$PATH" /bin)"+PATH="$(prependpath "$PATH" /usr/sbin)"+PATH="$(prependpath "$PATH" /usr/bin)"+PATH="$(prependpath "$PATH" /usr/bin/core_perl)"+PATH="$(prependpath "$PATH" /usr/bin/vendor_perl)"+PATH="$(prependpath "$PATH" /usr/local/sbin)"+PATH="$(prependpath "$PATH" /usr/local/bin)"+PATH="$(prependpath "$PATH" /usr/local/go/bin)"+# Home specific paths.+PATH="$(prependpath "$PATH" "$HOME/.local/bin")"+PATH="$(prependpath "$PATH" "$HOME/.gem/ruby/2.5.0/bin")"+PATH="$(prependpath "$PATH" "$HOME/go/bin")"+PATH="$(prependpath "$PATH" "$CARGO_INSTALL_ROOT/bin")"+PATH="$(prependpath "$PATH" "$HOME/.cargo/bin")"+# My paths.+PATH="$(prependpath "$PATH" "$HOME/bin")"+PATH="$(prependpath "$PATH" "$HOME/bin/x86_64")"+PATH="$(prependpath "$PATH" "$HOME/rust/ripgrep/target/release")"+PATH="$(prependpath "$PATH" "$HOME/rust/ripgrep/target/release/examples")"+PATH="$(prependpath "$PATH" "$HOME/rust/xsv/target/release")"++export PATH CARGO_INSTALL_ROOT
@@ -0,0 +1,8 @@+#--max-columns=500+--max-columns-preview+--colors=match:bg:0xff,0x7f,0x00+--colors=match:fg:white+--colors=line:none+--colors=line:fg:magenta+--colors=path:fg:green+--type-add=got:*_test.go
@@ -0,0 +1,3 @@+/authorized_keys+/keys+/known_hosts
.ssh/rc
@@ -0,0 +1,10 @@+#!/bin/bash++# Find a valid SSH_AUTH_SOCK and symlink it to a known location. Once it's+# at a known location, other applications like tmux can pick it up and+# automatically reconnect to the correct agent.+for agent in /tmp/ssh-*/agent.*; do+ if SSH_AUTH_SOCK="$agent" ssh-add -L > /dev/null 2>&1; then+ ln -sf "$agent" /tmp/andrew_ssh_auth_sock+ fi+done
@@ -0,0 +1,79 @@+# vim: ft=sh sw=2 ts=2 sts=2++# simplified systemd command, for instance+# "sudo systemctl stop xxx" - > "0.stop xxx"+if ! cmd-exists systemd-notify || ! systemd-notify --booted;+then # for not systemd+ 0.start() {+ sudo rc.d start "$@"+ }++ 0.restart() {+ sudo rc.d restart "$@"+ }++ 0.stop() {+ sudo rc.d stop "$@"+ }+else+ 0.reboot() {+ systemctl reboot "$@"+ }++ 0.off() {+ systemctl poweroff "$@"+ }++ # start systemd service+ 0.start() {+ sudo systemctl start "$@"+ }+ # restart systemd service+ 0.restart() {+ sudo systemctl restart "$@"+ }+ # stop systemd service+ 0.stop() {+ sudo systemctl stop "$@"+ }+ # enable systemd service+ 0.enable() {+ sudo systemctl enable "$@"+ }+ # disable a systemd service+ 0.disable() {+ sudo systemctl disable "$@"+ }+ # show the status of a service+ 0.status() {+ systemctl status "$@"+ }+ # reload a service configuration+ 0.reload() {+ sudo systemctl --system daemon-reload+ }+ # list all running service+ 0.list() {+ systemctl+ }+ # list all failed service+ 0.failed () {+ systemctl --failed+ }+ # list all systemd available unit files+ 0.list-files() {+ systemctl list-unit-files+ }+ # check the log+ 0.log() {+ sudo journalctl --follow --this-boot "$@"+ }+ # show wants+ 0.wants() {+ systemctl show -p "Wants" $1.target+ }+ # analyze the system+ 0.analyze() {+ systemd-analyze "$@"+ }+fi
@@ -0,0 +1,93 @@+# Use Ctrl-A instead of Ctrl-B.+set -g prefix C-a+unbind C-b+bind C-a send-prefix++# Disable the status bar. The window title is sufficient.+set -g status off++# Automatically renumber windows when one is killed.+set -g renumber-windows on++# Use 256 colors.+# set -g default-terminal "xterm-256color"+set -g default-terminal "tmux-256color"+# This is to make tmux support truecolor. neovim suggested it via checkhealth.+set-option -sa terminal-overrides ',*-256color:RGB'++# Set history limit ridiculously high.+set -g history-limit 1073741824++# Don't add any delay for pressing the escape key.+# Without this, vim becomes *really* annoying to use.+# The default is 500ms. Reduce it substantially.+set -g escape-time 20++# Set the appropriate title.+set -g set-titles on+# set -g set-titles-string "#(pwd)"++# Always use vim keybindings.+set -g mode-keys vi++# Start window numbering at 1.+set -g base-index 1++# Convenient config reloading.+bind r source-file "$HOME/.tmux.conf"++# Switch back and forth between windows, screen-style.+bind a last-window+bind C-a last-window++# When opening a new window, use the CWD.+unbind c+bind c new-window -c "#{pane_current_path}"++# Use saner splitting commands.+unbind %+unbind '"'+bind h split-window -h -c "#{pane_current_path}"+bind v split-window -v -c "#{pane_current_path}"++# Use '"' to list windows, like in Screen.+# Leave tmux's 'w' binding though.+# Also, support tmux 2.5, which has different `choose-tree` defaults.+if-shell 'tmux -V | grep "tmux 2.5"' 'bind "\"" choose-tree -u' 'bind "\"" choose-tree -s'+if-shell 'tmux -V | grep "tmux 2.5"' 'bind w choose-tree -u' 'bind w choose-tree -w'++# Nicer shortcuts for toggling between layouts.+unbind z+unbind Z+bind z select-layout even-vertical+bind Z select-layout even-horizontal++# Vim copying.+unbind -T copy-mode-vi v+unbind -T copy-mode-vi y+bind -T copy-mode-vi v send -X begin-selection+bind -T copy-mode-vi C-v send -X rectangle-toggle+bind -T copy-mode-vi y send -X copy-selection++# Make it easier to enter copy-mode.+bind -T root S-Up copy-mode \; send -X scroll-up+bind -T root S-Down copy-mode \; send -X scroll-down+bind -T root S-PageUp copy-mode \; send -X halfpage-up+bind -T root S-PageDown copy-mode \; send -X halfpage-down++# Don't be so overeager with paging.+bind -T copy-mode-vi S-PageUp send -X halfpage-up+bind -T copy-mode-vi S-PageDown send -X halfpage-down+bind -T copy-mode-vi PageUp send -X halfpage-up+bind -T copy-mode-vi PageDown send -X halfpage-down++# Renumber session automatically.+set-hook -g session-created "run-shell $HOME/bin/tmux-cleanup \; run-shell $HOME/bin/tmux-renumber-sessions"+set-hook -g session-closed "run-shell $HOME/bin/tmux-cleanup \; run-shell $HOME/bin/tmux-renumber-sessions"++# Open a new terminal in the CWD.+bind C-n run-shell -b "$HOME/bin/terminal -d #{pane_current_path} -e tmux -u new -c #{pane_current_path} zsh"++# set -g update-environment "SSH_ASKPASS SSH_AGENT_PID SSH_CONNECTION"+# setenv -g SSH_AUTH_SOCK "/tmp/andrew_ssh_auth_sock"+# if-shell 'ls /tmp/andrew_ssh_auth_sock' 'setenv -g SSH_AUTH_SOCK "/tmp/andrew_ssh_auth_sock"'
@@ -0,0 +1,2 @@+/plugged+/view
@@ -0,0 +1,102 @@+" Vim color file+" Converted from Textmate theme Bespin using Coloration v0.2.5 (http://github.com/sickill/coloration)++set background=dark+highlight clear++if exists("syntax_on")+ syntax reset+endif++let g:colors_name = "Bespin"++hi Cursor guifg=NONE guibg=#a7a7a7 gui=NONE+hi Visual guifg=NONE guibg=#4c4a49 gui=NONE+hi CursorLine guifg=NONE guibg=#2e2823 gui=NONE+hi CursorColumn guifg=NONE guibg=#2e2823 gui=NONE+hi LineNr guifg=#71685d guibg=#28211c gui=NONE+hi VertSplit guifg=#443c35 guibg=#443c35 gui=NONE+hi MatchParen guifg=#5ea6ea guibg=NONE gui=NONE+hi StatusLine guifg=#baae9e guibg=#443c35 gui=bold+hi StatusLineNC guifg=#baae9e guibg=#443c35 gui=NONE+hi Pmenu guifg=#937121 guibg=NONE gui=NONE+hi PmenuSel guifg=NONE guibg=#4c4a49 gui=NONE+hi IncSearch guifg=NONE guibg=#41434a gui=NONE+hi Search guifg=NONE guibg=#41434a gui=NONE+hi Directory guifg=#cf6a4c guibg=NONE gui=NONE+hi Folded guifg=#666666 guibg=#28211c gui=NONE++hi Normal guifg=#baae9e guibg=#28211c gui=NONE+hi Boolean guifg=#cf6a4c guibg=NONE gui=NONE+hi Character guifg=#cf6a4c guibg=NONE gui=NONE+hi Comment guifg=#666666 guibg=NONE gui=italic+hi Conditional guifg=#5ea6ea guibg=NONE gui=NONE+hi Constant guifg=#cf6a4c guibg=NONE gui=NONE+hi Define guifg=#5ea6ea guibg=NONE gui=NONE+hi ErrorMsg guifg=NONE guibg=NONE gui=NONE+hi WarningMsg guifg=NONE guibg=NONE gui=NONE+hi Float guifg=#cf6a4c guibg=NONE gui=NONE+hi Function guifg=#937121 guibg=NONE gui=NONE+hi Identifier guifg=#f9ee98 guibg=NONE gui=NONE+hi Keyword guifg=#5ea6ea guibg=NONE gui=NONE+hi Label guifg=#54be0d guibg=NONE gui=NONE+hi NonText guifg=#5e5955 guibg=#2e2823 gui=NONE+hi Number guifg=#cf6a4c guibg=NONE gui=NONE+hi Operator guifg=#5ea6ea guibg=NONE gui=NONE+hi PreProc guifg=#5ea6ea guibg=NONE gui=NONE+hi Special guifg=#baae9e guibg=NONE gui=NONE+hi SpecialKey guifg=#5e5955 guibg=#2e2823 gui=NONE+hi Statement guifg=#5ea6ea guibg=NONE gui=NONE+hi StorageClass guifg=#f9ee98 guibg=NONE gui=NONE+hi String guifg=#54be0d guibg=NONE gui=NONE+hi Tag guifg=#5ea6ea guibg=NONE gui=NONE+hi Title guifg=#baae9e guibg=NONE gui=bold+hi Todo guifg=#666666 guibg=NONE gui=inverse,bold,italic+hi Type guifg=#937121 guibg=NONE gui=NONE+hi Underlined guifg=NONE guibg=NONE gui=underline+hi rubyClass guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyFunction guifg=#937121 guibg=NONE gui=NONE+hi rubyInterpolationDelimiter guifg=NONE guibg=NONE gui=NONE+hi rubySymbol guifg=#cf6a4c guibg=NONE gui=NONE+hi rubyConstant guifg=#9b859d guibg=NONE gui=NONE+hi rubyStringDelimiter guifg=#54be0d guibg=NONE gui=NONE+hi rubyBlockParameter guifg=#7587a6 guibg=NONE gui=NONE+hi rubyInstanceVariable guifg=#7587a6 guibg=NONE gui=NONE+hi rubyInclude guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyGlobalVariable guifg=#7587a6 guibg=NONE gui=NONE+hi rubyRegexp guifg=#e9c062 guibg=NONE gui=NONE+hi rubyRegexpDelimiter guifg=#e9c062 guibg=NONE gui=NONE+hi rubyEscape guifg=#cf6a4c guibg=NONE gui=NONE+hi rubyControl guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyClassVariable guifg=#7587a6 guibg=NONE gui=NONE+hi rubyOperator guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyException guifg=#5ea6ea guibg=NONE gui=NONE+hi rubyPseudoVariable guifg=#7587a6 guibg=NONE gui=NONE+hi rubyRailsUserClass guifg=#9b859d guibg=NONE gui=NONE+hi rubyRailsARAssociationMethod guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsARMethod guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsRenderMethod guifg=#dad085 guibg=NONE gui=NONE+hi rubyRailsMethod guifg=#dad085 guibg=NONE gui=NONE+hi erubyDelimiter guifg=NONE guibg=NONE gui=NONE+hi erubyComment guifg=#666666 guibg=NONE gui=italic+hi erubyRailsMethod guifg=#dad085 guibg=NONE gui=NONE+hi htmlTag guifg=#ac885b guibg=NONE gui=NONE+hi htmlEndTag guifg=#ac885b guibg=NONE gui=NONE+hi htmlTagName guifg=#ac885b guibg=NONE gui=NONE+hi htmlArg guifg=#ac885b guibg=NONE gui=NONE+hi htmlSpecialChar guifg=#cf6a4c guibg=NONE gui=NONE+hi javaScriptFunction guifg=#f9ee98 guibg=NONE gui=NONE+hi javaScriptRailsFunction guifg=#dad085 guibg=NONE gui=NONE+hi javaScriptBraces guifg=NONE guibg=NONE gui=NONE+hi yamlKey guifg=#5ea6ea guibg=NONE gui=NONE+hi yamlAnchor guifg=#7587a6 guibg=NONE gui=NONE+hi yamlAlias guifg=#7587a6 guibg=NONE gui=NONE+hi yamlDocumentHeader guifg=#54be0d guibg=NONE gui=NONE+hi cssURL guifg=#7587a6 guibg=NONE gui=NONE+hi cssFunctionName guifg=#dad085 guibg=NONE gui=NONE+hi cssColor guifg=#cf6a4c guibg=NONE gui=NONE+hi cssPseudoClassId guifg=#937121 guibg=NONE gui=NONE+hi cssClassName guifg=#937121 guibg=NONE gui=NONE+hi cssValueLength guifg=#cf6a4c guibg=NONE gui=NONE+hi cssCommonAttr guifg=#cf6a4c guibg=NONE gui=NONE+hi cssBraces guifg=NONE guibg=NONE gui=NONE
@@ -0,0 +1,340 @@+" Vim color file+"+" Name: desertink.vim+" Author: Markus Koller <markus-koller@gmx.ch>+"+" Note: Only works in GUI and 88/256 color terminals+"+" This is a version of the default desert colorscheme with a+" darker background and more colorful foreground colors.+"+" It also adds highlighting for folds, diffs, line numbers,+" signcolumn, completion menus, and cursor line/column.++" The colors are automatically converted for 88/256 color terminals,+" adapted from http://www.vim.org/scripts/script.php?script_id=1243+"+" You can find the latest version at https://github.com/toupeira/desertink.vim+" and see a screenshot at http://i.imgur.com/DZ35F.png+"++set background=dark+if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ hi clear+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="desertink"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+ " functions {{{+ " returns an approximate grey index for the given grey level+ fun! <SID>grey_number(x)+ if &t_Co == 88+ if a:x < 23+ return 0+ elseif a:x < 69+ return 1+ elseif a:x < 103+ return 2+ elseif a:x < 127+ return 3+ elseif a:x < 150+ return 4+ elseif a:x < 173+ return 5+ elseif a:x < 196+ return 6+ elseif a:x < 219+ return 7+ elseif a:x < 243+ return 8+ else+ return 9+ endif+ else+ if a:x < 14+ return 0+ else+ let l:n = (a:x - 8) / 10+ let l:m = (a:x - 8) % 10+ if l:m < 5+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual grey level represented by the grey index+ fun! <SID>grey_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 46+ elseif a:n == 2+ return 92+ elseif a:n == 3+ return 115+ elseif a:n == 4+ return 139+ elseif a:n == 5+ return 162+ elseif a:n == 6+ return 185+ elseif a:n == 7+ return 208+ elseif a:n == 8+ return 231+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 8 + (a:n * 10)+ endif+ endif+ endfun++ " returns the palette index for the given grey index+ fun! <SID>grey_color(n)+ if &t_Co == 88+ if a:n == 0+ return 16+ elseif a:n == 9+ return 79+ else+ return 79 + a:n+ endif+ else+ if a:n == 0+ return 16+ elseif a:n == 25+ return 231+ else+ return 231 + a:n+ endif+ endif+ endfun++ " returns an approximate color index for the given color level+ fun! <SID>rgb_number(x)+ if &t_Co == 88+ if a:x < 69+ return 0+ elseif a:x < 172+ return 1+ elseif a:x < 230+ return 2+ else+ return 3+ endif+ else+ if a:x < 75+ return 0+ else+ let l:n = (a:x - 55) / 40+ let l:m = (a:x - 55) % 40+ if l:m < 20+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual color level for the given color index+ fun! <SID>rgb_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 139+ elseif a:n == 2+ return 205+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 55 + (a:n * 40)+ endif+ endif+ endfun++ " returns the palette index for the given R/G/B color indices+ fun! <SID>rgb_color(x, y, z)+ if &t_Co == 88+ return 16 + (a:x * 16) + (a:y * 4) + a:z+ else+ return 16 + (a:x * 36) + (a:y * 6) + a:z+ endif+ endfun++ " returns the palette index to approximate the given R/G/B color levels+ fun! <SID>color(r, g, b)+ " get the closest grey+ let l:gx = <SID>grey_number(a:r)+ let l:gy = <SID>grey_number(a:g)+ let l:gz = <SID>grey_number(a:b)++ " get the closest color+ let l:x = <SID>rgb_number(a:r)+ let l:y = <SID>rgb_number(a:g)+ let l:z = <SID>rgb_number(a:b)++ if l:gx == l:gy && l:gy == l:gz+ " there are two possibilities+ let l:dgr = <SID>grey_level(l:gx) - a:r+ let l:dgg = <SID>grey_level(l:gy) - a:g+ let l:dgb = <SID>grey_level(l:gz) - a:b+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+ let l:dr = <SID>rgb_level(l:gx) - a:r+ let l:dg = <SID>rgb_level(l:gy) - a:g+ let l:db = <SID>rgb_level(l:gz) - a:b+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+ if l:dgrey < l:drgb+ " use the grey+ return <SID>grey_color(l:gx)+ else+ " use the color+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ else+ " only one possibility+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ endfun++ " returns the palette index to approximate the 'rrggbb' hex string+ fun! <SID>rgb(rgb)+ if a:rgb == "ffffff"+ return 15+ endif++ let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+ let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+ let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++ return <SID>color(l:r, l:g, l:b)+ endfun++ " sets the highlighting for the given group, add optional fg, bg and attr+ " values to override the terminal settings+ fun! <SID>X(group, fg, bg, attr, ...)+ let l:ctermfg = (a:0 > 0 && a:1 != "") ? a:1 : <SID>rgb(a:fg)+ let l:ctermbg = (a:0 > 1 && a:2 != "") ? a:2 : <SID>rgb(a:bg)+ let l:ctermattr = (a:0 > 2 && a:3 != "") ? a:3 : a:attr++ if a:fg != ""+ exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . l:ctermfg+ endif+ if a:bg != ""+ exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . l:ctermbg+ endif+ if a:attr != ""+ exec "hi " . a:group . " gui=" . a:attr+ endif+ if l:ctermattr != ""+ exec "hi " . a:group . " cterm=" . l:ctermattr+ endif+ endfun+ " }}}++ call <SID>X("Normal", "ffffff", "222222", "")+ call <SID>X("NonText", "addbe7", "3D3D3D", "bold")++ " highlight groups+ "CursorIM+ "Directory+ "WildMenu+ "Menu+ "Scrollbar+ "Tooltip++ call <SID>X("Cursor", "708090", "f0e68c", "")++ " setting a background color for the cursor line can hide+ " other background colors such as Error and ErrorMsg+ "call <SID>X("CursorLine", "", "333333", "", "", "235", "none")+ "call <SID>X("CursorColumn", "", "333333", "", "", "235")++ " use only bold for the cursorline to avoid covering the background+ hi clear CursorLine+ hi clear CursorColumn+ hi CursorLine cterm=bold gui=bold+ hi CursorColumn cterm=bold gui=bold++ call <SID>X("StatusLine", "c2bfa5", "000000", "reverse", "231", "", "bold,reverse")+ call <SID>X("StatusLineNC", "c2bfa5", "7f7f7f", "reverse", "231")++ call <SID>X("Question", "00ff7f", "", "bold")+ call <SID>X("Error", "ffffff", "913d3b", "bold")+ call <SID>X("ErrorMsg", "ffffff", "913d3b", "bold")+ call <SID>X("ModeMsg", "daa520", "", "")+ call <SID>X("MoreMsg", "00ff7f", "", "bold")+ call <SID>X("Ignore", "666666", "", "")+ call <SID>X("Todo", "f9f747", "d75f00", "bold")+ call <SID>X("VertSplit", "c2bfa5", "7f7f7f", "reverse")++ call <SID>X("LineNr", "444444", "1a1a1a", "", "239")++ call <SID>X("Folded", "ffa500", "333333", "bold")+ call <SID>X("FoldColumn", "d2b48c", "222222", "")+ call <SID>X("SignColumn", "", "2a2a2a", "", "", "236")++ call <SID>X("Search", "ffffff", "6b8e23", "bold")+ call <SID>X("IncSearch", "ffffff", "3a663a", "bold")++ call <SID>X("SpecialKey", "9acd32", "", "")++ call <SID>X("Title", "cd5c5c", "", "")+ call <SID>X("Visual", "ffffff", "2e5e73", "bold")+ call <SID>X("VisualNOS", "cccccc", "2e5e73", "underline")+ call <SID>X("WarningMsg", "fa8072", "", "")+ call <SID>X("MatchParen", "", "606060", "bold")++ call <SID>X("DiffAdd", "", "242448", "", "", "17")+ call <SID>X("DiffChange", "", "59244a", "", "", "53")+ call <SID>X("DiffDelete", "", "407680", "", "", "24")+ call <SID>X("DiffText", "", "b34793", "")++ call <SID>X("Pmenu", "eeeeee", "444444", "")+ call <SID>X("PmenuSel", "ffffff", "555555", "bold")+ call <SID>X("PmenuSbar", "", "666666", "")+ call <SID>X("PmenuThumb", "", "606060", "")++ " syntax highlighting groups+ call <SID>X("Comment", "87ceeb", "", "")+ call <SID>X("Constant", "ff8080", "", "")+ call <SID>X("Identifier", "98fb98", "", "none")+ call <SID>X("Statement", "f0e260", "", "bold")+ call <SID>X("PreProc", "cd5c5c", "", "bold")+ call <SID>X("Type", "91b365", "", "bold")+ call <SID>X("Special", "ffc266", "", "")+ "Underlined++ " delete functions {{{+ delf <SID>X+ delf <SID>rgb+ delf <SID>color+ delf <SID>rgb_color+ delf <SID>rgb_level+ delf <SID>rgb_number+ delf <SID>grey_color+ delf <SID>grey_level+ delf <SID>grey_number+ " }}}+endif++" vim: set fdl=0 fdm=marker:
@@ -0,0 +1,215 @@+" hemisu.vim - Vim color scheme+" ----------------------------------------------------------+" Author: Noah Frederick (http://noahfrederick.com/)+" Version: 3.4+" License: Creative Commons Attribution-NonCommercial+" 3.0 Unported License (see README.md)+" ----------------------------------------------------------++" Setup ----------------------------------------------------{{{+" Reset syntax highlighting+hi clear+if exists("syntax_on")+ syntax reset+endif++" Declare theme name+let g:colors_name = "hemisu"++"}}}+" The Colors -----------------------------------------------{{{+" Define reusable colors+let s:black = { "gui": "#000000", "cterm": "16" }+let s:white = { "gui": "#FFFFFF", "cterm": "231" }+let s:almostWhite = { "gui": "#EEEEEE", "cterm": "255" }+let s:almostBlack = { "gui": "#111111", "cterm": "233" }+let s:middleDarkGrey = { "gui": "#777777", "cterm": "241" }+let s:middleLightGrey = { "gui": "#999999", "cterm": "246" }+let s:lightGrey = { "gui": "#BBBBBB", "cterm": "249" }+let s:darkGrey = { "gui": "#444444", "cterm": "238" }++let s:darkPink = { "gui": "#63001C", "cterm": "88" }+let s:middleDarkPink = { "gui": "#FF0055", "cterm": "197" }+let s:middleLightPink = { "gui": "#D65E76", "cterm": "167" }+let s:lightPink = { "gui": "#FFAFAF", "cterm": "217" }++let s:darkBlue = { "gui": "#005F87", "cterm": "24" }+let s:middleDarkBlue = { "gui": "#538192", "cterm": "24" }+let s:middleLightBlue = { "gui": "#9FD3E6", "cterm": "116" }+let s:lightBlue = { "gui": "#CBE4EE", "cterm": "195" }++let s:darkGreen = { "gui": "#5F5F00", "cterm": "58" }+let s:middleDarkGreen = { "gui": "#739200", "cterm": "64" }+let s:middleLightGreen = { "gui": "#B1D631", "cterm": "149" }+let s:lightGreen = { "gui": "#BBFFAA", "cterm": "157" }++let s:darkTan = { "gui": "#503D15", "cterm": "52" }+let s:lightTan = { "gui": "#ECE1C8", "cterm": "230" }++" Assign to semantic categories based on background color+if &background == "dark"+ " Dark theme+ let s:bg = s:black+ let s:norm = s:almostWhite+ let s:comment = s:middleDarkGrey+ let s:dimmed = s:middleLightGrey+ let s:subtle = s:darkGrey+ let s:faint = s:almostBlack+ let s:accent1 = s:middleLightBlue+ let s:accent2 = s:middleLightGreen+ let s:accent3 = s:lightGreen+ let s:accent4 = s:lightTan+ let s:normRed = s:middleLightPink+ let s:normGreen = s:middleLightGreen+ let s:normBlue = s:middleLightBlue+ let s:faintRed = s:darkPink+ let s:faintGreen = s:darkGreen+ let s:faintBlue = s:darkBlue+else+ " Light theme+ let s:bg = s:white+ let s:norm = s:almostBlack+ let s:comment = s:middleLightGrey+ let s:dimmed = s:middleDarkGrey+ let s:subtle = s:lightGrey+ let s:faint = s:almostWhite+ let s:accent1 = s:middleDarkBlue+ let s:accent2 = s:middleDarkGreen+ let s:accent3 = s:middleDarkPink+ let s:accent4 = s:darkTan+ let s:normRed = s:middleDarkPink+ let s:normGreen = s:middleDarkGreen+ let s:normBlue = s:middleDarkBlue+ let s:faintRed = s:lightPink+ let s:faintGreen = s:lightGreen+ let s:faintBlue = s:lightBlue+endif++"}}}+" Utility Function -----------------------------------------{{{+function! s:h(group, style)+ execute "highlight" a:group+ \ "guifg=" (has_key(a:style, "fg") ? a:style.fg.gui : "NONE")+ \ "guibg=" (has_key(a:style, "bg") ? a:style.bg.gui : "NONE")+ \ "guisp=" (has_key(a:style, "sp") ? a:style.sp.gui : "NONE")+ \ "gui=" (has_key(a:style, "gui") ? a:style.gui : "NONE")+ \ "ctermfg=" (has_key(a:style, "fg") ? a:style.fg.cterm : "NONE")+ \ "ctermbg=" (has_key(a:style, "bg") ? a:style.bg.cterm : "NONE")+ \ "cterm=" (has_key(a:style, "cterm") ? a:style.cterm : "NONE")+endfunction++"}}}+" Highlights - Vim >= 7 ------------------------------------{{{+if version >= 700+ call s:h("CursorLine", { "bg": s:faint })+ call s:h("MatchParen", { "fg": s:accent1, "bg": s:faint, "gui": "bold" })+ call s:h("Pmenu", { "bg": s:faint })+ call s:h("PmenuThumb", { "bg": s:norm })+ call s:h("PmenuSBar", { "bg": s:subtle })+ call s:h("PmenuSel", { "bg": s:faintBlue })+ call s:h("ColorColumn", { "bg": s:faintRed })+ call s:h("SpellBad", { "sp": s:normRed, "gui": "undercurl" })+ call s:h("SpellCap", { "sp": s:accent1, "gui": "undercurl" })+ call s:h("SpellRare", { "sp": s:normGreen, "gui": "undercurl" })+ call s:h("SpellLocal", { "sp": s:accent4, "gui": "undercurl" })+ hi! link CursorColumn CursorLine++ " Use background for cterm Spell*, which does not support undercurl+ execute "hi! SpellBad ctermbg=" s:faintRed.cterm+ execute "hi! SpellCap ctermbg=" s:faintBlue.cterm+ execute "hi! SpellRare ctermbg=" s:faintGreen.cterm+ execute "hi! SpellLocal ctermbg=" s:faint.cterm+endif++"}}}+" Highlights - UI ------------------------------------------{{{+call s:h("Normal", { "fg": s:norm, "bg": s:bg })+call s:h("NonText", { "fg": s:subtle })+call s:h("Cursor", { "fg": s:bg, "bg": s:accent3 })+call s:h("Visual", { "bg": s:faintBlue })+call s:h("IncSearch", { "bg": s:faintBlue })+call s:h("Search", { "bg": s:faintGreen })+call s:h("StatusLine", { "fg": s:norm, "bg": s:faint, "gui": "bold", "cterm": "bold" })+call s:h("StatusLineNC", { "fg": s:dimmed, "bg": s:faint })+call s:h("SignColumn", { "fg": s:norm })+call s:h("VertSplit", { "fg": s:subtle, "bg": s:faint })+call s:h("TabLine", { "fg": s:dimmed, "bg": s:faint })+call s:h("TabLineSel", { "gui": "bold", "cterm": "bold" })+call s:h("Folded", { "fg": s:comment, "bg": s:faint })+call s:h("Directory", { "fg": s:accent1 })+call s:h("Title", { "fg": s:accent4, "gui": "bold", "cterm": "bold" })+call s:h("ErrorMsg", { "bg": s:faintRed })+call s:h("DiffAdd", { "bg": s:faintGreen })+call s:h("DiffChange", { "bg": s:faintRed })+call s:h("DiffDelete", { "fg": s:normRed, "bg": s:faintRed })+call s:h("DiffText", { "bg": s:faintRed, "gui": "bold", "cterm": "bold" })+call s:h("User1", { "fg": s:bg, "bg": s:normGreen })+call s:h("User2", { "fg": s:bg, "bg": s:normRed })+call s:h("User3", { "fg": s:bg, "bg": s:normBlue })+hi! link WildMenu IncSearch+hi! link FoldColumn SignColumn+hi! link WarningMsg ErrorMsg+hi! link MoreMsg Title+hi! link Question MoreMsg+hi! link ModeMsg MoreMsg+hi! link TabLineFill StatusLineNC+hi! link LineNr NonText+hi! link SpecialKey NonText++"}}}+" Highlights - Generic Syntax ------------------------------{{{+call s:h("Delimiter", { "fg": s:dimmed })+call s:h("Comment", { "fg": s:comment, "gui": "italic" })+call s:h("Underlined", { "fg": s:accent1, "gui": "underline", "cterm": "underline" })+call s:h("Type", { "fg": s:accent3 })+call s:h("String", { "fg": s:accent2 })+call s:h("Keyword", { "fg": s:accent2, "gui": "bold", "cterm": "bold" })+call s:h("Todo", { "fg": s:normRed, "gui": "bold", "cterm": "bold" })+call s:h("Function", { "gui": "bold", "cterm": "bold" })+hi! link Identifier Function+hi! link Statement Type+hi! link Constant Directory+hi! link Number Constant+hi! link Special Constant+hi! link PreProc Constant+hi! link Error ErrorMsg++"}}}+" Highlights - HTML ----------------------------------------{{{+hi! link htmlLink Underlined+hi! link htmlTag Type+hi! link htmlEndTag htmlTag++"}}}+" Highlights - CSS -----------------------------------------{{{+hi! link cssBraces Delimiter+hi! link cssSelectorOp cssBraces+hi! link cssClassName Normal++"}}}+" Highlights - Markdown ------------------------------------{{{+hi! link mkdListItem mkdDelimiter++"}}}+" Highlights - Shell ---------------------------------------{{{+hi! link shOperator Delimiter+hi! link shCaseBar Delimiter++"}}}+" Highlights - JavaScript ----------------------------------{{{+hi! link javaScriptValue Constant+hi! link javaScriptNull Constant+hi! link javaScriptBraces Normal++"}}}+" Highlights - Help ----------------------------------------{{{+hi! link helpExample String+hi! link helpHeadline Title+hi! link helpSectionDelim Comment+hi! link helpHyperTextEntry Statement+hi! link helpHyperTextJump Underlined+hi! link helpURL Underlined++"}}}++" vim: fdm=marker:sw=2:sts=2:et
.vim/colors/neverland-darker.vim
@@ -0,0 +1,196 @@+" Vim color file - neverland-darker.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>++set background=dark+hi clear++if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="neverland-darker"++hi Normal guifg=#ffd7ff guibg=#080808+set background=dark++hi Boolean guifg=#af5fff+hi Character guifg=#afaf5f+hi Number guifg=#0087ff+hi String guifg=#d7af5f+hi Conditional guifg=#ff0000 gui=bold+hi Constant guifg=#87af00 gui=bold+hi Cursor guifg=#afd787 guibg=#dadada+hi Debug guifg=#ffd7ff gui=bold+hi Define guifg=#5fd7ff+hi Delimiter guifg=#626262++hi DiffAdd guibg=#005f87+hi DiffChange guifg=#d7afaf guibg=#4e4e4e+hi DiffDelete guifg=#d70087 guibg=#5f005f+hi DiffText guibg=#878787 gui=bold++hi Directory guifg=#87ff00 gui=bold+hi Error guifg=#ffafff guibg=#87005f+hi ErrorMsg guifg=#ff00af guibg=#000000 gui=bold+hi Exception guifg=#87ff00 gui=bold+hi Float guifg=#af5fff+hi FoldColumn guifg=#5f87af guibg=#000000+hi Folded guifg=#5f87af guibg=#000000+hi Function guifg=#87ff00+hi Identifier guifg=#afd75f+hi Ignore guifg=#808080 guibg=#080808+hi IncSearch guifg=#d7ffaf guibg=#000000++hi Keyword guifg=#87afff gui=bold+hi Label guifg=#ffffaf gui=none+hi Macro guifg=#d7ffaf+hi SpecialKey guifg=#5fd7ff++hi MatchParen guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg guifg=#ffaf5f+hi MoreMsg guifg=#ffaf5f+hi Operator guifg=#afd700++" complete menu+hi Pmenu guifg=#5fd7ff guibg=#262626+hi PmenuSel guibg=#262626+hi PmenuSbar guibg=#262626+hi PmenuThumb guifg=#5fd7ff++hi PreCondit guifg=#87ff00 gui=bold+hi PreProc guifg=#ffafd7+hi Question guifg=#5fd7ff+hi Repeat guifg=#d7005f gui=bold+hi Search guifg=#1c1c1c guibg=#ffd787++" marks column+hi SignColumn guifg=#87ff00 guibg=#262626+hi SpecialChar guifg=#d7005f gui=bold+hi SpecialComment guifg=#8a8a8a gui=bold+hi Special guifg=#5fd7ff guibg=#080808+hi SpecialKey guifg=#8a8a8a++hi Statement guifg=#d78700 gui=bold+hi StatusLine guifg=#121212 guibg=#af8700+hi StatusLineNC guifg=#080808 guibg=#878700+hi StorageClass guifg=#ff8700+hi Structure guifg=#5fd7ff+hi Tag guifg=#d7005f+hi Title guifg=#5faf5f+hi Todo guifg=#d70000 guibg=#080808 gui=bold++hi Typedef guifg=#5fd7ff+hi Type guifg=#d75f00 gui=none+hi Underlined guifg=#87af00 gui=none++hi VertSplit guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS guibg=#444444+hi Visual guibg=#262626+hi WarningMsg guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu guifg=#5fd7ff guibg=#000000++hi Comment guifg=#af875f+hi CursorLine guibg=#121212 gui=none+hi CursorColumn guibg=#080808+hi LineNr guifg=#626262 guibg=#080808+hi NonText guifg=#080808 guibg=#080808++hi TabLine guifg=#878700 guibg=#080808+hi TabLineFill guifg=#080808 guibg=#121212+hi TabLineSel guifg=#ffd700 guibg=#1c1c1c++if &t_Co > 255+ hi Normal ctermfg=225 ctermbg=232+ set background=dark++ hi Boolean ctermfg=135+ hi Character ctermfg=143+ hi Number ctermfg=33+ hi String ctermfg=179+ hi Conditional ctermfg=196 cterm=bold+ hi Constant ctermfg=106 cterm=bold+ hi Cursor ctermfg=150 ctermbg=253+ hi Debug ctermfg=225 cterm=bold+ hi Define ctermfg=81+ hi Delimiter ctermfg=241++ hi DiffAdd ctermbg=24+ hi DiffChange ctermfg=181 ctermbg=239+ hi DiffDelete ctermfg=162 ctermbg=53+ hi DiffText ctermbg=102 cterm=bold++ hi Directory ctermfg=118 cterm=bold+ hi Error ctermfg=219 ctermbg=89+ hi ErrorMsg ctermfg=199 ctermbg=16 cterm=bold+ hi Exception ctermfg=118 cterm=bold+ hi Float ctermfg=135+ hi FoldColumn ctermfg=67 ctermbg=16+ hi Folded ctermfg=67 ctermbg=16+ hi Function ctermfg=118+ hi Identifier ctermfg=149+ hi Ignore ctermfg=244 ctermbg=232+ hi IncSearch ctermfg=193 ctermbg=16++ hi Keyword ctermfg=111 cterm=bold+ hi Label ctermfg=229 cterm=none+ hi Macro ctermfg=193+ hi SpecialKey ctermfg=81++ hi MatchParen ctermfg=196 ctermbg=234 cterm=bold+ hi ModeMsg ctermfg=215+ hi MoreMsg ctermfg=215+ hi Operator ctermfg=148++ " complete menu+ hi Pmenu ctermfg=81 ctermbg=235+ hi PmenuSel ctermbg=235+ hi PmenuSbar ctermbg=235+ hi PmenuThumb ctermfg=81++ hi PreCondit ctermfg=118 cterm=bold+ hi PreProc ctermfg=218+ hi Question ctermfg=81+ hi Repeat ctermfg=161 cterm=bold+ hi Search ctermfg=234 ctermbg=222++ " marks column+ hi SignColumn ctermfg=118 ctermbg=235+ hi SpecialChar ctermfg=161 cterm=bold+ hi SpecialComment ctermfg=245 cterm=bold+ hi Special ctermfg=81 ctermbg=232+ hi SpecialKey ctermfg=245++ hi Statement ctermfg=172 cterm=bold+ hi StatusLine ctermfg=233 ctermbg=136+ hi StatusLineNC ctermfg=232 ctermbg=100+ hi StorageClass ctermfg=208+ hi Structure ctermfg=81+ hi Tag ctermfg=161+ hi Title ctermfg=71+ hi Todo ctermfg=160 ctermbg=232 cterm=bold++ hi Typedef ctermfg=81+ hi Type ctermfg=166 cterm=none+ hi Underlined ctermfg=106 cterm=none++ hi VertSplit ctermfg=244 ctermbg=232 cterm=bold+ hi VisualNOS ctermbg=238+ hi Visual ctermbg=235+ hi WarningMsg ctermfg=21 ctermbg=238 cterm=bold+ hi WildMenu ctermfg=81 ctermbg=16++ hi Comment ctermfg=137+ hi CursorLine ctermbg=233 cterm=none+ hi CursorColumn ctermbg=232+ hi LineNr ctermfg=241 ctermbg=232+ hi NonText ctermfg=232 ctermbg=232++ hi TabLine ctermfg=100 ctermbg=232+ hi TabLineFill ctermfg=232 ctermbg=233+ hi TabLineSel ctermfg=220 ctermbg=234+end
@@ -0,0 +1,205 @@+" Vim color file - neverland.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>+++" Set background first+set background=dark+hi clear++if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="neverland"++" Setting normal before any other highlight group is a good idea+hi Normal guifg=#ffd7ff guibg=#121212++" background might have changed to 'light', so fix it+set background=dark++hi Boolean guifg=#af5fff+hi Character guifg=#afaf5f+hi Number guifg=#0087ff+hi String guifg=#d7af5f+hi Conditional guifg=#ff0000 gui=bold+hi Constant guifg=#87af00 gui=bold+hi Cursor guifg=#afd787 guibg=#dadada+hi Debug guifg=#ffd7ff gui=bold+hi Define guifg=#5fd7ff+hi Delimiter guifg=#626262++hi DiffAdd guibg=#005f87+hi DiffChange guifg=#d7afaf guibg=#4e4e4e+hi DiffDelete guifg=#d70087 guibg=#5f005f+hi DiffText guibg=#878787 gui=bold++hi Directory guifg=#87ff00 gui=bold+hi Error guifg=#ffafff guibg=#87005f+hi ErrorMsg guifg=#ff00af guibg=#000000 gui=bold+hi Exception guifg=#87ff00 gui=bold+hi Float guifg=#af5fff+hi FoldColumn guifg=#5f87af guibg=#000000+hi Folded guifg=#5f87af guibg=#000000+hi Function guifg=#87ff00+hi Identifier guifg=#afd75f+hi Ignore guifg=#808080 guibg=#080808+hi IncSearch guifg=#d7ffaf guibg=#000000++hi Keyword guifg=#87afff gui=bold+hi Label guifg=#ffffaf gui=none+hi Macro guifg=#d7ffaf+hi SpecialKey guifg=#5fd7ff++hi MatchParen guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg guifg=#ffaf5f+hi MoreMsg guifg=#ffaf5f+hi Operator guifg=#afd700++" complete menu+hi Pmenu guifg=#5fd7ff guibg=#121212+hi PmenuSel guibg=#262626+hi PmenuSbar guibg=#080808+hi PmenuThumb guifg=#5fd7ff++hi PreCondit guifg=#87ff00 gui=bold+hi PreProc guifg=#ffafd7+hi Question guifg=#5fd7ff+hi Repeat guifg=#d7005f gui=bold+hi Search guifg=#1c1c1c guibg=#ffd787++" marks column+hi SignColumn guifg=#87ff00 guibg=#262626+hi SpecialChar guifg=#d7005f gui=bold+hi SpecialComment guifg=#8a8a8a gui=bold+hi Special guifg=#5fd7ff guibg=#080808+hi SpecialKey guifg=#8a8a8a++hi Statement guifg=#d78700 gui=bold+hi StatusLine guifg=#1c1c1c guibg=#af8700+hi StatusLineNC guifg=#1c1c1c guibg=#878700+hi StorageClass guifg=#ff8700+hi Structure guifg=#5fd7ff+hi Tag guifg=#d7005f+hi Title guifg=#5faf5f+hi Todo guifg=#d70000 guibg=#121212 gui=bold++hi Typedef guifg=#5fd7ff+hi Type guifg=#d75f00 gui=none+hi Underlined guifg=#87af00 gui=none++hi VertSplit guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS guibg=#444444+hi Visual guibg=#262626+hi WarningMsg guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu guifg=#5fd7ff guibg=#000000++hi Comment guifg=#af875f+hi CursorLine guibg=#1c1c1c gui=none+hi CursorColumn guibg=#121212+hi LineNr guifg=#626262 guibg=#121212+hi NonText guifg=#121212 guibg=#121212++hi TabLine guifg=#878700 guibg=#121212+hi TabLineFill guifg=#121212 guibg=#121212+hi TabLineSel guifg=#ffd700 guibg=#1c1c1c+++if &t_Co > 255+ " Setting normal before any other highlight group is a good idea+ hi Normal ctermfg=225 ctermbg=233++ " background might have changed to 'light', so fix it+ set background=dark++ hi Boolean ctermfg=135+ hi Character ctermfg=143+ hi Number ctermfg=33+ hi String ctermfg=179+ hi Conditional ctermfg=196 cterm=bold+ hi Constant ctermfg=106 cterm=bold+ hi Cursor ctermfg=150 ctermbg=253+ hi Debug ctermfg=225 cterm=bold+ hi Define ctermfg=81+ hi Delimiter ctermfg=241++ hi DiffAdd ctermbg=24+ hi DiffChange ctermfg=181 ctermbg=239+ hi DiffDelete ctermfg=162 ctermbg=53+ hi DiffText ctermbg=102 cterm=bold++ hi Directory ctermfg=118 cterm=bold+ hi Error ctermfg=219 ctermbg=89+ hi ErrorMsg ctermfg=199 ctermbg=16 cterm=bold+ hi Exception ctermfg=118 cterm=bold+ hi Float ctermfg=135+ hi FoldColumn ctermfg=67 ctermbg=16+ hi Folded ctermfg=67 ctermbg=16+ hi Function ctermfg=118+ hi Identifier ctermfg=149+ hi Ignore ctermfg=244 ctermbg=232+ hi IncSearch ctermfg=193 ctermbg=16++ hi Keyword ctermfg=111 cterm=bold+ hi Label ctermfg=229 cterm=none+ hi Macro ctermfg=193+ hi SpecialKey ctermfg=81++ hi MatchParen ctermfg=196 ctermbg=234 cterm=bold+ hi ModeMsg ctermfg=215+ hi MoreMsg ctermfg=215+ hi Operator ctermfg=148++ " complete menu+ hi Pmenu ctermfg=81 ctermbg=233+ hi PmenuSel ctermbg=235+ hi PmenuSbar ctermbg=232+ hi PmenuThumb ctermfg=81++ hi PreCondit ctermfg=118 cterm=bold+ hi PreProc ctermfg=218+ hi Question ctermfg=81+ hi Repeat ctermfg=161 cterm=bold+ hi Search ctermfg=234 ctermbg=222++ " marks column+ hi SignColumn ctermfg=118 ctermbg=235+ hi SpecialChar ctermfg=161 cterm=bold+ hi SpecialComment ctermfg=245 cterm=bold+ hi Special ctermfg=81 ctermbg=232+ hi SpecialKey ctermfg=245++ hi Statement ctermfg=172 cterm=bold+ hi StatusLine ctermfg=234 ctermbg=136+ hi StatusLineNC ctermfg=234 ctermbg=100+ hi StorageClass ctermfg=208+ hi Structure ctermfg=81+ hi Tag ctermfg=161+ hi Title ctermfg=71+ hi Todo ctermfg=160 ctermbg=233 cterm=bold++ hi Typedef ctermfg=81+ hi Type ctermfg=166 cterm=none+ hi Underlined ctermfg=106 cterm=none++ hi VertSplit ctermfg=244 ctermbg=232 cterm=bold+ hi VisualNOS ctermbg=238+ hi Visual ctermbg=235+ hi WarningMsg ctermfg=21 ctermbg=238 cterm=bold+ hi WildMenu ctermfg=81 ctermbg=16++ hi Comment ctermfg=137+ hi CursorLine ctermbg=234 cterm=none+ hi CursorColumn ctermbg=233+ hi LineNr ctermfg=241 ctermbg=233+ hi NonText ctermfg=233 ctermbg=233++ hi TabLine ctermfg=100 ctermbg=233+ hi TabLineFill ctermfg=233 ctermbg=233+ hi TabLineSel ctermfg=220 ctermbg=234+end
.vim/colors/neverland2-darker.vim
@@ -0,0 +1,200 @@+" Vim color file - neverland2-darker.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>+++set background=dark+hi clear++if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="neverland2-dark"++hi Normal guifg=#ffffff guibg=#080808+set background=dark++hi Boolean guifg=#af5fff+hi Character guifg=#afaf5f+hi Number guifg=#0087ff+hi String guifg=#d7af5f+hi Conditional guifg=#ff0000 gui=bold+hi Constant guifg=#af5fff gui=bold+hi Cursor guifg=#afd787 guibg=#dadada+hi Debug guifg=#ffd7ff gui=bold+hi Define guifg=#5fd7ff+hi Delimiter guifg=#626262++hi DiffAdd guibg=#080808+hi DiffChange guifg=#d7afaf guibg=#1c1c1c+hi DiffDelete guifg=#d70087 guibg=#080808+hi DiffText guibg=#080808 gui=bold++hi Directory guifg=#87ff00 gui=bold+hi Error guifg=#ffafff guibg=#080808+hi ErrorMsg guifg=#ff00af guibg=#080808 gui=bold+hi Exception guifg=#87ff00 gui=bold+hi Float guifg=#af5fff+hi FoldColumn guifg=#5f87af guibg=#000000+hi Folded guifg=#5f87af guibg=#000000+hi Function guifg=#ff005f " sub..+hi Identifier guifg=#d75f00 " ..foo+hi Ignore guifg=#808080 guibg=#080808+hi IncSearch guifg=#d7ffaf guibg=#000000++hi Keyword guifg=#5fafd7 gui=bold+hi Label guifg=#ffffaf gui=none+hi Macro guifg=#d7ffaf+hi SpecialKey guifg=#5fd7ff++hi MatchParen guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg guifg=#ffaf5f+hi MoreMsg guifg=#ffaf5f+hi Operator guifg=#00ff00++" complete menu+hi Pmenu guifg=#5fd7ff guibg=#080808+hi PmenuSel guibg=#262626+hi PmenuSbar guibg=#080808+hi PmenuThumb guifg=#5fd7ff++hi PreCondit guifg=#87ff00 gui=bold+hi PreProc guifg=#ffafd7+hi Question guifg=#5fd7ff+hi Repeat guifg=#d7005f gui=bold+hi Search guifg=#d70000 guibg=#080808++" marks column+hi SignColumn guifg=#87ff00 guibg=#262626+hi SpecialChar guifg=#d7005f gui=bold+hi SpecialComment guifg=#8a8a8a gui=bold+hi Special guifg=#5fd7ff guibg=#080808+hi SpecialKey guifg=#8a8a8a++hi Statement guifg=#ffff87 gui=bold " my...+hi StatusLine guifg=#1c1c1c guibg=#af8700+hi StatusLineNC guifg=#1c1c1c guibg=#878700+hi StorageClass guifg=#ff8700+hi Structure guifg=#5fd7ff+hi Tag guifg=#d7005f+hi Title guifg=#0000ff+hi Todo guifg=#d70000 guibg=#080808 gui=bold++hi Typedef guifg=#5fd7ff+hi Type guifg=#5fd7ff gui=none+hi Underlined guifg=#808080 gui=underline++hi VertSplit guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS guibg=#444444+hi Visual guibg=#262626+hi WarningMsg guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu guifg=#5fd7ff guibg=#000000++hi Comment guifg=#87875f+hi CursorLine guibg=#1c1c1c gui=none+hi CursorColumn guibg=#1c1c1c+hi LineNr guifg=#626262 guibg=#080808+hi NonText guifg=#080808 guibg=#080808++hi TabLine guifg=#878700 guibg=#080808+hi TabLineFill guifg=#080808 guibg=#080808+hi TabLineSel guifg=#ffd700 guibg=#1c1c1c++" Support for 256-color terminal+if &t_Co > 255+ hi Normal ctermfg=256 ctermbg=232++ set background=dark+++ hi Boolean ctermfg=135+ hi Character ctermfg=143+ hi Number ctermfg=33+ hi String ctermfg=179+ hi Conditional ctermfg=196 cterm=bold+ hi Constant ctermfg=135 cterm=bold+ hi Cursor ctermfg=150 ctermbg=253+ hi Debug ctermfg=225 cterm=bold+ hi Define ctermfg=81+ hi Delimiter ctermfg=241++ hi DiffAdd ctermbg=232+ hi DiffChange ctermfg=181 ctermbg=234+ hi DiffDelete ctermfg=162 ctermbg=232+ hi DiffText ctermbg=232 cterm=bold++ hi Directory ctermfg=118 cterm=bold+ hi Error ctermfg=219 ctermbg=232+ hi ErrorMsg ctermfg=199 ctermbg=232 cterm=bold+ hi Exception ctermfg=118 cterm=bold+ hi Float ctermfg=135+ hi FoldColumn ctermfg=67 ctermbg=16+ hi Folded ctermfg=67 ctermbg=16+ hi Function ctermfg=197 " sub..+ hi Identifier ctermfg=166 " ..foo+ hi Ignore ctermfg=244 ctermbg=232+ hi IncSearch ctermfg=193 ctermbg=16++ hi Keyword ctermfg=74 cterm=bold+ hi Label ctermfg=229 cterm=none+ hi Macro ctermfg=193+ hi SpecialKey ctermfg=81++ hi MatchParen ctermfg=196 ctermbg=234 cterm=bold+ hi ModeMsg ctermfg=215+ hi MoreMsg ctermfg=215+ hi Operator ctermfg=46++ " complete menu+ hi Pmenu ctermfg=81 ctermbg=232+ hi PmenuSel ctermbg=235+ hi PmenuSbar ctermbg=232+ hi PmenuThumb ctermfg=81++ hi PreCondit ctermfg=118 cterm=bold+ hi PreProc ctermfg=218+ hi Question ctermfg=81+ hi Repeat ctermfg=161 cterm=bold+ hi Search ctermfg=160 ctermbg=232++ " marks column+ hi SignColumn ctermfg=118 ctermbg=235+ hi SpecialChar ctermfg=161 cterm=bold+ hi SpecialComment ctermfg=245 cterm=bold+ hi Special ctermfg=81 ctermbg=232+ hi SpecialKey ctermfg=245++ hi Statement ctermfg=228 cterm=bold " my...+ hi StatusLine ctermfg=234 ctermbg=136+ hi StatusLineNC ctermfg=234 ctermbg=100+ hi StorageClass ctermfg=208+ hi Structure ctermfg=81+ hi Tag ctermfg=161+ hi Title ctermfg=21+ hi Todo ctermfg=160 ctermbg=232 cterm=bold++ hi Typedef ctermfg=81+ hi Type ctermfg=81 cterm=none+ hi Underlined ctermfg=244 cterm=underline++ hi VertSplit ctermfg=244 ctermbg=232 cterm=bold+ hi VisualNOS ctermbg=238+ hi Visual ctermbg=235+ hi WarningMsg ctermfg=21 ctermbg=238 cterm=bold+ hi WildMenu ctermfg=81 ctermbg=16++ hi Comment ctermfg=101+ hi CursorLine ctermbg=234 cterm=none+ hi CursorColumn ctermbg=234+ hi LineNr ctermfg=241 ctermbg=232+ hi NonText ctermfg=232 ctermbg=232++ hi TabLine ctermfg=100 ctermbg=232+ hi TabLineFill ctermfg=232 ctermbg=232+ hi TabLineSel ctermfg=220 ctermbg=234+end
@@ -0,0 +1,197 @@+" Vim color file - neverland2.vim+" Eyes are sober, this is the plan+" I'm sitting in a car heading Neverland+" Author: Magnus Woldrich <trapd00r@trapd00r.se>++set background=dark+hi clear++if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="neverland2"++hi Normal guifg=#ffffff guibg=#121212+set background=dark++hi Boolean guifg=#af5fff+hi Character guifg=#afaf5f+hi Number guifg=#0087ff+hi String guifg=#d7af5f+hi Conditional guifg=#ff0000 gui=bold+hi Constant guifg=#af5fff gui=bold+hi Cursor guifg=#afd787 guibg=#dadada+hi Debug guifg=#ffd7ff gui=bold+hi Define guifg=#5fd7ff+hi Delimiter guifg=#626262++hi DiffAdd guibg=#121212+hi DiffChange guifg=#d7afaf guibg=#1c1c1c+hi DiffDelete guifg=#d70087 guibg=#080808+hi DiffText guibg=#121212 gui=bold++hi Directory guifg=#87ff00 gui=bold+hi Error guifg=#ffafff guibg=#121212+hi ErrorMsg guifg=#ff00af guibg=#121212 gui=bold+hi Exception guifg=#87ff00 gui=bold+hi Float guifg=#af5fff+hi FoldColumn guifg=#5f87af guibg=#000000+hi Folded guifg=#5f87af guibg=#000000+hi Function guifg=#ff005f " sub..+hi Identifier guifg=#d75f00 " ..foo+hi Ignore guifg=#808080 guibg=#080808+hi IncSearch guifg=#d7ffaf guibg=#000000++hi Keyword guifg=#5fafd7 gui=bold+hi Label guifg=#ffffaf gui=none+hi Macro guifg=#d7ffaf+hi SpecialKey guifg=#5fd7ff++hi MatchParen guifg=#ff0000 guibg=#1c1c1c gui=bold+hi ModeMsg guifg=#ffaf5f+hi MoreMsg guifg=#ffaf5f+hi Operator guifg=#00ff00++" complete menu+hi Pmenu guifg=#5fd7ff guibg=#121212+hi PmenuSel guibg=#262626+hi PmenuSbar guibg=#080808+hi PmenuThumb guifg=#5fd7ff++hi PreCondit guifg=#87ff00 gui=bold+hi PreProc guifg=#ffafd7+hi Question guifg=#5fd7ff+hi Repeat guifg=#d7005f gui=bold+hi Search guifg=#d70000 guibg=#121212++" marks column+hi SignColumn guifg=#87ff00 guibg=#262626+hi SpecialChar guifg=#d7005f gui=bold+hi SpecialComment guifg=#8a8a8a gui=bold+hi Special guifg=#5fd7ff guibg=#080808+hi SpecialKey guifg=#8a8a8a++hi Statement guifg=#ffff87 gui=bold " my...+hi StatusLine guifg=#1c1c1c guibg=#af8700+hi StatusLineNC guifg=#1c1c1c guibg=#878700+hi StorageClass guifg=#ff8700+hi Structure guifg=#5fd7ff+hi Tag guifg=#d7005f+hi Title guifg=#0000ff+hi Todo guifg=#d70000 guibg=#121212 gui=bold++hi Typedef guifg=#5fd7ff+hi Type guifg=#5fd7ff gui=none+hi Underlined guifg=#808080 gui=underline++hi VertSplit guifg=#808080 guibg=#080808 gui=bold+hi VisualNOS guibg=#444444+hi Visual guibg=#262626+hi WarningMsg guifg=#0000ff guibg=#444444 gui=bold+hi WildMenu guifg=#5fd7ff guibg=#000000++hi Comment guifg=#87875f+hi CursorLine guibg=#1c1c1c gui=none+hi CursorColumn guibg=#1c1c1c+hi LineNr guifg=#626262 guibg=#121212+hi NonText guifg=#121212 guibg=#121212++hi TabLine guifg=#878700 guibg=#121212+hi TabLineFill guifg=#121212 guibg=#121212+hi TabLineSel guifg=#ffd700 guibg=#1c1c1c++" Support for 256-color terminal+if &t_Co > 255+ hi Normal ctermfg=256 ctermbg=233+ set background=dark++ hi Boolean ctermfg=135+ hi Character ctermfg=143+ hi Number ctermfg=33+ hi String ctermfg=179+ hi Conditional ctermfg=196 cterm=bold+ hi Constant ctermfg=135 cterm=bold+ hi Cursor ctermfg=150 ctermbg=253+ hi Debug ctermfg=225 cterm=bold+ hi Define ctermfg=81+ hi Delimiter ctermfg=241++ hi DiffAdd ctermbg=233+ hi DiffChange ctermfg=181 ctermbg=234+ hi DiffDelete ctermfg=162 ctermbg=232+ hi DiffText ctermbg=233 cterm=bold++ hi Directory ctermfg=118 cterm=bold+ hi Error ctermfg=219 ctermbg=233+ hi ErrorMsg ctermfg=199 ctermbg=233 cterm=bold+ hi Exception ctermfg=118 cterm=bold+ hi Float ctermfg=135+ hi FoldColumn ctermfg=67 ctermbg=16+ hi Folded ctermfg=67 ctermbg=16+ hi Function ctermfg=197 " sub..+ hi Identifier ctermfg=166 " ..foo+ hi Ignore ctermfg=244 ctermbg=232+ hi IncSearch ctermfg=193 ctermbg=16++ hi Keyword ctermfg=74 cterm=bold+ hi Label ctermfg=229 cterm=none+ hi Macro ctermfg=193+ hi SpecialKey ctermfg=81++ hi MatchParen ctermfg=196 ctermbg=234 cterm=bold+ hi ModeMsg ctermfg=215+ hi MoreMsg ctermfg=215+ hi Operator ctermfg=46++ " complete menu+ hi Pmenu ctermfg=81 ctermbg=233+ hi PmenuSel ctermbg=235+ hi PmenuSbar ctermbg=232+ hi PmenuThumb ctermfg=81++ hi PreCondit ctermfg=118 cterm=bold+ hi PreProc ctermfg=218+ hi Question ctermfg=81+ hi Repeat ctermfg=161 cterm=bold+ hi Search ctermfg=160 ctermbg=233++ " marks column+ hi SignColumn ctermfg=118 ctermbg=235+ hi SpecialChar ctermfg=161 cterm=bold+ hi SpecialComment ctermfg=245 cterm=bold+ hi Special ctermfg=81 ctermbg=232+ hi SpecialKey ctermfg=245++ hi Statement ctermfg=228 cterm=bold " my...+ hi StatusLine ctermfg=234 ctermbg=136+ hi StatusLineNC ctermfg=234 ctermbg=100+ hi StorageClass ctermfg=208+ hi Structure ctermfg=81+ hi Tag ctermfg=161+ hi Title ctermfg=21+ hi Todo ctermfg=160 ctermbg=233 cterm=bold++ hi Typedef ctermfg=81+ hi Type ctermfg=81 cterm=none+ hi Underlined ctermfg=244 cterm=underline++ hi VertSplit ctermfg=244 ctermbg=232 cterm=bold+ hi VisualNOS ctermbg=238+ hi Visual ctermbg=235+ hi WarningMsg ctermfg=21 ctermbg=238 cterm=bold+ hi WildMenu ctermfg=81 ctermbg=16++ hi Comment ctermfg=101+ hi CursorLine ctermbg=234 cterm=none+ hi CursorColumn ctermbg=234+ hi LineNr ctermfg=241 ctermbg=233+ hi NonText ctermfg=233 ctermbg=233++ hi TabLine ctermfg=100 ctermbg=233+ hi TabLineFill ctermfg=233 ctermbg=233+ hi TabLineSel ctermfg=220 ctermbg=234+end
@@ -0,0 +1,1117 @@+" Name: Solarized vim colorscheme+" Author: Ethan Schoonover <es@ethanschoonover.com>+" URL: http://ethanschoonover.com/solarized+" (see this url for latest release & screenshots)+" License: OSI approved MIT license (see end of this file)+" Created: In the middle of the night+" Modified: 2011 May 05+"+" Usage "{{{+"+" ---------------------------------------------------------------------+" ABOUT:+" ---------------------------------------------------------------------+" Solarized is a carefully designed selective contrast colorscheme with dual+" light and dark modes that runs in both GUI, 256 and 16 color modes.+"+" See the homepage above for screenshots and details.+"+" ---------------------------------------------------------------------+" OPTIONS:+" ---------------------------------------------------------------------+" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized"+"+" ---------------------------------------------------------------------+" INSTALLATION:+" ---------------------------------------------------------------------+" Two options for installation: manual or pathogen+"+" MANUAL INSTALLATION OPTION:+" ---------------------------------------------------------------------+"+" 1. Download the solarized distribution (available on the homepage above)+" and unarchive the file.+" 2. Move `solarized.vim` to your `.vim/colors` directory.+" 3. Move each of the files in each subdirectories to the corresponding .vim+" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +" directory as .vim/autoload/togglebg.vim).+"+" RECOMMENDED PATHOGEN INSTALLATION OPTION:+" ---------------------------------------------------------------------+"+" 1. Download and install Tim Pope's Pathogen from:+" https://github.com/tpope/vim-pathogen+"+" 2. Next, move or clone the `vim-colors-solarized` directory so that it is+" a subdirectory of the `.vim/bundle` directory.+"+" a. **clone with git:**+"+" $ cd ~/.vim/bundle+" $ git clone git://github.com/altercation/vim-colors-solarized.git+"+" b. **or move manually into the pathogen bundle directory:**+" In the parent directory of vim-colors-solarized:+"+" $ mv vim-colors-solarized ~/.vim/bundle/+"+" MODIFY VIMRC:+"+" After either Option 1 or Option 2 above, put the following two lines in your+" .vimrc:+"+" syntax enable+" set background=dark+" colorscheme solarized+"+" or, for the light background mode of Solarized:+"+" syntax enable+" set background=light+" colorscheme solarized+"+" I like to have a different background in GUI and terminal modes, so I can use+" the following if-then. However, I find vim's background autodetection to be+" pretty good and, at least with MacVim, I can leave this background value+" assignment out entirely and get the same results.+"+" if has('gui_running')+" set background=light+" else+" set background=dark+" endif+"+" See the Solarized homepage at http://ethanschoonover.com/solarized for+" screenshots which will help you select either the light or dark background.+"+" ---------------------------------------------------------------------+" COLOR VALUES+" ---------------------------------------------------------------------+" Download palettes and files from: http://ethanschoonover.com/solarized+"+" L\*a\*b values are canonical (White D65, Reference D50), other values are+" matched in sRGB space.+"+" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB+" --------- ------- ---- ------- ----------- ---------- ----------- -----------+" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21+" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26+" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46+" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51+" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59+" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63+" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93+" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99+" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71+" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80+" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86+" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83+" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77+" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82+" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63+" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60+"+" ---------------------------------------------------------------------+" COLORSCHEME HACKING+" ---------------------------------------------------------------------+"+" Useful commands for testing colorschemes:+" :source $VIMRUNTIME/syntax/hitest.vim+" :help highlight-groups+" :help cterm-colors+" :help group-name+"+" Useful links for developing colorschemes:+" http://www.vim.org/scripts/script.php?script_id=2937+" http://vimcasts.org/episodes/creating-colorschemes-for-vim/+" http://www.frexx.de/xterm-256-notes/"+"+" }}}+" Environment Specific Overrides "{{{+" Allow or disallow certain features based on current terminal emulator or +" environment.++" Terminals that support italics+let s:terms_italic=[+ \"rxvt",+ \"gnome-terminal"+ \]+" For reference only, terminals are known to be incomptible.+" Terminals that are in neither list need to be tested.+let s:terms_noitalic=[+ \"iTerm.app",+ \"Apple_Terminal"+ \]+if has("gui_running")+ let s:terminal_italic=1 " TODO: could refactor to not require this at all+else+ let s:terminal_italic=0 " terminals will be guilty until proven compatible+ for term in s:terms_italic+ if $TERM_PROGRAM =~ term+ let s:terminal_italic=1+ endif+ endfor+endif++" }}}+" Default option values"{{{+" ---------------------------------------------------------------------+" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself.+let s:options_list=[+ \'" this block of commands has been autogenerated by solarized.vim and',+ \'" includes the current, non-default Solarized option values.',+ \'" To use, place these commands in your .vimrc file (replacing any',+ \'" existing colorscheme commands). See also ":help solarized"',+ \'',+ \'" ------------------------------------------------------------------',+ \'" Solarized Colorscheme Config',+ \'" ------------------------------------------------------------------',+ \]+let s:colorscheme_list=[+ \'syntax enable',+ \'set background='.&background,+ \'colorscheme solarized',+ \]+let s:defaults_list=[+ \'" ------------------------------------------------------------------',+ \'',+ \'" The following items are available options, but do not need to be',+ \'" included in your .vimrc as they are currently set to their defaults.',+ \''+ \]+let s:lazycat_list=[+ \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"',+ \'" ------------------------------------------------------------------',+ \]++function! s:SetOption(name,default)+ if type(a:default) == type(0)+ let l:wrap=''+ let l:ewrap=''+ else+ let l:wrap='"'+ let l:ewrap='\"'+ endif+ if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default+ exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"'+ exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")'+ else+ exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")'+ endif+endfunction++if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256)+ let s:solarized_termtrans_default = 1+else+ let s:solarized_termtrans_default = 0+endif+call s:SetOption("termtrans",s:solarized_termtrans_default)+call s:SetOption("degrade",0)+call s:SetOption("bold",1)+call s:SetOption("underline",1)+call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support+call s:SetOption("termcolors",16)+call s:SetOption("contrast","normal")+call s:SetOption("visibility","normal")+call s:SetOption("diffmode","normal")+call s:SetOption("hitrail",0)+call s:SetOption("menu",1)++"}}}+" Colorscheme initialization "{{{+" ---------------------------------------------------------------------+hi clear+if exists("syntax_on")+ syntax reset+endif+let colors_name = "solarized"++"}}}+" GUI & CSApprox hexadecimal palettes"{{{+" ---------------------------------------------------------------------+"+" Set both gui and terminal color values in separate conditional statements+" Due to possibility that CSApprox is running (though I suppose we could just+" leave the hex values out entirely in that case and include only cterm colors)+" We also check to see if user has set solarized (force use of the+" neutral gray monotone palette component)+if (has("gui_running") && g:solarized_degrade == 0)+ let s:vmode = "gui"+ let s:base03 = "#002b36"+ let s:base02 = "#073642"+ let s:base01 = "#586e75"+ let s:base00 = "#657b83"+ let s:base0 = "#839496"+ let s:base1 = "#93a1a1"+ let s:base2 = "#eee8d5"+ let s:base3 = "#fdf6e3"+ let s:yellow = "#b58900"+ let s:orange = "#cb4b16"+ let s:red = "#dc322f"+ let s:magenta = "#d33682"+ let s:violet = "#6c71c4"+ let s:blue = "#268bd2"+ let s:cyan = "#2aa198"+ "let s:green = "#859900" "original+ let s:green = "#719e07" "experimental+elseif (has("gui_running") && g:solarized_degrade == 1)+ " These colors are identical to the 256 color mode. They may be viewed+ " while in gui mode via "let g:solarized_degrade=1", though this is not+ " recommened and is for testing only.+ let s:vmode = "gui"+ let s:base03 = "#1c1c1c"+ let s:base02 = "#262626"+ let s:base01 = "#4e4e4e"+ let s:base00 = "#585858"+ let s:base0 = "#808080"+ let s:base1 = "#8a8a8a"+ let s:base2 = "#d7d7af"+ let s:base3 = "#ffffd7"+ let s:yellow = "#af8700"+ let s:orange = "#d75f00"+ let s:red = "#af0000"+ let s:magenta = "#af005f"+ let s:violet = "#5f5faf"+ let s:blue = "#0087ff"+ let s:cyan = "#00afaf"+ let s:green = "#5f8700"+elseif g:solarized_termcolors != 256 && &t_Co >= 16+ let s:vmode = "cterm"+ let s:base03 = "8"+ let s:base02 = "0"+ let s:base01 = "10"+ let s:base00 = "11"+ let s:base0 = "12"+ let s:base1 = "14"+ let s:base2 = "7"+ let s:base3 = "15"+ let s:yellow = "3"+ let s:orange = "9"+ let s:red = "1"+ let s:magenta = "5"+ let s:violet = "13"+ let s:blue = "4"+ let s:cyan = "6"+ let s:green = "2"+elseif g:solarized_termcolors == 256+ let s:vmode = "cterm"+ let s:base03 = "234"+ let s:base02 = "235"+ let s:base01 = "239"+ let s:base00 = "240"+ let s:base0 = "244"+ let s:base1 = "245"+ let s:base2 = "187"+ let s:base3 = "230"+ let s:yellow = "136"+ let s:orange = "166"+ let s:red = "124"+ let s:magenta = "125"+ let s:violet = "61"+ let s:blue = "33"+ let s:cyan = "37"+ let s:green = "64"+else+ let s:vmode = "cterm"+ let s:bright = "* term=bold cterm=bold"+" let s:base03 = "0".s:bright+" let s:base02 = "0"+" let s:base01 = "2".s:bright+" let s:base00 = "3".s:bright+" let s:base0 = "4".s:bright+" let s:base1 = "6".s:bright+" let s:base2 = "7"+" let s:base3 = "7".s:bright+" let s:yellow = "3"+" let s:orange = "1".s:bright+" let s:red = "1"+" let s:magenta = "5"+" let s:violet = "5".s:bright+" let s:blue = "4"+" let s:cyan = "6"+" let s:green = "2"+ let s:base03 = "DarkGray" " 0*+ let s:base02 = "Black" " 0+ let s:base01 = "LightGreen" " 2*+ let s:base00 = "LightYellow" " 3*+ let s:base0 = "LightBlue" " 4*+ let s:base1 = "LightCyan" " 6*+ let s:base2 = "LightGray" " 7+ let s:base3 = "White" " 7*+ let s:yellow = "DarkYellow" " 3+ let s:orange = "LightRed" " 1*+ let s:red = "DarkRed" " 1+ let s:magenta = "DarkMagenta" " 5+ let s:violet = "LightMagenta" " 5*+ let s:blue = "DarkBlue" " 4+ let s:cyan = "DarkCyan" " 6+ let s:green = "DarkGreen" " 2++endif+"}}}+" Formatting options and null values for passthrough effect "{{{+" ---------------------------------------------------------------------+ let s:none = "NONE"+ let s:none = "NONE"+ let s:t_none = "NONE"+ let s:n = "NONE"+ let s:c = ",undercurl"+ let s:r = ",reverse"+ let s:s = ",standout"+ let s:ou = ""+ let s:ob = ""+"}}}+" Background value based on termtrans setting "{{{+" ---------------------------------------------------------------------+if (has("gui_running") || g:solarized_termtrans == 0)+ let s:back = s:base03+else+ let s:back = "NONE"+endif+"}}}+" Alternate light scheme "{{{+" ---------------------------------------------------------------------+if &background == "light"+ let s:temp03 = s:base03+ let s:temp02 = s:base02+ let s:temp01 = s:base01+ let s:temp00 = s:base00+ let s:base03 = s:base3+ let s:base02 = s:base2+ let s:base01 = s:base1+ let s:base00 = s:base0+ let s:base0 = s:temp00+ let s:base1 = s:temp01+ let s:base2 = s:temp02+ let s:base3 = s:temp03+ if (s:back != "NONE")+ let s:back = s:base03+ endif+endif+"}}}+" Optional contrast schemes "{{{+" ---------------------------------------------------------------------+if g:solarized_contrast == "high"+ let s:base01 = s:base00+ let s:base00 = s:base0+ let s:base0 = s:base1+ let s:base1 = s:base2+ let s:base2 = s:base3+ let s:back = s:back+endif+if g:solarized_contrast == "low"+ let s:back = s:base02+ let s:ou = ",underline"+endif+"}}}+" Overrides dependent on user specified values and environment "{{{+" ---------------------------------------------------------------------+if (g:solarized_bold == 0 || &t_Co == 8 )+ let s:b = ""+ let s:bb = ",bold"+else+ let s:b = ",bold"+ let s:bb = ""+endif++if g:solarized_underline == 0+ let s:u = ""+else+ let s:u = ",underline"+endif++if g:solarized_italic == 0 || s:terminal_italic == 0+ let s:i = ""+else+ let s:i = ",italic"+endif+"}}}+" Highlighting primitives"{{{+" ---------------------------------------------------------------------++exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'"+exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'"+exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'"+exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'"+exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'"+exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'"+exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'"+exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'"+exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'"+exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'"+exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'"+exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'"+exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'"+exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'"+exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'"+exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'"+exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'"+exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'"++exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'"+exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'"+exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'"+exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'"+exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'"+exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'"+exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'"+exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'"+exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'"+exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'"+exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'"+exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'"+exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'"+exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'"+exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'"+exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'"+exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'"+exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'"++exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'"+exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'"+exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'"+exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'"+exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'"+exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'"+exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'"+exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'"+exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'"+exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'"+exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'"+exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'"+" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15.+exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'"+exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'"++if has("gui_running")+ exe "let s:sp_none = ' guisp=".s:none ."'"+ exe "let s:sp_back = ' guisp=".s:back ."'"+ exe "let s:sp_base03 = ' guisp=".s:base03 ."'"+ exe "let s:sp_base02 = ' guisp=".s:base02 ."'"+ exe "let s:sp_base01 = ' guisp=".s:base01 ."'"+ exe "let s:sp_base00 = ' guisp=".s:base00 ."'"+ exe "let s:sp_base0 = ' guisp=".s:base0 ."'"+ exe "let s:sp_base1 = ' guisp=".s:base1 ."'"+ exe "let s:sp_base2 = ' guisp=".s:base2 ."'"+ exe "let s:sp_base3 = ' guisp=".s:base3 ."'"+ exe "let s:sp_green = ' guisp=".s:green ."'"+ exe "let s:sp_yellow = ' guisp=".s:yellow ."'"+ exe "let s:sp_orange = ' guisp=".s:orange ."'"+ exe "let s:sp_red = ' guisp=".s:red ."'"+ exe "let s:sp_magenta = ' guisp=".s:magenta."'"+ exe "let s:sp_violet = ' guisp=".s:violet ."'"+ exe "let s:sp_blue = ' guisp=".s:blue ."'"+ exe "let s:sp_cyan = ' guisp=".s:cyan ."'"+else+ let s:sp_none = ""+ let s:sp_back = ""+ let s:sp_base03 = ""+ let s:sp_base02 = ""+ let s:sp_base01 = ""+ let s:sp_base00 = ""+ let s:sp_base0 = ""+ let s:sp_base1 = ""+ let s:sp_base2 = ""+ let s:sp_base3 = ""+ let s:sp_green = ""+ let s:sp_yellow = ""+ let s:sp_orange = ""+ let s:sp_red = ""+ let s:sp_magenta = ""+ let s:sp_violet = ""+ let s:sp_blue = ""+ let s:sp_cyan = ""+endif++"}}}+" Basic highlighting"{{{+" ---------------------------------------------------------------------+" note that link syntax to avoid duplicate configuration doesn't work with the+" exe compiled formats++exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back++exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none+" *Comment any comment++exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none+" *Constant any constant+" String a string constant: "this is a string"+" Character a character constant: 'c', '\n'+" Number a number constant: 234, 0xff+" Boolean a boolean constant: TRUE, false+" Float a floating point constant: 2.3e10++exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none+" *Identifier any variable name+" Function function name (also: methods for classes)+"+exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none+" *Statement any statement+" Conditional if, then, else, endif, switch, etc.+" Repeat for, do, while, etc.+" Label case, default, etc.+" Operator "sizeof", "+", "*", etc.+" Keyword any other keyword+" Exception try, catch, throw++exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none+" *PreProc generic Preprocessor+" Include preprocessor #include+" Define preprocessor #define+" Macro same as Define+" PreCondit preprocessor #if, #else, #endif, etc.++exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none+" *Type int, long, char, etc.+" StorageClass static, register, volatile, etc.+" Structure struct, union, enum, etc.+" Typedef A typedef++exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none+" *Special any special symbol+" SpecialChar special character in a constant+" Tag you can use CTRL-] on this+" Delimiter character that needs attention+" SpecialComment special things inside a comment+" Debug debugging statements++exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none+" *Underlined text that stands out, HTML links++exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none+" *Ignore left blank, hidden |hl-Ignore|++exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none+" *Error any erroneous construct++exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none+" *Todo anything that needs extra attention; mostly the+" keywords TODO FIXME and XXX+"+"}}}+" Extended highlighting "{{{+" ---------------------------------------------------------------------+if (g:solarized_visibility=="high")+ exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none+ exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none+elseif (g:solarized_visibility=="low")+ exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none+ exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none+else+ exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02+ exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none+endif+exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb+exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb+exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb+exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none+exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none+exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none+exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02+exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none+if ( has("gui_running") || &t_Co > 8 )+ exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00+else+ exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02+endif+exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none+exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb+exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none+exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb+exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03+exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02+if (g:solarized_diffmode=="high")+exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none+exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none+exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none+exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none+elseif (g:solarized_diffmode=="low")+exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green+exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow+exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none+exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue+else " normal+ if has("gui_running")+exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green+exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow+exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02+exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue+ else+exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green+exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow+exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02+exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue+ endif+endif+exe "hi! SignColumn" .s:fmt_none .s:fg_base0+exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red+exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet+exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan+exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow+exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb+exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb+exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb+exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb+exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0+exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0+exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu+exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02+exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1+exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02+exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0+hi! link lCursor Cursor+exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01++"}}}+" vim syntax highlighting "{{{+" ---------------------------------------------------------------------+"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital+"hi! link vimComment Comment+"hi! link vimLineComment Comment+hi! link vimVar Identifier+hi! link vimFunc Function+hi! link vimUserFunc Function+hi! link helpSpecial Special+hi! link vimSet Normal+hi! link vimSetEqual Normal+exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none+exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none+exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none+exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none+exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none+exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none+exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none+exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none+exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none+exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none+exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none+exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none+exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none+exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none+"}}}+" diff highlighting "{{{+" ---------------------------------------------------------------------+hi! link diffAdded Statement+hi! link diffLine Identifier+"}}}+" git & gitcommit highlighting "{{{+"git+"exe "hi! gitDateHeader"+"exe "hi! gitIdentityHeader"+"exe "hi! gitIdentityKeyword"+"exe "hi! gitNotesHeader"+"exe "hi! gitReflogHeader"+"exe "hi! gitKeyword"+"exe "hi! gitIdentity"+"exe "hi! gitEmailDelimiter"+"exe "hi! gitEmail"+"exe "hi! gitDate"+"exe "hi! gitMode"+"exe "hi! gitHashAbbrev"+"exe "hi! gitHash"+"exe "hi! gitReflogMiddle"+"exe "hi! gitReference"+"exe "hi! gitStage"+"exe "hi! gitType"+"exe "hi! gitDiffAdded"+"exe "hi! gitDiffRemoved"+"gitcommit+"exe "hi! gitcommitSummary" +exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none+hi! link gitcommitUntracked gitcommitComment+hi! link gitcommitDiscarded gitcommitComment+hi! link gitcommitSelected gitcommitComment+exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none+exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none+exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none+hi! link gitcommitNoBranch gitcommitBranch+exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none+exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none+"exe "hi! gitcommitUnmergedType"+"exe "hi! gitcommitType"+"exe "hi! gitcommitNoChanges"+"exe "hi! gitcommitHeader"+exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none+exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none+exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none+exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none+exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none+exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none+hi! link gitcommitDiscardedArrow gitcommitDiscardedFile+hi! link gitcommitSelectedArrow gitcommitSelectedFile+hi! link gitcommitUnmergedArrow gitcommitUnmergedFile+"exe "hi! gitcommitArrow"+"exe "hi! gitcommitOverflow"+"exe "hi! gitcommitBlank"+" }}}+" html highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none+exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none+exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none+exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none+exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none+exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none+exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none+"}}}+" perl highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none+exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none+exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none++"}}}+" tex highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none+exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none+exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none+exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none+"}}}+" ruby highlighting "{{{+" ---------------------------------------------------------------------+exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold+"rubyInclude+"rubySharpBang+"rubyAccess+"rubyPredefinedVariable+"rubyBoolean+"rubyClassVariable+"rubyBeginEnd+"rubyRepeatModifier+"hi! link rubyArrayDelimiter Special " [ , , ]+"rubyCurlyBlock { , , }++"hi! link rubyClass Keyword+"hi! link rubyModule Keyword+"hi! link rubyKeyword Keyword+"hi! link rubyOperator Operator+"hi! link rubyIdentifier Identifier+"hi! link rubyInstanceVariable Identifier+"hi! link rubyGlobalVariable Identifier+"hi! link rubyClassVariable Identifier+"hi! link rubyConstant Type+"}}}+" haskell syntax highlighting"{{{+" ---------------------------------------------------------------------+" For use with syntax/haskell.vim : Haskell Syntax File+" http://www.vim.org/scripts/script.php?script_id=3034+" See also Steffen Siering's github repository:+" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim+" ---------------------------------------------------------------------+"+" Treat True and False specially, see the plugin referenced above+let hs_highlight_boolean=1+" highlight delims, see the plugin referenced above+let hs_highlight_delimiters=1++exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none++exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none+exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none+exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none+exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none++exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none+exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none+exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none+exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none+exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr+exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none+hi! link hsImportParams Delimiter+hi! link hsDelimTypeExport Delimiter+hi! link hsModuleStartLabel hsStructure+hi! link hsModuleWhereLabel hsModuleStartLabel++" following is for the haskell-conceal plugin+" the first two items don't have an impact, but better safe+exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none++"}}}+" pandoc markdown syntax highlighting "{{{+" ---------------------------------------------------------------------++"PandocHiLink pandocNormalBlock+exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none+exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold+exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold+exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital+exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none+hi! link pandocVerbatimBlockDeep pandocVerbatimBlock+hi! link pandocCodeBlock pandocVerbatimBlock+hi! link pandocCodeBlockDelim pandocVerbatimBlock+exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none+exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none+exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none+exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr++" Definitions+" ---------------------------------------------------------------------+let s:fg_pdef = s:fg_violet+exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none+exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd+exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold+exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital+exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi+exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold+exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi+exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr+exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none+exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none+exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none++" Tables+" ---------------------------------------------------------------------+let s:fg_ptable = s:fg_blue+exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none+exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none+hi! link pandocTableStructureTop pandocTableStructre+hi! link pandocTableStructureEnd pandocTableStructre+exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none+exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none+exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital+exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi+exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold+exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi+exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr+exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none+exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none+exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none++" Headings+" ---------------------------------------------------------------------+let s:fg_phead = s:fg_orange+exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold+exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi+exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr+exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold+exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold++" Links+" ---------------------------------------------------------------------+exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none+exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr+exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb+exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr+exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi+exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00+exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00+exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold+exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb+exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr+exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold+exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb+exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none+exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none+exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none+exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr+exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none++" Main Styles+" ---------------------------------------------------------------------+exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none+exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital+exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi+exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold+exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi+exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi+exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr+exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none+exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none+exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none++exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold+exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold+exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold+exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none+exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr+hi! link pandocEscapedCharacter pandocEscapePair+hi! link pandocLineBreak pandocEscapePair++" Embedded Code+" ---------------------------------------------------------------------+exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none+exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none+exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none+exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold+hi! link pandocMetadataTitle pandocMetadata++"}}}+" Utility autocommand "{{{+" ---------------------------------------------------------------------+" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed.+"+" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped.+"+" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal.+"+autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif+"}}}+" Highlight Trailing Space {{{+" Experimental: Different highlight when on cursorline+function! s:SolarizedHiTrail()+ if g:solarized_hitrail==0+ hi! clear solarizedTrailingSpace+ else+ syn match solarizedTrailingSpace "\s*$"+ exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red+ endif+endfunction +augroup SolarizedHiTrail+ autocmd!+ if g:solarized_hitrail==1+ autocmd! Syntax * call s:SolarizedHiTrail()+ autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif+ endif+augroup END+" }}}+" Menus "{{{+" ---------------------------------------------------------------------+" Turn off Solarized menu by including the following assignment in your .vimrc:+"+" let g:solarized_menu=0++function! s:SolarizedOptions()+ new "new buffer+ setf vim "vim filetype+ let failed = append(0, s:defaults_list)+ let failed = append(0, s:colorscheme_list)+ let failed = append(0, s:options_list)+ let failed = append(0, s:lazycat_list)+ 0 "jump back to the top+endfunction+if !exists(":SolarizedOptions")+ command SolarizedOptions :call s:SolarizedOptions()+endif++function! SolarizedMenu()+ if exists("g:loaded_solarized_menu")+ try+ silent! aunmenu Solarized+ endtry+ endif+ let g:loaded_solarized_menu = 1++ if g:colors_name == "solarized" && g:solarized_menu != 0++ amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized<CR>+ amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized<CR>+ amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized<CR>+ an &Solarized.&Contrast.-sep- <Nop>+ amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast'<CR>++ amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized<CR>+ amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized<CR>+ amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized<CR>+ an &Solarized.&Visibility.-sep- <Nop>+ amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility'<CR>++ amenu &Solarized.&Background.&Toggle\ Background :ToggleBG<CR>+ amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized<CR>+ amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized<CR>+ an &Solarized.&Background.-sep- <Nop>+ amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg<CR>++ if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif+ exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized<CR>"+ if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif+ exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized<CR>"+ if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif+ exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized<CR>"++ amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized<CR>+ amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized<CR>+ amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized<CR>++ if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif+ exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized<CR>"+ an &Solarized.&Experimental.-sep- <Nop>+ amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail'<CR>++ an &Solarized.-sep1- <Nop>++ amenu &Solarized.&Autogenerate\ options :SolarizedOptions<CR>++ an &Solarized.-sep2- <Nop>++ amenu &Solarized.&Help.&Solarized\ Help :help solarized<CR>+ amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg<CR>+ amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu<CR>++ an 9999.77 &Help.&Solarized\ Colorscheme :help solarized<CR>+ an 9999.78 &Help.&Toggle\ Background :help togglebg<CR>+ an 9999.79 &Help.-sep3- <Nop>++ endif+endfunction++autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif++"}}}+" License "{{{+" ---------------------------------------------------------------------+"+" Copyright (c) 2011 Ethan Schoonover+"+" Permission is hereby granted, free of charge, to any person obtaining a copy+" of this software and associated documentation files (the "Software"), to deal+" in the Software without restriction, including without limitation the rights+" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell+" copies of the Software, and to permit persons to whom the Software is+" furnished to do so, subject to the following conditions:+"+" The above copyright notice and this permission notice shall be included in+" all copies or substantial portions of the Software.+"+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR+" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,+" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER+" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,+" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN+" THE SOFTWARE.+"+" vim:foldmethod=marker:foldlevel=0+"}}}
.vim/colors/summerfruit256.vim
@@ -0,0 +1,322 @@+" Vim color file+" Maintainer: Martin Baeuml <baeuml@gmail.com>+" Last Change: 2008-02-09+"+" This color file is a modification of the "summerfruit" color scheme by Armin Ronacher+" so that it can be used on 88- and 256-color xterms. The colors are translated+" using Henry So's programmatic approximation of gui colors from his "desert256"+" color scheme.+"+" I removed the "italic" option and the background color from+" comment-coloring because that looks odd on my console.+"+" The original "summerfruit" color scheme and "desert256" are available from vim.org.++set background=light+if version > 580+ " no guarantees for version 5.8 and below, but this makes it stop+ " complaining+ hi clear+ if exists("syntax_on")+ syntax reset+ endif+endif+let g:colors_name="summerfruit256"++if has("gui_running") || &t_Co == 88 || &t_Co == 256+ " functions {{{+ " returns an approximate grey index for the given grey level+ fun <SID>grey_number(x)+ if &t_Co == 88+ if a:x < 23+ return 0+ elseif a:x < 69+ return 1+ elseif a:x < 103+ return 2+ elseif a:x < 127+ return 3+ elseif a:x < 150+ return 4+ elseif a:x < 173+ return 5+ elseif a:x < 196+ return 6+ elseif a:x < 219+ return 7+ elseif a:x < 243+ return 8+ else+ return 9+ endif+ else+ if a:x < 14+ return 0+ else+ let l:n = (a:x - 8) / 10+ let l:m = (a:x - 8) % 10+ if l:m < 5+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual grey level represented by the grey index+ fun <SID>grey_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 46+ elseif a:n == 2+ return 92+ elseif a:n == 3+ return 115+ elseif a:n == 4+ return 139+ elseif a:n == 5+ return 162+ elseif a:n == 6+ return 185+ elseif a:n == 7+ return 208+ elseif a:n == 8+ return 231+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 8 + (a:n * 10)+ endif+ endif+ endfun++ " returns the palette index for the given grey index+ fun <SID>grey_color(n)+ if &t_Co == 88+ if a:n == 0+ return 16+ elseif a:n == 9+ return 79+ else+ return 79 + a:n+ endif+ else+ if a:n == 0+ return 16+ elseif a:n == 25+ return 231+ else+ return 231 + a:n+ endif+ endif+ endfun++ " returns an approximate color index for the given color level+ fun <SID>rgb_number(x)+ if &t_Co == 88+ if a:x < 69+ return 0+ elseif a:x < 172+ return 1+ elseif a:x < 230+ return 2+ else+ return 3+ endif+ else+ if a:x < 75+ return 0+ else+ let l:n = (a:x - 55) / 40+ let l:m = (a:x - 55) % 40+ if l:m < 20+ return l:n+ else+ return l:n + 1+ endif+ endif+ endif+ endfun++ " returns the actual color level for the given color index+ fun <SID>rgb_level(n)+ if &t_Co == 88+ if a:n == 0+ return 0+ elseif a:n == 1+ return 139+ elseif a:n == 2+ return 205+ else+ return 255+ endif+ else+ if a:n == 0+ return 0+ else+ return 55 + (a:n * 40)+ endif+ endif+ endfun++ " returns the palette index for the given R/G/B color indices+ fun <SID>rgb_color(x, y, z)+ if &t_Co == 88+ return 16 + (a:x * 16) + (a:y * 4) + a:z+ else+ return 16 + (a:x * 36) + (a:y * 6) + a:z+ endif+ endfun++ " returns the palette index to approximate the given R/G/B color levels+ fun <SID>color(r, g, b)+ " get the closest grey+ let l:gx = <SID>grey_number(a:r)+ let l:gy = <SID>grey_number(a:g)+ let l:gz = <SID>grey_number(a:b)++ " get the closest color+ let l:x = <SID>rgb_number(a:r)+ let l:y = <SID>rgb_number(a:g)+ let l:z = <SID>rgb_number(a:b)++ if l:gx == l:gy && l:gy == l:gz+ " there are two possibilities+ let l:dgr = <SID>grey_level(l:gx) - a:r+ let l:dgg = <SID>grey_level(l:gy) - a:g+ let l:dgb = <SID>grey_level(l:gz) - a:b+ let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb)+ let l:dr = <SID>rgb_level(l:gx) - a:r+ let l:dg = <SID>rgb_level(l:gy) - a:g+ let l:db = <SID>rgb_level(l:gz) - a:b+ let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db)+ if l:dgrey < l:drgb+ " use the grey+ return <SID>grey_color(l:gx)+ else+ " use the color+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ else+ " only one possibility+ return <SID>rgb_color(l:x, l:y, l:z)+ endif+ endfun++ " returns the palette index to approximate the 'rrggbb' hex string+ fun <SID>rgb(rgb)+ let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0+ let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0+ let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0++ return <SID>color(l:r, l:g, l:b)+ endfun++ " sets the highlighting for the given group+ fun <SID>X(group, fg, bg, attr)+ if a:fg != ""+ exec "hi " . a:group . " guifg=#" . a:fg . " ctermfg=" . <SID>rgb(a:fg)+ endif+ if a:bg != ""+ exec "hi " . a:group . " guibg=#" . a:bg . " ctermbg=" . <SID>rgb(a:bg)+ endif+ if a:attr != ""+ exec "hi " . a:group . " gui=" . a:attr . " cterm=" . a:attr+ endif+ endfun+ " }}}++ " Global+ call <SID>X("Normal", "000000", "ffffff", "")+ " call <SID>X("NonText", "438ec3", "b7dce8", "") ++ " Search+ call <SID>X("Search", "800000", "ffae00", "")+ call <SID>X("IncSearch", "800000", "ffae00", "")++ " Interface Elements+ call <SID>X("StatusLine", "ffffff", "43c464", "bold")+ call <SID>X("StatusLineNC", "9bd4a9", "51b069", "")+ call <SID>X("VertSplit", "3687a2", "3687a2", "")+ call <SID>X("Folded", "3c78a2", "c3daea", "")+ call <SID>X("IncSearch", "708090", "f0e68c", "")+ call <SID>X("Pmenu", "ffffff", "cb2f27", "")+ call <SID>X("SignColumn", "", "", "")+ call <SID>X("CursorLine", "", "c0d9eb", "")+ " call <SID>X("LineNr", "eeeeee", "438ec3", "bold") + call <SID>X("MatchParen", "", "", "")++ " Specials+ call <SID>X("Todo", "e50808", "dbf3cd", "bold")+ call <SID>X("Title", "000000", "", "")+ call <SID>X("Special", "fd8900", "", "")++ " Syntax Elements+ call <SID>X("String", "0086d2", "", "")+ call <SID>X("Constant", "0086d2", "", "")+ call <SID>X("Number", "0086f7", "", "")+ call <SID>X("Statement", "fb660a", "", "")+ call <SID>X("Function", "ff0086", "", "")+ call <SID>X("PreProc", "ff0007", "", "")+ call <SID>X("Comment", "22a21f", "", "bold")+ call <SID>X("Type", "70796b", "", "")+ call <SID>X("Error", "ffffff", "d40000", "")+ call <SID>X("Identifier", "ff0086", "", "")+ call <SID>X("Label", "ff0086", "", "")++ " Python Highlighting+ call <SID>X("pythonCoding", "ff0086", "", "")+ call <SID>X("pythonRun", "ff0086", "", "")+ call <SID>X("pythonBuiltinObj", "2b6ba2", "", "")+ call <SID>X("pythonBuiltinFunc", "2b6ba2", "", "")+ call <SID>X("pythonException", "ee0000", "", "")+ call <SID>X("pythonExClass", "66cd66", "", "")+ call <SID>X("pythonSpaceError", "", "", "")+ call <SID>X("pythonDocTest", "2f5f49", "", "")+ call <SID>X("pythonDocTest2", "3b916a", "", "")+ call <SID>X("pythonFunction", "ee0000", "", "")+ call <SID>X("pythonClass", "ff0086", "", "")++ " HTML Highlighting+ call <SID>X("htmlTag", "00bdec", "", "")+ call <SID>X("htmlEndTag", "00bdec", "", "")+ call <SID>X("htmlSpecialTagName", "4aa04a", "", "")+ call <SID>X("htmlTagName", "4aa04a", "", "")+ call <SID>X("htmlTagN", "4aa04a", "", "")++ " Jinja Highlighting+ call <SID>X("jinjaTagBlock", "ff0007", "fbf4c7", "bold")+ call <SID>X("jinjaVarBlock", "ff0007", "fbf4c7", "")+ call <SID>X("jinjaString", "0086d2", "fbf4c7", "")+ call <SID>X("jinjaNumber", "bf0945", "fbf4c7", "bold")+ call <SID>X("jinjaStatement", "fb660a", "fbf4c7", "bold")+ call <SID>X("jinjaComment", "008800", "002300", "italic")+ call <SID>X("jinjaFilter", "ff0086", "fbf4c7", "")+ call <SID>X("jinjaRaw", "aaaaaa", "fbf4c7", "")+ call <SID>X("jinjaOperator", "ffffff", "fbf4c7", "")+ call <SID>X("jinjaVariable", "92cd35", "fbf4c7", "")+ call <SID>X("jinjaAttribute", "dd7700", "fbf4c7", "")+ call <SID>X("jinjaSpecial", "008ffd", "fbf4c7", "")++ " delete functions {{{+ delf <SID>X+ delf <SID>rgb+ delf <SID>color+ delf <SID>rgb_color+ delf <SID>rgb_level+ delf <SID>rgb_number+ delf <SID>grey_color+ delf <SID>grey_level+ delf <SID>grey_number+ " }}}+endif++" vim: set fdl=0 fdm=marker:+
@@ -0,0 +1,425 @@+" Vim color file+" Maintainer: Jani Nurminen <slinky@iki.fi>+" Last Change: $Id: zenburn.vim,v 2.16 2010/10/24 10:55:30 slinky Exp slinky $+" URL: http://slinky.imukuppi.org/zenburnpage/+" License: GNU GPL <http://www.gnu.org/licenses/gpl.html>+"+" Nothing too fancy, just some alien fruit salad to keep you in the zone.+" This syntax file was designed to be used with dark environments and+" low light situations. Of course, if it works during a daybright office, go+" ahead :)+"+" Owes heavily to other Vim color files! With special mentions+" to "BlackDust", "Camo" and "Desert".+"+" To install, copy to ~/.vim/colors directory.+"+" Alternatively, you can use Vimball installation:+" vim zenburn.vba+" :so %+" :q+"+" For details, see :help vimball+"+" After installation, use it with :colorscheme zenburn.+" See also :help syntax+"+" Credits:+" - Jani Nurminen - original Zenburn, maintainer+" - Steve Hall & Cream posse - higher-contrast Visual selection+" - Kurt Maier - 256 color console coloring, low and high contrast toggle,+" bug fixing+" - Charlie - spotted too bright StatusLine in non-high contrast mode+" - Pablo Castellazzi - CursorLine fix for 256 color mode+" - Tim Smith - force dark background+" - John Gabriele - spotted bad Ignore-group handling+" - Zac Thompson - spotted invisible NonText in low contrast mode+" - Christophe-Marie Duquesne - suggested making a Vimball+" - Andrew Wagner - noted the CursorColumn bug (guifg was unintentionally set),+" unify CursorColumn colour+" - Martin Langasek - clarify the license, whitespace fixes+" - Marcin Szamotulski - support autocomplete for Zenburn configuration+" parameters+"+" CONFIGURABLE PARAMETERS:+"+" You can use the default (don't set any parameters), or you can+" set some parameters to tweak the Zenburn colours.+"+" To use them, put them into your .vimrc file before loading the color scheme,+" example:+" let g:zenburn_high_Contrast=1+" colors zenburn+"+" You can also do ":let g:zenburn" then hit Ctrl-d or Tab to scroll through the+" list of configurable parameters.+"+" * You can now set a darker background for bright environments. To activate, use:+" contrast Zenburn, use:+"+" let g:zenburn_high_Contrast = 1+"+" * For example, Vim help files uses the Ignore-group for the pipes in tags+" like "|somelink.txt|". By default, the pipes are not visible, as they+" map to Ignore group. If you wish to enable coloring of the Ignore group,+" set the following parameter to 1. Warning, it might make some syntax files+" look strange.+"+" let g:zenburn_color_also_Ignore = 1+"+" * To get more contrast to the Visual selection, use+"+" let g:zenburn_alternate_Visual = 1+"+" * To use alternate colouring for Error message, use+"+" let g:zenburn_alternate_Error = 1+"+" * The new default for Include is a duller orange. To use the original+" colouring for Include, use+"+" let g:zenburn_alternate_Include = 1+"+" * Work-around to a Vim bug, it seems to misinterpret ctermfg and 234 and 237+" as light values, and sets background to light for some people. If you have+" this problem, use:+"+" let g:zenburn_force_dark_Background = 1+"+" * By default the CursorColumn is of a lighter colour. I find it more readable+" that way, but some people may want to align it with the darker CursorLine+" color, for visual uniformity. To do so, use:+"+" let g:zenburn_unified_CursorColumn = 1+"+" Note: you can ignore this unless you use+" ":set cursorline cursorcolumn", since otherwise the effect won't be+" seen.+"+" NOTE:+"+" * To turn the parameter(s) back to defaults, use UNLET or set them to 0:+"+" unlet g:zenburn_alternate_Include+" or +" let g:zenburn_alternate_Include = 0+"+"+" That's it, enjoy!+"+" TODO+" - Visual alternate color is broken? Try GVim >= 7.0.66 if you have trouble+" - IME colouring (CursorIM)++" Set defaults, but keep any parameters already set by the user+if ! exists("g:zenburn_high_Contrast")+ let g:zenburn_high_Contrast = 0+endif++if ! exists("g:zenburn_color_also_Ignore")+ let g:zenburn_color_also_Ignore = 0+endif++if ! exists("g:zenburn_alternate_Error")+ let g:zenburn_alternate_Error = 0+endif++if ! exists("g:zenburn_force_dark_Background")+ let g:zenburn_force_dark_Background = 0+endif++if ! exists("g:zenburn_alternate_Visual")+ let g:zenburn_alternate_Visual = 0+endif++if ! exists("g:zenburn_alternate_Include")+ let g:zenburn_alternate_Include = 0+endif++if ! exists("g:zenburn_unified_CursorColumn")+ let g:zenburn_unified_CursorColumn = 0+endif+" -----------------------------------------------++set background=dark+hi clear+if exists("syntax_on")+ syntax reset+endif+let g:colors_name="zenburn"++hi Boolean guifg=#dca3a3+hi Character guifg=#dca3a3 gui=bold+hi Comment guifg=#7f9f7f gui=italic+hi Conditional guifg=#f0dfaf gui=bold+hi Constant guifg=#dca3a3 gui=bold+hi Cursor guifg=#000d18 guibg=#8faf9f gui=bold+hi Debug guifg=#bca3a3 gui=bold+hi Define guifg=#ffcfaf gui=bold+hi Delimiter guifg=#8f8f8f+hi DiffAdd guifg=#709080 guibg=#313c36 gui=bold+hi DiffChange guibg=#333333+hi DiffDelete guifg=#333333 guibg=#464646+hi DiffText guifg=#ecbcbc guibg=#41363c gui=bold+hi Directory guifg=#dcdccc gui=bold+hi ErrorMsg guifg=#80d4aa guibg=#2f2f2f gui=bold+hi Exception guifg=#c3bf9f gui=bold+hi Float guifg=#c0bed1+hi FoldColumn guifg=#93b3a3 guibg=#3f4040+hi Folded guifg=#93b3a3 guibg=#3f4040+hi Function guifg=#efef8f+hi Identifier guifg=#efdcbc+hi IncSearch guibg=#f8f893 guifg=#385f38+hi Keyword guifg=#f0dfaf gui=bold+hi Label guifg=#dfcfaf gui=underline+hi LineNr guifg=#9fafaf guibg=#262626+hi Macro guifg=#ffcfaf gui=bold+hi ModeMsg guifg=#ffcfaf gui=none+hi MoreMsg guifg=#ffffff gui=bold+hi Number guifg=#8cd0d3+hi Operator guifg=#f0efd0+hi PreCondit guifg=#dfaf8f gui=bold+hi PreProc guifg=#ffcfaf gui=bold+hi Question guifg=#ffffff gui=bold+hi Repeat guifg=#ffd7a7 gui=bold+hi Search guifg=#ffffe0 guibg=#284f28+hi SpecialChar guifg=#dca3a3 gui=bold+hi SpecialComment guifg=#82a282 gui=bold+hi Special guifg=#cfbfaf+hi SpecialKey guifg=#9ece9e+hi Statement guifg=#e3ceab gui=none+hi StatusLine guifg=#313633 guibg=#ccdc90+hi StatusLineNC guifg=#2e3330 guibg=#88b090+hi StorageClass guifg=#c3bf9f gui=bold+hi String guifg=#cc9393+hi Structure guifg=#efefaf gui=bold+hi Tag guifg=#e89393 gui=bold+hi Title guifg=#efefef gui=bold+hi Todo guifg=#dfdfdf guibg=bg gui=bold+hi Typedef guifg=#dfe4cf gui=bold+hi Type guifg=#dfdfbf gui=bold+hi Underlined guifg=#dcdccc gui=underline+hi VertSplit guifg=#2e3330 guibg=#688060+hi VisualNOS guifg=#333333 guibg=#f18c96 gui=bold,underline+hi WarningMsg guifg=#ffffff guibg=#333333 gui=bold+hi WildMenu guibg=#2c302d guifg=#cbecd0 gui=underline++hi SpellBad guisp=#bc6c4c guifg=#dc8c6c+hi SpellCap guisp=#6c6c9c guifg=#8c8cbc+hi SpellRare guisp=#bc6c9c guifg=#bc8cbc+hi SpellLocal guisp=#7cac7c guifg=#9ccc9c++" Entering Kurt zone+if &t_Co > 255+ hi Boolean ctermfg=181+ hi Character ctermfg=181 cterm=bold+ hi Comment ctermfg=108+ hi Conditional ctermfg=223 cterm=bold+ hi Constant ctermfg=181 cterm=bold+ hi Cursor ctermfg=233 ctermbg=109 cterm=bold+ hi Debug ctermfg=181 cterm=bold+ hi Define ctermfg=223 cterm=bold+ hi Delimiter ctermfg=245+ hi DiffAdd ctermfg=66 ctermbg=237 cterm=bold+ hi DiffChange ctermbg=236+ hi DiffDelete ctermfg=236 ctermbg=238+ hi DiffText ctermfg=217 ctermbg=237 cterm=bold+ hi Directory ctermfg=188 cterm=bold+ hi ErrorMsg ctermfg=115 ctermbg=236 cterm=bold+ hi Exception ctermfg=249 cterm=bold+ hi Float ctermfg=251+ hi FoldColumn ctermfg=109 ctermbg=238+ hi Folded ctermfg=109 ctermbg=238+ hi Function ctermfg=228+ hi Identifier ctermfg=223+ hi IncSearch ctermbg=228 ctermfg=238+ hi Keyword ctermfg=223 cterm=bold+ hi Label ctermfg=187 cterm=underline+ hi LineNr ctermfg=248 ctermbg=235+ hi Macro ctermfg=223 cterm=bold+ hi ModeMsg ctermfg=223 cterm=none+ hi MoreMsg ctermfg=15 cterm=bold+ hi Number ctermfg=116+ hi Operator ctermfg=230+ hi PreCondit ctermfg=180 cterm=bold+ hi PreProc ctermfg=223 cterm=bold+ hi Question ctermfg=15 cterm=bold+ hi Repeat ctermfg=223 cterm=bold+ hi Search ctermfg=230 ctermbg=236+ hi SpecialChar ctermfg=181 cterm=bold+ hi SpecialComment ctermfg=108 cterm=bold+ hi Special ctermfg=181+ hi SpecialKey ctermfg=151+ hi Statement ctermfg=187 ctermbg=234 cterm=none+ hi StatusLine ctermfg=236 ctermbg=186+ hi StatusLineNC ctermfg=235 ctermbg=108+ hi StorageClass ctermfg=249 cterm=bold+ hi String ctermfg=174+ hi Structure ctermfg=229 cterm=bold+ hi Tag ctermfg=181 cterm=bold+ hi Title ctermfg=7 ctermbg=234 cterm=bold+ hi Todo ctermfg=108 ctermbg=234 cterm=bold+ hi Typedef ctermfg=253 cterm=bold+ hi Type ctermfg=187 cterm=bold+ hi Underlined ctermfg=188 ctermbg=234 cterm=bold+ hi VertSplit ctermfg=236 ctermbg=65+ hi VisualNOS ctermfg=236 ctermbg=210 cterm=bold+ hi WarningMsg ctermfg=15 ctermbg=236 cterm=bold+ hi WildMenu ctermbg=236 ctermfg=194 cterm=bold++ " spellchecking, always "bright" background+ hi SpellLocal ctermfg=14 ctermbg=237+ hi SpellBad ctermfg=9 ctermbg=237+ hi SpellCap ctermfg=12 ctermbg=237+ hi SpellRare ctermfg=13 ctermbg=237++ " pmenu+ hi PMenu ctermfg=248 ctermbg=0+ hi PMenuSel ctermfg=223 ctermbg=235++ if exists("g:zenburn_high_Contrast") && g:zenburn_high_Contrast+ hi Normal ctermfg=188 ctermbg=234+ hi NonText ctermfg=238++ if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+ hi Ignore ctermfg=238+ endif++ " hc mode, darker CursorLine, default 236+ hi CursorLine ctermbg=233 cterm=none++ if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+ hi CursorColumn ctermbg=233 cterm=none+ else+ hi CursorColumn ctermbg=235 cterm=none+ endif+ else+ hi Normal ctermfg=188 ctermbg=237+ hi Cursor ctermbg=109+ hi diffadd ctermbg=237+ hi diffdelete ctermbg=238+ hi difftext ctermbg=237+ hi errormsg ctermbg=237+ hi foldcolumn ctermbg=238+ hi folded ctermbg=238+ hi incsearch ctermbg=228+ hi linenr ctermbg=238+ hi search ctermbg=238+ hi statement ctermbg=237+ hi statusline ctermbg=144+ hi statuslinenc ctermbg=108+ hi title ctermbg=237+ hi todo ctermbg=237+ hi underlined ctermbg=237+ hi vertsplit ctermbg=65+ hi visualnos ctermbg=210+ hi warningmsg ctermbg=236+ hi wildmenu ctermbg=236+ hi NonText ctermfg=240++ if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+ hi Ignore ctermfg=240+ endif+ + " normal mode, lighter CursorLine+ hi CursorLine ctermbg=238 cterm=none++ if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+ hi CursorColumn ctermbg=238 cterm=none+ else+ hi CursorColumn ctermbg=239 cterm=none+ endif+ endif++ if exists("g:zenburn_alternate_Error") && g:zenburn_alternate_Error+ " use more jumpy Error+ hi Error ctermfg=210 ctermbg=52 gui=bold+ else+ " default is something more zenburn-compatible+ hi Error ctermfg=228 ctermbg=95 gui=bold+ endif+endif++if exists("g:zenburn_force_dark_Background") && g:zenburn_force_dark_Background+ " Force dark background, because of a bug in VIM: VIM sets background+ " automatically during "hi Normal ctermfg=X"; it misinterprets the high+ " value (234 or 237 above) as a light color, and wrongly sets background to+ " light. See ":help highlight" for details.+ set background=dark+endif++if exists("g:zenburn_high_Contrast") && g:zenburn_high_Contrast+ " use new darker background+ hi Normal guifg=#dcdccc guibg=#1f1f1f+ hi CursorLine guibg=#121212 gui=bold+ if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+ hi CursorColumn guibg=#121212 gui=bold+ else+ hi CursorColumn guibg=#2b2b2b+ endif+ hi Pmenu guibg=#242424 guifg=#ccccbc+ hi PMenuSel guibg=#353a37 guifg=#ccdc90 gui=bold+ hi PmenuSbar guibg=#2e3330 guifg=#000000+ hi PMenuThumb guibg=#a0afa0 guifg=#040404+ hi MatchParen guifg=#f0f0c0 guibg=#383838 gui=bold+ hi SignColumn guifg=#9fafaf guibg=#181818 gui=bold+ hi TabLineFill guifg=#cfcfaf guibg=#181818 gui=bold+ hi TabLineSel guifg=#efefef guibg=#1c1c1b gui=bold+ hi TabLine guifg=#b6bf98 guibg=#181818 gui=bold+ hi NonText guifg=#404040 gui=bold+else+ " Original, lighter background+ hi Normal guifg=#dcdccc guibg=#3f3f3f+ hi CursorLine guibg=#434443+ if exists("g:zenburn_unified_CursorColumn") && g:zenburn_unified_CursorColumn+ hi CursorColumn guibg=#434343+ else+ hi CursorColumn guibg=#4f4f4f+ endif+ hi Pmenu guibg=#2c2e2e guifg=#9f9f9f+ hi PMenuSel guibg=#242424 guifg=#d0d0a0 gui=bold+ hi PmenuSbar guibg=#2e3330 guifg=#000000+ hi PMenuThumb guibg=#a0afa0 guifg=#040404+ hi MatchParen guifg=#b2b2a0 guibg=#2e2e2e gui=bold+ hi SignColumn guifg=#9fafaf guibg=#343434 gui=bold+ hi TabLineFill guifg=#cfcfaf guibg=#353535 gui=bold+ hi TabLineSel guifg=#efefef guibg=#3a3a39 gui=bold+ hi TabLine guifg=#b6bf98 guibg=#353535 gui=bold+ hi NonText guifg=#5b605e gui=bold+endif+++if exists("g:zenburn_alternate_Visual") && g:zenburn_alternate_Visual+ " Visual with more contrast, thanks to Steve Hall & Cream posse+ " gui=none fixes weird highlight problem in at least GVim 7.0.66, thanks to Kurt Maier+ hi Visual guifg=#000000 guibg=#71d3b4 gui=none+ hi VisualNOS guifg=#000000 guibg=#71d3b4 gui=none+else+ " use default visual+ hi Visual guifg=#233323 guibg=#71d3b4 gui=none+ hi VisualNOS guifg=#233323 guibg=#71d3b4 gui=none+endif++if exists("g:zenburn_alternate_Error") && g:zenburn_alternate_Error+ " use more jumpy Error+ hi Error guifg=#e37170 guibg=#664040 gui=bold+else+ " default is something more zenburn-compatible+ hi Error guifg=#e37170 guibg=#3d3535 gui=none+endif++if exists("g:zenburn_alternate_Include") && g:zenburn_alternate_Include+ " original setting+ hi Include guifg=#ffcfaf gui=bold+else+ " new, less contrasted one+ hi Include guifg=#dfaf8f gui=bold+endif++if exists("g:zenburn_color_also_Ignore") && g:zenburn_color_also_Ignore+ " color the Ignore groups+ " note: if you get strange coloring for your files, turn this off (unlet)+ hi Ignore guifg=#545a4f+endif++" TODO check for more obscure syntax groups that they're ok
@@ -0,0 +1,146 @@+http-client.txt++ _ _ _ _ _ _ ~+ | | | | | | | |(_) | | ~+ | |__ | |_ | |_ _ __ ______ ___ | | _ ___ _ __ | |_ ~+ | '_ \ | __|| __|| '_ \|______|/ __|| || | / _ \| '_ \ | __| ~+ | | | || |_ | |_ | |_) | | (__ | || || __/| | | || |_ ~+ |_| |_| \__| \__|| .__/ \___||_||_| \___||_| |_| \__| ~+ | | ~+ |_| ~+++==============================================================================+CONTENTS |http-client-contents|++ Introduction |http-client-introduction|+ Use |http-client-use|+ Configuration |http-client-configuration|+ Installation |http-client-installation|++==============================================================================+Introduction *http-client* *http-client-introduction*++With vim-http-client, you can make HTTP calls from Vim with the HTTP format+you already know, rather than learning new command line tools fraught with+complex flags and escaped quotes. You can also parse the results right in+Vim, syntax highlighted the way you expect!++==============================================================================+Use *http-client-use*++Put your cursor anywhere in a newline-delimited block of text and hit+`<Leader>tt`. The text will be parsed and executed as a HTTP request, and its+results will appear in a split. You can also directly invoke the HTTP client+with :call HTTPClientDoRequest()<cr>. Here's the format of a request: >++ # Comments start with #.+ # First request.+ <method> <url>+ <header-name-1>: <header-value-1>+ <header-name-2>: <header-value-2>+ ...+ <header-name-n>: <header-value-n>+ <body>++ # Second request.+ <method> <url>+ <header-name-1>: <header-value-1>+ <header-name-2>: <header-value-2>+ ...+ <header-name-n>: <header-value-n>+ <body>++Depending on where you put your cursor, the first or second request will+execute. You can also substitute variables anywhere in the request: >++ # Second request.+ # :foo = bar+ # :asdf = 3+ POST http://httpbin.org/post+ { "data": ":foo" }++Each variable lives in a separate commented line. Variables beginning with :+are request variables only considered in the request block they live in.+Variables beginning with $ are global variables that affect all requests in+the entire buffer. Local variables always override global variables. >++ # $endpoint = http://httpbin.org++ GET $endpoint/get++ # :request_var = 3+ POST $endpoint/post++ GET $endpoint/resource++If you'd like to pass form-encoded data, set your body like this: >++ <key-1>=<value-1>+ <key-2>=<value-2>+ ...+ <key-n>=<value-n>++See `examples/examples.txt` for more examples.++The output appears in a new split. Syntax highlighting is interpreted from the+Content-Type header of the result. It currently supports XML, JSON, and HTML;+all others will get ft=text.++==============================================================================+Configuration *http-client-configuration*+ *g:http_client_bind_hotkey*+ *g:http_client_json_ft*+ *g:http_client_json_escape_utf*+ *g:http_client_result_vsplit*++g:http_client_bind_hotkey (default 1)++Controls whether or not `<Leader>tt` will run the HTTP client.++g:http_client_json_ft (default 'javascript')++Sets the vim filetype when vim-http-client detects a JSON response. Though+JSON-specific syntax highlighting provides prettier highlighting than the+default Javascript highlighting, Javascript highlighting comes with Vim and is+therefore a safer default. Use this setting to configure the filetype to your+liking.++g:http_client_json_escape_utf (default 1)++By default json.dumps will escape any utf8 characters beyond ascii range. This+option (if set to 0) allows you to get the actual special characters instead+of \uxxxx encoded ones.++g:http_client_result_vsplit (default 1)++By default the request result appears in a vertical split. Setting this option+to 0 displays the result in a horizontal split.++g:http_client_focus_output_window (default 1)++By default the focus will go to the output window. If set to 0 the focus will+return to the window with request definitions.++==============================================================================+Installation *http-client-installation*++vim-http-client requires Vim compiled with python support and the python+requests library.++To check if you have Python support, try: >++ vim --version | grep +python.++To check if you have the requests library, try: >++ python -c 'import requests'++If you get an error, try pip install requests to get the library. Many distros+ship Python support with Vim and the requests library with Python.++Once the two are installed, install the plugin into+~/.vim/plugin/http-client.vim or with your favorite Vim plugin manager.++==============================================================================+vim:tw=78:sw=4:ts=8:ft=help:norl:
@@ -0,0 +1,222 @@+*surround.txt* Plugin for deleting, changing, and adding "surroundings"++Author: Tim Pope <vimNOSPAM@tpope.info> *surround-author*+License: Same terms as Vim itself (see |license|)++This plugin is only available if 'compatible' is not set.++INTRODUCTION *surround*++This plugin is a tool for dealing with pairs of "surroundings." Examples+of surroundings include parentheses, quotes, and HTML tags. They are+closely related to what Vim refers to as |text-objects|. Provided+are mappings to allow for removing, changing, and adding surroundings.++Details follow on the exact semantics, but first, consider the following+examples. An asterisk (*) is used to denote the cursor position.++ Old text Command New text ~+ "Hello *world!" ds" Hello world!+ [123+4*56]/2 cs]) (123+456)/2+ "Look ma, I'm *HTML!" cs"<q> <q>Look ma, I'm HTML!</q>+ if *x>3 { ysW( if ( x>3 ) {+ my $str = *whee!; vlllls' my $str = 'whee!';++While a few features of this plugin will work in older versions of Vim,+Vim 7 is recommended for full functionality.++MAPPINGS *surround-mappings*++Delete surroundings is *ds* . The next character given determines the target+to delete. The exact nature of the target is explained in |surround-targets|+but essentially it is the last character of a |text-object|. This mapping+deletes the difference between the "i"nner object and "a"n object. This is+easiest to understand with some examples:++ Old text Command New text ~+ "Hello *world!" ds" Hello world!+ (123+4*56)/2 ds) 123+456/2+ <div>Yo!*</div> dst Yo!++Change surroundings is *cs* . It takes two arguments, a target like with+|ds|, and a replacement. Details about the second argument can be found+below in |surround-replacements|. Once again, examples are in order.++ Old text Command New text ~+ "Hello *world!" cs"' 'Hello world!'+ "Hello *world!" cs"<q> <q>Hello world!</q>+ (123+4*56)/2 cs)] [123+456]/2+ (123+4*56)/2 cs)[ [ 123+456 ]/2+ <div>Yo!*</div> cst<p> <p>Yo!</p>++*ys* takes a valid Vim motion or text object as the first object, and wraps+it using the second argument as with |cs|. (Unfortunately there's no good+mnemonic for "ys".)++ Old text Command New text ~+ Hello w*orld! ysiw) Hello (world)!++As a special case, *yss* operates on the current line, ignoring leading+whitespace.++ Old text Command New text ~+ Hello w*orld! yssB {Hello world!}++There is also *yS* and *ySS* which indent the surrounded text and place it+on a line of its own.++In visual mode, a simple "s" with an argument wraps the selection. This is+referred to as the *vS* mapping, although ordinarily there will be+additional keystrokes between the v and s. In linewise visual mode, the+surroundings are placed on separate lines and indented. In blockwise visual+mode, each line is surrounded.++A "gS" in visual mode, known as *vgS* , behaves similarly. In linewise visual+mode, the automatic indenting is surpressed. In blockwise visual mode, this+enables surrounding past the end of the like with 'virtualedit' set (there+seems to be no way in Vim Script to differentiate between a jagged end of line+selection and a virtual block selected past the end of the line, so two maps+were needed).++Additionally, there is a legacy "s" or *vs* mapping which is basically the+same as |vS|. Due to popular demand of wanting to use "s" as Vim does to mean+replacing the selection (also available as "c"), this mapping is going away.+If you were one of these people and would like to disable "s" with the current+release, indicate this to surround.vim by assigning the "s" mapping to+something else.+>+ xmap <Leader>s <Plug>Vsurround+<+ *i_CTRL-G_s* *i_CTRL-G_S*+Finally, there is an experimental insert mode mapping on <C-G>s and <C-S>.+Beware that the latter won't work on terminals with flow control (if you+accidentally freeze your terminal, use <C-Q> to unfreeze it). The mapping+inserts the specified surroundings and puts the cursor between them. If,+immediately after the mapping and before the replacement, a second <C-S> or+carriage return is pressed, the prefix, cursor, and suffix will be placed on+three separate lines. <C-G>S (not <C-G>s) also exhibits this behavior.++TARGETS *surround-targets*++The |ds| and |cs| commands both take a target as their first argument. The+possible targets are based closely on the |text-objects| provided by Vim.+In order for a target to work, the corresponding text object must be+supported in the version of Vim used (Vim 7 adds several text objects, and+thus is highly recommended). All targets are currently just one character.++Eight punctuation marks, (, ), {, }, [, ], <, and >, represent themselves+and their counterparts. If the opening mark is used, contained whitespace is+also trimmed. The targets b, B, r, and a are aliases for ), }, ], and >+(the first two mirror Vim; the second two are completely arbitrary and+subject to change).++Three quote marks, ', ", `, represent themselves, in pairs. They are only+searched for on the current line.++A t is a pair of HTML or XML tags. See |tag-blocks| for details. Remember+that you can specify a numerical argument if you want to get to a tag other+than the innermost one.++The letters w, W, and s correspond to a |word|, a |WORD|, and a |sentence|,+respectively. These are special in that they have nothing to delete, and+used with |ds| they are a no-op. With |cs|, one could consider them a+slight shortcut for ysi (cswb == ysiwb, more or less).++A p represents a |paragraph|. This behaves similarly to w, W, and s above;+however, newlines are sometimes added and/or removed.++REPLACEMENTS *surround-replacements*++A replacement argument is a single character, and is required by |cs|, |ys|,+and |vs|. Undefined replacement characters (with the exception of alphabetic+characters) default to placing themselves at the beginning and end of the+destination, which can be useful for characters like / and |.++If either ), }, ], or > is used, the text is wrapped in the appropriate pair+of characters. Similar behavior can be found with (, {, and [ (but not <),+which append an additional space to the inside. Like with the targets above,+b, B, r, and a are aliases for ), }, ], and >. To fulfill the common need for+code blocks in C-style languages, <C-}> (which is really <C-]>) adds braces on+lines separate from the content.++If t or < is used, Vim prompts for an HTML/XML tag to insert. You may specify+attributes here and they will be stripped from the closing tag. End your+input by pressing <CR> or >. If <C-T> is used, the tags will appear on lines+by themselves.++A deprecated replacement of a LaTeX environment is provided on \ and l. The+name of the environment and any arguments will be input from a prompt. This+will be removed once a more fully functional customization system is+implemented. The following shows the resulting environment from+csp\tabular}{lc<CR>+>+ \begin{tabular}{lc}+ \end{tabular}+<+CUSTOMIZING *surround-customizing*++The following adds a potential replacement on "-" (ASCII 45) in PHP files.+(To determine the ASCII code to use, :echo char2nr("-")). The carriage+return will be replaced by the original text.+>+ autocmd FileType php let b:surround_45 = "<?php \r ?>"+<+This can be used in a PHP file as in the following example.++ Old text Command New text ~+ print "Hello *world!" yss- <?php print "Hello world!" ?>++Additionally, one can use a global variable for globally available+replacements.+>+ let g:surround_45 = "<% \r %>"+ let g:surround_61 = "<%= \r %>"+<+Advanced, experimental, and subject to change: One can also prompt for+replacement text. The syntax for this is to surround the replacement in pairs+of low numbered control characters. If this sounds confusing, that's because+it is (but it makes the parsing easy). Consider the following example for a+LaTeX environment on the "l" replacement.+>+ let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\1}"+<+When this replacement is used, the user is prompted with an "environment: "+prompt for input. This input is inserted between each set of \1's.+Additional inputs up to \7 can be used.++Furthermore, one can specify a regular expression substitution to apply.+>+ let g:surround_108 = "\\begin{\1environment: \1}\r\\end{\1\r}.*\r\1}"+<+This will remove anything after the first } in the input when the text is+placed within the \end{} slot. The first \r marks where the pattern begins,+and the second where the replacement text begins.++Here's a second example for creating an HTML <div>. The substitution cleverly+prompts for an id, but only adds id="" if it is non-blank. You may have to+read this one a few times slowly before you understand it.+>+ let g:surround_{char2nr("d")} = "<div\1id: \r..*\r id=\"&\"\1>\r</div>"+<+Inputting text replacements is a proof of concept at this point. The ugly,+unintuitive interface and the brevity of the documentation reflect this.++Finally, It is possible to always append a string to surroundings in insert+mode (and only insert mode). This is useful with certain plugins and mappings+that allow you to jump to such markings.+>+ let g:surround_insert_tail = "<++>"+<+ISSUES *surround-issues*++Vim could potentially get confused when deleting/changing occurs at the very+end of the line. Please report any repeatable instances of this.++Do we need to use |inputsave()|/|inputrestore()| with the tag replacement?++Indenting is handled haphazardly. Need to decide the most appropriate+behavior and implement it. Right now one can do :let b:surround_indent = 1+(or the global equivalent) to enable automatic re-indenting by Vim via |=|;+should this be the default?++ vim:tw=78:ts=8:ft=help:norl:
@@ -0,0 +1,3 @@+setlocal tabstop=8+setlocal shiftwidth=8+setlocal softtabstop=8
@@ -0,0 +1,92 @@+syntax region jsFlowDefinition contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster containedin=jsParen+syntax region jsFlowArgumentDef contained start=/:/ end=/\%(\s*[,)]\|=>\@!\)\@=/ contains=@jsFlowCluster+syntax region jsFlowArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster+syntax region jsFlowObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster+syntax region jsFlowParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster+syntax match jsFlowNoise contained /[:;,<>]/+syntax keyword jsFlowType contained boolean number string null void any mixed JSON array Function object array bool class+syntax keyword jsFlowTypeof contained typeof skipempty skipempty nextgroup=jsFlowTypeCustom,jsFlowType+syntax match jsFlowTypeCustom contained /[0-9a-zA-Z_.]*/ skipwhite skipempty nextgroup=jsFlowGroup+syntax region jsFlowGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster+syntax region jsFlowArrowArguments contained matchgroup=jsFlowNoise start=/(/ end=/)\%(\s*=>\)\@=/ oneline skipwhite skipempty nextgroup=jsFlowArrow contains=@jsFlowCluster+syntax match jsFlowArrow contained /=>/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens+syntax match jsFlowMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowType,jsFlowTypeCustom,jsFlowParens,jsFlowArrowArguments,jsFlowObject,jsFlowReturnObject+syntax match jsFlowObjectKey contained /[0-9a-zA-Z_$?]*\(\s*:\)\@=/ contains=jsFunctionKey,jsFlowMaybe skipwhite skipempty nextgroup=jsObjectValue containedin=jsObject+syntax match jsFlowOrOperator contained /|/ skipwhite skipempty nextgroup=@jsFlowCluster+syntax keyword jsFlowImportType contained type skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup+syntax match jsFlowWildcard contained /*/++syntax match jsFlowReturn contained /:\s*/ contains=jsFlowNoise skipwhite skipempty nextgroup=@jsFlowReturnCluster+syntax region jsFlowReturnObject contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax region jsFlowReturnArray contained matchgroup=jsFlowNoise start=/\[/ end=/\]/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax region jsFlowReturnParens contained matchgroup=jsFlowNoise start=/(/ end=/)/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax match jsFlowReturnKeyword contained /\k\+/ contains=jsFlowType,jsFlowTypeCustom skipwhite skipempty nextgroup=jsFlowReturnGroup,jsFuncBlock,jsFlowReturnOrOp+syntax match jsFlowReturnMaybe contained /?/ skipwhite skipempty nextgroup=jsFlowReturnKeyword+syntax region jsFlowReturnGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturnOrOp+syntax match jsFlowReturnOrOp contained /\s*|\s*/ skipwhite skipempty nextgroup=@jsFlowReturnCluster+syntax match jsFlowWildcardReturn contained /*/ skipwhite skipempty nextgroup=jsFuncBlock++syntax region jsFlowFunctionGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsFuncArgs+syntax region jsFlowClassGroup contained matchgroup=jsFlowNoise start=/</ end=/>/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassBlock++syntax region jsFlowTypeStatement start=/type\%(\s\+\k\)\@=/ end=/=\@=/ contains=jsFlowTypeOperator oneline skipwhite skipempty nextgroup=jsFlowTypeValue keepend+syntax region jsFlowTypeValue contained start=/=/ end=/[;\n]/ contains=@jsExpression,jsFlowGroup,jsFlowMaybe+syntax match jsFlowTypeOperator contained /=/+syntax keyword jsFlowTypeKeyword contained type++syntax keyword jsFlowDeclare declare skipwhite skipempty nextgroup=jsFlowTypeStatement,jsClassDefinition,jsStorageClass,jsFlowModule,jsFlowInterface+syntax match jsFlowClassProperty contained /\<[0-9a-zA-Z_$]*\>:\@=/ skipwhite skipempty nextgroup=jsFlowClassDef containedin=jsClassBlock+syntax region jsFlowClassDef contained start=/:/ end=/\%(\s*[,=;)\n]\)\@=/ contains=@jsFlowCluster skipwhite skipempty nextgroup=jsClassValue++syntax region jsFlowModule contained start=/module/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowDeclareBlock contains=jsString+syntax region jsFlowInterface contained start=/interface/ end=/{\@=/ skipempty skipempty nextgroup=jsFlowInterfaceBlock contains=@jsFlowCluster+syntax region jsFlowDeclareBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsFlowDeclare,jsFlowNoise++syntax region jsFlowInterfaceBlock contained matchgroup=jsFlowNoise start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsFlowNoise keepend++syntax cluster jsFlowReturnCluster contains=jsFlowNoise,jsFlowReturnObject,jsFlowReturnArray,jsFlowReturnKeyword,jsFlowReturnGroup,jsFlowReturnMaybe,jsFlowReturnOrOp,jsFlowWildcardReturn+syntax cluster jsFlowCluster contains=jsFlowArray,jsFlowObject,jsFlowNoise,jsFlowTypeof,jsFlowType,jsFlowGroup,jsFlowArrowArguments,jsFlowMaybe,jsFlowParens,jsFlowOrOperator,jsFlowWildcard++if version >= 508 || !exists("did_javascript_syn_inits")+ if version < 508+ let did_javascript_syn_inits = 1+ command -nargs=+ HiLink hi link <args>+ else+ command -nargs=+ HiLink hi def link <args>+ endif+ HiLink jsFlowDefinition PreProc+ HiLink jsFlowClassDef jsFlowDefinition+ HiLink jsFlowArgumentDef jsFlowDefinition+ HiLink jsFlowType Type+ HiLink jsFlowTypeCustom PreProc+ HiLink jsFlowTypeof PreProc+ HiLink jsFlowArray PreProc+ HiLink jsFlowObject PreProc+ HiLink jsFlowParens PreProc+ HiLink jsFlowGroup PreProc+ HiLink jsFlowReturn PreProc+ HiLink jsFlowReturnObject jsFlowReturn+ HiLink jsFlowReturnArray jsFlowArray+ HiLink jsFlowReturnParens jsFlowParens+ HiLink jsFlowReturnGroup jsFlowGroup+ HiLink jsFlowFunctionGroup PreProc+ HiLink jsFlowClassGroup PreProc+ HiLink jsFlowArrowArguments PreProc+ HiLink jsFlowArrow PreProc+ HiLink jsFlowTypeStatement PreProc+ HiLink jsFlowTypeKeyword PreProc+ HiLink jsFlowTypeOperator PreProc+ HiLink jsFlowMaybe PreProc+ HiLink jsFlowReturnMaybe PreProc+ HiLink jsFlowClassProperty jsClassProperty+ HiLink jsFlowDeclare PreProc+ HiLink jsFlowModule PreProc+ HiLink jsFlowInterface PreProc+ HiLink jsFlowNoise Noise+ HiLink jsFlowObjectKey jsObjectKey+ HiLink jsFlowOrOperator PreProc+ HiLink jsFlowReturnOrOp jsFlowOrOperator+ HiLink jsFlowWildcard PreProc+ HiLink jsFlowWildcardReturn PreProc+ delcommand HiLink+endif
@@ -0,0 +1,39 @@+"" syntax coloring for javadoc comments (HTML)+syntax region jsComment matchgroup=jsComment start="/\*\s*" end="\*/" contains=jsDocTags,jsCommentTodo,jsCvsTag,@jsHtml,@Spell fold++" tags containing a param+syntax match jsDocTags contained "@\(alias\|api\|augments\|borrows\|class\|constructs\|default\|defaultvalue\|emits\|exception\|exports\|extends\|fires\|kind\|link\|listens\|member\|member[oO]f\|mixes\|module\|name\|namespace\|requires\|template\|throws\|var\|variation\|version\)\>" skipwhite nextgroup=jsDocParam+" tags containing type and param+syntax match jsDocTags contained "@\(arg\|argument\|cfg\|param\|property\|prop\|typedef\)\>" skipwhite nextgroup=jsDocType+" tags containing type but no param+syntax match jsDocTags contained "@\(callback\|define\|enum\|external\|implements\|this\|type\|return\|returns\)\>" skipwhite nextgroup=jsDocTypeNoParam+" tags containing references+syntax match jsDocTags contained "@\(lends\|see\|tutorial\)\>" skipwhite nextgroup=jsDocSeeTag+" other tags (no extra syntax)+syntax match jsDocTags contained "@\(abstract\|access\|accessor\|author\|classdesc\|constant\|const\|constructor\|copyright\|deprecated\|desc\|description\|dict\|event\|example\|file\|file[oO]verview\|final\|function\|global\|ignore\|inheritDoc\|inner\|instance\|interface\|license\|localdoc\|method\|mixin\|nosideeffects\|override\|overview\|preserve\|private\|protected\|public\|readonly\|since\|static\|struct\|todo\|summary\|undocumented\|virtual\)\>"++syntax region jsDocType contained matchgroup=jsDocTypeBrackets start="{" end="}" contains=jsDocTypeRecord oneline skipwhite nextgroup=jsDocParam+syntax match jsDocType contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+" skipwhite nextgroup=jsDocParam+syntax region jsDocTypeRecord contained start=/{/ end=/}/ contains=jsDocTypeRecord extend+syntax region jsDocTypeRecord contained start=/\[/ end=/\]/ contains=jsDocTypeRecord extend+syntax region jsDocTypeNoParam contained start="{" end="}" oneline+syntax match jsDocTypeNoParam contained "\%(#\|\"\|\w\|\.\|:\|\/\)\+"+syntax match jsDocParam contained "\%(#\|\$\|-\|'\|\"\|{.\{-}}\|\w\|\.\|:\|\/\|\[.\{-}]\|=\)\+"+syntax region jsDocSeeTag contained matchgroup=jsDocSeeTag start="{" end="}" contains=jsDocTags++if version >= 508 || !exists("did_javascript_syn_inits")+ if version < 508+ let did_javascript_syn_inits = 1+ command -nargs=+ HiLink hi link <args>+ else+ command -nargs=+ HiLink hi def link <args>+ endif+ HiLink jsDocTags Special+ HiLink jsDocSeeTag Function+ HiLink jsDocType Type+ HiLink jsDocTypeBrackets jsDocType+ HiLink jsDocTypeRecord jsDocType+ HiLink jsDocTypeNoParam Type+ HiLink jsDocParam Label+ delcommand HiLink+endif
@@ -0,0 +1,3 @@+syntax match jsDocTags contained /@\(link\|method[oO]f\|ngdoc\|ng[iI]nject\|restrict\)/ nextgroup=jsDocParam skipwhite+syntax match jsDocType contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|\/\)\+" nextgroup=jsDocParam skipwhite+syntax match jsDocParam contained "\%(#\|\$\|\w\|\"\|-\|\.\|:\|{\|}\|\/\|\[\|]\|=\)\+"
@@ -0,0 +1,65 @@+if exists("did_load_filetypes")+ finish+endif++augroup filetypedetect+ au! BufRead,BufNewFile+ \ *.go+ \ setfiletype go++ au! BufRead,BufNewFile+ \ *.rs+ \ setfiletype rust++ au! BufRead,BufNewFile+ \ *.hsc+ \ setfiletype haskell++ au! BufRead,BufNewFile+ \ *.t+ \ setfiletype lua++ au! BufRead,BufNewFile+ \ *.md+ \ setfiletype pandoc.markdown++ au! BufRead,BufNewFile+ \ *.mako+ \ setfiletype mako++ au! BufRead,BufNewFile+ \ *.wini+ \ setfiletype dosini++ au! BufRead,BufNewFile+ \ *.tpl+ \ setfiletype mako++ au! BufRead,BufNewFile+ \ *.h+ \ setfiletype c+ au! BufRead,BufNewFile+ \ *.imp,*.scm+ \ setfiletype lisp++ au! BufRead,BufNewFile+ \ *.grades+ \ setfiletype utln++ au! BufRead,BufNewFile+ \ mkfile*,*.mk+ \ setfiletype make++ au! BufRead,BufNewFile+ \ *.sig+ \ setfiletype sml++ au! BufRead,BufNew+ \ *.djt.html+ \ setfiletype htmldjango++ au! BufRead,BufNewFile+ \ *.tsv+ \ setfiletype tsv+augroup END+
@@ -0,0 +1,3 @@+setlocal tabstop=4+setlocal shiftwidth=4+setlocal softtabstop=4
@@ -0,0 +1,19 @@+" Vim filetype plugin file+" Language: Configuration File (ini file) for MSDOS/MS Windows+" Maintainer: Nikolai Weibull <now@bitwi.se>+" Latest Revision: 2008-07-09++if exists("b:did_ftplugin")+ finish+endif+let b:did_ftplugin = 1++let s:cpo_save = &cpo+set cpo&vim++let b:undo_ftplugin = "setl com< cms< fo<"++setlocal comments=:# commentstring=;\ %s formatoptions-=t formatoptions+=croql++let &cpo = s:cpo_save+unlet s:cpo_save
@@ -0,0 +1,22 @@+if exists("loaded_matchit")+ let b:match_ignorecase=0+ let old = exists('b:match_words') ? b:match_words.',' : ''++ " 1) structure .. end+ " 2) let .. in .. end+ " 3) signature .. end+ " 3) local .. end+ " TODO+ let b:match_words =+ \ '\<\%(let\|local\|structure\|signature\)\>:\<in\>:\<end\>'++ " jump to next functions+ let b:match_words .=+ \ ',^\<fun\>:^\<and\|fun\|val\>:DOES_NOT_EXIST'++ " () [] {} <>+ " why do I have to add them ? Shouldn't they be default?+ let b:match_words .=+ \ ',(:),\[:\],{:},<:>'+endif+
@@ -0,0 +1,365 @@+" Vim indent file+" Language: Javascript+" Maintainer: Chris Paul ( https://github.com/bounceme )+" URL: https://github.com/pangloss/vim-javascript+" Last Change: December 31, 2016++" Only load this indent file when no other was loaded.+if exists('b:did_indent')+ finish+endif+let b:did_indent = 1++" Now, set up our indentation expression and keys that trigger it.+setlocal indentexpr=GetJavascriptIndent()+setlocal autoindent nolisp nosmartindent+setlocal indentkeys+=0],0)++let b:undo_indent = 'setlocal indentexpr< smartindent< autoindent< indentkeys<'++" Only define the function once.+if exists('*GetJavascriptIndent')+ finish+endif++let s:cpo_save = &cpo+set cpo&vim++" Get shiftwidth value+if exists('*shiftwidth')+ function s:sw()+ return shiftwidth()+ endfunction+else+ function s:sw()+ return &sw+ endfunction+endif++" searchpair() wrapper+if has('reltime')+ function s:GetPair(start,end,flags,skip,time,...)+ return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 2000,0] + a:000),a:time)+ endfunction+else+ function s:GetPair(start,end,flags,skip,...)+ return searchpair('\m'.a:start,'','\m'.a:end,a:flags,a:skip,max([prevnonblank(v:lnum) - 1000,get(a:000,1)]))+ endfunction+endif++" Regex of syntax group names that are or delimit string or are comments.+let s:syng_strcom = 'string\|comment\|regex\|special\|doc\|template'+let s:syng_str = 'string\|template'+let s:syng_com = 'comment\|doc'+" Expression used to check whether we should skip a match with searchpair().+let s:skip_expr = "synIDattr(synID(line('.'),col('.'),0),'name') =~? '".s:syng_strcom."'"++function s:skip_func()+ if !s:free || search('\m`\|\*\/','nW',s:looksyn)+ let s:free = !eval(s:skip_expr)+ let s:looksyn = s:free ? line('.') : s:looksyn+ return !s:free+ endif+ let s:looksyn = line('.')+ return (search('\m[''"]\|\\$','nW',s:looksyn) || getline('.') =~ '\/\%<'.(col('.')+1).'c.\{-}\/') &&+ \ eval(s:skip_expr)+endfunction++function s:alternatePair(stop)+ let pos = getpos('.')[1:2]+ while search('\m[][(){}]','bW',a:stop)+ if !s:skip_func()+ let idx = stridx('])}',s:looking_at())+ if idx + 1+ if !s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,a:stop)+ break+ endif+ else+ return+ endif+ endif+ endwhile+ call call('cursor',pos)+endfunction++function s:save_pos(f,...)+ let l:pos = getpos('.')[1:2]+ let ret = call(a:f,a:000)+ call call('cursor',l:pos)+ return ret+endfunction++function s:syn_at(l,c)+ return synIDattr(synID(a:l,a:c,0),'name')+endfunction++function s:looking_at()+ return getline('.')[col('.')-1]+endfunction++function s:token()+ return s:looking_at() =~ '\k' ? expand('<cword>') : s:looking_at()+endfunction++function s:b_token()+ if s:looking_at() =~ '\k'+ call search('\m\<','cbW')+ endif+ return search('\m\S','bW')+endfunction++function s:previous_token()+ let l:n = line('.')+ while s:b_token()+ if (s:looking_at() == '/' || line('.') != l:n && search('\m\/\/','nbW',+ \ line('.'))) && s:syn_at(line('.'),col('.')) =~? s:syng_com+ call search('\m\_[^/]\zs\/[/*]','bW')+ else+ return s:token()+ endif+ endwhile+ return ''+endfunction++function s:others(p)+ return "((line2byte(line('.')) + col('.')) <= ".(line2byte(a:p[0]) + a:p[1]).") || ".s:skip_expr+endfunction++function s:tern_skip(p)+ return s:GetPair('{','}','nbW',s:others(a:p),200,a:p[0]) > 0+endfunction++function s:tern_col(p)+ return s:GetPair('?',':\@<!::\@!','nbW',s:others(a:p)+ \ .' || s:tern_skip('.string(a:p).')',200,a:p[0]) > 0+endfunction++function s:label_col()+ let pos = getpos('.')[1:2]+ let [s:looksyn,s:free] = pos+ call s:alternatePair(0)+ if s:save_pos('s:IsBlock')+ let poss = getpos('.')[1:2]+ return call('cursor',pos) || !s:tern_col(poss)+ elseif s:looking_at() == ':'+ return !s:tern_col([0,0])+ endif+endfunction++" configurable regexes that define continuation lines, not including (, {, or [.+let s:opfirst = '^' . get(g:,'javascript_opfirst',+ \ '\%([<>=,?^%|*/&]\|\([-.:+]\)\1\@!\|!=\|in\%(stanceof\)\=\>\)')+let s:continuation = get(g:,'javascript_continuation',+ \ '\%([<=,.~!?/*^%|&:]\|+\@<!+\|-\@<!-\|=\@<!>\|\<\%(typeof\|delete\|void\|in\|instanceof\)\)') . '$'++function s:continues(ln,con)+ return !cursor(a:ln, match(' '.a:con,s:continuation)) &&+ \ eval((['s:syn_at(line("."),col(".")) !~? "regex"'] ++ \ repeat(['s:previous_token() != "."'],5) + [1])[+ \ index(split('/ typeof in instanceof void delete'),s:token())])+endfunction++" get the line of code stripped of comments and move cursor to the last+" non-comment char.+function s:Trim(ln)+ let pline = substitute(getline(a:ln),'\s*$','','')+ let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])+ while l:max && s:syn_at(a:ln, strlen(pline)) =~? s:syng_com+ let pline = substitute(strpart(pline, 0, l:max),'\s*$','','')+ let l:max = max([match(pline,'.*[^/]\zs\/[/*]'),0])+ endwhile+ return cursor(a:ln,strlen(pline)) ? pline : pline+endfunction++" Find line above 'lnum' that isn't empty or in a comment+function s:PrevCodeLine(lnum)+ let l:n = prevnonblank(a:lnum)+ while l:n+ if getline(l:n) =~ '^\s*\/[/*]' + if (stridx(getline(l:n),'`') > 0 || getline(l:n-1)[-1:] == '\') &&+ \ s:syn_at(l:n,1) =~? s:syng_str+ return l:n+ endif+ let l:n = prevnonblank(l:n-1)+ elseif s:syn_at(l:n,1) =~? s:syng_com+ let l:n = s:save_pos('eval',+ \ 'cursor('.l:n.',1) + search(''\m\/\*'',"bW")')+ else+ return l:n+ endif+ endwhile+endfunction++" Check if line 'lnum' has a balanced amount of parentheses.+function s:Balanced(lnum)+ let l:open = 0+ let l:line = getline(a:lnum)+ let pos = match(l:line, '[][(){}]', 0)+ while pos != -1+ if s:syn_at(a:lnum,pos + 1) !~? s:syng_strcom+ let l:open += match(' ' . l:line[pos],'[[({]')+ if l:open < 0+ return+ endif+ endif+ let pos = match(l:line, '[][(){}]', pos + 1)+ endwhile+ return !l:open+endfunction++function s:OneScope(lnum)+ let pline = s:Trim(a:lnum)+ let kw = 'else do'+ if pline[-1:] == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0+ call s:previous_token()+ let kw = 'for if let while with'+ if index(split('await each'),s:token()) + 1+ call s:previous_token()+ let kw = 'for'+ endif+ endif+ return pline[-2:] == '=>' || index(split(kw),s:token()) + 1 &&+ \ s:save_pos('s:previous_token') != '.'+endfunction++" returns braceless levels started by 'i' and above lines * &sw. 'num' is the+" lineNr which encloses the entire context, 'cont' if whether line 'i' + 1 is+" a continued expression, which could have started in a braceless context+function s:iscontOne(i,num,cont)+ let [l:i, l:num, bL] = [a:i, a:num + !a:num, 0]+ let pind = a:num ? indent(l:num) + s:W : 0+ let ind = indent(l:i) + (a:cont ? 0 : s:W)+ while l:i >= l:num && (ind > pind || l:i == l:num)+ if indent(l:i) < ind && s:OneScope(l:i)+ let bL += s:W+ let l:i = line('.')+ elseif !a:cont || bL || ind < indent(a:i)+ break+ endif+ let ind = min([ind, indent(l:i)])+ let l:i = s:PrevCodeLine(l:i - 1)+ endwhile+ return bL+endfunction++" https://github.com/sweet-js/sweet.js/wiki/design#give-lookbehind-to-the-reader+function s:IsBlock()+ if s:looking_at() == '{'+ let l:n = line('.')+ let char = s:previous_token()+ let syn = char =~ '[{>/]' ? s:syn_at(line('.'),col('.')-(char == '{')) : ''+ if syn =~? 'xml\|jsx'+ return char != '{'+ elseif char =~ '\k'+ return index(split('return const let import export yield default delete var await void typeof throw case new in instanceof')+ \ ,char) < (line('.') != l:n) || s:previous_token() == '.'+ elseif char == '>'+ return getline('.')[col('.')-2] == '=' || syn =~? '^jsflow'+ elseif char == ':'+ return getline('.')[col('.')-2] != ':' && s:label_col()+ endif+ return syn =~? 'regex' || char !~ '[-=~!<*+,/?^%|&([]'+ endif+endfunction++function GetJavascriptIndent()+ let b:js_cache = get(b:,'js_cache',[0,0,0])+ " Get the current line.+ call cursor(v:lnum,1)+ let l:line = getline('.')+ let syns = s:syn_at(v:lnum, 1)++ " start with strings,comments,etc.+ if syns =~? s:syng_com+ if l:line =~ '^\s*\*'+ return cindent(v:lnum)+ elseif l:line !~ '^\s*\/[/*]'+ return -1+ endif+ elseif syns =~? s:syng_str && l:line !~ '^[''"]'+ if b:js_cache[0] == v:lnum - 1 && s:Balanced(v:lnum-1)+ let b:js_cache[0] = v:lnum+ endif+ return -1+ endif+ let l:lnum = s:PrevCodeLine(v:lnum - 1)+ if !l:lnum+ return+ endif++ let l:line = substitute(l:line,'^\s*','','')+ if l:line[:1] == '/*'+ let l:line = substitute(l:line,'^\%(\/\*.\{-}\*\/\s*\)*','','')+ endif+ if l:line =~ '^\/[/*]'+ let l:line = ''+ endif++ " the containing paren, bracket, or curly. Many hacks for performance+ let idx = strlen(l:line) ? stridx('])}',l:line[0]) : -1+ if b:js_cache[0] >= l:lnum && b:js_cache[0] < v:lnum &&+ \ (b:js_cache[0] > l:lnum || s:Balanced(l:lnum))+ call call('cursor',b:js_cache[1:])+ else+ let [s:looksyn, s:free, top] = [v:lnum - 1, 1, (!indent(l:lnum) &&+ \ s:syn_at(l:lnum,1) !~? s:syng_str) * l:lnum]+ if idx + 1+ call s:GetPair(['\[','(','{'][idx], '])}'[idx],'bW','s:skip_func()',2000,top)+ elseif indent(v:lnum) && syns =~? 'block'+ call s:GetPair('{','}','bW','s:skip_func()',2000,top)+ else+ call s:alternatePair(top)+ endif+ endif++ if idx + 1 || l:line[:1] == '|}'+ if idx == 2 && search('\m\S','bW',line('.')) && s:looking_at() == ')'+ call s:GetPair('(',')','bW',s:skip_expr,200)+ endif+ return indent('.')+ endif++ let b:js_cache = [v:lnum] + (line('.') == v:lnum ? [0,0] : getpos('.')[1:2])+ let num = b:js_cache[1]++ let [s:W, isOp, bL, switch_offset] = [s:sw(),0,0,0]+ if !num || s:IsBlock()+ let pline = s:save_pos('s:Trim',l:lnum)+ if num && s:looking_at() == ')' && s:GetPair('(', ')', 'bW', s:skip_expr, 100) > 0+ let num = line('.')+ if s:previous_token() ==# 'switch' && s:previous_token() != '.'+ if &cino !~ ':' || !has('float')+ let switch_offset = s:W+ else+ let cinc = matchlist(&cino,'.*:\(-\)\=\([0-9.]*\)\(s\)\=\C')+ let switch_offset = float2nr(str2float(cinc[1].(strlen(cinc[2]) ? cinc[2] : strlen(cinc[3])))+ \ * (strlen(cinc[3]) ? s:W : 1))+ endif+ if pline[-1:] != '.' && l:line =~# '^\%(default\|case\)\>'+ return indent(num) + switch_offset+ endif+ endif+ endif+ if pline[-1:] !~ '[{;]'+ if pline =~# ':\@<!:$'+ call cursor(l:lnum,strlen(pline))+ let isOp = s:tern_col(b:js_cache[1:2])+ else+ let isOp = l:line =~# s:opfirst || s:continues(l:lnum,pline)+ endif+ let bL = s:iscontOne(l:lnum,num,isOp)+ let bL -= (bL && l:line[0] == '{') * s:W+ endif+ endif++ " main return+ if isOp+ return (num ? indent(num) : -s:W) + (s:W * 2) + switch_offset + bL+ elseif num+ return indent(num) + s:W + switch_offset + bL+ endif+ return bL+endfunction++let &cpo = s:cpo_save+unlet s:cpo_save
@@ -0,0 +1,734 @@+" Vim indent file+" Language: PHP+" Author: John Wellesz <John.wellesz (AT) teaser (DOT) fr>+" URL: http://www.2072productions.com/vim/indent/php.vim+" Last Change: 2010 Jully 26th+" Newsletter: http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php+" Version: 1.33+"+"+" If you find a bug, please report it on GitHub:+" http://github.com/2072/PHP-Indenting-for-VIm/issues+" with an example of code that breaks the algorithm.+"+"+" Thanks a lot for using this script.+"+"+" NOTE: This script must be used with PHP syntax ON and with the php syntax+" script by Lutz Eymers (http://www.ipdienste.net/data/php.vim ) or with the+" script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )+" the later is bunbdled by default with Vim 7.+"+"+" In the case you have syntax errors in your script such as HereDoc end+" identifiers not at col 1 you'll have to indent your file 2 times (This+" script will automatically put HereDoc end identifiers at col 1 if+" they are followed by a ';').+"+"+" NOTE: If you are editing files in Unix file format and that (by accident)+" there are '\r' before new lines, this script won't be able to proceed+" correctly and will make many mistakes because it won't be able to match+" '\s*$' correctly.+" So you have to remove those useless characters first with a command like:+"+" :%s /\r$//g+"+" or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will+" silently remove them when VIM load this script (at each bufread).+"+" Options: See :help php-indent for available options.+++if exists("b:did_indent")+ finish+endif+let b:did_indent = 1+++let php_sync_method = 0+++if exists("PHP_default_indenting")+ let b:PHP_default_indenting = PHP_default_indenting * &sw+else+ let b:PHP_default_indenting = 0+endif++if exists("PHP_BracesAtCodeLevel")+ let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel+else+ let b:PHP_BracesAtCodeLevel = 0+endif+++if exists("PHP_autoformatcomment")+ let b:PHP_autoformatcomment = PHP_autoformatcomment+else+ let b:PHP_autoformatcomment = 1+endif++if exists("PHP_outdentphpescape")+ let b:PHP_outdentphpescape = PHP_outdentphpescape+else+ let b:PHP_outdentphpescape = 1+endif+++if exists("PHP_vintage_case_default_indent") && PHP_vintage_case_default_indent+ let b:PHP_vintage_case_default_indent = 1+else+ let b:PHP_vintage_case_default_indent = 0+endif++++let b:PHP_lastindented = 0+let b:PHP_indentbeforelast = 0+let b:PHP_indentinghuge = 0+let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+let b:PHP_LastIndentedWasComment = 0+let b:PHP_InsideMultilineComment = 0+let b:InPHPcode = 0+let b:InPHPcode_checked = 0+let b:InPHPcode_and_script = 0+let b:InPHPcode_tofind = ""+let b:PHP_oldchangetick = b:changedtick+let b:UserIsTypingComment = 0+let b:optionsset = 0++setlocal nosmartindent+setlocal noautoindent+setlocal nocindent+setlocal nolisp++setlocal indentexpr=GetPhpIndent()+setlocal indentkeys=0{,0},0),:,!^F,o,O,e,*<Return>,=?>,=*/++++let s:searchpairflags = 'bWr'++if &fileformat == "unix" && exists("PHP_removeCRwhenUnix") && PHP_removeCRwhenUnix+ silent! %s/\r$//g+endif++if exists("*GetPhpIndent")+ call ResetPhpOptions()+ finish+endif++let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'+" let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!' +let s:PHP_startindenttag = ''+++function! GetLastRealCodeLNum(startline) " {{{++ let lnum = a:startline++ if b:GetLastRealCodeLNum_ADD && b:GetLastRealCodeLNum_ADD == lnum + 1+ let lnum = b:GetLastRealCodeLNum_ADD+ endif++ let old_lnum = lnum++ while lnum > 1+ let lnum = prevnonblank(lnum)+ let lastline = getline(lnum)++ if b:InPHPcode_and_script && lastline =~ '?>\s*$'+ let lnum = lnum - 1+ " elseif lastline =~ '^\s*?>.*<?\%(php\)\=\s*$' + " let lnum = lnum - 1 + elseif lastline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'+ let lnum = lnum - 1+ elseif lastline =~ '\*/\s*$'+ call cursor(lnum, 1)+ if lastline !~ '^\*/'+ call search('\*/', 'W')+ endif+ let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++ let lastline = getline(lnum)+ if lastline =~ '^\s*/\*'+ let lnum = lnum - 1+ else+ break+ endif+++ elseif lastline =~? '\%(//\s*\|?>.*\)\@<!<?\%(php\)\=\s*$\|^\s*<script\>'++ while lastline !~ '\(<?.*\)\@<!?>' && lnum > 1+ let lnum = lnum - 1+ let lastline = getline(lnum)+ endwhile+ if lastline =~ '^\s*?>'+ let lnum = lnum - 1+ else+ break+ endif+++ elseif lastline =~? '^\a\w*;\=$' && lastline !~? s:notPhpHereDoc+ let tofind=substitute( lastline, '\(\a\w*\);\=', '<<<''\\=\1''\\=$', '')+ while getline(lnum) !~? tofind && lnum > 1+ let lnum = lnum - 1+ endwhile+ else+ break+ endif+ endwhile++ " if lnum==1 && getline(lnum) !~ '<?' + " let lnum=0 + " endif ++ if b:InPHPcode_and_script && !b:InPHPcode+ let b:InPHPcode_and_script = 0+ endif++++ return lnum+endfunction " }}}++function! Skippmatch2()++ let line = getline(".")++ if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(\%(//\|#\).*\)\@<=/\*'+ return 1+ else+ return 0+ endif+endfun++function! Skippmatch() " {{{+ let synname = synIDattr(synID(line("."), col("."), 0), "name")+ if synname == "Delimiter" || synname == "phpRegionDelimiter" || synname =~# "^phpParent" || synname == "phpArrayParens" || synname =~# '^php\%(Block\|Brace\)' || synname == "javaScriptBraces" || synname =~# "^phpComment" && b:UserIsTypingComment+ return 0+ else+ return 1+ endif+endfun " }}}++function! FindOpenBracket(lnum) " {{{+ call cursor(a:lnum, 1)+ return searchpair('{', '', '}', 'bW', 'Skippmatch()')+endfun " }}}++function! FindTheIfOfAnElse (lnum, StopAfterFirstPrevElse) " {{{++ if getline(a:lnum) =~# '^\s*}\s*else\%(if\)\=\>'+ let beforeelse = a:lnum+ else+ let beforeelse = GetLastRealCodeLNum(a:lnum - 1)+ endif++ if !s:level+ let s:iftoskip = 0+ endif++ if getline(beforeelse) =~# '^\s*\%(}\s*\)\=else\%(\s*if\)\@!\>'+ let s:iftoskip = s:iftoskip + 1+ endif++ if getline(beforeelse) =~ '^\s*}'+ let beforeelse = FindOpenBracket(beforeelse)++ if getline(beforeelse) =~ '^\s*{'+ let beforeelse = GetLastRealCodeLNum(beforeelse - 1)+ endif+ endif+++ if !s:iftoskip && a:StopAfterFirstPrevElse && getline(beforeelse) =~# '^\s*\%([}]\s*\)\=else\%(if\)\=\>'+ return beforeelse+ endif++ if getline(beforeelse) !~# '^\s*if\>' && beforeelse>1 || s:iftoskip && beforeelse>1++ if s:iftoskip && getline(beforeelse) =~# '^\s*if\>'+ let s:iftoskip = s:iftoskip - 1+ endif++ let s:level = s:level + 1+ let beforeelse = FindTheIfOfAnElse(beforeelse, a:StopAfterFirstPrevElse)+ endif++ return beforeelse++endfunction " }}}++let s:defaultORcase = '^\s*\%(default\|case\).*:'++function! FindTheSwitchIndent (lnum) " {{{+++ let test = GetLastRealCodeLNum(a:lnum - 1)++ if test <= 1+ return indent(1) - &sw * b:PHP_vintage_case_default_indent+ end++ if getline(test) =~ '^\s*}'+ let test = FindOpenBracket(test)++ if getline(test) =~ '^\s*{'+ let test = GetLastRealCodeLNum(GetLastRealCodeLNum(test - 1) - 1)+ endif+ endif++ if getline(test) =~# '^\s*switch\>'+ return indent(test)+ elseif getline(test) =~# s:defaultORcase+ return indent(test) - &sw * b:PHP_vintage_case_default_indent+ else+ return FindTheSwitchIndent(test)+ endif++endfunction "}}}+++function! IslinePHP (lnum, tofind) " {{{+ let cline = getline(a:lnum)++ if a:tofind==""+ let tofind = "^\\s*[\"']*\\s*\\zs\\S"+ else+ let tofind = a:tofind+ endif++ let tofind = tofind . '\c'++ let coltotest = match (cline, tofind) + 1++ let synname = synIDattr(synID(a:lnum, coltotest, 0), "name")++ if synname =~ '^php' || synname=="Delimiter" || synname =~? '^javaScript'+ return synname+ else+ return ""+ endif+endfunction " }}}++let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'+let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'++let s:autoresetoptions = 0+if ! s:autoresetoptions+ let s:autoresetoptions = 1+endif++function! ResetPhpOptions()+ if ! b:optionsset && &filetype == "php"+ if b:PHP_autoformatcomment++ setlocal comments=s1:/*,mb:*,ex:*/,://,:#++ setlocal formatoptions-=t+ setlocal formatoptions+=q+ setlocal formatoptions+=r+ setlocal formatoptions+=o+ setlocal formatoptions+=w+ setlocal formatoptions+=c+ setlocal formatoptions+=b+ endif+ let b:optionsset = 1+ endif+endfunc++call ResetPhpOptions()++function! GetPhpIndent()++ let b:GetLastRealCodeLNum_ADD = 0++ let UserIsEditing=0+ if b:PHP_oldchangetick != b:changedtick+ let b:PHP_oldchangetick = b:changedtick+ let UserIsEditing=1+ endif++ if b:PHP_default_indenting+ let b:PHP_default_indenting = g:PHP_default_indenting * &sw+ endif++ let cline = getline(v:lnum)++ if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast+ if b:PHP_indentbeforelast+ let b:PHP_indentinghuge = 1+ echom 'Large indenting detected, speed optimizations engaged (v1.33)'+ endif+ let b:PHP_indentbeforelast = b:PHP_lastindented+ endif++ if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented+ if b:PHP_indentinghuge+ echom 'Large indenting deactivated'+ let b:PHP_indentinghuge = 0+ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+ endif+ let b:PHP_lastindented = v:lnum+ let b:PHP_LastIndentedWasComment=0+ let b:PHP_InsideMultilineComment=0+ let b:PHP_indentbeforelast = 0++ let b:InPHPcode = 0+ let b:InPHPcode_checked = 0+ let b:InPHPcode_and_script = 0+ let b:InPHPcode_tofind = ""++ elseif v:lnum > b:PHP_lastindented+ let real_PHP_lastindented = b:PHP_lastindented+ let b:PHP_lastindented = v:lnum+ endif+++ if !b:InPHPcode_checked " {{{ One time check+ let b:InPHPcode_checked = 1++ let synname = ""+ if cline !~ '<?.*?>'+ let synname = IslinePHP (prevnonblank(v:lnum), "")+ endif++ if synname!=""+ if synname != "phpHereDoc" && synname != "phpHereDocDelimiter"+ let b:InPHPcode = 1+ let b:InPHPcode_tofind = ""++ if synname =~# "^phpComment"+ let b:UserIsTypingComment = 1+ else+ let b:UserIsTypingComment = 0+ endif++ if synname =~? '^javaScript'+ let b:InPHPcode_and_script = 1+ endif++ else+ let b:InPHPcode = 0+ let b:UserIsTypingComment = 0++ let lnum = v:lnum - 1+ while getline(lnum) !~? '<<<''\=\a\w*''\=$' && lnum > 1+ let lnum = lnum - 1+ endwhile++ let b:InPHPcode_tofind = substitute( getline(lnum), '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '')+ endif+ else+ let b:InPHPcode = 0+ let b:UserIsTypingComment = 0+ let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'+ endif+ endif "!b:InPHPcode_checked }}}+++ " Test if we are indenting PHP code {{{+ let lnum = prevnonblank(v:lnum - 1)+ let last_line = getline(lnum)++ if b:InPHPcode_tofind!=""+ if cline =~? b:InPHPcode_tofind+ let b:InPHPcode = 1+ let b:InPHPcode_tofind = ""+ let b:UserIsTypingComment = 0+ if cline =~ '\*/'+ call cursor(v:lnum, 1)+ if cline !~ '^\*/'+ call search('\*/', 'W')+ endif+ let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++ let b:PHP_LastIndentedWasComment = 0++ if cline =~ '^\s*\*/'+ return indent(lnum) + 1+ else+ return indent(lnum)+ endif++ elseif cline =~? '<script\>'+ let b:InPHPcode_and_script = 1+ let b:GetLastRealCodeLNum_ADD = v:lnum+ endif+ endif+ endif++ if b:InPHPcode++ if !b:InPHPcode_and_script && last_line =~ '\%(<?.*\)\@<!?>\%(.*<?\)\@!' && IslinePHP(lnum, '?>')=~"Delimiter"+ if cline !~? s:PHP_startindenttag+ let b:InPHPcode = 0+ let b:InPHPcode_tofind = s:PHP_startindenttag+ elseif cline =~? '<script\>'+ let b:InPHPcode_and_script = 1+ endif++ elseif last_line =~? '<<<''\=\a\w*''\=$'+ let b:InPHPcode = 0+ let b:InPHPcode_tofind = substitute( last_line, '^.*<<<''\=\(\a\w*\)''\=$', '^\\s*\1;\\=$', '')++ elseif !UserIsEditing && cline =~ '^\s*/\*\%(.*\*/\)\@!' && getline(v:lnum + 1) !~ '^\s*\*'+ let b:InPHPcode = 0+ let b:InPHPcode_tofind = '\*/'++ elseif cline =~? '^\s*</script>'+ let b:InPHPcode = 0+ let b:InPHPcode_tofind = s:PHP_startindenttag+ endif+ endif " }}}+++ if !b:InPHPcode && !b:InPHPcode_and_script+ return -1+ endif++ " Indent successive // or # comment the same way the first is {{{+ if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'+ if b:PHP_LastIndentedWasComment == 1+ return indent(real_PHP_lastindented)+ endif+ let b:PHP_LastIndentedWasComment = 1+ else+ let b:PHP_LastIndentedWasComment = 0+ endif " }}}++ " Indent multiline /* comments correctly {{{++ if b:PHP_InsideMultilineComment || b:UserIsTypingComment+ if cline =~ '^\s*\*\%(\/\)\@!'+ if last_line =~ '^\s*/\*'+ return indent(lnum) + 1+ else+ return indent(lnum)+ endif+ else+ let b:PHP_InsideMultilineComment = 0+ endif+ endif++ if !b:PHP_InsideMultilineComment && cline =~ '^\s*/\*' && cline !~ '\*/\s*$'+ if getline(v:lnum + 1) !~ '^\s*\*'+ return -1+ endif+ let b:PHP_InsideMultilineComment = 1+ endif " }}}+++ " Things always indented at col 1 (PHP delimiter: <?, ?>, Heredoc end) {{{+ if cline =~# '^\s*<?' && cline !~ '?>' && b:PHP_outdentphpescape+ return 0+ endif++ if cline =~ '^\s*?>' && cline !~# '<?' && b:PHP_outdentphpescape+ return 0+ endif++ if cline =~? '^\s*\a\w*;$\|^\a\w*$' && cline !~? s:notPhpHereDoc+ return 0+ endif " }}}++ let s:level = 0++ let lnum = GetLastRealCodeLNum(v:lnum - 1)++ let last_line = getline(lnum)+ let ind = indent(lnum)+ let endline= s:endline++ if ind==0 && b:PHP_default_indenting+ let ind = b:PHP_default_indenting+ endif++ if lnum == 0+ return b:PHP_default_indenting+ endif+++ if cline =~ '^\s*}\%(}}\)\@!'+ let ind = indent(FindOpenBracket(v:lnum))+ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+ return ind+ endif++ if cline =~ '^\s*\*/'+ call cursor(v:lnum, 1)+ if cline !~ '^\*/'+ call search('\*/', 'W')+ endif+ let lnum = searchpair('/\*', '', '\*/', s:searchpairflags, 'Skippmatch2()')++ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++ if cline =~ '^\s*\*/'+ return indent(lnum) + 1+ else+ return indent(lnum)+ endif+ endif+++ if last_line =~ '[;}]'.endline && last_line !~ '^)' && last_line !~# s:defaultORcase+ if ind==b:PHP_default_indenting+ return b:PHP_default_indenting+ elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline+ return b:PHP_CurrentIndentLevel+ endif+ endif++ let LastLineClosed = 0++ let terminated = '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline++ let unstated = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline++ if ind != b:PHP_default_indenting && cline =~# '^\s*else\%(if\)\=\>'+ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting+ return indent(FindTheIfOfAnElse(v:lnum, 1))+ elseif cline =~# s:defaultORcase+ return FindTheSwitchIndent(v:lnum) + &sw * b:PHP_vintage_case_default_indent+ elseif cline =~ '^\s*)\=\s*{'+ let previous_line = last_line+ let last_line_num = lnum++ while last_line_num > 1++ if previous_line =~ '^\s*\%(' . s:blockstart . '\|\%([a-zA-Z]\s*\)*function\)'++ let ind = indent(last_line_num)++ if b:PHP_BracesAtCodeLevel+ let ind = ind + &sw+ endif++ return ind+ endif++ let last_line_num = last_line_num - 1+ let previous_line = getline(last_line_num)+ endwhile++ elseif last_line =~# unstated && cline !~ '^\s*);\='.endline+ let ind = ind + &sw+ return ind++ elseif (ind != b:PHP_default_indenting || last_line =~ '^)' ) && last_line =~ terminated+ let previous_line = last_line+ let last_line_num = lnum+ let LastLineClosed = 1++ while 1+ if previous_line =~ '^\s*}'+ let last_line_num = FindOpenBracket(last_line_num)++ if getline(last_line_num) =~ '^\s*{'+ let last_line_num = GetLastRealCodeLNum(last_line_num - 1)+ endif++ let previous_line = getline(last_line_num)++ continue+ else++ if getline(last_line_num) =~# '^\s*else\%(if\)\=\>'+ let last_line_num = FindTheIfOfAnElse(last_line_num, 0)+ continue+ endif+++ let last_match = last_line_num++ let one_ahead_indent = indent(last_line_num)+ let last_line_num = GetLastRealCodeLNum(last_line_num - 1)+ let two_ahead_indent = indent(last_line_num)+ let after_previous_line = previous_line+ let previous_line = getline(last_line_num)+++ if previous_line =~# s:defaultORcase.'\|{'.endline+ break+ endif++ if after_previous_line=~# '^\s*'.s:blockstart.'.*)'.endline && previous_line =~# '[;}]'.endline+ break+ endif++ if one_ahead_indent == two_ahead_indent || last_line_num < 1+ if previous_line =~# '\%(;\|^\s*}\)'.endline || last_line_num < 1+ break+ endif+ endif+ endif+ endwhile++ if indent(last_match) != ind+ let ind = indent(last_match)+ let b:PHP_CurrentIndentLevel = b:PHP_default_indenting++ return ind+ endif+ endif++ let plinnum = GetLastRealCodeLNum(lnum - 1)+ let AntepenultimateLine = getline(plinnum)++ let last_line = substitute(last_line,"\\(//\\|#\\)\\(\\(\\([^\"']*\\([\"']\\)[^\"']*\\5\\)\\+[^\"']*$\\)\\|\\([^\"']*$\\)\\)",'','')+++ if ind == b:PHP_default_indenting+ if last_line =~ terminated+ let LastLineClosed = 1+ endif+ endif++ if !LastLineClosed+++ if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline++ if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'+ let ind = ind + &sw+ endif++ if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1+ let b:PHP_CurrentIndentLevel = ind++ return ind+ endif++ elseif last_line =~ '\S\+\s*),'.endline+ call cursor(lnum, 1)+ call search('),'.endline, 'W')+ let openedparent = searchpair('(', '', ')', 'bW', 'Skippmatch()')+ if openedparent != lnum+ let ind = indent(openedparent)+ endif+ + elseif last_line =~ '^\s*'.s:blockstart+ let ind = ind + &sw++++ elseif AntepenultimateLine =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase+ let ind = ind + &sw+ endif++ endif++ if cline =~ '^\s*);\='+ let ind = ind - &sw+ endif++ let b:PHP_CurrentIndentLevel = ind+ return ind+endfunction
@@ -0,0 +1,217 @@+" Vim indent file+" Language: SML+" Maintainer: Saikat Guha <sg266@cornell.edu>+" Hubert Chao <hc85@cornell.edu>+" Original OCaml Version:+" Jean-Francois Yuen <jfyuen@ifrance.com>+" Mike Leary <leary@nwlink.com>+" Markus Mottl <markus@oefai.at>+" OCaml URL: http://www.oefai.at/~markus/vim/indent/ocaml.vim+" Last Change: 2003 Jan 04 - Adapted to SML+" 2002 Nov 06 - Some fixes (JY)+" 2002 Oct 28 - Fixed bug with indentation of ']' (MM)+" 2002 Oct 22 - Major rewrite (JY)++" Only load this indent file when no other was loaded.+if exists("b:did_indent")+ finish+endif+let b:did_indent = 1++setlocal expandtab+setlocal indentexpr=GetSMLIndent()+setlocal indentkeys+=0=and,0=else,0=end,0=handle,0=if,0=in,0=let,0=then,0=val,0=fun,0=\|,0=*),0)+setlocal nolisp+setlocal nosmartindent+setlocal textwidth=80+setlocal shiftwidth=2++" Comment formatting+if (has("comments"))+ set comments=sr:(*,mb:*,ex:*)+ set fo=cqort+endif++" Only define the function once.+"if exists("*GetSMLIndent")+"finish+"endif++" Define some patterns:+let s:beflet = '^\s*\(initializer\|method\|try\)\|\(\<\(begin\|do\|else\|in\|then\|try\)\|->\|;\)\s*$'+let s:letpat = '^\s*\(let\|type\|module\|class\|open\|exception\|val\|include\|external\)\>'+let s:letlim = '\(\<\(sig\|struct\)\|;;\)\s*$'+let s:lim = '^\s*\(exception\|external\|include\|let\|module\|open\|type\|val\)\>'+let s:module = '\<\%(let\|sig\|struct\)\>'+let s:obj = '^\s*\(constraint\|inherit\|initializer\|method\|val\)\>\|\<\(object\|object\s*(.*)\)\s*$'+let s:type = '^\s*\%(let\|type\)\>.*='+let s:val = '^\s*\(val\|external\)\>.*:'++" Skipping pattern, for comments+function! s:SkipPattern(lnum, pat)+ let def = prevnonblank(a:lnum - 1)+ while def > 0 && getline(def) =~ a:pat+ let def = prevnonblank(def - 1)+ endwhile+ return def+endfunction++" Indent for ';;' to match multiple 'let'+function! s:GetInd(lnum, pat, lim)+ let llet = search(a:pat, 'bW')+ let old = indent(a:lnum)+ while llet > 0+ let old = indent(llet)+ let nb = s:SkipPattern(llet, '^\s*(\*.*\*)\s*$')+ if getline(nb) =~ a:lim+ return old+ endif+ let llet = search(a:pat, 'bW')+ endwhile+ return old+endfunction++" Indent pairs+function! s:FindPair(pstart, pmid, pend)+ call search(a:pend, 'bW')+" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+ let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')+ if lno == -1+ return indent(lno)+ else+ return col(".") - 1+ endif+endfunction++function! s:FindLet(pstart, pmid, pend)+ call search(a:pend, 'bW')+" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+ let lno = searchpair(a:pstart, a:pmid, a:pend, 'bW', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"')+ let moduleLine = getline(lno)+ if lno == -1 || moduleLine =~ '^\s*\(fun\|structure\|signature\)\>'+ return indent(lno)+ else+ return col(".") - 1+ endif+endfunction++" Indent 'let'+"function! s:FindLet(pstart, pmid, pend)+" call search(a:pend, 'bW')+" return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ "^\\s*let\\>.*=\\s*$\\|" . s:beflet'))+"endfunction++function! GetSMLIndent()+ " Find a non-blank line above the current line.+ let lnum = prevnonblank(v:lnum - 1)++ " At the start of the file use zero indent.+ if lnum == 0+ return 0+ endif++ let ind = indent(lnum)+ let lline = getline(lnum)++ " Return double 'shiftwidth' after lines matching:+ if lline =~ '^\s*|.*=>\s*$'+ return ind + &sw + &sw+ elseif lline =~ '^\s*val\>.*=\s*$'+ return ind + &sw+ endif++ let line = getline(v:lnum)++ " Indent lines starting with 'end' to matching module+ if line =~ '^\s*end\>'+ return s:FindLet(s:module, '', '\<end\>')++ " Match 'else' with 'if'+ elseif line =~ '^\s*else\>'+ if lline !~ '^\s*\(if\|else\|then\)\>'+ return s:FindPair('\<if\>', '', '\<then\>')+ else+ return ind+ endif++ " Match 'then' with 'if'+ elseif line =~ '^\s*then\>'+ if lline !~ '^\s*\(if\|else\|then\)\>'+ return s:FindPair('\<if\>', '', '\<then\>')+ else+ return ind+ endif++ " Indent if current line begins with ']'+ elseif line =~ '^\s*\]'+ return s:FindPair('\[','','\]')++ " Indent current line starting with 'in' to last matching 'let'+ elseif line =~ '^\s*in\>'+ let ind = s:FindLet('\<let\>','','\<in\>')++ " Indent from last matching module if line matches:+ elseif line =~ '^\s*\(fun\|val\|open\|structure\|and\|datatype\|type\|exception\)\>'+ cursor(lnum,1)+ let lastModule = indent(searchpair(s:module, '', '\<end\>', 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))+ if lastModule == -1+ return 0+ else+ return lastModule + &sw+ endif++ " Indent lines starting with '|' from matching 'case', 'handle'+ elseif line =~ '^\s*|'+ " cursor(lnum,1)+ let lastSwitch = search('\<\(case\|handle\|fun\|datatype\)\>','bW')+ let switchLine = getline(lastSwitch)+ let switchLineIndent = indent(lastSwitch)+ if lline =~ '^\s*|'+ return ind+ endif+ if switchLine =~ '\<case\>'+ return col(".") + 2+ elseif switchLine =~ '\<handle\>'+ return switchLineIndent + &sw+ elseif switchLine =~ '\<datatype\>'+ call search('=')+ return col(".") - 1+ else+ return switchLineIndent + 2+ endif+++ " Indent if last line ends with 'sig', 'struct', 'let', 'then', 'else',+ " 'in'+ elseif lline =~ '\<\(sig\|struct\|let\|in\|then\|else\)\s*$'+ let ind = ind + &sw++ " Indent if last line ends with 'of', align from 'case'+ elseif lline =~ '\<\(of\)\s*$'+ call search('\<case\>',"bW")+ let ind = col(".")+4++ " Indent if current line starts with 'of'+ elseif line =~ '^\s*of\>'+ call search('\<case\>',"bW")+ let ind = col(".")+1+++ " Indent if last line starts with 'fun', 'case', 'fn'+ elseif lline =~ '^\s*\(fun\|fn\|case\)\>'+ let ind = ind + &sw++ endif++ " Don't indent 'let' if last line started with 'fun', 'fn'+ if line =~ '^\s*let\>'+ if lline =~ '^\s*\(fun\|fn\)'+ let ind = ind - &sw+ endif+ endif++ return ind++endfunction++" vim:sw=2
@@ -0,0 +1,389 @@+" Vim syntax file+" Language: JavaScript+" Maintainer: vim-javascript community+" URL: https://github.com/pangloss/vim-javascript++if !exists("main_syntax")+ if version < 600+ syntax clear+ elseif exists("b:current_syntax")+ finish+ endif+ let main_syntax = 'javascript'+endif++" Dollar sign is permitted anywhere in an identifier+if v:version > 704 || v:version == 704 && has('patch1142')+ syntax iskeyword @,48-57,_,192-255,$+else+ setlocal iskeyword+=$+endif++syntax sync fromstart+" TODO: Figure out what type of casing I need+" syntax case ignore+syntax case match++syntax match jsNoise /[:,\;\.]\{1}/+syntax match jsFuncCall /\k\+\%(\s*(\)\@=/+syntax match jsParensError /[)}\]]/++" Program Keywords+syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef+syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=jsFlowDefinition+syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression+syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsBooleanTrue true+syntax keyword jsBooleanFalse false++" Modules+syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType+syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword+syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom+syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup+syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString+syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup++" Strings, Templates, Numbers+syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend+syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend+syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial extend+syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString+syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/+syntax keyword jsNumber Infinity+syntax match jsFloat /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/++" Regular Expressions+syntax match jsSpecial contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"+syntax region jsTemplateVar contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend+syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]++syntax match jsRegexpBoundary contained "\v%(\<@![\^$]|\\[bB])"+syntax match jsRegexpBackRef contained "\v\\[1-9][0-9]*"+syntax match jsRegexpQuantifier contained "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??"+syntax match jsRegexpOr contained "\v\<@!\|"+syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]"+syntax region jsRegexpGroup contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend+if v:version > 703 || v:version == 603 && has("patch1088")+ syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+else+ syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+endif+syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod++" Objects+syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue+syntax match jsObjectColon contained /:/ skipwhite skipempty+syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend+syntax match jsObjectSeparator contained /,/+syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend+syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/+syntax match jsObjectMethodType contained /\%(get\|set\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName+syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue+syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue++exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '')+exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '').' skipwhite skipempty nextgroup=@jsExpression'+exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '')+exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '')+exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '')+exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '')+exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '')++" Statement Keywords+syntax match jsBlockLabel /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\s*:/ contains=jsNoise skipwhite skipempty nextgroup=jsBlock+syntax match jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;\|\n\)\)\@=/+syntax keyword jsStatement contained with yield debugger+syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey+syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse+syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock+syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch+syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait+syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock+syntax region jsSwitchCase contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend+syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock+syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock+syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch+syntax keyword jsException throw+syntax keyword jsAsyncKeyword async await+syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock++" Keywords+syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch+syntax keyword jsGlobalNodeObjects module exports global process __dirname __filename+syntax match jsGlobalNodeObjects /\<require\>/ containedin=jsFuncCall+syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError+syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval+" DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved?+syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public++" DISCUSS: Should we really be matching stuff like this?+" DOM2 Objects+syntax keyword jsGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction+syntax keyword jsExceptions DOMException++" DISCUSS: Should we really be matching stuff like this?+" DOM2 CONSTANT+syntax keyword jsDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR+syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE++" DISCUSS: Should we really be special matching on these props?+" HTML events and internal variables+syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize++" Code blocks+syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold+syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold+syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold+syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold+syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold+syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold+syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold+syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold+syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsAsyncKeyword,jsNoise extend fold+syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsIfElseBlock contained matchgroup=jsIfElseBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsTryCatchBlock contained matchgroup=jsTryCatchBraces start=/{/ end=/}/ contains=@jsAll,jsBlock skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold+syntax region jsFinallyBlock contained matchgroup=jsFinallyBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsSwitchBlock contained matchgroup=jsSwitchBraces start=/{/ end=/}/ contains=@jsAll,jsBlock,jsSwitchCase extend fold+syntax region jsRepeatBlock contained matchgroup=jsRepeatBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression,jsComment extend fold+syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold+syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold+syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold+syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom+syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression+syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/+syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression++syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs+syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup+syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend+syntax match jsFuncArgCommas contained ','+syntax keyword jsArguments contained arguments+syntax keyword jsForAwait contained await skipwhite skipempty nextgroup=jsParenRepeat++" Matches a single keyword argument with no parens+syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend+" Matches a series of arguments surrounded in parens+syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend++exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '')+exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')+exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')+exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')++" Classes+syntax keyword jsClassKeyword contained class+syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression+syntax match jsClassNoise contained /\./+syntax match jsClassMethodType contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty+syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup+syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue+syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression keepend+syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend+syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs+syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs++" Destructuring+syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/+syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue+syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment+syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend+syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend+syntax match jsDestructuringNoise contained /[,\[\]]/+syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold++" Comments+syntax keyword jsCommentTodo contained TODO FIXME XXX TBD+syntax region jsComment start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend+syntax region jsComment start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend+syntax region jsEnvComment start=/\%^#!/ end=/$/ display++" Specialized Comments - These are special comment regexes that are used in+" odd places that maintain the proper nextgroup functionality. It sucks we+" can't make jsComment a skippable type of group for nextgroup+syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend+syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend+syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend+syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend+syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend+syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend++" Decorators+syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction+syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator++if exists("javascript_plugin_jsdoc")+ runtime extras/jsdoc.vim+ " NGDoc requires JSDoc+ if exists("javascript_plugin_ngdoc")+ runtime extras/ngdoc.vim+ endif+endif++if exists("javascript_plugin_flow")+ runtime extras/flow.vim+endif++syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo+syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,,jsBlockLabel++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_javascript_syn_inits")+ if version < 508+ let did_javascript_syn_inits = 1+ command -nargs=+ HiLink hi link <args>+ else+ command -nargs=+ HiLink hi def link <args>+ endif+ HiLink jsComment Comment+ HiLink jsEnvComment PreProc+ HiLink jsParensIfElse jsParens+ HiLink jsParensRepeat jsParens+ HiLink jsParensSwitch jsParens+ HiLink jsParensCatch jsParens+ HiLink jsCommentTodo Todo+ HiLink jsString String+ HiLink jsObjectKeyString String+ HiLink jsTemplateString String+ HiLink jsObjectStringKey String+ HiLink jsClassStringKey String+ HiLink jsTaggedTemplate StorageClass+ HiLink jsTernaryIfOperator Operator+ HiLink jsRegexpString String+ HiLink jsRegexpBoundary SpecialChar+ HiLink jsRegexpQuantifier SpecialChar+ HiLink jsRegexpOr Conditional+ HiLink jsRegexpMod SpecialChar+ HiLink jsRegexpBackRef SpecialChar+ HiLink jsRegexpGroup jsRegexpString+ HiLink jsRegexpCharClass Character+ HiLink jsCharacter Character+ HiLink jsPrototype Special+ HiLink jsConditional Conditional+ HiLink jsBranch Conditional+ HiLink jsLabel Label+ HiLink jsReturn Statement+ HiLink jsRepeat Repeat+ HiLink jsDo Repeat+ HiLink jsStatement Statement+ HiLink jsException Exception+ HiLink jsTry Exception+ HiLink jsFinally Exception+ HiLink jsCatch Exception+ HiLink jsAsyncKeyword Keyword+ HiLink jsForAwait Keyword+ HiLink jsArrowFunction Type+ HiLink jsFunction Type+ HiLink jsGenerator jsFunction+ HiLink jsArrowFuncArgs jsFuncArgs+ HiLink jsFuncName Function+ HiLink jsClassFuncName jsFuncName+ HiLink jsObjectFuncName Function+ HiLink jsArguments Special+ HiLink jsError Error+ HiLink jsParensError Error+ HiLink jsOperator Operator+ HiLink jsOf Operator+ HiLink jsStorageClass StorageClass+ HiLink jsClassKeyword Keyword+ HiLink jsExtendsKeyword Keyword+ HiLink jsThis Special+ HiLink jsSuper Constant+ HiLink jsNan Number+ HiLink jsNull Type+ HiLink jsUndefined Type+ HiLink jsNumber Number+ HiLink jsFloat Float+ HiLink jsBooleanTrue Boolean+ HiLink jsBooleanFalse Boolean+ HiLink jsObjectColon jsNoise+ HiLink jsNoise Noise+ HiLink jsBrackets Noise+ HiLink jsParens Noise+ HiLink jsBraces Noise+ HiLink jsFuncBraces Noise+ HiLink jsFuncParens Noise+ HiLink jsClassBraces Noise+ HiLink jsClassNoise Noise+ HiLink jsIfElseBraces Noise+ HiLink jsTryCatchBraces Noise+ HiLink jsModuleBraces Noise+ HiLink jsObjectBraces Noise+ HiLink jsObjectSeparator Noise+ HiLink jsFinallyBraces Noise+ HiLink jsRepeatBraces Noise+ HiLink jsSwitchBraces Noise+ HiLink jsSpecial Special+ HiLink jsTemplateVar Special+ HiLink jsTemplateBraces Noise+ HiLink jsGlobalObjects Constant+ HiLink jsGlobalNodeObjects Constant+ HiLink jsExceptions Constant+ HiLink jsBuiltins Constant+ HiLink jsImport Include+ HiLink jsExport Include+ HiLink jsExportDefault StorageClass+ HiLink jsExportDefaultGroup jsExportDefault+ HiLink jsModuleAs Include+ HiLink jsModuleComma jsNoise+ HiLink jsModuleAsterisk Noise+ HiLink jsFrom Include+ HiLink jsDecorator Special+ HiLink jsDecoratorFunction Function+ HiLink jsParensDecorator jsParens+ HiLink jsFuncArgOperator jsFuncArgs+ HiLink jsClassProperty jsObjectKey+ HiLink jsSpreadOperator Operator+ HiLink jsRestOperator Operator+ HiLink jsRestExpression jsFuncArgs+ HiLink jsSwitchColon Noise+ HiLink jsClassMethodType Type+ HiLink jsObjectMethodType Type+ HiLink jsClassDefinition jsFuncName+ HiLink jsBlockLabel Identifier+ HiLink jsBlockLabelKey jsBlockLabel++ HiLink jsDestructuringBraces Noise+ HiLink jsDestructuringProperty jsFuncArgs+ HiLink jsDestructuringAssignment jsObjectKey+ HiLink jsDestructuringNoise Noise++ HiLink jsCommentFunction jsComment+ HiLink jsCommentClass jsComment+ HiLink jsCommentMisc jsComment++ HiLink jsDomErrNo Constant+ HiLink jsDomNodeConsts Constant+ HiLink jsDomElemAttrs Label+ HiLink jsDomElemFuncs PreProc++ HiLink jsHtmlEvents Special+ HiLink jsHtmlElemAttrs Label+ HiLink jsHtmlElemFuncs PreProc++ HiLink jsCssStyles Label++ delcommand HiLink+endif++" Define the htmlJavaScript for HTML syntax html.vim+syntax cluster htmlJavaScript contains=@jsAll+syntax cluster javaScriptExpression contains=@jsAll++" Vim's default html.vim highlights all javascript as 'Special'+hi! def link javaScript NONE++let b:current_syntax = "javascript"+if main_syntax == 'javascript'+ unlet main_syntax+endif
@@ -0,0 +1,187 @@+au FileType go+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | let g:gofmt_command="goimports"+ \ | source ~/.vim/eightspaces.vim+ \ | setlocal noexpandtab+ \ | setlocal colorcolumn=100++au FileType rust+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | let b:syntastic_mode="passive"+ \ | source ~/.vim/fourspaces.vim+ \ | syntax sync fromstart+ \ | noremap <buffer> gr :ALEFindReferences<CR>h+ \ | noremap <buffer> <C-]> :TagImposterAnticipateJump <Bar> ALEGoToDefinition<CR>+ " \ | noremap <buffer> <C-t> <C-o>h+ " \ | noremap <buffer> <C-]> :LspDefinition<CR>+ " \ | noremap <buffer> <C-]> :call LanguageClient#textDocument_definition()<CR>+ " \ | noremap <buffer> <C-t> <C-o>+ " \ | noremap <buffer> <C-]> :TagImposterAnticipateJump <Bar> ALEGoToDefinition<CR>++au FileType ledger+ \ let b:Comment=";"+ \ | let b:EndComment=""+ \ | source ~/.vim/fourspaces.vim++au FileType tsv+ \ source ~/.vim/tabs8.vim++au FileType wini+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim++au FileType conf+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType toml+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType yaml+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim+ \ | set indentexpr=+ \ | set smartindent++au FileType java+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | source ~/.vim/fourspaces.vim++au FileType javascript+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"+ \ | source ~/.vim/twospaces.vim++au FileType c+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"+ \ | source ~/.vim/fourspaces.vim++au FileType cpp+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | source ~/.vim/fourspaces.vim++au FileType nginx+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/fourspaces.vim+ \ | set smartindent++au FileType tex+ \ let &mp="clear; pdflatex %"+ \ | let b:Comment="%"+ \ | let b:EndComment=""++au FileType lua+ \ let &mp="clear; lua %"+ \ | let &efm="lua: %f:%l:%m,%-G%.%#"+ \ | let b:Comment="--"+ \ | let b:EndComment=""++au FileType python+ \ let &mp="clear; python2 %"+ \ | let &efm='%A %#File "%f"\, line %l\,%.%#,%-GTrace%.%#,%C %.%#,%Z%m,%-G%.%#'+ \ | let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/fourspaces.vim++au FileType php+ \ let b:Comment="//"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim++" Make PHP use smartindent dammit!+" (This is so HTML indenting is sane.)+au BufRead,BufNewFile *.html set smartindent+au BufRead,BufNewFile *.php set smartindent+au BufRead,BufNewFile *.jgr set smartindent++au FileType haskell+ \ let &mp="clear; ghc --make %"+ \ | let &efm='%f:%l:%c:'+ \ | let b:Comment="--"+ \ | let b:EndComment=""+ \ | set smartindent++au FileType cabal+ \ let b:Comment="--"+ \ | let b:EndComment=""+ \ | set smartindent++au FileType sml+ \ let &mp="ledit -x -h ~/.ledit/mosml mosml -P full %"+ \ | let b:Comment="(*"+ \ | let b:EndComment="*)"++au FileType vim+ \ let b:Comment='"'+ \ | let b:EndComment=""++au FileType lisp+ \ let b:Comment=";"+ \ | let b:EndComment=""++au FileType sh+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim++au FileType zsh+ \ let b:Comment="#"+ \ | let b:EndComment=""+ \ | source ~/.vim/twospaces.vim++au FileType utln+ \ let &mp="clear; validate-utlnx %"+ \ | let &efm='%f\, line %#%l:%m'+ \ | let b:Comment="(X:"+ \ | let b:EndComment=")"+ \ | set smartindent++au FileType mako+ \ let b:Comment="<%doc>"+ \ | let b:EndComment="</%doc>"+ \ | set smartindent++au FileType crontab+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType conf+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType make+ \ let b:Comment="#"+ \ | let b:EndComment=""++au FileType html+ \ let b:Comment="<!--"+ \ | let b:EndComment="-->"++au BufEnter *.html setlocal smartindent+au BufEnter *.tpl setlocal smartindent++au FileType htmldjango+ \ let b:Comment="{% comment %}"+ \ | let b:EndComment="{% endcomment %}"++au FileType css+ \ let b:Comment="/*"+ \ | let b:EndComment="*/"++" au BufEnter * filetype detect+
@@ -0,0 +1,240 @@+import json+import re+import requests++from_cmdline = False+try:+ __file__+ from_cmdline = True+except NameError:+ pass++if not from_cmdline:+ import vim+++METHOD_REGEX = re.compile('^(GET|POST|DELETE|PUT|HEAD|OPTIONS|PATCH) (.*)$')+HEADER_REGEX = re.compile('^([^()<>@,;:\<>/\[\]?={}]+):\\s*(.*)$')+VAR_REGEX = re.compile('^# ?(:[^: ]+)\\s*=\\s*(.+)$')+GLOBAL_VAR_REGEX = re.compile('^# ?(\$[^$ ]+)\\s*=\\s*(.+)$')+FILE_REGEX = re.compile("!((?:file)|(?:(?:content)))\((.+)\)")+++def replace_vars(string, variables):+ for var, val in variables.items():+ string = string.replace(var, val)+ return string+++def is_comment(s):+ return s.startswith('#')+++def do_request(block, buf):+ variables = dict((m.groups() for m in (GLOBAL_VAR_REGEX.match(l) for l in buf) if m))+ variables.update(dict((m.groups() for m in (VAR_REGEX.match(l) for l in block) if m)))++ block = [line for line in block if not is_comment(line) and line.strip() != '']++ if len(block) == 0:+ print 'Request was empty.'+ return++ method_url = block.pop(0)+ method_url_match = METHOD_REGEX.match(method_url)+ if not method_url_match:+ print 'Could not find method or URL!'+ return++ method, url = method_url_match.groups()+ url = replace_vars(url, variables)++ headers = {}+ while len(block) > 0:+ header_match = HEADER_REGEX.match(block[0])+ if header_match:+ block.pop(0)+ header_name, header_value = header_match.groups()+ headers[header_name] = replace_vars(header_value, variables)+ else:+ break++ data = [ replace_vars(l, variables) for l in block ]+ files = None+ if all([ '=' in l for l in data ]):+ # Form data: separate entries into data dict, and files dict+ key_value_pairs = dict([ l.split('=', 1) for l in data ])+ def to_file(expr):+ type, arg = FILE_REGEX.match(expr).groups()+ arg = arg.replace('\\(', '(').replace('\\)', ')')+ return open(arg, 'rb') if type == 'file' else (arg)++ files = dict(map(lambda (k,v): (k, to_file(v)), filter(lambda (k,v): FILE_REGEX.match(v), key_value_pairs.items())))+ data = dict(filter(lambda (k,v): not FILE_REGEX.match(v), key_value_pairs.items()))+ else:+ # Straight data: just send it off as a string.+ data = '\n'.join(data)++ response = requests.request(method, url, headers=headers, data=data, files=files)+ content_type = response.headers.get('Content-Type', '').split(';')[0]++ response_body = response.text+ if content_type == 'application/json':+ try:+ response_body = json.dumps(+ json.loads(response.text), sort_keys=True, indent=2,+ separators=(',', ': '),+ ensure_ascii=vim.eval('g:http_client_json_escape_utf')=='1')+ except ValueError:+ pass++ display = (+ response_body.split('\n') ++ ['', '// status code: %s' % response.status_code] ++ ['// %s: %s' % (k, v) for k, v in response.headers.items()]+ )++ return display, content_type+++# Vim methods.++def vim_filetypes_by_content_type():+ return {+ 'application/json': vim.eval('g:http_client_json_ft'),+ 'application/xml': 'xml',+ 'text/html': 'html'+ }++BUFFER_NAME = '__HTTP_Client_Response__'+++def find_block(buf, line_num):+ length = len(buf)+ is_buffer_terminator = lambda s: s.strip() == ''++ block_start = line_num+ while block_start > 0 and not is_buffer_terminator(buf[block_start]):+ block_start -= 1++ block_end = line_num+ while block_end < length and not is_buffer_terminator(buf[block_end]):+ block_end += 1++ return buf[block_start:block_end + 1]+++def open_scratch_buffer(contents, filetype):+ previous_window = vim.current.window+ existing_buffer_window_id = vim.eval('bufwinnr("%s")' % BUFFER_NAME)+ if existing_buffer_window_id == '-1':+ if vim.eval('g:http_client_result_vsplit') == '1':+ split_cmd = 'vsplit'+ else:+ split_cmd = 'split'+ vim.command('rightbelow %s %s' % (split_cmd, BUFFER_NAME))+ vim.command('setlocal buftype=nofile nospell')+ else:+ vim.command('%swincmd w' % existing_buffer_window_id)++ vim.command('set filetype=%s' % filetype)+ vim.current.buffer[:] = contents++ if vim.eval('g:http_client_focus_output_window') != '1':+ vim.current.window = previous_window+++def do_request_from_buffer():+ win = vim.current.window+ line_num = win.cursor[0] - 1+ block = find_block(win.buffer, line_num)+ result = do_request(block, win.buffer)+ if result:+ response, content_type = result+ vim_ft = vim_filetypes_by_content_type().get(content_type, 'text')+ open_scratch_buffer(response, vim_ft)+++# Tests.++def run_tests():+ import json++ def extract_json(resp):+ return json.loads(''.join([ l for l in resp[0] if not l.startswith('//') ]))++ def test(assertion, test):+ print 'Test %s: %s' % ('passed' if assertion else 'failed', test)+ if not assertion:+ raise AssertionError++ resp = extract_json(do_request([+ '# comment',+ '# :a=barf',+ 'GET http://httpbin.org/headers',+ 'X-Hey: :a',+ '# comment'+ ], []))+ test(resp['headers']['X-Hey'] == 'barf', 'Headers are passed with variable substitution.')++ resp = extract_json(do_request([+ '# :a = barf',+ 'GET http://httpbin.org/get?data=:a'+ ], []))+ test(resp['args']['data'] == 'barf', 'GET data is passed with variable substitution.')++ resp = extract_json(do_request([+ 'POST http://httpbin.org/post',+ 'some data'+ ], []))+ test(resp['data'] == 'some data', 'POST data is passed with variable substitution.')++ resp = extract_json(do_request([+ 'POST http://httpbin.org/post',+ 'forma=a',+ 'formb=b',+ ], []))+ test(resp['form']['forma'] == 'a', 'POST form data is passed.')++ resp = extract_json(do_request([+ 'POST http://$global/post',+ 'forma=a',+ 'formb=b',+ ], [ '# $global = httpbin.org']))+ test(resp['form']['forma'] == 'a', 'Global variables are substituted.')++ import os+ from tempfile import NamedTemporaryFile++ SAMPLE_FILE_CONTENT = 'sample file content'++ temp_file = NamedTemporaryFile(delete = False)+ temp_file.write(SAMPLE_FILE_CONTENT)+ temp_file.close()+ resp = extract_json(do_request([+ 'POST http://httpbin.org/post',+ 'forma=a',+ 'formb=b',+ "formc=!file(%s)" % temp_file.name,+ ], []))+ test(resp['files']['formc'] == SAMPLE_FILE_CONTENT, 'Files given as path are sent properly.')+ test(not 'formc' in resp['form'], 'File not included in form data.')+ os.unlink(temp_file.name)++ resp = extract_json(do_request([+ 'POST http://httpbin.org/post',+ 'forma=a',+ 'formb=b',+ "formc=!content(%s)" % SAMPLE_FILE_CONTENT,+ ], []))+ test(resp['files']['formc'] == SAMPLE_FILE_CONTENT, 'Files given as content are sent properly.')++ resp = extract_json(do_request([+ 'POST http://httpbin.org/post',+ "c=!content(foo \\(bar\\))",+ ], []))+ test(resp['files']['c'] == 'foo (bar)', 'Escaped parenthesis should be unescaped during request')+++if from_cmdline:+ run_tests()
@@ -0,0 +1,42 @@+let s:initialized_client = 0+let s:script_path = fnamemodify(resolve(expand('<sfile>:p')), ':h')++if !exists('http_client_bind_hotkey')+ let g:http_client_bind_hotkey = 1+endif++if !exists('http_client_json_ft')+ let g:http_client_json_ft = 'javascript'+endif++if !exists('http_client_json_escape_utf')+ let g:http_client_json_escape_utf = 1+endif++if !exists('http_client_result_vsplit')+ let g:http_client_result_vsplit = 1+endif++if !exists('http_client_focus_output_window')+ let g:http_client_focus_output_window = 1+endif++function! s:DoHTTPRequest()+ if !has('python')+ echo 'Error: this plugin requires vim compiled with python support.'+ finish+ endif++ if !s:initialized_client+ let s:initialized_client = 1+ execute 'pyfile ' . s:script_path . '/http_client.py'+ endif++ python do_request_from_buffer()+endfunction++command! -nargs=0 HTTPClientDoRequest call <SID>DoHTTPRequest()++if g:http_client_bind_hotkey+ silent! nnoremap <unique> <Leader>tt :HTTPClientDoRequest<cr>+endif
@@ -0,0 +1,625 @@+" surround.vim - Surroundings+" Author: Tim Pope <vimNOSPAM@tpope.org>+" Version: 1.90+" GetLatestVimScripts: 1697 1 :AutoInstall: surround.vim+"+" See surround.txt for help. This can be accessed by doing+"+" :helptags ~/.vim/doc+" :help surround+"+" Licensed under the same terms as Vim itself.++" ============================================================================++" Exit quickly when:+" - this plugin was already loaded or disabled+" - when 'compatible' is set+if (exists("g:loaded_surround") && g:loaded_surround) || &cp+ finish+endif+let g:loaded_surround = 1++let s:cpo_save = &cpo+set cpo&vim++" Input functions {{{1++function! s:getchar()+ let c = getchar()+ if c =~ '^\d\+$'+ let c = nr2char(c)+ endif+ return c+endfunction++function! s:inputtarget()+ let c = s:getchar()+ while c =~ '^\d\+$'+ let c = c . s:getchar()+ endwhile+ if c == " "+ let c = c . s:getchar()+ endif+ if c =~ "\<Esc>\|\<C-C>\|\0"+ return ""+ else+ return c+ endif+endfunction++function! s:inputreplacement()+ "echo '-- SURROUND --'+ let c = s:getchar()+ if c == " "+ let c = c . s:getchar()+ endif+ if c =~ "\<Esc>" || c =~ "\<C-C>"+ return ""+ else+ return c+ endif+endfunction++function! s:beep()+ exe "norm! \<Esc>"+ return ""+endfunction++function! s:redraw()+ redraw+ return ""+endfunction++" }}}1++" Wrapping functions {{{1++function! s:extractbefore(str)+ if a:str =~ '\r'+ return matchstr(a:str,'.*\ze\r')+ else+ return matchstr(a:str,'.*\ze\n')+ endif+endfunction++function! s:extractafter(str)+ if a:str =~ '\r'+ return matchstr(a:str,'\r\zs.*')+ else+ return matchstr(a:str,'\n\zs.*')+ endif+endfunction++function! s:repeat(str,count)+ let cnt = a:count+ let str = ""+ while cnt > 0+ let str = str . a:str+ let cnt = cnt - 1+ endwhile+ return str+endfunction++function! s:fixindent(str,spc)+ let str = substitute(a:str,'\t',s:repeat(' ',&sw),'g')+ let spc = substitute(a:spc,'\t',s:repeat(' ',&sw),'g')+ let str = substitute(str,'\(\n\|\%^\).\@=','\1'.spc,'g')+ if ! &et+ let str = substitute(str,'\s\{'.&ts.'\}',"\t",'g')+ endif+ return str+endfunction++function! s:process(string)+ let i = 0+ while i < 7+ let i = i + 1+ let repl_{i} = ''+ let m = matchstr(a:string,nr2char(i).'.\{-\}\ze'.nr2char(i))+ if m != ''+ let m = substitute(strpart(m,1),'\r.*','','')+ let repl_{i} = input(substitute(m,':\s*$','','').': ')+ endif+ endwhile+ let s = ""+ let i = 0+ while i < strlen(a:string)+ let char = strpart(a:string,i,1)+ if char2nr(char) < 8+ let next = stridx(a:string,char,i+1)+ if next == -1+ let s = s . char+ else+ let insertion = repl_{char2nr(char)}+ let subs = strpart(a:string,i+1,next-i-1)+ let subs = matchstr(subs,'\r.*')+ while subs =~ '^\r.*\r'+ let sub = matchstr(subs,"^\r\\zs[^\r]*\r[^\r]*")+ let subs = strpart(subs,strlen(sub)+1)+ let r = stridx(sub,"\r")+ let insertion = substitute(insertion,strpart(sub,0,r),strpart(sub,r+1),'')+ endwhile+ let s = s . insertion+ let i = next+ endif+ else+ let s = s . char+ endif+ let i = i + 1+ endwhile+ return s+endfunction++function! s:wrap(string,char,type,...)+ let keeper = a:string+ let newchar = a:char+ let type = a:type+ let linemode = type ==# 'V' ? 1 : 0+ let special = a:0 ? a:1 : 0+ let before = ""+ let after = ""+ if type ==# "V"+ let initspaces = matchstr(keeper,'\%^\s*')+ else+ let initspaces = matchstr(getline('.'),'\%^\s*')+ endif+ " Duplicate b's are just placeholders (removed)+ let pairs = "b()B{}r[]a<>"+ let extraspace = ""+ if newchar =~ '^ '+ let newchar = strpart(newchar,1)+ let extraspace = ' '+ endif+ let idx = stridx(pairs,newchar)+ if newchar == ' '+ let before = ''+ let after = ''+ elseif exists("b:surround_".char2nr(newchar))+ let all = s:process(b:surround_{char2nr(newchar)})+ let before = s:extractbefore(all)+ let after = s:extractafter(all)+ elseif exists("g:surround_".char2nr(newchar))+ let all = s:process(g:surround_{char2nr(newchar)})+ let before = s:extractbefore(all)+ let after = s:extractafter(all)+ elseif newchar ==# "p"+ let before = "\n"+ let after = "\n\n"+ elseif newchar =~# "[tT\<C-T><,]"+ let dounmapp = 0+ let dounmapb = 0+ if !maparg(">","c")+ let dounmapb= 1+ " Hide from AsNeeded+ exe "cn"."oremap > <CR>"+ endif+ let default = ""+ if newchar ==# "T"+ if !exists("s:lastdel")+ let s:lastdel = ""+ endif+ let default = matchstr(s:lastdel,'<\zs.\{-\}\ze>')+ endif+ let tag = input("<",default)+ echo "<".substitute(tag,'>*$','>','')+ if dounmapb+ silent! cunmap >+ endif+ if tag != ""+ let tag = substitute(tag,'>*$','','')+ let before = '<'.tag.'>'+ if tag =~ '/$'+ let after = ''+ else+ let after = '</'.substitute(tag,' .*','','').'>'+ endif+ if newchar == "\<C-T>" || newchar == ","+ if type ==# "v" || type ==# "V"+ let before = before . "\n\t"+ endif+ if type ==# "v"+ let after = "\n". after+ endif+ endif+ endif+ elseif newchar ==# 'l' || newchar == '\'+ " LaTeX+ let env = input('\begin{')+ let env = '{' . env+ let env = env . s:closematch(env)+ echo '\begin'.env+ if env != ""+ let before = '\begin'.env+ let after = '\end'.matchstr(env,'[^}]*').'}'+ endif+ "if type ==# 'v' || type ==# 'V'+ "let before = before ."\n\t"+ "endif+ "if type ==# 'v'+ "let after = "\n".initspaces.after+ "endif+ elseif newchar ==# 'f' || newchar ==# 'F'+ let fnc = input('function: ')+ if fnc != ""+ let before = substitute(fnc,'($','','').'('+ let after = ')'+ if newchar ==# 'F'+ let before = before . ' '+ let after = ' ' . after+ endif+ endif+ elseif idx >= 0+ let spc = (idx % 3) == 1 ? " " : ""+ let idx = idx / 3 * 3+ let before = strpart(pairs,idx+1,1) . spc+ let after = spc . strpart(pairs,idx+2,1)+ elseif newchar == "\<C-[>" || newchar == "\<C-]>"+ let before = "{\n\t"+ let after = "\n}"+ elseif newchar !~ '\a'+ let before = newchar+ let after = newchar+ else+ let before = ''+ let after = ''+ endif+ "let before = substitute(before,'\n','\n'.initspaces,'g')+ let after = substitute(after ,'\n','\n'.initspaces,'g')+ "let after = substitute(after,"\n\\s*\<C-U>\\s*",'\n','g')+ if type ==# 'V' || (special && type ==# "v")+ let before = substitute(before,' \+$','','')+ let after = substitute(after ,'^ \+','','')+ if after !~ '^\n'+ let after = initspaces.after+ endif+ if keeper !~ '\n$' && after !~ '^\n'+ let keeper = keeper . "\n"+ elseif keeper =~ '\n$' && after =~ '^\n'+ let after = strpart(after,1)+ endif+ if before !~ '\n\s*$'+ let before = before . "\n"+ if special+ let before = before . "\t"+ endif+ endif+ endif+ if type ==# 'V'+ let before = initspaces.before+ endif+ if before =~ '\n\s*\%$'+ if type ==# 'v'+ let keeper = initspaces.keeper+ endif+ let padding = matchstr(before,'\n\zs\s\+\%$')+ let before = substitute(before,'\n\s\+\%$','\n','')+ let keeper = s:fixindent(keeper,padding)+ endif+ if type ==# 'V'+ let keeper = before.keeper.after+ elseif type =~ "^\<C-V>"+ " Really we should be iterating over the buffer+ let repl = substitute(before,'[\\~]','\\&','g').'\1'.substitute(after,'[\\~]','\\&','g')+ let repl = substitute(repl,'\n',' ','g')+ let keeper = substitute(keeper."\n",'\(.\{-\}\)\(\n\)',repl.'\n','g')+ let keeper = substitute(keeper,'\n\%$','','')+ else+ let keeper = before.extraspace.keeper.extraspace.after+ endif+ return keeper+endfunction++function! s:wrapreg(reg,char,...)+ let orig = getreg(a:reg)+ let type = substitute(getregtype(a:reg),'\d\+$','','')+ let special = a:0 ? a:1 : 0+ let new = s:wrap(orig,a:char,type,special)+ call setreg(a:reg,new,type)+endfunction+" }}}1++function! s:insert(...) " {{{1+ " Optional argument causes the result to appear on 3 lines, not 1+ "call inputsave()+ let linemode = a:0 ? a:1 : 0+ let char = s:inputreplacement()+ while char == "\<CR>" || char == "\<C-S>"+ " TODO: use total count for additional blank lines+ let linemode = linemode + 1+ let char = s:inputreplacement()+ endwhile+ "call inputrestore()+ if char == ""+ return ""+ endif+ "call inputsave()+ let cb_save = &clipboard+ set clipboard-=unnamed+ let reg_save = @@+ call setreg('"',"\r",'v')+ call s:wrapreg('"',char,linemode)+ " If line mode is used and the surrounding consists solely of a suffix,+ " remove the initial newline. This fits a use case of mine but is a+ " little inconsistent. Is there anyone that would prefer the simpler+ " behavior of just inserting the newline?+ if linemode && match(getreg('"'),'^\n\s*\zs.*') == 0+ call setreg('"',matchstr(getreg('"'),'^\n\s*\zs.*'),getregtype('"'))+ endif+ " This can be used to append a placeholder to the end+ if exists("g:surround_insert_tail")+ call setreg('"',g:surround_insert_tail,"a".getregtype('"'))+ endif+ "if linemode+ "call setreg('"',substitute(getreg('"'),'^\s\+','',''),'c')+ "endif+ if col('.') >= col('$')+ norm! ""p+ else+ norm! ""P+ endif+ if linemode+ call s:reindent()+ endif+ norm! `]+ call search('\r','bW')+ let @@ = reg_save+ let &clipboard = cb_save+ return "\<Del>"+endfunction " }}}1++function! s:reindent() " {{{1+ if exists("b:surround_indent") ? b:surround_indent : (exists("g:surround_indent") && g:surround_indent)+ silent norm! '[=']+ endif+endfunction " }}}1++function! s:dosurround(...) " {{{1+ let scount = v:count1+ let char = (a:0 ? a:1 : s:inputtarget())+ let spc = ""+ if char =~ '^\d\+'+ let scount = scount * matchstr(char,'^\d\+')+ let char = substitute(char,'^\d\+','','')+ endif+ if char =~ '^ '+ let char = strpart(char,1)+ let spc = 1+ endif+ if char == 'a'+ let char = '>'+ endif+ if char == 'r'+ let char = ']'+ endif+ let newchar = ""+ if a:0 > 1+ let newchar = a:2+ if newchar == "\<Esc>" || newchar == "\<C-C>" || newchar == ""+ return s:beep()+ endif+ endif+ let cb_save = &clipboard+ set clipboard-=unnamed+ let append = ""+ let original = getreg('"')+ let otype = getregtype('"')+ call setreg('"',"")+ let strcount = (scount == 1 ? "" : scount)+ if char == '/'+ exe 'norm! '.strcount.'[/d'.strcount.']/'+ else+ exe 'norm! d'.strcount.'i'.char+ endif+ let keeper = getreg('"')+ let okeeper = keeper " for reindent below+ if keeper == ""+ call setreg('"',original,otype)+ let &clipboard = cb_save+ return ""+ endif+ let oldline = getline('.')+ let oldlnum = line('.')+ if char ==# "p"+ call setreg('"','','V')+ elseif char ==# "s" || char ==# "w" || char ==# "W"+ " Do nothing+ call setreg('"','')+ elseif char =~ "[\"'`]"+ exe "norm! i \<Esc>d2i".char+ call setreg('"',substitute(getreg('"'),' ','',''))+ elseif char == '/'+ norm! "_x+ call setreg('"','/**/',"c")+ let keeper = substitute(substitute(keeper,'^/\*\s\=','',''),'\s\=\*$','','')+ else+ " One character backwards+ call search('.','bW')+ exe "norm! da".char+ endif+ let removed = getreg('"')+ let rem2 = substitute(removed,'\n.*','','')+ let oldhead = strpart(oldline,0,strlen(oldline)-strlen(rem2))+ let oldtail = strpart(oldline, strlen(oldline)-strlen(rem2))+ let regtype = getregtype('"')+ if char =~# '[\[({<T]' || spc+ let keeper = substitute(keeper,'^\s\+','','')+ let keeper = substitute(keeper,'\s\+$','','')+ endif+ if col("']") == col("$") && col('.') + 1 == col('$')+ if oldhead =~# '^\s*$' && a:0 < 2+ let keeper = substitute(keeper,'\%^\n'.oldhead.'\(\s*.\{-\}\)\n\s*\%$','\1','')+ endif+ let pcmd = "p"+ else+ let pcmd = "P"+ endif+ if line('.') < oldlnum && regtype ==# "V"+ let pcmd = "p"+ endif+ call setreg('"',keeper,regtype)+ if newchar != ""+ call s:wrapreg('"',newchar)+ endif+ silent exe 'norm! ""'.pcmd.'`['+ if removed =~ '\n' || okeeper =~ '\n' || getreg('"') =~ '\n'+ call s:reindent()+ endif+ if getline('.') =~ '^\s\+$' && keeper =~ '^\s*\n'+ silent norm! cc+ endif+ call setreg('"',removed,regtype)+ let s:lastdel = removed+ let &clipboard = cb_save+ if newchar == ""+ silent! call repeat#set("\<Plug>Dsurround".char,scount)+ else+ silent! call repeat#set("\<Plug>Csurround".char.newchar,scount)+ endif+endfunction " }}}1++function! s:changesurround() " {{{1+ let a = s:inputtarget()+ if a == ""+ return s:beep()+ endif+ let b = s:inputreplacement()+ if b == ""+ return s:beep()+ endif+ call s:dosurround(a,b)+endfunction " }}}1++function! s:opfunc(type,...) " {{{1+ let char = s:inputreplacement()+ if char == ""+ return s:beep()+ endif+ let reg = '"'+ let sel_save = &selection+ let &selection = "inclusive"+ let cb_save = &clipboard+ set clipboard-=unnamed+ let reg_save = getreg(reg)+ let reg_type = getregtype(reg)+ "call setreg(reg,"\n","c")+ let type = a:type+ if a:type == "char"+ silent exe 'norm! v`[o`]"'.reg.'y'+ let type = 'v'+ elseif a:type == "line"+ silent exe 'norm! `[V`]"'.reg.'y'+ let type = 'V'+ elseif a:type ==# "v" || a:type ==# "V" || a:type ==# "\<C-V>"+ let ve = &virtualedit+ if !(a:0 && a:1)+ set virtualedit=+ endif+ silent exe 'norm! gv"'.reg.'y'+ let &virtualedit = ve+ elseif a:type =~ '^\d\+$'+ let type = 'v'+ silent exe 'norm! ^v'.a:type.'$h"'.reg.'y'+ if mode() ==# 'v'+ norm! v+ return s:beep()+ endif+ else+ let &selection = sel_save+ let &clipboard = cb_save+ return s:beep()+ endif+ let keeper = getreg(reg)+ if type ==# "v" && a:type !=# "v"+ let append = matchstr(keeper,'\_s\@<!\s*$')+ let keeper = substitute(keeper,'\_s\@<!\s*$','','')+ endif+ call setreg(reg,keeper,type)+ call s:wrapreg(reg,char,a:0 && a:1)+ if type ==# "v" && a:type !=# "v" && append != ""+ call setreg(reg,append,"ac")+ endif+ silent exe 'norm! gv'.(reg == '"' ? '' : '"' . reg).'p`['+ if type ==# 'V' || (getreg(reg) =~ '\n' && type ==# 'v')+ call s:reindent()+ endif+ call setreg(reg,reg_save,reg_type)+ let &selection = sel_save+ let &clipboard = cb_save+ if a:type =~ '^\d\+$'+ silent! call repeat#set("\<Plug>Y".(a:0 && a:1 ? "S" : "s")."surround".char,a:type)+ endif+endfunction++function! s:opfunc2(arg)+ call s:opfunc(a:arg,1)+endfunction " }}}1++function! s:closematch(str) " {{{1+ " Close an open (, {, [, or < on the command line.+ let tail = matchstr(a:str,'.[^\[\](){}<>]*$')+ if tail =~ '^\[.\+'+ return "]"+ elseif tail =~ '^(.\+'+ return ")"+ elseif tail =~ '^{.\+'+ return "}"+ elseif tail =~ '^<.+'+ return ">"+ else+ return ""+ endif+endfunction " }}}1++nnoremap <silent> <Plug>Dsurround :<C-U>call <SID>dosurround(<SID>inputtarget())<CR>+nnoremap <silent> <Plug>Csurround :<C-U>call <SID>changesurround()<CR>+nnoremap <silent> <Plug>Yssurround :<C-U>call <SID>opfunc(v:count1)<CR>+nnoremap <silent> <Plug>YSsurround :<C-U>call <SID>opfunc2(v:count1)<CR>+" <C-U> discards the numerical argument but there's not much we can do with it+nnoremap <silent> <Plug>Ysurround :<C-U>set opfunc=<SID>opfunc<CR>g@+nnoremap <silent> <Plug>YSurround :<C-U>set opfunc=<SID>opfunc2<CR>g@+vnoremap <silent> <Plug>Vsurround :<C-U>call <SID>opfunc(visualmode())<CR>+vnoremap <silent> <Plug>VSurround :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 1 : 0)<CR>+vnoremap <silent> <Plug>VgSurround :<C-U>call <SID>opfunc(visualmode(),visualmode() ==# 'V' ? 0 : 1)<CR>+inoremap <silent> <Plug>Isurround <C-R>=<SID>insert()<CR>+inoremap <silent> <Plug>ISurround <C-R>=<SID>insert(1)<CR>++if !exists("g:surround_no_mappings") || ! g:surround_no_mappings+ nmap ds <Plug>Dsurround+ nmap cs <Plug>Csurround+ nmap ys <Plug>Ysurround+ nmap yS <Plug>YSurround+ nmap yss <Plug>Yssurround+ nmap ySs <Plug>YSsurround+ nmap ySS <Plug>YSsurround+ if !hasmapto("<Plug>Vsurround","v") && !hasmapto("<Plug>VSurround","v")+ if exists(":xmap")+ xmap s <Plug>Vsurround+ else+ vmap s <Plug>Vsurround+ endif+ endif+ if !hasmapto("<Plug>VSurround","v")+ if exists(":xmap")+ xmap S <Plug>VSurround+ else+ vmap S <Plug>VSurround+ endif+ endif+ if exists(":xmap")+ xmap gS <Plug>VgSurround+ else+ vmap gS <Plug>VgSurround+ endif+ if !hasmapto("<Plug>Isurround","i") && "" == mapcheck("<C-S>","i")+ imap <C-S> <Plug>Isurround+ endif+ imap <C-G>s <Plug>Isurround+ imap <C-G>S <Plug>ISurround+ "Implemented internally instead+ "imap <C-S><C-S> <Plug>ISurround+endif++let &cpo = s:cpo_save++" vim:set ft=vim sw=2 sts=2 et:
@@ -0,0 +1,7 @@+if did_filetype()+ finish+endif++if getline(1) =~ 'utln.*'+ setfiletype utln+endif
@@ -0,0 +1 @@+au BufWritePost *.go silent !ctags-go
@@ -0,0 +1,2 @@+" au BufWritePost *.rs silent !ctags-rust > /dev/null 2>&1+" au BufWritePost *.rs !ctags-rust
@@ -0,0 +1,382 @@+" Vim syntax file+" Language: JavaScript+" Maintainer: vim-javascript community+" URL: https://github.com/pangloss/vim-javascript++if !exists("main_syntax")+ if version < 600+ syntax clear+ elseif exists("b:current_syntax")+ finish+ endif+ let main_syntax = 'javascript'+endif++" Dollar sign is permitted anywhere in an identifier+if v:version > 704 || v:version == 704 && has('patch1142')+ syntax iskeyword @,48-57,_,192-255,$+else+ setlocal iskeyword+=$+endif++syntax sync fromstart+" TODO: Figure out what type of casing I need+" syntax case ignore+syntax case match++syntax match jsNoise /[:,\;\.]\{1}/+syntax match jsFuncCall /\k\+\%(\s*(\)\@=/+syntax match jsParensError /[)}\]]/++" Program Keywords+syntax keyword jsStorageClass const var let skipwhite skipempty nextgroup=jsDestructuringBlock,jsDestructuringArray,jsVariableDef+syntax match jsVariableDef contained /\k\+/ skipwhite skipempty nextgroup=jsFlowDefinition+syntax keyword jsOperator delete instanceof typeof void new in of skipwhite skipempty nextgroup=@jsExpression+syntax match jsOperator /[\!\|\&\+\-\<\>\=\%\/\*\~\^]\{1}/ skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsBooleanTrue true+syntax keyword jsBooleanFalse false++" Modules+syntax keyword jsImport import skipwhite skipempty nextgroup=jsModuleAsterisk,jsModuleKeyword,jsModuleGroup,jsFlowImportType+syntax keyword jsExport export skipwhite skipempty nextgroup=@jsAll,jsModuleGroup,jsExportDefault,jsModuleAsterisk,jsModuleKeyword+syntax match jsModuleKeyword contained /\k\+/ skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax keyword jsExportDefault contained default skipwhite skipempty nextgroup=@jsExpression+syntax keyword jsExportDefaultGroup contained default skipwhite skipempty nextgroup=jsModuleAs,jsFrom,jsModuleComma+syntax match jsModuleAsterisk contained /\*/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAs,jsFrom+syntax keyword jsModuleAs contained as skipwhite skipempty nextgroup=jsModuleKeyword,jsExportDefaultGroup+syntax keyword jsFrom contained from skipwhite skipempty nextgroup=jsString+syntax match jsModuleComma contained /,/ skipwhite skipempty nextgroup=jsModuleKeyword,jsModuleAsterisk,jsModuleGroup++" Strings, Templates, Numbers+syntax region jsString start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend+syntax region jsString start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend+syntax region jsTemplateString start=+`+ skip=+\\\(`\|$\)+ end=+`+ contains=jsTemplateVar,jsSpecial extend+syntax match jsTaggedTemplate /\k\+\%(`\)\@=/ nextgroup=jsTemplateString+syntax match jsNumber /\<\d\+\%([eE][+-]\=\d\+\)\=\>\|\<0[bB][01]\+\>\|\<0[oO]\o\+\>\|\<0[xX]\x\+\>/+syntax keyword jsNumber Infinity+syntax match jsFloat /\<\%(\d\+\.\d\+\|\d\+\.\|\.\d\+\)\%([eE][+-]\=\d\+\)\=\>/++" Regular Expressions+syntax match jsSpecial contained "\v\\%(0|\\x\x\{2\}\|\\u\x\{4\}\|\c[A-Z]|.)"+syntax region jsTemplateVar contained matchgroup=jsTemplateBraces start=+${+ end=+}+ contains=@jsExpression keepend+syntax region jsRegexpCharClass contained start=+\[+ skip=+\\.+ end=+\]++syntax match jsRegexpBoundary contained "\v%(\<@![\^$]|\\[bB])"+syntax match jsRegexpBackRef contained "\v\\[1-9][0-9]*"+syntax match jsRegexpQuantifier contained "\v\\@<!%([?*+]|\{\d+%(,|,\d+)?})\??"+syntax match jsRegexpOr contained "\v\<@!\|"+syntax match jsRegexpMod contained "\v\(@<=\?[:=!>]"+syntax region jsRegexpGroup contained start="\\\@<!(" skip="\\.\|\[\(\\.\|[^]]\)*\]" end="\\\@<!)" contains=jsRegexpCharClass,@jsRegexpSpecial keepend+if v:version > 703 || v:version == 603 && has("patch1088")+ syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@50<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@50<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+else+ syntax region jsRegexpString start=+\%(\%(\%(return\|case\)\s\+\)\@<=\|\%(\%([)\]"']\|\d\|\w\)\s*\)\@<!\)/\(\*\|/\)\@!+ skip=+\\.\|\[\%(\\.\|[^]]\)*\]+ end=+/[gimy]\{,4}+ contains=jsRegexpCharClass,jsRegexpGroup,@jsRegexpSpecial oneline keepend extend+endif+syntax cluster jsRegexpSpecial contains=jsSpecial,jsRegexpBoundary,jsRegexpBackRef,jsRegexpQuantifier,jsRegexpOr,jsRegexpMod++" Objects+syntax match jsObjectKey contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ contains=jsFunctionKey skipwhite skipempty nextgroup=jsObjectValue+syntax match jsObjectColon contained /:/ skipwhite skipempty+syntax region jsObjectKeyString contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region jsObjectKeyString contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell skipwhite skipempty nextgroup=jsObjectValue+syntax region jsObjectKeyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsObjectValue,jsFuncArgs extend+syntax match jsObjectSeparator contained /,/+syntax region jsObjectValue contained start=/:/ end=/\%(,\|}\)\@=/ contains=jsObjectColon,@jsExpression extend+syntax match jsObjectFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>[\r\n\t ]*(\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax match jsFunctionKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\(\s*:\s*function\s*\)\@=/+syntax match jsObjectMethodType contained /\%(get\|set\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsObjectFuncName+syntax region jsObjectStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue+syntax region jsObjectStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs,jsObjectValue++exe 'syntax keyword jsNull null '.(exists('g:javascript_conceal_null') ? 'conceal cchar='.g:javascript_conceal_null : '')+exe 'syntax keyword jsReturn return contained '.(exists('g:javascript_conceal_return') ? 'conceal cchar='.g:javascript_conceal_return : '').' skipwhite skipempty nextgroup=@jsExpression'+exe 'syntax keyword jsUndefined undefined '.(exists('g:javascript_conceal_undefined') ? 'conceal cchar='.g:javascript_conceal_undefined : '')+exe 'syntax keyword jsNan NaN '.(exists('g:javascript_conceal_NaN') ? 'conceal cchar='.g:javascript_conceal_NaN : '')+exe 'syntax keyword jsPrototype prototype '.(exists('g:javascript_conceal_prototype') ? 'conceal cchar='.g:javascript_conceal_prototype : '')+exe 'syntax keyword jsThis this '.(exists('g:javascript_conceal_this') ? 'conceal cchar='.g:javascript_conceal_this : '')+exe 'syntax keyword jsSuper super contained '.(exists('g:javascript_conceal_super') ? 'conceal cchar='.g:javascript_conceal_super : '')++" Statement Keywords+syntax match jsBlockLabel /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\s*:/ contains=jsNoise skipwhite skipempty nextgroup=jsBlock+syntax match jsBlockLabelKey contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*\%(;\|\n\)\)\@=/+syntax keyword jsStatement contained with yield debugger+syntax keyword jsStatement contained break continue skipwhite skipempty nextgroup=jsBlockLabelKey+syntax keyword jsConditional if skipwhite skipempty nextgroup=jsParenIfElse+syntax keyword jsConditional else skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock+syntax keyword jsConditional switch skipwhite skipempty nextgroup=jsParenSwitch+syntax keyword jsRepeat while for skipwhite skipempty nextgroup=jsParenRepeat,jsForAwait+syntax keyword jsDo do skipwhite skipempty nextgroup=jsRepeatBlock+syntax region jsSwitchCase contained matchgroup=jsLabel start=/\<\%(case\|default\)\>/ end=/:\@=/ contains=@jsExpression,jsLabel skipwhite skipempty nextgroup=jsSwitchColon keepend+syntax keyword jsTry try skipwhite skipempty nextgroup=jsTryCatchBlock+syntax keyword jsFinally contained finally skipwhite skipempty nextgroup=jsFinallyBlock+syntax keyword jsCatch contained catch skipwhite skipempty nextgroup=jsParenCatch+syntax keyword jsException throw+syntax keyword jsAsyncKeyword async await+syntax match jsSwitchColon contained /:/ skipwhite skipempty nextgroup=jsSwitchBlock++" Keywords+syntax keyword jsGlobalObjects Array Boolean Date Function Iterator Number Object Symbol Map WeakMap Set RegExp String Proxy Promise Buffer ParallelArray ArrayBuffer DataView Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray JSON Math console document window Intl Collator DateTimeFormat NumberFormat fetch+syntax keyword jsGlobalNodeObjects module exports global process __dirname __filename+syntax match jsGlobalNodeObjects /\<require\>/ containedin=jsFuncCall+syntax keyword jsExceptions Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError+syntax keyword jsBuiltins decodeURI decodeURIComponent encodeURI encodeURIComponent eval isFinite isNaN parseFloat parseInt uneval+" DISCUSS: How imporant is this, really? Perhaps it should be linked to an error because I assume the keywords are reserved?+syntax keyword jsFutureKeys abstract enum int short boolean interface byte long char final native synchronized float package throws goto private transient implements protected volatile double public++" DISCUSS: Should we really be matching stuff like this?+" DOM2 Objects+syntax keyword jsGlobalObjects DOMImplementation DocumentFragment Document Node NodeList NamedNodeMap CharacterData Attr Element Text Comment CDATASection DocumentType Notation Entity EntityReference ProcessingInstruction+syntax keyword jsExceptions DOMException++" DISCUSS: Should we really be matching stuff like this?+" DOM2 CONSTANT+syntax keyword jsDomErrNo INDEX_SIZE_ERR DOMSTRING_SIZE_ERR HIERARCHY_REQUEST_ERR WRONG_DOCUMENT_ERR INVALID_CHARACTER_ERR NO_DATA_ALLOWED_ERR NO_MODIFICATION_ALLOWED_ERR NOT_FOUND_ERR NOT_SUPPORTED_ERR INUSE_ATTRIBUTE_ERR INVALID_STATE_ERR SYNTAX_ERR INVALID_MODIFICATION_ERR NAMESPACE_ERR INVALID_ACCESS_ERR+syntax keyword jsDomNodeConsts ELEMENT_NODE ATTRIBUTE_NODE TEXT_NODE CDATA_SECTION_NODE ENTITY_REFERENCE_NODE ENTITY_NODE PROCESSING_INSTRUCTION_NODE COMMENT_NODE DOCUMENT_NODE DOCUMENT_TYPE_NODE DOCUMENT_FRAGMENT_NODE NOTATION_NODE++" DISCUSS: Should we really be special matching on these props?+" HTML events and internal variables+syntax keyword jsHtmlEvents onblur onclick oncontextmenu ondblclick onfocus onkeydown onkeypress onkeyup onmousedown onmousemove onmouseout onmouseover onmouseup onresize++" Code blocks+syntax region jsBracket matchgroup=jsBrackets start=/\[/ end=/\]/ contains=@jsExpression,jsSpreadExpression extend fold+syntax region jsParen matchgroup=jsParens start=/(/ end=/)/ contains=@jsAll extend fold+syntax region jsParenDecorator contained matchgroup=jsParensDecorator start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc extend fold+syntax region jsParenIfElse contained matchgroup=jsParensIfElse start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsIfElseBlock extend fold+syntax region jsParenRepeat contained matchgroup=jsParensRepeat start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsCommentMisc,jsRepeatBlock extend fold+syntax region jsParenSwitch contained matchgroup=jsParensSwitch start=/(/ end=/)/ contains=@jsAll skipwhite skipempty nextgroup=jsSwitchBlock extend fold+syntax region jsParenCatch contained matchgroup=jsParensCatch start=/(/ end=/)/ skipwhite skipempty nextgroup=jsTryCatchBlock extend fold+syntax region jsFuncArgs contained matchgroup=jsFuncParens start=/(/ end=/)/ contains=jsFuncArgCommas,jsComment,jsFuncArgExpression,jsDestructuringBlock,jsDestructuringArray,jsRestExpression,jsFlowArgumentDef skipwhite skipempty nextgroup=jsCommentFunction,jsFuncBlock,jsFlowReturn extend fold+syntax region jsClassBlock contained matchgroup=jsClassBraces start=/{/ end=/}/ contains=jsClassFuncName,jsClassMethodType,jsArrowFunction,jsArrowFuncArgs,jsComment,jsGenerator,jsDecorator,jsClassProperty,jsClassPropertyComputed,jsClassStringKey,jsAsyncKeyword,jsNoise extend fold+syntax region jsFuncBlock contained matchgroup=jsFuncBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsIfElseBlock contained matchgroup=jsIfElseBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsTryCatchBlock contained matchgroup=jsTryCatchBraces start=/{/ end=/}/ contains=@jsAll,jsBlock skipwhite skipempty nextgroup=jsCatch,jsFinally extend fold+syntax region jsFinallyBlock contained matchgroup=jsFinallyBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsSwitchBlock contained matchgroup=jsSwitchBraces start=/{/ end=/}/ contains=@jsAll,jsBlock,jsSwitchCase extend fold+syntax region jsRepeatBlock contained matchgroup=jsRepeatBraces start=/{/ end=/}/ contains=@jsAll,jsBlock extend fold+syntax region jsDestructuringBlock contained matchgroup=jsDestructuringBraces start=/{/ end=/}/ contains=jsDestructuringProperty,jsDestructuringAssignment,jsDestructuringNoise,jsDestructuringPropertyComputed,jsSpreadExpression,jsComment extend fold+syntax region jsDestructuringArray contained matchgroup=jsDestructuringBraces start=/\[/ end=/\]/ contains=jsDestructuringPropertyValue,jsNoise,jsDestructuringProperty,jsSpreadExpression,jsComment extend fold+syntax region jsObject contained matchgroup=jsObjectBraces start=/{/ end=/}/ contains=jsObjectKey,jsObjectKeyString,jsObjectKeyComputed,jsObjectSeparator,jsObjectFuncName,jsObjectMethodType,jsGenerator,jsComment,jsObjectStringKey,jsSpreadExpression,jsDecorator,jsAsyncKeyword extend fold+syntax region jsBlock matchgroup=jsBraces start=/{/ end=/}/ contains=@jsAll,jsSpreadExpression extend fold+syntax region jsModuleGroup contained matchgroup=jsModuleBraces start=/{/ end=/}/ contains=jsModuleKeyword,jsModuleComma,jsModuleAs,jsComment skipwhite skipempty nextgroup=jsFrom+syntax region jsSpreadExpression contained matchgroup=jsSpreadOperator start=/\.\.\./ end=/[,}\]]\@=/ contains=@jsExpression+syntax region jsRestExpression contained matchgroup=jsRestOperator start=/\.\.\./ end=/[,)]\@=/+syntax region jsTernaryIf matchgroup=jsTernaryIfOperator start=/?/ end=/\%(:\|[\}]\@=\)/ contains=@jsExpression extend skipwhite skipempty nextgroup=@jsExpression++syntax match jsGenerator contained /\*/ skipwhite skipempty nextgroup=jsFuncName,jsFuncArgs+syntax match jsFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>/ skipwhite skipempty nextgroup=jsFuncArgs,jsFlowFunctionGroup+syntax region jsFuncArgExpression contained matchgroup=jsFuncArgOperator start=/=/ end=/[,)]\@=/ contains=@jsExpression extend+syntax match jsFuncArgCommas contained ','+syntax keyword jsArguments contained arguments+syntax keyword jsForAwait contained await skipwhite skipempty nextgroup=jsParenRepeat++" Matches a single keyword argument with no parens+syntax match jsArrowFuncArgs /\k\+\s*\%(=>\)\@=/ skipwhite contains=jsFuncArgs skipwhite skipempty nextgroup=jsArrowFunction extend+" Matches a series of arguments surrounded in parens+syntax match jsArrowFuncArgs /([^()]*)\s*\(=>\)\@=/ contains=jsFuncArgs skipempty skipwhite nextgroup=jsArrowFunction extend++exe 'syntax match jsFunction /\<function\>/ skipwhite skipempty nextgroup=jsGenerator,jsFuncName,jsFuncArgs skipwhite '.(exists('g:javascript_conceal_function') ? 'conceal cchar='.g:javascript_conceal_function : '')+exe 'syntax match jsArrowFunction /=>/ skipwhite skipempty nextgroup=jsFuncBlock,jsCommentFunction '.(exists('g:javascript_conceal_arrow_function') ? 'conceal cchar='.g:javascript_conceal_arrow_function : '')+exe 'syntax match jsArrowFunction /()\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_noarg_arrow_function') ? 'conceal cchar='.g:javascript_conceal_noarg_arrow_function : '').(' contains=jsArrowFuncArgs')+exe 'syntax match jsArrowFunction /_\s*\(=>\)\@=/ skipwhite skipempty nextgroup=jsArrowFunction '.(exists('g:javascript_conceal_underscore_arrow_function') ? 'conceal cchar='.g:javascript_conceal_underscore_arrow_function : '')++" Classes+syntax keyword jsClassKeyword contained class+syntax keyword jsExtendsKeyword contained extends skipwhite skipempty nextgroup=@jsExpression+syntax match jsClassNoise contained /\./+syntax match jsClassMethodType contained /\%(get\|set\|static\)\%( \k\+\)\@=/ skipwhite skipempty nextgroup=jsAsyncKeyword,jsFuncName,jsClassProperty+syntax region jsClassDefinition start=/\<class\>/ end=/\(\<extends\>\s\+\)\@<!{\@=/ contains=jsClassKeyword,jsExtendsKeyword,jsClassNoise,@jsExpression skipwhite skipempty nextgroup=jsCommentClass,jsClassBlock,jsFlowClassGroup+syntax match jsClassProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsClassValue+syntax region jsClassValue contained start=/=/ end=/\%(;\|}\|\n\)\@=/ contains=@jsExpression keepend+syntax region jsClassPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsFuncArgs,jsClassValue extend+syntax match jsClassFuncName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*\>\%(\s*(\)\@=/ skipwhite skipempty nextgroup=jsFuncArgs+syntax region jsClassStringKey contained start=+"+ skip=+\\\("\|$\)+ end=+"\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs+syntax region jsClassStringKey contained start=+'+ skip=+\\\('\|$\)+ end=+'\|$+ contains=jsSpecial,@Spell extend skipwhite skipempty nextgroup=jsFuncArgs++" Destructuring+syntax match jsDestructuringPropertyValue contained /\<[0-9a-zA-Z_$]*\>/+syntax match jsDestructuringProperty contained /\<[0-9a-zA-Z_$]*\>\(\s*=\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValue+syntax match jsDestructuringAssignment contained /\<[0-9a-zA-Z_$]*\>\(\s*:\)\@=/ skipwhite skipempty nextgroup=jsDestructuringValueAssignment+syntax region jsDestructuringValue contained start=/=/ end=/[,}\]]\@=/ contains=@jsExpression extend+syntax region jsDestructuringValueAssignment contained start=/:/ end=/[,}=]\@=/ contains=jsDestructuringPropertyValue,jsDestructuringBlock,jsNoise,jsDestructuringNoise skipwhite skipempty nextgroup=jsDestructuringValue extend+syntax match jsDestructuringNoise contained /[,\[\]]/+syntax region jsDestructuringPropertyComputed contained matchgroup=jsBrackets start=/\[/ end=/]/ contains=@jsExpression skipwhite skipempty nextgroup=jsDestructuringValue,jsDestructuringNoise extend fold++" Comments+syntax keyword jsCommentTodo contained TODO FIXME XXX TBD+syntax region jsComment start=/\/\// end=/$/ contains=jsCommentTodo,@Spell extend keepend+syntax region jsComment start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell fold extend keepend+syntax region jsEnvComment start=/\%^#!/ end=/$/ display++" Specialized Comments - These are special comment regexes that are used in+" odd places that maintain the proper nextgroup functionality. It sucks we+" can't make jsComment a skippable type of group for nextgroup+syntax region jsCommentFunction contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn extend keepend+syntax region jsCommentFunction contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsFuncBlock,jsFlowReturn fold extend keepend+syntax region jsCommentClass contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup extend keepend+syntax region jsCommentClass contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsClassBlock,jsFlowClassGroup fold extend keepend+syntax region jsCommentMisc contained start=/\/\// end=/$/ contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock extend keepend+syntax region jsCommentMisc contained start=/\/\*/ end=/\*\// contains=jsCommentTodo,@Spell skipwhite skipempty nextgroup=jsBlock fold extend keepend++" Decorators+syntax match jsDecorator /^\s*@/ nextgroup=jsDecoratorFunction+syntax match jsDecoratorFunction contained /[a-zA-Z_][a-zA-Z0-9_.]*/ nextgroup=jsParenDecorator++runtime extras/jsdoc.vim+runtime extras/ngdoc.vim++runtime extras/flow.vim++syntax cluster jsExpression contains=jsBracket,jsParen,jsObject,jsTernaryIf,jsTaggedTemplate,jsTemplateString,jsString,jsRegexpString,jsNumber,jsFloat,jsOperator,jsBooleanTrue,jsBooleanFalse,jsNull,jsFunction,jsArrowFunction,jsGlobalObjects,jsExceptions,jsFutureKeys,jsDomErrNo,jsDomNodeConsts,jsHtmlEvents,jsFuncCall,jsUndefined,jsNan,jsPrototype,jsBuiltins,jsNoise,jsClassDefinition,jsArrowFunction,jsArrowFuncArgs,jsParensError,jsComment,jsArguments,jsThis,jsSuper,jsDo+syntax cluster jsAll contains=@jsExpression,jsStorageClass,jsConditional,jsRepeat,jsReturn,jsStatement,jsException,jsTry,jsAsyncKeyword,jsNoise,,jsBlockLabel++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_javascript_syn_inits")+ if version < 508+ let did_javascript_syn_inits = 1+ command -nargs=+ HiLink hi link <args>+ else+ command -nargs=+ HiLink hi def link <args>+ endif+ HiLink jsComment Comment+ HiLink jsEnvComment PreProc+ HiLink jsParensIfElse jsParens+ HiLink jsParensRepeat jsParens+ HiLink jsParensSwitch jsParens+ HiLink jsParensCatch jsParens+ HiLink jsCommentTodo Todo+ HiLink jsString String+ HiLink jsObjectKeyString String+ HiLink jsTemplateString String+ HiLink jsObjectStringKey String+ HiLink jsClassStringKey String+ HiLink jsTaggedTemplate StorageClass+ HiLink jsTernaryIfOperator Operator+ HiLink jsRegexpString String+ HiLink jsRegexpBoundary SpecialChar+ HiLink jsRegexpQuantifier SpecialChar+ HiLink jsRegexpOr Conditional+ HiLink jsRegexpMod SpecialChar+ HiLink jsRegexpBackRef SpecialChar+ HiLink jsRegexpGroup jsRegexpString+ HiLink jsRegexpCharClass Character+ HiLink jsCharacter Character+ HiLink jsPrototype Special+ HiLink jsConditional Conditional+ HiLink jsBranch Conditional+ HiLink jsLabel Label+ HiLink jsReturn Statement+ HiLink jsRepeat Repeat+ HiLink jsDo Repeat+ HiLink jsStatement Statement+ HiLink jsException Exception+ HiLink jsTry Exception+ HiLink jsFinally Exception+ HiLink jsCatch Exception+ HiLink jsAsyncKeyword Keyword+ HiLink jsForAwait Keyword+ HiLink jsArrowFunction Type+ HiLink jsFunction Type+ HiLink jsGenerator jsFunction+ HiLink jsArrowFuncArgs jsFuncArgs+ HiLink jsFuncName Function+ HiLink jsClassFuncName jsFuncName+ HiLink jsObjectFuncName Function+ HiLink jsArguments Special+ HiLink jsError Error+ HiLink jsParensError Error+ HiLink jsOperator Operator+ HiLink jsOf Operator+ HiLink jsStorageClass StorageClass+ HiLink jsClassKeyword Keyword+ HiLink jsExtendsKeyword Keyword+ HiLink jsThis Special+ HiLink jsSuper Constant+ HiLink jsNan Number+ HiLink jsNull Type+ HiLink jsUndefined Type+ HiLink jsNumber Number+ HiLink jsFloat Float+ HiLink jsBooleanTrue Boolean+ HiLink jsBooleanFalse Boolean+ HiLink jsObjectColon jsNoise+ HiLink jsNoise Noise+ HiLink jsBrackets Noise+ HiLink jsParens Noise+ HiLink jsBraces Noise+ HiLink jsFuncBraces Noise+ HiLink jsFuncParens Noise+ HiLink jsClassBraces Noise+ HiLink jsClassNoise Noise+ HiLink jsIfElseBraces Noise+ HiLink jsTryCatchBraces Noise+ HiLink jsModuleBraces Noise+ HiLink jsObjectBraces Noise+ HiLink jsObjectSeparator Noise+ HiLink jsFinallyBraces Noise+ HiLink jsRepeatBraces Noise+ HiLink jsSwitchBraces Noise+ HiLink jsSpecial Special+ HiLink jsTemplateVar Special+ HiLink jsTemplateBraces Noise+ HiLink jsGlobalObjects Constant+ HiLink jsGlobalNodeObjects Constant+ HiLink jsExceptions Constant+ HiLink jsBuiltins Constant+ HiLink jsImport Include+ HiLink jsExport Include+ HiLink jsExportDefault StorageClass+ HiLink jsExportDefaultGroup jsExportDefault+ HiLink jsModuleAs Include+ HiLink jsModuleComma jsNoise+ HiLink jsModuleAsterisk Noise+ HiLink jsFrom Include+ HiLink jsDecorator Special+ HiLink jsDecoratorFunction Function+ HiLink jsParensDecorator jsParens+ HiLink jsFuncArgOperator jsFuncArgs+ HiLink jsClassProperty jsObjectKey+ HiLink jsSpreadOperator Operator+ HiLink jsRestOperator Operator+ HiLink jsRestExpression jsFuncArgs+ HiLink jsSwitchColon Noise+ HiLink jsClassMethodType Type+ HiLink jsObjectMethodType Type+ HiLink jsClassDefinition jsFuncName+ HiLink jsBlockLabel Identifier+ HiLink jsBlockLabelKey jsBlockLabel++ HiLink jsDestructuringBraces Noise+ HiLink jsDestructuringProperty jsFuncArgs+ HiLink jsDestructuringAssignment jsObjectKey+ HiLink jsDestructuringNoise Noise++ HiLink jsCommentFunction jsComment+ HiLink jsCommentClass jsComment+ HiLink jsCommentMisc jsComment++ HiLink jsDomErrNo Constant+ HiLink jsDomNodeConsts Constant+ HiLink jsDomElemAttrs Label+ HiLink jsDomElemFuncs PreProc++ HiLink jsHtmlEvents Special+ HiLink jsHtmlElemAttrs Label+ HiLink jsHtmlElemFuncs PreProc++ HiLink jsCssStyles Label++ delcommand HiLink+endif++" Define the htmlJavaScript for HTML syntax html.vim+syntax cluster htmlJavaScript contains=@jsAll+syntax cluster javaScriptExpression contains=@jsAll++" Vim's default html.vim highlights all javascript as 'Special'+hi! def link javaScript NONE++let b:current_syntax = "javascript"+if main_syntax == 'javascript'+ unlet main_syntax+endif
@@ -0,0 +1,86 @@+" Vim syntax file+" Language: Mako+" Maintainer: Armin Ronacher <armin.ronacher@active-4.com>+" URL: http://lucumr.pocoo.org/+" Last Change: 2008 September 12+" Version: 0.6.1+"+" Thanks to Brine Rue <brian@lolapps.com> who noticed a bug in the+" delimiter handling.+"+" Known Limitations+" the <%text> block does not have correct attributes++" For version 5.x: Clear all syntax items+" For version 6.x: Quit when a syntax file was already loaded+if version < 600+ syntax clear+elseif exists("b:current_syntax")+ finish+endif++if !exists("main_syntax")+ let main_syntax = "html"+endif++"Source the html syntax file+ru! syntax/html.vim+unlet b:current_syntax++"Put the python syntax file in @pythonTop+syn include @pythonTop syntax/python.vim++" End keywords+syn keyword makoEnd contained endfor endwhile endif endtry enddef++" Block rules+syn region makoLine matchgroup=makoDelim start=#^\s*%# end=#$# keepend contains=@pythonTop,makoEnd+syn region makoBlock matchgroup=makoDelim start=#<%!\?# end=#%># keepend contains=@pythonTop,makoEnd++" Variables+syn region makoNested start="{" end="}" transparent display contained contains=makoNested,@pythonTop+syn region makoVariable matchgroup=makoDelim start=#\${# end=#}# contains=makoNested,@pythonTop++" Comments+syn region makoComment start="^\s*##" end="$"+syn region makoDocComment matchgroup=makoDelim start="<%doc>" end="</%doc>" keepend++" Literal Blocks+syn region makoText matchgroup=makoDelim start="<%text[^>]*>" end="</%text>"++" Attribute Sublexing+syn match makoAttributeKey containedin=makoTag contained "[a-zA-Z_][a-zA-Z0-9_]*="+syn region makoAttributeValue containedin=makoTag contained start=/"/ skip=/\\"/ end=/"/+syn region makoAttributeValue containedin=MakoTag contained start=/'/ skip=/\\'/ end=/'/++" Tags+syn region makoTag matchgroup=makoDelim start="<%\(def\|call\|page\|include\|namespace\|inherit\)\>" end="/\?>"+syn match makoDelim "</%\(def\|call\|namespace\)>"++" Newline Escapes+syn match makoEscape /\\$/++" Default highlighting links+if version >= 508 || !exists("did_mako_syn_inits")+ if version < 508+ let did_mako_syn_inits = 1+ com -nargs=+ HiLink hi link <args>+ else+ com -nargs=+ HiLink hi def link <args>+ endif++ HiLink makoDocComment makoComment+ HiLink makoDefEnd makoDelim++ HiLink makoAttributeKey Type+ HiLink makoAttributeValue String+ HiLink makoText Normal+ HiLink makoDelim Preproc+ HiLink makoEnd Keyword+ HiLink makoComment Comment+ HiLink makoEscape Special++ delc HiLink+endif++let b:current_syntax = "eruby"
@@ -0,0 +1,230 @@+" Vim syntax file+" Language: SML+" Filenames: *.sml *.sig+" Maintainers: Markus Mottl <markus.mottl@gmail.com>+" Fabrizio Zeno Cornelli <zeno@filibusta.crema.unimi.it>+" URL: http://www.ocaml.info/vim/syntax/sml.vim+" Last Change: 2006 Oct 23 - Fixed character highlighting bug (MM)+" 2002 Jun 02 - Fixed small typo (MM)+" 2001 Nov 20 - Fixed small highlighting bug with modules (MM)++" For version 5.x: Clear all syntax items+" For version 6.x: Quit when a syntax file was already loaded+if version < 600+ syntax clear+elseif exists("b:current_syntax")+ finish+endif++" SML is case sensitive.+syn case match++" lowercase identifier - the standard way to match+syn match smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/++syn match smlKeyChar "|"++" Errors+syn match smlBraceErr "}"+syn match smlBrackErr "\]"+syn match smlParenErr ")"+syn match smlCommentErr "\*)"+syn match smlThenErr "\<then\>"++" Error-highlighting of "end" without synchronization:+" as keyword or as error (default)+if exists("sml_noend_error")+ syn match smlKeyword "\<end\>"+else+ syn match smlEndErr "\<end\>"+endif++" Some convenient clusters+syn cluster smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErr++syn cluster smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErr++syn cluster smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod+++" Enclosing delimiters+syn region smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErr+syn region smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}" contains=ALLBUT,@smlContained,smlBraceErr+syn region smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr+syn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr+++" Comments+syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo+syn keyword smlTodo contained TODO FIXME XXX+++" let+syn region smlEnd matchgroup=smlKeyword start="\<let\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" local+syn region smlEnd matchgroup=smlKeyword start="\<local\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" abstype+syn region smlNone matchgroup=smlKeyword start="\<abstype\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" begin+syn region smlEnd matchgroup=smlKeyword start="\<begin\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" if+syn region smlNone matchgroup=smlKeyword start="\<if\>" matchgroup=smlKeyword end="\<then\>" contains=ALLBUT,@smlContained,smlThenErr+++"" Modules++" "struct"+syn region smlStruct matchgroup=smlModule start="\<struct\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++" "sig"+syn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr,smlModule+syn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr++" "open"+syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment++" "structure" - somewhat complicated stuff ;-)+syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef+syn region smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHS+syn region smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1+syn match smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestr++syn region smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestr++syn region smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3+syn region smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\<end\>" contained contains=ALLBUT,@smlContained,smlEndErr,smlModule+syn region smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWith+syn match smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained+syn match smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullMod+syn region smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullMod+syn match smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWith++syn region smlFuncWith start="([^*]"me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStruct+syn region smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr++syn match smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contained+syn region smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWith+syn match smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRest+syn region smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained++" "signature"+syn region smlKeyword start="\<signature\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDef+syn match smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s++syn keyword smlKeyword and andalso case+syn keyword smlKeyword datatype else eqtype+syn keyword smlKeyword exception fn fun handle+syn keyword smlKeyword in infix infixl infixr+syn keyword smlKeyword match nonfix of orelse+syn keyword smlKeyword raise handle type+syn keyword smlKeyword val where while with withtype++syn keyword smlType bool char exn int list option+syn keyword smlType real string unit++syn keyword smlOperator div mod not or quot rem++syn keyword smlBoolean true false+syn match smlConstructor "(\s*)"+syn match smlConstructor "\[\s*\]"+syn match smlConstructor "#\[\s*\]"+syn match smlConstructor "\u\(\w\|'\)*\>"++" Module prefix+syn match smlModPath "\u\(\w\|'\)*\."he=e-1++syn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"++syn match smlCharErr +#"\\\d\d"\|#"\\\d"++syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+++syn match smlFunDef "=>"+syn match smlRefAssign ":="+syn match smlTopStop ";;"+syn match smlOperator "\^"+syn match smlOperator "::"+syn match smlAnyVar "\<_\>"+syn match smlKeyChar "!"+syn match smlKeyChar ";"+syn match smlKeyChar "\*"+syn match smlKeyChar "="++syn match smlNumber "\<-\=\d\+\>"+syn match smlNumber "\<-\=0[x|X]\x\+\>"+syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"++" Synchronization+syn sync minlines=20+syn sync maxlines=500++syn sync match smlEndSync grouphere smlEnd "\<begin\>"+syn sync match smlEndSync groupthere smlEnd "\<end\>"+syn sync match smlStructSync grouphere smlStruct "\<struct\>"+syn sync match smlStructSync groupthere smlStruct "\<end\>"+syn sync match smlSigSync grouphere smlSig "\<sig\>"+syn sync match smlSigSync groupthere smlSig "\<end\>"++" Define the default highlighting.+" For version 5.7 and earlier: only when not done already+" For version 5.8 and later: only when an item doesn't have highlighting yet+if version >= 508 || !exists("did_sml_syntax_inits")+ if version < 508+ let did_sml_syntax_inits = 1+ command -nargs=+ HiLink hi link <args>+ else+ command -nargs=+ HiLink hi def link <args>+ endif++ HiLink smlBraceErr Error+ HiLink smlBrackErr Error+ HiLink smlParenErr Error++ HiLink smlCommentErr Error++ HiLink smlEndErr Error+ HiLink smlThenErr Error++ HiLink smlCharErr Error++ HiLink smlComment Comment++ HiLink smlModPath Include+ HiLink smlModule Include+ HiLink smlModParam1 Include+ HiLink smlModType Include+ HiLink smlMPRestr3 Include+ HiLink smlFullMod Include+ HiLink smlModTypeRestr Include+ HiLink smlWith Include+ HiLink smlMTDef Include++ HiLink smlConstructor Constant++ HiLink smlModPreRHS Keyword+ HiLink smlMPRestr2 Keyword+ HiLink smlKeyword Keyword+ HiLink smlFunDef Keyword+ HiLink smlRefAssign Keyword+ HiLink smlKeyChar Keyword+ HiLink smlAnyVar Keyword+ HiLink smlTopStop Keyword+ HiLink smlOperator Keyword++ HiLink smlBoolean Boolean+ HiLink smlCharacter Character+ HiLink smlNumber Number+ HiLink smlReal Float+ HiLink smlString String+ HiLink smlType Type+ HiLink smlTodo Todo+ HiLink smlEncl Keyword++ delcommand HiLink+endif++let b:current_syntax = "sml"++" vim: ts=8
@@ -0,0 +1,5 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2+setlocal textwidth=79+setlocal smartindent
@@ -0,0 +1,4 @@+source ~/.vim/text.vim+set binary+set noeol+set expandtab
@@ -0,0 +1,3 @@+setlocal tabstop=2+setlocal shiftwidth=2+setlocal softtabstop=2
@@ -0,0 +1,26 @@+function! WinMove(key) + let l:curwin = winnr()+ exec "wincmd " . a:key+ if (l:curwin == winnr()) "we havent moved+ let l:curview = winsaveview()+ if match(a:key, '[jk]') > -1 "were we going up/down+ wincmd s+ else + wincmd v+ endif+ call winrestview(l:curview)+ exec "wincmd " . a:key+ call winrestview(l:curview)+ endif+endfunction+ +map <C-W>h :call WinMove('h')<cr>+map <C-W>k :call WinMove('k')<cr>+map <C-W>l :call WinMove('l')<cr>+map <C-W>j :call WinMove('j')<cr>++map <C-left> :wincmd <<cr>+map <C-right> :wincmd ><cr>+map <C-up> :wincmd +<cr>+map <C-down> :wincmd -<cr>+
@@ -0,0 +1,286 @@+" set runtimepath^=~/.vim/bundle/rust.vim+set nocompatible+set t_Co=256++if $TERM == 'screen-256color'+ colorscheme ron+elseif $TERM == 'linux'+ colorscheme peachpuff+else+ colorscheme summerfruit256+ " let molokai_original=1+ " colorscheme molokai+endif++syntax on++set directory=$HOME/.vim/swapfiles+set synmaxcol=200+set incsearch+set showcmd+set number+set scrolloff=10+set hlsearch+set expandtab+set nosmartindent+set showmatch+set wildmode=list:longest,full+set wildmenu+set hidden+set mouse=a+set formatoptions=tcqrow+set shell=/bin/bash+set clipboard=unnamedplus " Use + register as unnamed register+set foldlevel=99+set spellcapcheck= " Have no need for this.+" Let modelines set things like indentexpr+if has("modelineexpr")+ set modelineexpr+endif+" set autochdir+if exists('+colorcolumn')+ set colorcolumn=80+endif++set tabstop=2+set shiftwidth=2+set softtabstop=2++" The vim latex plugin PKGBUILD says I need this+set grepprg=grep\ -nH\ $*+let g:tex_flavor = "latex"+let g:Tex_DefaultTargetFormat = "pdf"+let g:Tex_MultipleCompileFormats = "dvi,pdf"+let g:Tex_IgnoredWarnings =+ \ "Underfull\n" .+ \ "Overfull\n" .+ \ "specifier changed to\n" .+ \ "You have requested\n" .+ \ "Missing number, treated as zero.\n" .+ \ "There were undefined references\n" .+ \ "Citation %.%# undefined\n" .+ \ "LaTeX Font Warning:\n" .+ \ "Marginpar\n" .+ \ "Empty `thebibliography' environment\n"+let g:Tex_IgnoreLevel = 10+let g:Tex_GotoError = 0++" In case I want to use solarized+let g:solarized_termcolors=256++" Don't outdent PHP tags+let g:PHP_outdentphpescape = 0++" Umm. No.+let g:rust_recommended_style = 0+let g:rustfmt_autosave_if_config_present = 1+let g:rustfmt_command = "rustfmt +stable"++" Don't switch window focus when using HTTP client.+let g:http_client_focus_output_window=0++source ~/.vim/langvars.vim+source ~/.vim/wincmds.vim++filetype plugin indent on++if !exists("b:Comment")+ let b:Comment="" | let b:EndComment=""+endif++fun! RegexLiteral(str)+ return escape(a:str, "*$.^/")+endfun++fun! CommentLines()+ if b:Comment != ""+ exe ":s/^\\(\\s*\\)/\\1".escape(b:Comment, '/')." /e"+ exe ":s/$/ ".escape(b:EndComment, '/')."/e"+ endif+endfun++fun! UncommentLines()+ exe ":s/^\\(\\s*\\)".RegexLiteral(b:Comment)."\\s*/\\1/e"+ exe ":s/\\s*".RegexLiteral(b:EndComment)."\\s*$//e"+endfun++fun! GlobalReplace()+ normal! gv"ry+ let replacement = input("Replace " . @r . " with: ")+ if replacement != ""+ exe "%s/" . @r . "/" . replacement . "/g"+ endif+endfun++fun! Divider(char)+ let len = strlen(getline('.'))+ call append('.', repeat(a:char, len))+ normal j+endfun++fun! StripTrailingWhitespace()+ let l = line(".")+ let c = col(".")+ %s/\s\+$//e+ call cursor(l, c)+endfun++autocmd BufWritePre * :call StripTrailingWhitespace()++map Q :put=''<CR>+map <tab> :tabn<CR>+map <S-tab> :tabp<CR>+map <C-F4> :close<CR>+map <C-n> :tabnew<CR>+"map <Up> gk+"map <Down> gj+map <C-z> :sh<CR>+map <C-s> :w<CR>+map ,, :call CommentLines()<CR>+map ,. :call UncommentLines()<CR>+map ,r :call ReadReport105()<CR>>>Qkgq<CR><CR>+map <C-s> :w<CR><C-l>++map <F2> :source ~/.vimrc<CR>+map <F4> "ayy@a<CR>+map <F5> :w<CR>:make<CR>+map <F6> :filetype detect<CR>+map <F10> :syntax sync fromstart<CR>+map <F12> :source ~/.vim/text.vim<CR>++map \d :read !date +"\%B \%-d, \%Y"<CR>+map \= :call Divider('=')<CR>+map \- :call Divider('-')<CR>+map \~ :call Divider('~')<CR>+nmap \e :Files<CR>+nmap \r :Rg<CR>+vmap \f !par T4 B=.,?_A_a 71qr<CR>+nmap \f <S-v>\f+vmap \g !par T4 B=.,?_A_a 79qr<CR>+nmap \g <S-v>\g+vmap \h !par T8 B=.,?_A_a 79qr<CR>+nmap \h <S-v>\h+map \i :GoImports<CR>++nnoremap <silent> <ESC><ESC> :noh<CR>+vnoremap <silent> & :call GlobalReplace()<CR>+vnoremap * y/<C-R>"<CR>++imap <C-s> <ESC><C-s>+imap <F5> <ESC><F5>++" Use 'very magic' regexes by default. There appears to be no way to set this+" otherwise. 'very magic' basically means 'use extended regexes'.+"+" Turns out, I like plain 'magic', because it reduces the need to use escaping+" a lot more. Blech.+" nnoremap / /\v+" vnoremap / /\v++command! W w !sudo tee % > /dev/null++" Syntastic configuration.+let g:syntastic_python_checkers = ['flake8']+"let g:syntastic_python_pyflakes_exec = 'pyflakes-python2'+"let g:syntastic_python_flake8_exec = 'flake8-python2'+let g:syntastic_python_pyflakes_exec = 'pyflakes'+let g:syntastic_python_flake8_exec = 'flake8'+let g:syntastic_auto_loc_list = 0+let g:go_jump_to_error = 0+let g:go_autodetect_gopath = 0+let g:go_template_autocreate = 0+let g:go_def_mode='gopls'+let g:go_def_mapping_enabled = 1+" let g:syntastic_go_checkers = ['go', 'gofmt', 'golint', 'govet', 'errcheck']+let g:syntastic_go_checkers = []+let g:syntastic_rust_checkers = []+" let g:syntastic_rust_checkers = ['rustc']+" let g:syntastic_rust_rustc_args = '-Zparse-only'+" let g:syntastic_rust_checkers = []++" Pandoc/markdown config.+let g:pandoc#syntax#conceal#use = 0++" Plug config.+call plug#begin('~/.vim/plugged')++" Plug 'autozimu/LanguageClient-neovim', {+ " \ 'branch': 'next',+ " \ 'do': 'bash install.sh',+ " \ }+" let g:LanguageClient_serverCommands = {+ " \ 'rust': ['rustup', 'run', 'stable', 'rls'],+ " \ }++" Plug 'prabirshrestha/async.vim'+" Plug 'prabirshrestha/vim-lsp'+"+" if executable('rls')+ " au User lsp_setup call lsp#register_server({+ " \ 'name': 'rls',+ " \ 'cmd': {server_info->['rustup', 'run', 'stable', 'rls']},+ " \ 'whitelist': ['rust'],+ " \ })+" endif++" The standard Rust vim plugin. There's quite a bit of overlap with ALE here,+" but it has useful settings for indentation and what not.+Plug 'rust-lang/rust.vim'++" This permits easily manipulating the tag stack with a hack. See the Rust+" jump-to-definition key binding for an example.+Plug 'idbrii/vim-tagimposter'++" Bulk renaming of files in vim.+Plug 'qpkorr/vim-renamer'++" TOML syntax support.+Plug 'cespare/vim-toml'++" Go plugin.+Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }++" Syntastic, which drives the Go plugin.+Plug 'vim-syntastic/syntastic'++" FZF plugin for fuzzy searching files.+Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }+Plug 'junegunn/fzf.vim'++" Kind of like Syntastic, but has language server support.+Plug 'dense-analysis/ale'+let g:ale_linters = {+ \ 'rust': ['cargo', 'rls'],+ \ 'go': ['gofmt', 'golint', 'go vet', 'go build', 'gosimple']+ \ }+let g:ale_rust_rls_executable = 'rust-analyzer'+" let g:ale_rust_rls_toolchain = 'stable'+let g:ale_rust_rls_config = {+ \ 'rust': { 'clippy_preference': 'off', 'feature_flags': {'lsp.diagnostics': 0} },+ \ 'feature_flags': { 'lsp.diagnostics': 0 }+ \ }+let g:ale_lint_on_enter = 1+let g:ale_lint_on_filetype_changed = 1+let g:ale_lint_on_save = 1+let g:ale_lint_on_text_changed = 'never'+let g:ale_lint_on_insert_leave = 0+let g:ale_completion_enabled = 0+let g:ale_rust_cargo_default_feature_behavior = 'all'+" N.B. This is the default value, but it serves as a reminder that vim+" on Ubuntu 18.04 is broken. Namely, the cursor disappears on any line+" that echos an error message in the status bar. The way to fix this is to+" install an updated version of vim:+"+" sudo add-apt-repository ppa:jonathonf/vim+" sudo apt-get update+" sudo apt-get upgrade+let g:ale_echo_cursor = 1++" For autowrapping function declarations.+Plug 'FooSoft/vim-argwrap'+nnoremap <silent> \q :ArgWrap<CR>+let g:argwrap_tail_comma = 1++call plug#end()++filetype detect
@@ -0,0 +1,9 @@+:map k <C-Y>+:map j <C-E>+:map <Up> k+:map <Down> j+:map <Left> :bp<CR>+:map <Right> :bn<CR>+:set cmdheight=2+:set shortmess=a+:map q :q!<CR>
.xbindkeysrc
@@ -0,0 +1,83 @@+"video laptop"+ mod1 + mod4 + shift + v++"gmrun"+ mod4 + r++"lock"+ mod4 + l++"dolphin"+ mod4 + e++"terminal -e tmux -u new zsh"+ mod4 + t++"terminal -e tmux -u new zsh"+ mod4 + shift + t++"terminal-tmux-remote nas"+ mod4 + s++"terminal-tmux-remote frink"+ mod4 + h++"terminal -e ssh -A mac -t /usr/local/bin/tmux -u new -A -s remote"+ mod4 + m++"terminal-tmux-remote bs"+ mod4 + d++"terminal -e ssh -A kent -t clones/tmux/tmux -u new -A -s remote"+ mod4 + z++"terminal -e tmux -u new -A -s bpython bpython"+ mod4 + p++"terminal -e tmux -u new -A -s alsamixer alsamixer"+ mod4 + a++"firefox"+ mod4 + b++"firefox --private-window"+ mod4 + shift + b++"firefox --new-window http://gmail.com"+ mod4 + g++"sh /home/andrew/.config/ag/startup/common.xinitrc"+ mod1 + mod4 + shift + s++"ssh-add-keys"+ mod1 + mod4 + space++"pmsleep"+ XF86Launch1++"volume up"+ XF86AudioRaiseVolume++"volume down"+ XF86AudioLowerVolume++"volume mute"+ XF86AudioMute++"volume up"+ mod4 + Tab++"volume down"+ mod4 + shift + Tab++"volume mute"+ mod4 + grave++"brightness inc"+ XF86MonBrightnessUp++"brightness dec"+ XF86MonBrightnessDown++"toggle-tap-to-click"+ mod1 + mod4 + c
.xbindkeysrc.turtle
@@ -0,0 +1,65 @@+"video laptop"+ mod1 + mod4 + shift + v++"gmrun"+ mod4 + r++"lock"+ mod4 + l++"dolphin"+ mod4 + e++"edit_textbuf"+ mod4 + shift + e++"qpdfview /home/andrew/tmp/exercises.pdf"+ mod4 + n++"zathura /home/andrew/data/misc/documents/latexsheet.pdf"+ control + mod1 + mod4 + l++"konsole -e bash"+ mod4 + t++"konsole -e 'ssh nas -t screen -RD'"+ mod4 + s++"konsole -e 'ssh -Y gopher -t screen -RD'"+ mod4 + d++"konsole -e 'ssh kent -t screen -RD'"+ mod4 + z++"konsole -e 'bash -c bpython2'"+ mod4 + p++"konsole -e 'bash -c pynfldb'"+ mod4 + shift + n++"konsole -e alsamixer"+ mod4 + a++"google-chrome"+ mod4 + b++"google-chrome --incognito"+ mod4 + shift + b++"google-chrome --new-window http://gmail.com"+ mod4 + g++"pmsleep"+ XF86Launch1++"sh /home/andrew/.config/ag/startup/common.xinitrc"+ mod1 + mod4 + shift + s++"volume mute"+ XF86AudioMute++"volume up"+ XF86AudioRaiseVolume++"volume down"+ XF86AudioLowerVolume
@@ -0,0 +1,15 @@+clear Lock+keycode 66 = Escape+keycode 104 = Return+add Lock = Scroll_Lock++! 29 = y, 32 = o, 36 = return, 44 = j, 52 = z+!keycode 52 = Return+!keycode 36 = z Z+!+!keycode 36 = Return+!keycode 52 = z Z++clear mod3+add Mod3 = Menu+
@@ -0,0 +1,6 @@+if command -V startx 2>&1 > /dev/null; then+ if [[ -z "$DISPLAY" ]] && [[ "$XDG_VTNR" = 1 ]] && [[ -z "$TMUX" ]]; then+ . ~/.zshrc+ exec ssh-agent startx "$HOME/.config/ag/startup/wingo.xinitrc"+ fi+fi
@@ -0,0 +1,502 @@+#compdef cargo++# Source: https://github.com/robbyrussell/oh-my-zsh/blob/master/plugins/cargo/_cargo++typeset -A opt_args+autoload -U regexp-replace++_cargo() {++_arguments \+ '(- 1 *)'{-h,--help}'[show help message]' \+ '(- 1 *)'{-V,--version}'[show version information]' \+ '(- 1 *)'--list'[list installed commands]' \+ '(- 1 *)'--explain'[Run `rustc --explain CODE`]' \+ '(- 1 *)'{-v,--verbose}'[use verbose output]' \+ '(- 1 *)'--color'[colorization option]' \+ '(- 1 *)'--frozen'[Require Cargo.lock and cache are up to date]' \+ '(- 1 *)'--locked'[Require Cargo.lock is up to date]' \+ '1: :_cargo_cmds' \+ '*:: :->args'++case $state in+ args)+ case $words[1] in+ bench)+ _arguments \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ "${command_scope_spec[@]}" \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--no-default-features[do not build the default features]' \+ '--no-run[compile but do not run]' \+ '(-p,--package)'{-p=,--package=}'[package to run benchmarks for]:packages:_get_package_names' \+ '--target=[target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ build)+ _arguments \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ "${command_scope_spec[@]}" \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--no-default-features[do not build the default features]' \+ '(-p,--package)'{-p=,--package=}'[package to build]:packages:_get_package_names' \+ '--release=[build in release mode]' \+ '--target=[target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ clean)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-p,--package)'{-p=,--package=}'[package to clean]:packages:_get_package_names' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release[whether or not to clean release artifacts]' \+ '--target=[target triple(default:all)]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ doc)+ _arguments \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--no-deps[do not build docs for dependencies]' \+ '--no-default-features[do not build the default features]' \+ '--open[open docs in browser after the build]' \+ '(-p, --package)'{-p,--package}'=[package to document]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release[build artifacts in release mode, with optimizations]' \+ '--target=[build for the target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ fetch)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ generate-lockfile)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ git-checkout)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ 'q(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--reference=[REF]' \+ '--url=[URL]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ help)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '*: :_cargo_cmds' \+ ;;++ init)+ _arguments \+ '--bin[use binary template]' \+ '--vcs:initialize a new repo with a given VCS:(git hg none)' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--name=[set the resulting package name]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ install)+ _arguments \+ '--bin=[only install the specified binary]' \+ '--branch=[branch to use when installing from git]' \+ '--color=:colorization option:(auto always never)' \+ '--debug[build in debug mode instead of release mode]' \+ '--example[install the specified example instead of binaries]' \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '--git=[URL from which to install the crate]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ '--no-default-features[do not build the default features]' \+ '--path=[local filesystem path to crate to install]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--rev=[specific commit to use when installing from git]' \+ '--root=[directory to install packages into]' \+ '--tag=[tag to use when installing from git]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--vers=[version to install from crates.io]' \+ ;;++ locate-project)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ ;;++ login)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--host=[Host to set the token for]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ metadata)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ "--no-deps[output information only about the root package and don't fetch dependencies]" \+ '--no-default-features[do not include the default feature]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '--format-version=[format version(default: 1)]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ new)+ _arguments \+ '--bin[use binary template]' \+ '--vcs:initialize a new repo with a given VCS:(git hg none)' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--name=[set the resulting package name]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ owner)+ _arguments \+ '(-a, --add)'{-a,--add}'[add owner LOGIN]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--index[registry index]' \+ '(-l, --list)'{-l,--list}'[list owners of a crate]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-r, --remove)'{-r,--remove}'[remove owner LOGIN]' \+ '--token[API token to use when authenticating]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ package)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-l, --list)'{-l,--list}'[print files included in a package without making one]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--no-metadata[ignore warnings about a lack of human-usable metadata]' \+ '--no-verify[do not build to verify contents]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ pkgid)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ publish)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--host=[Host to set the token for]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--no-verify[Do not verify tarball until before publish]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--token[token to use when uploading]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ read-manifest)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ run)+ _arguments \+ '--example=[name of the bin target]' \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--bin=[name of the bin target]' \+ '--no-default-features[do not build the default features]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release=[build in release mode]' \+ '--target=[target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ '*: :_normal' \+ ;;++ rustc)+ _arguments \+ '--color=:colorization option:(auto always never)' \+ '--features=[features to compile for the package]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'=[number of parallel jobs, defaults to # of CPUs]' \+ '--manifest-path=[path to the manifest to fetch dependencies for]' \+ '--no-default-features[do not compile default features for the package]' \+ '(-p, --package)'{-p,--package}'=[profile to compile for]' \+ '--profile=[profile to build the selected target for]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release[build artifacts in release mode, with optimizations]' \+ '--target=[target triple which compiles will be for]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ "${command_scope_spec[@]}" \+ ;;++ rustdoc)+ _arguments \+ '--color=:colorization option:(auto always never)' \+ '--features=[space-separated list of features to also build]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'=[number of parallel jobs, defaults to # of CPUs]' \+ '--manifest-path=[path to the manifest to document]' \+ '--no-default-features[do not build the `default` feature]' \+ '--open[open the docs in a browser after the operation]' \+ '(-p, --package)'{-p,--package}'=[package to document]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release[build artifacts in release mode, with optimizations]' \+ '--target=[build for the target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ "${command_scope_spec[@]}" \+ ;;++ search)+ _arguments \+ '--color=:colorization option:(auto always never)' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--host=[host of a registry to search in]' \+ '--limit=[limit the number of results]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ ;;++ test)+ _arguments \+ '--features=[space separated feature list]' \+ '--all-features[enable all available features]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-j, --jobs)'{-j,--jobs}'[number of parallel jobs, defaults to # of CPUs]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '--test=[test name]: :_test_names' \+ '--no-default-features[do not build the default features]' \+ '--no-fail-fast[run all tests regardless of failure]' \+ '--no-run[compile but do not run]' \+ '(-p,--package)'{-p=,--package=}'[package to run tests for]:packages:_get_package_names' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--release[build artifacts in release mode, with optimizations]' \+ '--target=[target triple]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ '1: :_test_names' \+ ;;++ uninstall)+ _arguments \+ '--bin=[only uninstall the binary NAME]' \+ '--color=:colorization option:(auto always never)' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-q, --quiet)'{-q,--quiet}'[less output printed to stdout]' \+ '--root=[directory to uninstall packages from]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ ;;++ update)+ _arguments \+ '--aggressive=[force dependency update]' \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-p,--package)'{-p=,--package=}'[package to update]:packages:__get_package_names' \+ '--precise=[update single dependency to PRECISE]: :' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ verify-project)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--manifest-path=[path to manifest]: :_files -/' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ version)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ ;;++ yank)+ _arguments \+ '(-h, --help)'{-h,--help}'[show help message]' \+ '--index[registry index]' \+ '(-q, --quiet)'{-q,--quiet}'[no output printed to stdout]' \+ '--token[API token to use when authenticating]' \+ '--undo[undo a yank, putting a version back into the index]' \+ '(-v, --verbose)'{-v,--verbose}'[use verbose output]' \+ '--color=:colorization option:(auto always never)' \+ '--vers[yank version]' \+ ;;+ esac+ ;;+esac+}++_cargo_cmds(){+local -a commands;commands=(+'bench:execute all benchmarks of a local package'+'build:compile the current project'+'clean:remove generated artifacts'+'doc:build package documentation'+'fetch:fetch package dependencies'+'generate-lockfile:create lockfile'+'git-checkout:git checkout'+'help:get help for commands'+'init:create new project in current directory'+'install:install a Rust binary'+'locate-project:print "Cargo.toml" location'+'login:login to remote server'+'metadata:the metadata for a project in json'+'new:create a new project'+'owner:manage the owners of a crate on the registry'+'package:assemble local package into a distributable tarball'+'pkgid:print a fully qualified package specification'+'publish:upload package to the registry'+'read-manifest:print manifest in JSON format'+'run:run the main binary of the local package'+'rustc:compile a package and all of its dependencies'+'rustdoc:build documentation for a package'+'search:search packages on crates.io'+'test:execute all unit and tests of a local package'+'uninstall:remove a Rust binary'+'update:update dependencies'+'verify-project:check Cargo.toml'+'version:show version information'+'yank:remove pushed file from index'+)+_describe 'command' commands++}+++#FIXME: Disabled until fixed+#gets package names from the manifest file+_get_package_names()+{+}++#TODO:see if it makes sense to have 'locate-project' to have non-json output.+#strips package name from json stuff+_locate_manifest(){+local manifest=`cargo locate-project 2>/dev/null`+regexp-replace manifest '\{"root":"|"\}' ''+echo $manifest+}++# Extracts the values of "name" from the array given in $1 and shows them as+# command line options for completion+_get_names_from_array()+{+ local -a filelist;+ local manifest=$(_locate_manifest)+ if [[ -z $manifest ]]; then+ return 0+ fi++ local last_line+ local -a names;+ local in_block=false+ local block_name=$1+ names=()+ while read line+ do+ if [[ $last_line == "[[$block_name]]" ]]; then+ in_block=true+ else+ if [[ $last_line =~ '.*\[\[.*' ]]; then+ in_block=false+ fi+ fi++ if [[ $in_block == true ]]; then+ if [[ $line =~ '.*name.*=' ]]; then+ regexp-replace line '^.*name *= *|"' ""+ names+=$line+ fi+ fi++ last_line=$line+ done < $manifest+ _describe $block_name names++}++#Gets the test names from the manifest file+_test_names()+{+ _get_names_from_array "test"+}++#Gets the bench names from the manifest file+_benchmark_names()+{+ _get_names_from_array "bench"+}++# These flags are mutally exclusive specifiers for the scope of a command; as+# they are used in multiple places without change, they are expanded into the+# appropriate command's `_arguments` where appropriate.+set command_scope_spec+command_scope_spec=(+ '(--bin --example --test --lib)--bench=[benchmark name]: :_benchmark_names'+ '(--bench --bin --test --lib)--example=[example name]'+ '(--bench --example --test --lib)--bin=[binary name]'+ '(--bench --bin --example --test)--lib=[library name]'+ '(--bench --bin --example --lib)--test=[test name]'+)+++_cargo
@@ -0,0 +1,638 @@+#compdef rg++##+# zsh completion function for ripgrep+#+# Run ci/test-complete after building to ensure that the options supported by+# this function stay in synch with the `rg` binary.+#+# For convenience, a completion reference guide is included at the bottom of+# this file.+#+# Originally based on code from the zsh-users project — see copyright notice+# below.++_rg() {+ local curcontext=$curcontext no='!' descr ret=1+ local -a context line state state_descr args tmp suf+ local -A opt_args++ # ripgrep has many options which negate the effect of a more common one — for+ # example, `--no-column` to negate `--column`, and `--messages` to negate+ # `--no-messages`. There are so many of these, and they're so infrequently+ # used, that some users will probably find it irritating if they're completed+ # indiscriminately, so let's not do that unless either the current prefix+ # matches one of those negation options or the user has the `complete-all`+ # style set. Note that this prefix check has to be updated manually to account+ # for all of the potential negation options listed below!+ if+ # We also want to list all of these options during testing+ [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] ||+ # (--[imnp]* => --ignore*, --messages, --no-*, --pcre2-unicode)+ [[ $PREFIX$SUFFIX == --[imnp]* ]] ||+ zstyle -t ":complete:$curcontext:*" complete-all+ then+ no=+ fi++ # We make heavy use of argument groups here to prevent the option specs from+ # growing unwieldy. These aren't supported in zsh <5.4, though, so we'll strip+ # them out below if necessary. This makes the exclusions inaccurate on those+ # older versions, but oh well — it's not that big a deal+ args=(+ + '(exclusive)' # Misc. fully exclusive options+ '(: * -)'{-h,--help}'[display help information]'+ '(: * -)'{-V,--version}'[display version information]'+ '(: * -)'--pcre2-version'[print the version of PCRE2 used by ripgrep, if available]'++ + '(buffered)' # buffering options+ '--line-buffered[force line buffering]'+ $no"--no-line-buffered[don't force line buffering]"+ '--block-buffered[force block buffering]'+ $no"--no-block-buffered[don't force block buffering]"++ + '(case)' # Case-sensitivity options+ {-i,--ignore-case}'[search case-insensitively]'+ {-s,--case-sensitive}'[search case-sensitively]'+ {-S,--smart-case}'[search case-insensitively if pattern is all lowercase]'++ + '(context-a)' # Context (after) options+ '(context-c)'{-A+,--after-context=}'[specify lines to show after each match]:number of lines'++ + '(context-b)' # Context (before) options+ '(context-c)'{-B+,--before-context=}'[specify lines to show before each match]:number of lines'++ + '(context-c)' # Context (combined) options+ '(context-a context-b)'{-C+,--context=}'[specify lines to show before and after each match]:number of lines'++ + '(column)' # Column options+ '--column[show column numbers for matches]'+ $no"--no-column[don't show column numbers for matches]"++ + '(count)' # Counting options+ {-c,--count}'[only show count of matching lines for each file]'+ '--count-matches[only show count of individual matches for each file]'+ '--include-zero[include files with zero matches in summary]'++ + '(encoding)' # Encoding options+ {-E+,--encoding=}'[specify text encoding of files to search]: :_rg_encodings'+ $no'--no-encoding[use default text encoding]'++ + '(engine)' # Engine choice options+ '--engine=[select which regex engine to use]:when:((+ default\:"use default engine"+ pcre2\:"identical to --pcre2"+ auto\:"identical to --auto-hybrid-regex"+ ))'++ + file # File-input options+ '(1)*'{-f+,--file=}'[specify file containing patterns to search for]: :_files'++ + '(file-match)' # Files with/without match options+ '(stats)'{-l,--files-with-matches}'[only show names of files with matches]'+ '(stats)--files-without-match[only show names of files without matches]'++ + '(file-name)' # File-name options+ {-H,--with-filename}'[show file name for matches]'+ {-I,--no-filename}"[don't show file name for matches]"++ + '(file-system)' # File system options+ "--one-file-system[don't descend into directories on other file systems]"+ $no'--no-one-file-system[descend into directories on other file systems]'++ + '(fixed)' # Fixed-string options+ {-F,--fixed-strings}'[treat pattern as literal string instead of regular expression]'+ $no"--no-fixed-strings[don't treat pattern as literal string]"++ + '(follow)' # Symlink-following options+ {-L,--follow}'[follow symlinks]'+ $no"--no-follow[don't follow symlinks]"++ + glob # File-glob options+ '*'{-g+,--glob=}'[include/exclude files matching specified glob]:glob'+ '*--iglob=[include/exclude files matching specified case-insensitive glob]:glob'++ + '(glob-case-insensitive)' # File-glob case sensitivity options+ '--glob-case-insensitive[treat -g/--glob patterns case insensitively]'+ $no'--no-glob-case-insensitive[treat -g/--glob patterns case sensitively]'++ + '(heading)' # Heading options+ '(pretty-vimgrep)--heading[show matches grouped by file name]'+ "(pretty-vimgrep)--no-heading[don't show matches grouped by file name]"++ + '(hidden)' # Hidden-file options+ '--hidden[search hidden files and directories]'+ $no"--no-hidden[don't search hidden files and directories]"++ + '(hybrid)' # hybrid regex options+ '--auto-hybrid-regex[dynamically use PCRE2 if necessary]'+ $no"--no-auto-hybrid-regex[don't dynamically use PCRE2 if necessary]"++ + '(ignore)' # Ignore-file options+ "(--no-ignore-global --no-ignore-parent --no-ignore-vcs --no-ignore-dot)--no-ignore[don't respect ignore files]"+ $no'(--ignore-global --ignore-parent --ignore-vcs --ignore-dot)--ignore[respect ignore files]'++ + '(ignore-file-case-insensitive)' # Ignore-file case sensitivity options+ '--ignore-file-case-insensitive[process ignore files case insensitively]'+ $no'--no-ignore-file-case-insensitive[process ignore files case sensitively]'++ + '(ignore-exclude)' # Local exclude (ignore)-file options+ "--no-ignore-exclude[don't respect local exclude (ignore) files]"+ $no'--ignore-exclude[respect local exclude (ignore) files]'++ + '(ignore-global)' # Global ignore-file options+ "--no-ignore-global[don't respect global ignore files]"+ $no'--ignore-global[respect global ignore files]'++ + '(ignore-parent)' # Parent ignore-file options+ "--no-ignore-parent[don't respect ignore files in parent directories]"+ $no'--ignore-parent[respect ignore files in parent directories]'++ + '(ignore-vcs)' # VCS ignore-file options+ "--no-ignore-vcs[don't respect version control ignore files]"+ $no'--ignore-vcs[respect version control ignore files]'++ + '(require-git)' # git specific settings+ "--no-require-git[don't require git repository to respect gitignore rules]"+ $no'--require-git[require git repository to respect gitignore rules]'++ + '(ignore-dot)' # .ignore options+ "--no-ignore-dot[don't respect .ignore files]"+ $no'--ignore-dot[respect .ignore files]'++ + '(ignore-files)' # custom global ignore file options+ "--no-ignore-files[don't respect --ignore-file flags]"+ $no'--ignore-files[respect --ignore-file files]'++ + '(json)' # JSON options+ '--json[output results in JSON Lines format]'+ $no"--no-json[don't output results in JSON Lines format]"++ + '(line-number)' # Line-number options+ {-n,--line-number}'[show line numbers for matches]'+ {-N,--no-line-number}"[don't show line numbers for matches]"++ + '(line-terminator)' # Line-terminator options+ '--crlf[use CRLF as line terminator]'+ $no"--no-crlf[don't use CRLF as line terminator]"+ '(text)--null-data[use NUL as line terminator]'++ + '(max-columns-preview)' # max column preview options+ '--max-columns-preview[show preview for long lines (with -M)]'+ $no"--no-max-columns-preview[don't show preview for long lines (with -M)]"++ + '(max-depth)' # Directory-depth options+ '--max-depth=[specify max number of directories to descend]:number of directories'+ '!--maxdepth=:number of directories'++ + '(messages)' # Error-message options+ '(--no-ignore-messages)--no-messages[suppress some error messages]'+ $no"--messages[don't suppress error messages affected by --no-messages]"++ + '(messages-ignore)' # Ignore-error message options+ "--no-ignore-messages[don't show ignore-file parse error messages]"+ $no'--ignore-messages[show ignore-file parse error messages]'++ + '(mmap)' # mmap options+ '--mmap[search using memory maps when possible]'+ "--no-mmap[don't search using memory maps]"++ + '(multiline)' # Multiline options+ {-U,--multiline}'[permit matching across multiple lines]'+ $no'(multiline-dotall)--no-multiline[restrict matches to at most one line each]'++ + '(multiline-dotall)' # Multiline DOTALL options+ '(--no-multiline)--multiline-dotall[allow "." to match newline (with -U)]'+ $no"(--no-multiline)--no-multiline-dotall[don't allow \".\" to match newline (with -U)]"++ + '(only)' # Only-match options+ {-o,--only-matching}'[show only matching part of each line]'++ + '(passthru)' # Pass-through options+ '(--vimgrep)--passthru[show both matching and non-matching lines]'+ '!(--vimgrep)--passthrough'++ + '(pcre2)' # PCRE2 options+ {-P,--pcre2}'[enable matching with PCRE2]'+ $no'(pcre2-unicode)--no-pcre2[disable matching with PCRE2]'++ + '(pcre2-unicode)' # PCRE2 Unicode options+ $no'(--no-pcre2 --no-pcre2-unicode)--pcre2-unicode[enable PCRE2 Unicode mode (with -P)]'+ '(--no-pcre2 --pcre2-unicode)--no-pcre2-unicode[disable PCRE2 Unicode mode (with -P)]'++ + '(pre)' # Preprocessing options+ '(-z --search-zip)--pre=[specify preprocessor utility]:preprocessor utility:_command_names -e'+ $no'--no-pre[disable preprocessor utility]'++ + pre-glob # Preprocessing glob options+ '*--pre-glob[include/exclude files for preprocessing with --pre]'++ + '(pretty-vimgrep)' # Pretty/vimgrep display options+ '(heading)'{-p,--pretty}'[alias for --color=always --heading -n]'+ '(heading passthru)--vimgrep[show results in vim-compatible format]'++ + regexp # Explicit pattern options+ '(1 file)*'{-e+,--regexp=}'[specify pattern]:pattern'++ + '(replace)' # Replacement options+ {-r+,--replace=}'[specify string used to replace matches]:replace string'++ + '(sort)' # File-sorting options+ '(threads)--sort=[sort results in ascending order (disables parallelism)]:sort method:((+ none\:"no sorting"+ path\:"sort by file path"+ modified\:"sort by last modified time"+ accessed\:"sort by last accessed time"+ created\:"sort by creation time"+ ))'+ '(threads)--sortr=[sort results in descending order (disables parallelism)]:sort method:((+ none\:"no sorting"+ path\:"sort by file path"+ modified\:"sort by last modified time"+ accessed\:"sort by last accessed time"+ created\:"sort by creation time"+ ))'+ '!(threads)--sort-files[sort results by file path (disables parallelism)]'++ + '(stats)' # Statistics options+ '(--files file-match)--stats[show search statistics]'+ $no"--no-stats[don't show search statistics]"++ + '(text)' # Binary-search options+ {-a,--text}'[search binary files as if they were text]'+ "--binary[search binary files, don't print binary data]"+ $no"--no-binary[don't search binary files]"+ $no"(--null-data)--no-text[don't search binary files as if they were text]"++ + '(threads)' # Thread-count options+ '(sort)'{-j+,--threads=}'[specify approximate number of threads to use]:number of threads'++ + '(trim)' # Trim options+ '--trim[trim any ASCII whitespace prefix from each line]'+ $no"--no-trim[don't trim ASCII whitespace prefix from each line]"++ + type # Type options+ '*'{-t+,--type=}'[only search files matching specified type]: :_rg_types'+ '*--type-add=[add new glob for specified file type]: :->typespec'+ '*--type-clear=[clear globs previously defined for specified file type]: :_rg_types'+ # This should actually be exclusive with everything but other type options+ '(: *)--type-list[show all supported file types and their associated globs]'+ '*'{-T+,--type-not=}"[don't search files matching specified file type]: :_rg_types"++ + '(word-line)' # Whole-word/line match options+ {-w,--word-regexp}'[only show matches surrounded by word boundaries]'+ {-x,--line-regexp}'[only show matches surrounded by line boundaries]'++ + '(unicode)' # Unicode options+ $no'--unicode[enable Unicode mode]'+ '--no-unicode[disable Unicode mode]'++ + '(zip)' # Compression options+ '(--pre)'{-z,--search-zip}'[search in compressed files]'+ $no"--no-search-zip[don't search in compressed files]"++ + misc # Other options — no need to separate these at the moment+ '(-b --byte-offset)'{-b,--byte-offset}'[show 0-based byte offset for each matching line]'+ '--color=[specify when to use colors in output]:when:((+ never\:"never use colors"+ auto\:"use colors or not based on stdout, TERM, etc."+ always\:"always use colors"+ ansi\:"always use ANSI colors (even on Windows)"+ ))'+ '*--colors=[specify color and style settings]: :->colorspec'+ '--context-separator=[specify string used to separate non-continuous context lines in output]:separator'+ $no"--no-context-separator[don't print context separators]"+ '--debug[show debug messages]'+ '--trace[show more verbose debug messages]'+ '--dfa-size-limit=[specify upper size limit of generated DFA]:DFA size (bytes)'+ "(1 stats)--files[show each file that would be searched (but don't search)]"+ '*--ignore-file=[specify additional ignore file]:ignore file:_files'+ '(-v --invert-match)'{-v,--invert-match}'[invert matching]'+ '(-M --max-columns)'{-M+,--max-columns=}'[specify max length of lines to print]:number of bytes'+ '(-m --max-count)'{-m+,--max-count=}'[specify max number of matches per file]:number of matches'+ '--max-filesize=[specify size above which files should be ignored]:file size (bytes)'+ "--no-config[don't load configuration files]"+ '(-0 --null)'{-0,--null}'[print NUL byte after file names]'+ '--path-separator=[specify path separator to use when printing file names]:separator'+ '(-q --quiet)'{-q,--quiet}'[suppress normal output]'+ '--regex-size-limit=[specify upper size limit of compiled regex]:regex size (bytes)'+ '*'{-u,--unrestricted}'[reduce level of "smart" searching]'++ + operand # Operands+ '(--files --type-list file regexp)1: :_guard "^-*" pattern'+ '(--type-list)*: :_files'+ )++ # This is used with test-complete to verify that there are no options+ # listed in the help output that aren't also defined here+ [[ $_RG_COMPLETE_LIST_ARGS == (1|t*|y*) ]] && {+ print -rl - $args+ return 0+ }++ # Strip out argument groups where unsupported (see above)+ [[ $ZSH_VERSION == (4|5.<0-3>)(.*)# ]] &&+ args=( ${(@)args:#(#i)(+|[a-z0-9][a-z0-9_-]#|\([a-z0-9][a-z0-9_-]#\))} )++ _arguments -C -s -S : $args && ret=0++ case $state in+ colorspec)+ if [[ ${IPREFIX#--*=}$PREFIX == [^:]# ]]; then+ suf=( -qS: )+ tmp=(+ 'column:specify coloring for column numbers'+ 'line:specify coloring for line numbers'+ 'match:specify coloring for match text'+ 'path:specify coloring for file names'+ )+ descr='color/style type'+ elif [[ ${IPREFIX#--*=}$PREFIX == (column|line|match|path):[^:]# ]]; then+ suf=( -qS: )+ tmp=(+ 'none:clear color/style for type'+ 'bg:specify background color'+ 'fg:specify foreground color'+ 'style:specify text style'+ )+ descr='color/style attribute'+ elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:(bg|fg):[^:]# ]]; then+ tmp=( black blue green red cyan magenta yellow white )+ descr='color name or r,g,b'+ elif [[ ${IPREFIX#--*=}$PREFIX == [^:]##:style:[^:]# ]]; then+ tmp=( {,no}bold {,no}intense {,no}underline )+ descr='style name'+ else+ _message -e colorspec 'no more arguments'+ fi++ (( $#tmp )) && {+ compset -P '*:'+ _describe -t colorspec $descr tmp $suf && ret=0+ }+ ;;++ typespec)+ if compset -P '[^:]##:include:'; then+ _sequence -s , _rg_types && ret=0+ # @todo This bit in particular could be better, but it's a little+ # complex, and attempting to solve it seems to run us up against a crash+ # bug — zsh # 40362+ elif compset -P '[^:]##:'; then+ _message 'glob or include directive' && ret=1+ elif [[ ! -prefix *:* ]]; then+ _rg_types -qS : && ret=0+ fi+ ;;+ esac++ return ret+}++# Complete encodings+_rg_encodings() {+ local -a expl+ local -aU _encodings++ # This is impossible to read, but these encodings rarely if ever change, so it+ # probably doesn't matter. They are derived from the list given here:+ # https://encoding.spec.whatwg.org/#concept-encoding-get+ _encodings=(+ {{,us-}ascii,arabic,chinese,cyrillic,greek{,8},hebrew,korean}+ logical visual mac {,cs}macintosh x-mac-{cyrillic,roman,ukrainian}+ 866 ibm{819,866} csibm866+ big5{,-hkscs} {cn-,cs}big5 x-x-big5+ cp{819,866,125{0..8}} x-cp125{0..8}+ csiso2022{jp,kr} csiso8859{6,8}{e,i}+ csisolatin{{1..6},9} csisolatin{arabic,cyrillic,greek,hebrew}+ ecma-{114,118} asmo-708 elot_928 sun_eu_greek+ euc-{jp,kr} x-euc-jp cseuckr cseucpkdfmtjapanese+ {,x-}gbk csiso58gb231280 gb18030 {,cs}gb2312 gb_2312{,-80} hz-gb-2312+ iso-2022-{cn,cn-ext,jp,kr}+ iso8859{,-}{{1..11},13,14,15}+ iso-8859-{{1..11},{6,8}-{e,i},13,14,15,16} iso_8859-{{1..9},15}+ iso_8859-{1,2,6,7}:1987 iso_8859-{3,4,5,8}:1988 iso_8859-9:1989+ iso-ir-{58,100,101,109,110,126,127,138,144,148,149,157}+ koi{,8,8-r,8-ru,8-u,8_r} cskoi8r+ ks_c_5601-{1987,1989} ksc{,_}5691 csksc56011987+ latin{1..6} l{{1..6},9}+ shift{-,_}jis csshiftjis {,x-}sjis ms_kanji ms932+ utf{,-}8 utf-16{,be,le} unicode-1-1-utf-8+ windows-{31j,874,949,125{0..8}} dos-874 tis-620 ansi_x3.4-1968+ x-user-defined auto none+ )++ _wanted encodings expl encoding compadd -a "$@" - _encodings+}++# Complete file types+_rg_types() {+ local -a expl+ local -aU _types++ _types=( ${(@)${(f)"$( _call_program types rg --type-list )"}%%:*} )++ _wanted types expl 'file type' compadd -a "$@" - _types+}++_rg "$@"++################################################################################+# ZSH COMPLETION REFERENCE+#+# For the convenience of developers who aren't especially familiar with zsh+# completion functions, a brief reference guide follows. This is in no way+# comprehensive; it covers just enough of the basic structure, syntax, and+# conventions to help someone make simple changes like adding new options. For+# more complete documentation regarding zsh completion functions, please see the+# following:+#+# * http://zsh.sourceforge.net/Doc/Release/Completion-System.html+# * https://github.com/zsh-users/zsh/blob/master/Etc/completion-style-guide+#+# OVERVIEW+#+# Most zsh completion functions are defined in terms of `_arguments`, which is a+# shell function that takes a series of argument specifications. The specs for+# `rg` are stored in an array, which is common for more complex functions; the+# elements of the array are passed to `_arguments` on invocation.+#+# ARGUMENT-SPECIFICATION SYNTAX+#+# The following is a contrived example of the argument specs for a simple tool:+#+# '(: * -)'{-h,--help}'[display help information]'+# '(-q -v --quiet --verbose)'{-q,--quiet}'[decrease output verbosity]'+# '!(-q -v --quiet --verbose)--silent'+# '(-q -v --quiet --verbose)'{-v,--verbose}'[increase output verbosity]'+# '--color=[specify when to use colors]:when:(always never auto)'+# '*:example file:_files'+#+# Although there may appear to be six specs here, there are actually nine; we+# use brace expansion to combine specs for options that go by multiple names,+# like `-q` and `--quiet`. This is customary, and ties in with the fact that zsh+# merges completion possibilities together when they have the same description.+#+# The first line defines the option `-h`/`--help`. With most tools, it isn't+# useful to complete anything after `--help` because it effectively overrides+# all others; the `(: * -)` at the beginning of the spec tells zsh not to+# complete any other operands (`:` and `*`) or options (`-`) after this one has+# been used. The `[...]` at the end associates a description with `-h`/`--help`;+# as mentioned, zsh will see the identical descriptions and merge these options+# together when offering completion possibilities.+#+# The next line defines `-q`/`--quiet`. Here we don't want to suppress further+# completions entirely, but we don't want to offer `-q` if `--quiet` has been+# given (since they do the same thing), nor do we want to offer `-v` (since it+# doesn't make sense to be quiet and verbose at the same time). We don't need to+# tell zsh not to offer `--quiet` a second time, since that's the default+# behaviour, but since this line expands to two specs describing `-q` *and*+# `--quiet` we do need to explicitly list all of them here.+#+# The next line defines a hidden option `--silent` — maybe it's a deprecated+# synonym for `--quiet`. The leading `!` indicates that zsh shouldn't offer this+# option during completion. The benefit of providing a spec for an option that+# shouldn't be completed is that, if someone *does* use it, we can correctly+# suppress completion of other options afterwards.+#+# The next line defines `-v`/`--verbose`; this works just like `-q`/`--quiet`.+#+# The next line defines `--color`. In this example, `--color` doesn't have a+# corresponding short option, so we don't need to use brace expansion. Further,+# there are no other options it's exclusive with (just itself), so we don't need+# to define those at the beginning. However, it does take a mandatory argument.+# The `=` at the end of `--color=` indicates that the argument may appear either+# like `--color always` or like `--color=always`; this is how most GNU-style+# command-line tools work. The corresponding short option would normally use `+`+# — for example, `-c+` would allow either `-c always` or `-calways`. For this+# option, the arguments are known ahead of time, so we can simply list them in+# parentheses at the end (`when` is used as the description for the argument).+#+# The last line defines an operand (a non-option argument). In this example, the+# operand can be used any number of times (the leading `*`), and it should be a+# file path, so we tell zsh to call the `_files` function to complete it. The+# `example file` in the middle is the description to use for this operand; we+# could use a space instead to accept the default provided by `_files`.+#+# GROUPING ARGUMENT SPECIFICATIONS+#+# Newer versions of zsh support grouping argument specs together. All specs+# following a `+` and then a group name are considered to be members of the+# named group. Grouping is useful mostly for organisational purposes; it makes+# the relationship between different options more obvious, and makes it easier+# to specify exclusions.+#+# We could rewrite our example above using grouping as follows:+#+# '(: * -)'{-h,--help}'[display help information]'+# '--color=[specify when to use colors]:when:(always never auto)'+# '*:example file:_files'+# + '(verbosity)'+# {-q,--quiet}'[decrease output verbosity]'+# '!--silent'+# {-v,--verbose}'[increase output verbosity]'+#+# Here we take advantage of a useful feature of spec grouping — when the group+# name is surrounded by parentheses, as in `(verbosity)`, it tells zsh that all+# of the options in that group are exclusive with each other. As a result, we+# don't need to manually list out the exclusions at the beginning of each+# option.+#+# Groups can also be referred to by name in other argument specs; for example:+#+# '(xyz)--aaa' '*: :_files'+# + xyz --xxx --yyy --zzz+#+# Here we use the group name `xyz` to tell zsh that `--xxx`, `--yyy`, and+# `--zzz` are not to be completed after `--aaa`. This makes the exclusion list+# much more compact and reusable.+#+# CONVENTIONS+#+# zsh completion functions generally adhere to the following conventions:+#+# * Use two spaces for indentation+# * Combine specs for options with different names using brace expansion+# * In combined specs, list the short option first (as in `{-a,--text}`)+# * Use `+` or `=` as described above for options that take arguments+# * Provide a description for all options, option-arguments, and operands+# * Capitalise/punctuate argument descriptions as phrases, not complete+# sentences — 'display help information', never 'Display help information.'+# (but still capitalise acronyms and proper names)+# * Write argument descriptions as verb phrases — 'display x', 'enable y',+# 'use z'+# * Word descriptions to make it clear when an option expects an argument;+# usually this is done with the word 'specify', as in 'specify x' or+# 'use specified x')+# * Write argument descriptions as tersely as possible — for example, articles+# like 'a' and 'the' should be omitted unless it would be confusing+#+# Other conventions currently used by this function:+#+# * Order argument specs alphabetically by group name, then option name+# * Group options that are directly related, mutually exclusive, or frequently+# referenced by other argument specs+# * Use only characters in the set [a-z0-9_-] in group names+# * Order exclusion lists as follows: short options, long options, groups+# * Use American English in descriptions+# * Use 'don't' in descriptions instead of 'do not'+# * Word descriptions for related options as similarly as possible. For example,+# `--foo[enable foo]` and `--no-foo[disable foo]`, or `--foo[use foo]` and+# `--no-foo[don't use foo]`+# * Word descriptions to make it clear when an option only makes sense with+# another option, usually by adding '(with -x)' to the end+# * Don't quote strings or variables unnecessarily. When quotes are required,+# prefer single-quotes to double-quotes+# * Prefix option specs with `$no` when the option serves only to negate the+# behaviour of another option that must be provided explicitly by the user.+# This prevents rarely used options from cluttering up the completion menu+################################################################################++# ------------------------------------------------------------------------------+# Copyright (c) 2011 Github zsh-users - http://github.com/zsh-users+# All rights reserved.+#+# Redistribution and use in source and binary forms, with or without+# modification, are permitted provided that the following conditions are met:+# * Redistributions of source code must retain the above copyright+# notice, this list of conditions and the following disclaimer.+# * Redistributions in binary form must reproduce the above copyright+# notice, this list of conditions and the following disclaimer in the+# documentation and/or other materials provided with the distribution.+# * Neither the name of the zsh-users nor the+# names of its contributors may be used to endorse or promote products+# derived from this software without specific prior written permission.+#+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.+# ------------------------------------------------------------------------------+# Description+# -----------+#+# Completion script for ripgrep+#+# ------------------------------------------------------------------------------+# Authors+# -------+#+# * arcizan <ghostrevery@gmail.com>+# * MaskRay <i@maskray.me>+#+# ------------------------------------------------------------------------------++# Local Variables:+# mode: shell-script+# coding: utf-8-unix+# indent-tabs-mode: nil+# sh-indentation: 2+# sh-basic-offset: 2+# End:+# vim: ft=zsh sw=2 ts=2 et
@@ -0,0 +1,213 @@+# Define aliases and generic shell variables.+[[ -f ~/.pathrc ]] && . ~/.pathrc+is-work && [[ -f ~/work/rc/pathrc ]] && . ~/work/rc/pathrc+[[ -f ~/.aliasrc ]] && . ~/.aliasrc+is-work && [[ -f ~/work/rc/aliasrc ]] && . ~/work/rc/aliasrc+[[ -f ~/.envrc ]] && . ~/.envrc+is-work && [[ -f ~/work/rc/envrc ]] && . ~/work/rc/envrc++# If on a work machine, use special initialization.+is-work && [[ -f ~/work/rc/zshrc ]] && . ~/work/rc/zshrc++# Setup umask.+if is-remote-old; then+ umask 0077+else+ umask 0002+fi++# Disable beeping.+setterm --blength 0 > /dev/null 2>&1+# Dunno what this does.+stty -ixon++# Don't remove a space before the pipe symbol.+ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'++# Setup LS_COLORS.+if cmd-exists dircolors; then+ . <(dircolors)+fi++# Set fpath for custom completions.+fpath=(~/.zsh-complete $fpath)+if [[ -f /usr/local/share/zsh-completions ]]; then+ fpath=(/usr/local/share/zsh-completions $fpath)+fi++# Fix for slow git auto-completion. Based on an SO answer, but refined by dana.+# See: https://superuser.com/questions/458906/zsh-tab-completion-of-git-commands-is-very-slow-how-can-i-turn-it-off+__git_other_files() {+ if [[ "$PWD" = "$HOME" ]]; then+ local -a expl+ _wanted files expl 'other file' _files+ fi+}++# Initialize auto completion and expansion.+zstyle ':completion:*' completer _complete _prefix _files+zstyle ':completion:*' menu select=1+zstyle ':completion:*:descriptions' format 'completing %d:'+zstyle ':completion:*' group-name ''+autoload -Uz compinit+# Only check for changes to completion once a day. If you need to force a+# recheck, just delete ~/.zcompdump.+#+# Also, seemingly, work machines running Ubuntu always needs 'compinit' for+# this to work, so never do the optimization there.+if [[+ -f ~/.zcompdump+ && "$(date +'%j')" == "$(stat -c '%y' ~/.zcompdump | date +'%j')"+ ]]; then+ if is-work; then+ compinit+ else+ compinit -C+ fi+else+ compinit+fi++# Use Emacs keybindings for now.+bindkey -e++# 'Del' should delete the next char.+bindkey '\e[3~' delete-char+# CTRL-LEFT goes backward one word.+bindkey '\e[1;5D' backward-word+# CTRL-RIGHT goes forward one word.+bindkey '\e[1;5C' forward-word+# Home goes to beginning of line.+bindkey '\e[1~' beginning-of-line+# End goes to end of line.+bindkey '\e[4~' end-of-line+# SHIFT-TAB should go backwards during auto-completion.+bindkey '\e[Z' reverse-menu-complete++# Setup history paging. We bind UP/DOWN to a special variant of history+# searching that matches according to prefix (not just the first word).+# This will also move the cursor to the end of the line.+autoload -Uz history-search-end+zle -N history-beginning-search-backward-end history-search-end+zle -N history-beginning-search-forward-end history-search-end+# UP does history prefix search, backwards.+# DOWN does history prefix search, forwards.+if is-work; then+ # For Ubuntu machines, the normal '\u[A' combo doesn't seem to work for+ # arrow keys. It's not clear why. This formulation was taken from:+ # https://github.com/zsh-users/zsh-history-substring-search/issues/92+ bindkey "$terminfo[kcuu1]" history-beginning-search-backward-end+ bindkey "$terminfo[kcud1]" history-beginning-search-forward-end+else+ bindkey '\e[A' history-beginning-search-backward-end+ bindkey '\e[B' history-beginning-search-forward-end+fi++# CTRL-X CTRL-E edits current command in editor.+autoload -Uz edit-command-line+zle -N edit-command-line+bindkey '^x^e' edit-command-line++# Make it so `command $foo` will potential split "$foo" into multiple+# parameters, which is how most other shells work.+setopt shwordsplit++# When a glob doesn't match anything, pass it through to the command unchanged.+# This is useful for remote globbing, e.g., rsync host:~/foo*.+setopt nonomatch++# Append to the history.+setopt appendhistory+# Use the extended history format, which gives timing info.+setopt extendedhistory+# Append to the history after each command runs, including timing info.+setopt incappendhistorytime+# Do not store adjacent duplicate commands.+setopt histignoredups+# Remove superfluous blanks that sometimes make it into my commands.+setopt histreduceblanks+# Commands beginning with a space are forgotten.+setopt histignorespace++# Notify on the completion of background tasks as soon as they finish, instead+# of waiting for the next prompt.+setopt notify++# Don't remove trailing slashs from directory names.+setopt noautoremoveslash+# When completing an unambiguous prefix, show the completions immediately.+setopt nolistambiguous+# Permit completion to happen inside a word, just before the cursor.+setopt completeinword++# Set history file and limits. Make them huge.+HISTFILE=~/.zsh_history+HISTSIZE=100000000+SAVEHIST=100000000++# Set the the built-in time format to be more like bash, with some goodies.+TIMEFMT=$'\nreal\t%*E\nuser\t%*U\nsys\t%*S\nmaxmem\t%M MB\nfaults\t%F'++# Configure the prompt. We keep things simple for PS1, but expend a bit of+# effort to set the window title correctly.+PS1="[%n@%M %1~]$ "+precmd() {+ cwd="$(pwd)"+ title="${cwd/#$HOME/~}"+ echo -n -e "\e]0;$title\007"+}+preexec() {+ cwd="$(pwd)"+ title="${cwd/#$HOME/~} - $1"+ echo -n -e "\e]0;$title\007"+}+autoload -Uz add-zsh-hook+add-zsh-hook -Uz precmd precmd+add-zsh-hook -Uz preexec preexec++# Enable fzf integration.+if [[ -f ~/.fzf.zsh ]]; then+ . ~/.fzf.zsh+else+ fzf="/usr/share/fzf"+ [[ -d "$fzf" ]] && . "$fzf/key-bindings.zsh" && . "$fzf/completion.zsh"+fi++# Enable auto suggestions when typing commands.+zshauto=(+ /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh+ /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh+ "$HOME/clones/install/zsh-autosuggestions/zsh-autosuggestions.zsh"+)+for p in $zshauto; do+ if [[ -f "$p" ]]; then+ . "$p"+ break+ fi+done++# Enable syntax highlighting in the terminal. This must come last.+zshsyntax=(+ /usr/share/zsh/plugins/fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh+ /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+ /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+ /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh+)+for p in $zshsyntax; do+ if [[ -f "$p" ]]; then+ . "$p"+ break+ fi+done++# Add gvm environment. gvm is used for managing Go installations.+if [[ -f ~/.gvm/scripts/gvm ]]; then+ . ~/.gvm/scripts/gvm+fi++# Try to reconnect to ssh agent?+# if is-work; then+ # if ! ssh-add -L > /dev/null 2>&1; then+ # ssh_reagent+ # fi+# fi
etc/libinput/local-overrides.quirks
@@ -0,0 +1,6 @@+[Touchpad pressure override]+MatchUdevType=touchpad+MatchName=*SynPS/2 Synaptics TouchPad+MatchDMIModalias=dmi:*svnSystem76*pvrdarp6*+AttrPressureRange=45:44+AttrPalmPressureThreshold=75