diff --git a/.vim/colors/inkpot.vim b/.vim/colors/inkpot.vim index 341bd51..a158e7b 100644 --- a/.vim/colors/inkpot.vim +++ b/.vim/colors/inkpot.vim @@ -56,7 +56,7 @@ if has("gui_running") hi CursorLine guibg=#2e2e37 hi IncSearch gui=BOLD guifg=#303030 guibg=#cd8b60 - hi Search gui=NONE guifg=#303030 guibg=#cd8b60 + hi Search gui=NONE guifg=#303030 guibg=#ad7b57 hi ErrorMsg gui=BOLD guifg=#ffffff guibg=#ce4e4e hi WarningMsg gui=BOLD guifg=#ffffff guibg=#ce8e4e hi ModeMsg gui=BOLD guifg=#7e7eae guibg=NONE @@ -148,7 +148,7 @@ else endif exec "hi IncSearch cterm=BOLD ctermfg=" . X(80) . " ctermbg=" . X(73) - exec "hi Search cterm=NONE ctermfg=" . X(80) . " ctermbg=" . X(73) + exec "hi Search cterm=NONE ctermfg=" . X(80) . " ctermbg=" . X(52) exec "hi ErrorMsg cterm=BOLD ctermfg=" . X(16) . " ctermbg=" . X(48) exec "hi WarningMsg cterm=BOLD ctermfg=" . X(16) . " ctermbg=" . X(68) exec "hi ModeMsg cterm=BOLD ctermfg=" . X(38) . " ctermbg=" . "NONE" diff --git a/.vimrc b/.vimrc index d7a38c8..6dc2992 100644 --- a/.vimrc +++ b/.vimrc @@ -1,17 +1,19 @@ +scriptencoding utf-8 + "----------------------------------------------------------------------- -"BaSS vimrc based con ciaran +"Hunner's vimrc based on BaSS & ciaran "----------------------------------------------------------------------- "----------------------------------------------------------------------- " terminal setup "----------------------------------------------------------------------- -" Extra terminal things +" Want utf8 at all times set termencoding=utf-8 set encoding=utf-8 - set fenc=utf-8 +" change cursor colour depending upon mode if exists('&t_SI') let &t_SI = "\]12;lightgoldenrod\x7" let &t_EI = "\]12;green\x7" @@ -40,8 +42,7 @@ set shortmess=a " Make backspace delete lots of things set backspace=indent,eol,start -" Create backups -"set backup +" Don't create backups set nobackup " Show us the command we're typing @@ -54,7 +55,7 @@ set showmatch set hlsearch set incsearch -" Selective case insensitivity +" Case insensitivity set ignorecase set infercase @@ -81,8 +82,8 @@ set whichwrap+=<,>,[,] " Use the cool tab complete menu set wildmenu -set wildignore+=*.o,*~ -set suffixes+=.in,.a +set wildignore+=*.o,*~,.lo +set suffixes+=.in,.a,.1 " Allow edit buffers to be hidden set hidden @@ -95,6 +96,9 @@ if has("syntax") syntax on endif +" enable virtual edit in vblock mode, and one past the end +set virtualedit=block,onemore + " Set our fonts if has("gui_kde") set guifont=Terminus/12/-1/5/50/0/0/0/0/0 @@ -128,7 +132,7 @@ set background=dark " set guioptions-=R "end -" By default, go for an indent of 4 tab stuff +" By default, go for an indent of 4 and use spaces set expandtab set shiftwidth=4 set tabstop=4 @@ -142,6 +146,7 @@ inoremap # X# if has("folding") set foldenable set foldmethod=marker + "set foldlevelstart=99 endif " Syntax when printing @@ -166,6 +171,22 @@ set laststatus=2 set statusline= set statusline+=%2*%-3.3n%0*\ " buffer number set statusline+=%f\ " file name +if has("eval") + let g:scm_cache = {} + fun! ScmInfo() + let l:key = getcwd() + if ! has_key(g:scm_cache, l:key) + if (isdirectory(getcwd() . "/.git")) + let g:scm_cache[l:key] = "[" . substitute(readfile(getcwd() . "/.git/HEAD", "", 1)[0], + \ "^.*/", "", "") . "] " + else + let g:scm_cache[l:key] = "" + endif + endif + return g:scm_cache[l:key] + endfun + set statusline+=%{ScmInfo()} " scm info +endif set statusline+=%h%1*%m%r%w%0* " flags set statusline+=\[%{strlen(&ft)?&ft:'none'}, " filetype set statusline+=%{&encoding}, " encoding @@ -203,9 +224,10 @@ endif " Nice window title if has('title') && (has('gui_running') || &title) set titlestring= - set titlestring+=%f\ " file name - set titlestring+=%h%m%r%w " flags - set titlestring+=\ -\ %{v:progname} " program name + set titlestring+=%f\ " file name + set titlestring+=%h%m%r%w " flags + set titlestring+=\ -\ %{v:progname} " program name + set titlestring+=\ -\ %{substitute(getcwd(),\ $HOME,\ '~',\ '')} " working directory endif " If possible, try to use a narrow number column. @@ -223,6 +245,7 @@ endif " Better include path set path+=src/ +let &inc.=' ["<]' " Show tabs and trailing whitespace visually if (&termencoding == "utf-8") || has("gui_running") @@ -238,7 +261,7 @@ else set list listchars=tab:>-,trail:.,extends:> endif endif -map :set nolist listchars +map :set nolist listchars:set noet:set sw=8:set ts=8 " Show lines longer than 80 characters "au BufWinEnter * let w:m1=matchadd('Search', '\%<81v.\%>77v', -1) @@ -270,7 +293,7 @@ if has("eval") " If we're in a wide window, enable line numbers. fun! WindowWidth() if winwidth(0) > 90 - setlocal foldcolumn=1 + setlocal foldcolumn=2 setlocal number else setlocal nonumber @@ -285,9 +308,13 @@ if has("autocmd") autocmd BufRead,BufNewFile *.txt \ set nonumber tw=80 augroup END - augroup content - autocmd! - + augroup helphelp + " For help files, move them to the top window and make + " behave like (jump to tag) + autocmd FileType help :call WindowToTop() + autocmd FileType help nmap + augroup END + augroup interplangs autocmd BufNewFile *.rb 0put ='# vim: set sw=2 sts=2 et tw=80 :' | \ 0put ='#!/usr/bin/env ruby' | set sw=2 sts=2 et tw=80 | \ norm G @@ -298,7 +325,8 @@ if has("autocmd") autocmd BufNewFile,BufRead *.php \ set ai - + augroup END + augroup html autocmd BufNewFile *.htm,*.html \ 0put ='' | \ $put ='' | @@ -314,12 +342,18 @@ if has("autocmd") \ $put ='' | \ $put ='' | \ set sw=2 sts=2 et tw=80 | norm G - + augroup END + augroup autotools autocmd BufNewFile *.hh 0put ='/* vim: set sw=4 sts=4 et foldmethod=syntax : */' | \ 1put ='' | call MakeIncludeGuards() | \ 5put ='#include \"config.h\"' | \ set sw=4 sts=4 et tw=80 | norm G + autocmd BufNewFile *.c 0put ='/* vim: set sw=4 sts=4 et foldmethod=syntax : */' | + \ 1put ='' | 2put ='' | call setline(3, '#include "' . + \ substitute(expand("%:t"), ".c$", ".h", "") . '"') | + \ set sw=4 sts=4 et tw=80 | norm G + autocmd BufNewFile *.cc 0put ='/* vim: set sw=4 sts=4 et foldmethod=syntax : */' | \ 1put ='' | 2put ='' | call setline(3, '#include "' . \ substitute(expand("%:t"), ".cc$", ".hh", "") . '"') | @@ -329,25 +363,26 @@ if has("autocmd") \ 0put ='dnl vim: set sw=8 sts=8 noet :' | \ $put ='' | \ call setline(line('$'), 'AC_INIT([' . substitute(expand('%:p:h'), - \ '^.\{-}/\([^/]\+\)\(/trunk\)\?$', '\1', '') . '], [0.0])') | - \ $put ='AC_PREREQ(2.5)' | + \ '^.\{-}/\([^/]\+\)\(/trunk\)\?$', '\1', '') . '], [0.1], [h.haugen@gmail.com])') | + \ $put ='AC_PREREQ(2.63)' | \ $put ='AC_CONFIG_SRCDIR([])' | \ $put ='AC_CONFIG_AUX_DIR(config)' | - \ $put ='AM_INIT_AUTOMAKE(1.9)' | + \ $put ='AM_INIT_AUTOMAKE([foreign -Wall -Werror 1.10])' | \ $put ='' | \ $put ='dnl check for required programs' | - \ $put ='AC_PROG_CXX' | + \ $put ='AC_PROG_CC dnl CXX' | \ $put ='AC_PROG_INSTALL' | \ $put ='AC_PROG_LN_S' | \ $put ='AC_PROG_RANLIB' | \ $put ='AC_PROG_MAKE_SET' | \ $put ='' | \ $put ='dnl output' | - \ $put ='AM_CONFIG_HEADER(config.h)' | - \ $put ='AC_OUTPUT(' | + \ $put ='AC_CONFIG_HEADERS([config.h])' | + \ $put ='AC_CONFIG_FILES([' | \ $put =' Makefile' | \ $put =' src/Makefile' | - \ $put =' )' | + \ $put ='])' | + \ $put ='AC_OUTPUT' | \ set sw=8 sts=8 noet | \ norm ggjjjjf] @@ -371,14 +406,15 @@ if has("autocmd") \ $put ='}' | \ $put ='' | \ $put ='run mkdir -p config' | - \ $put ='run $(get libtoolize 1.5 ) --copy --force --automake' | + \ $put ='run $(get libtoolize 2.2 ) --copy --force --automake' | \ $put ='rm -f config.cache' | - \ $put ='run $(get aclocal 1.9 )' | - \ $put ='run $(get autoheader 2.59 )' | - \ $put ='run $(get autoconf 2.59 )' | - \ $put ='run $(get automake 1.9 ) -a --copy' | + \ $put ='run $(get aclocal 1.10 )' | + \ $put ='run $(get autoheader 2.63 )' | + \ $put ='run $(get autoconf 2.63 )' | + \ $put ='run $(get automake 1.10 ) -a --copy' | \ set sw=4 sts=4 et tw=80 | \ norm gg=Ggg + autocmd BufWritePost autogen.bash !chmod 744 % autocmd BufNewFile Makefile.am \ 0put ='CLEANFILES = *~' | @@ -386,20 +422,94 @@ if has("autocmd") \ $put ='MAINTAINERCLEANFILES = Makefile.in configure config/* aclocal.m4 \' | \ $put ='' | \ call setline(line('$'), "\t\t\tconfig.h config.h.in") | + \ $put ='SUBDIRS = src' | \ $put ='AUTOMAKE_OPTIONS = foreign dist-bzip2' | \ $put ='EXTRA_DIST = autogen.bash' | + \ $put ='' | + \ $put ='maintainer-clean-local:' | + \ $put =' -rmdir config' | \ else | \ $put ='MAINTAINERCLEANFILES = Makefile.in' | + \ $put ='bin_PROGRAMS = ' . substitute(expand('%:p:h'),'^.\{-}/\([^/]\+\)\(/src\)\?$', '\1', '') | + \ $put = substitute(expand('%:p:h'), '^.\{-}/\([^/]\+\)\(/src\)\?$','\1', '') . '_SOURCES = main.c' | \ endif augroup END + augroup making + try + " if we have a vim which supports QuickFixCmdPost (vim7), + " give us an error window after running make, grep etc, but + " only if results are available. + autocmd QuickFixCmdPost * botright cwindow 5 + + autocmd QuickFixCmdPre make + \ let g:make_start_time=localtime() + + let g:paludis_configure_command = "! ./configure --prefix=/usr --sysconfdir=/etc" . + \ " --localstatedir=/var/lib --enable-qa " . + \ " --enable-ruby --enable-python --enable-vim --enable-bash-completion" . + \ " --enable-zsh-completion --with-repositories=all --with-clients=all --with-environments=all" . + \ " --enable-visibility --enable-gnu-ldconfig --enable-htmltidy" . + \ " --enable-ruby-doc --enable-python-doc --enable-xml" + + " Similarly, try to automatically run ./configure and / or + " autogen if necessary. + autocmd QuickFixCmdPre make + \ if ! filereadable('Makefile') | + \ if ! filereadable("configure") | + \ if filereadable("autogen.bash") | + \ exec "! ./autogen.bash" | + \ elseif filereadable("quagify.sh") | + \ exec "! ./quagify.sh" | + \ endif | + \ endif | + \ if filereadable("configure") | + \ if (isdirectory(getcwd() . "/paludis/util")) | + \ exec g:paludis_configure_command | + \ elseif (match(getcwd(), "libwrapiter") >= 0) | + \ exec "! ./configure --prefix=/usr --sysconfdir=/etc" | + \ else | + \ exec "! ./configure" | + \ endif | + \ endif | + \ endif + + autocmd QuickFixCmdPost make + \ let g:make_total_time=localtime() - g:make_start_time | + \ echo printf("Time taken: %dm%2.2ds", g:make_total_time / 60, + \ g:make_total_time % 60) + + autocmd QuickFixCmdPre * + \ let g:old_titlestring=&titlestring | + \ let &titlestring="[ " . expand("") . " ] " . &titlestring | + \ redraw + + autocmd QuickFixCmdPost * + \ let &titlestring=g:old_titlestring + + if hostname() == "snowmobile" + autocmd QuickFixCmdPre make + \ let g:active_line=getpid() . " vim:" . substitute(getcwd(), "^.*/", "", "") | + \ exec "silent !echo '" . g:active_line . "' >> ~/.config/awesome/active" + + autocmd QuickFixCmdPost make + \ exec "silent !sed -i -e '/^" . getpid() . " /d' ~/.config/awesome/active" + endif + + catch + endtry + augroup END endif "----------------------------------------------------------------------- " mappings "----------------------------------------------------------------------- -nmap :bnext +" Go to buffers +nmap :bprev +nmap :bnext +nmap , :bp +nmap . :bn " v_K is really really annoying vmap K k @@ -414,6 +524,8 @@ endif nmap cwc :cclose nmap cwo :botright copen 5p nmap cn :cnext +nmap - :cnext +nmap cp :cprevious " Annoying default mappings inoremap gk @@ -421,11 +533,21 @@ inoremap gj noremap gk noremap gj +" Better Bépo movement +noremap © h +noremap þ j +noremap ß k +noremap ® l + " Make in normal mode go down a page rather than left a -" character +" character, and backspace the opposite noremap noremap +" Scrolling with arrows controls the window +noremap +noremap + " Useful things from inside imode inoremap w :w inoremap q gq}k$ @@ -435,10 +557,14 @@ inoremap q gq}k$ "imap :silent nohlsearch "nmap :Kwbd "nmap c -"nmap :make check -"nmap :make -"nmap :!svn update -"nmap :!svn status \| grep -v '^?' \| sort -k2 +"nmap :exec "make check TESTS_ENVIRONMENT=true LOG_COMPILER=true XFAIL_TESTS=" +"nmap :exec "make -C " . expand("%:p:h") . " check TESTS_ENVIRONMENT=true LOG_COMPILER=true XFAIL_TESTS=" +nmap :make all-then-check +nmap :exec "make -C " . expand("%:p:h") . " check" +nmap :make +nmap :exec "make -C " . expand("%:p:h") +"nmap :exec "make -C " . expand("%:p:h") . " check SUBDIRS= check_PROGRAMS=" . GetCurrentTest() +" \ . " TESTS=" . GetCurrentTest() " Insert a single char noremap i ir @@ -474,6 +600,9 @@ noremap dbl :g/^$/d:nohls noremap enc :execute \ substitute(":'<,'>s/^.*/#&#/ \| :nohls", "#", input(">"), "g") +" Edit something in the current directory +noremap ed :e =expand("%:p:h")/ + " Enable fancy % matching if has("eval") runtime! macros/matchit.vim @@ -488,28 +617,98 @@ if has("digraphs") endif if has("eval") - " GNU format changelog entry - fun! MakeChangeLogEntry() - norm gg - /^\d - norm 2O - norm k - call setline(line("."), strftime("%Y-%m-%d") . - \ " J. Alberto Suárez López ") - norm 2o - call setline(line("."), "\t* ") - norm $ + " Work out include guard text + fun! IncludeGuardText() + let l:p = substitute(substitute(getcwd(), "/trunk", "", ""), '^.*/', "", "") + let l:t = substitute(expand("%"), "[./]", "_", "g") + return substitute(toupper(l:p . "_GUARD_" . l:t), "-", "_", "g") endfun - noremap cl :call MakeChangeLogEntry() - " command aliases, can't call these until after cmdalias.vim is loaded - au VimEnter * if exists("loaded_cmdalias") | - \ call CmdAlias("mkdir", "!mkdir") | - \ call CmdAlias("cvs", "!cvs") | - \ call CmdAlias("svn", "!svn") | - \ call CmdAlias("commit", "!svn commit -m \"") | - \ call CmdAlias("upload", "make upload") | - \ endif + " Make include guards + fun! MakeIncludeGuards() + norm gg + /^$/ + norm 2O + call setline(line("."), "#ifndef " . IncludeGuardText()) + norm o + call setline(line("."), "#define " . IncludeGuardText() . " 1") + norm G + norm o + call setline(line("."), "#endif") + endfun + noremap ig :call MakeIncludeGuards() +endif + +" fast buffer switching +if v:version >= 700 && has("eval") + let g:switch_header_map = { + \ 'cc': 'hh', + \ 'hh': 'cc', + \ 'c': 'h', + \ 'h': 'c', + \ 'cpp': 'hpp', + \ 'hpp': 'cpp' } + + fun! SwitchTo(f, split) abort + if ! filereadable(a:f) + echoerr "File '" . a:f . "' does not exist" + else + if a:split + new + endif + if 0 != bufexists(a:f) + exec ':buffer ' . bufnr(a:f) + else + exec ':edit ' . a:f + endif + endif + endfun + + fun! SwitchHeader(split) abort + let filename = expand("%:p:r") + let suffix = expand("%:p:e") + if suffix == '' + echoerr "Cannot determine header file (no suffix)" + return + endif + + let new_suffix = g:switch_header_map[suffix] + if new_suffix == '' + echoerr "Don't know how to find the header (suffix is " . suffix . ")" + return + end + + call SwitchTo(filename . '.' . new_suffix, a:split) + endfun + + fun! SwitchTest(split) abort + let filename = expand("%:p:r") + let suffix = expand("%:p:e") + if -1 != match(filename, '_TEST$') + let new_filename = substitute(filename, '_TEST$', '.' . suffix, '') + else + let new_filename = filename . '_TEST.' . suffix + end + call SwitchTo(new_filename, a:split) + endfun + + fun! SwitchMakefile(split) abort + let dirname = expand("%:p:h") + if filereadable(dirname . "/Makefile.am.m4") + call SwitchTo(dirname . "/Makefile.am.m4", a:split) + elseif filereadable(dirname . "/Makefile.am") + call SwitchTo(dirname . "/Makefile.am", a:split) + else + call SwitchTo(dirname . "/Makefile", a:split) + endif + endfun + + noremap sh :call SwitchHeader(0) + noremap st :call SwitchTest(0) + noremap sk :call SwitchMakefile(0) + noremap ssh :call SwitchHeader(1) + noremap sst :call SwitchTest(1) + noremap ssk :call SwitchMakefile(1) endif " super i_c-y / i_c-e @@ -615,6 +814,7 @@ if has("eval") && has("autocmd") autocmd FileType cpp :call abbrev_cpp() augroup END endif +" NB: Need more of these for more than cpp "----------------------------------------------------------------------- " special less.sh and man modes @@ -659,12 +859,6 @@ if has("eval") let ruby_operators=1 let ruby_space_errors=1 - " clojure options - let g:clj_want_gorilla = 1 - let g:clj_highlight_builtins = 1 - let g:clj_highlight_contrib = 1 - let g:clj_paren_rainbow = 1 - " php specific options let php_sql_query=1 let php_htmlInStrings=1 @@ -676,7 +870,8 @@ if has("eval") let Tlist_Compact_Format=1 let Tlist_WinWidth=28 let Tlist_Exit_OnlyWindow=1 - let Tlist_File_Fold_Auto_Close = 1 + let Tlist_File_Fold_Auto_Close=1 + let Tlist_Inc_Winwidth=0 "nnoremap :Tlist " Settings minibufexpl.vim @@ -750,7 +945,7 @@ endif " final commands "----------------------------------------------------------------------- " mio -let Tlist_Ctags_Cmd="/usr/bin/exuberant-ctags" +"let Tlist_Ctags_Cmd="/usr/bin/exuberant-ctags" " plegado ident para python au FileType python set foldmethod=indent " plegado syntax para sgml,htmls,xml y xsl @@ -781,11 +976,11 @@ map :set nu! map ggVGg? map :set encoding=utf-8 | :set fenc=utf-8 map :set encoding=iso8859-15 | :set fenc=iso8859-15 -map :SpellProposeAlternatives -map :SpellCheck -map :let spell_language_list = "english,spanish" -nnoremap :Tlist -nnoremap :TlistSync +"map :SpellProposeAlternatives +"map :SpellCheck +"map :let spell_language_list = "english,spanish" +"nnoremap :Tlist +"nnoremap :TlistSync nnoremap :noh map !!date map :TC @@ -799,9 +994,8 @@ inoremap :syntax sync fromstart syntax sync minlines=200 " Javac -set makeprg=javac\ % -set errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%# -map :make +"set makeprg=javac\ % +"set errorformat=%A%f:%l:\ %m,%-Z%p^,%-C%.%# " CVS nmap cadd CVSAdd diff --git a/.xmonad/xmonad.hs b/.xmonad/xmonad.hs index 41cfe6f..5b49147 100644 --- a/.xmonad/xmonad.hs +++ b/.xmonad/xmonad.hs @@ -68,14 +68,14 @@ mKeys = [ ("M-S-n", sendMessage MirrorShrink ) -- Expand current window , ("M-S-g", warpToCentre >> goToSelected gsConfig ) -- Multimedia - , ("" , spawn "mpc toggle" ) -- play/pause mpd - , ("" , spawn "mpc stop" ) -- stop mpd - , ("" , spawn "mpc prev" ) -- prev song - , ("" , spawn "mpc next" ) -- next song - , ("", spawn "mpc volume -3" ) -- volume down - , ("", spawn "mpc volume +3" ) -- volume up - , ("" , spawn "amixer -q -- sset Headphone togglemute") -- toggle mute - , ("M-" , spawn "amixer -q -- sset Speaker togglemute") + , ("" , spawn "cmus-remote --pause" ) -- play/pause mpd + , ("" , spawn "cmus-remote --stop" ) -- stop mpd + , ("" , spawn "cmus-remote --prev" ) -- prev song + , ("" , spawn "cmus-remote --next" ) -- next song + , ("", spawn "amixer -q set PCM 1-") -- volume down + , ("", spawn "amixer -q set PCM 1+") -- volume up + , ("" , spawn "amixer -q set Headphone toggle") -- toggle mute + , ("M-" , spawn "amixer -q set Speaker toggle") -- Dynamic workspace commands , ("M-S-" , removeWorkspace)