Merge branch 'dmitmel-master'

This commit is contained in:
Keanu Timmermans 2021-03-18 19:20:39 +01:00
commit 5ab08f0f0b
Signed by: keanucode
GPG key ID: A7431C0D513CA93B
8 changed files with 137 additions and 27 deletions

View file

@ -0,0 +1,63 @@
" Based on <https://github.com/kana/vim-textobj-indent/blob/deb76867c302f933c8f21753806cbf2d8461b548/autoload/textobj/indent.vim>
" A motion for moving over enclosing indentation blocks. Primarily intended
" for reverse-engineering CrossCode.
function dotfiles#indent_motion#run(direction)
let l:cursor_linenr = line(".")
let l:max_linenr = line("$")
let l:retry = 0
while l:retry <# 2
let l:retry += 1
let l:base_linenr = l:cursor_linenr
let l:base_indent = 0
while 1 <=# l:base_linenr && l:base_linenr <=# l:max_linenr
let l:base_indent = dotfiles#indent_motion#indent_level_of(l:base_linenr)
if l:base_indent >=# 0
break
endif
let l:base_linenr += a:direction
endwhile
let l:target_linenr = l:base_linenr
let l:curr_linenr = l:base_linenr + a:direction
let l:prev_indent = l:base_indent
while 1 <=# l:curr_linenr && l:curr_linenr <=# l:max_linenr
let l:indent = dotfiles#indent_motion#indent_level_of(l:curr_linenr)
if l:indent >=# 0
if l:indent <# l:base_indent
break
else
let l:target_linenr = l:curr_linenr
endif
elseif l:base_indent ==# 0 && l:prev_indent ==# 0
break
endif
let l:prev_indent = l:indent
let l:curr_linenr += a:direction
endwhile
if l:target_linenr ==# l:cursor_linenr
let l:cursor_linenr += a:direction
if 1 <=# l:cursor_linenr && l:cursor_linenr <=# l:max_linenr
continue
endif
endif
break
endwhile
execute "normal! " . l:target_linenr . "G^"
endfunction
" <https://github.com/kana/vim-textobj-indent/blob/deb76867c302f933c8f21753806cbf2d8461b548/autoload/textobj/indent.vim#L120-L127>
function dotfiles#indent_motion#indent_level_of(linenr)
if getline(a:linenr) ==# ""
return -1
endif
return indent(a:linenr)
endfunction

View file

@ -0,0 +1,6 @@
function dotfiles#utils#array_remove_element(array, element)
let l:index = index(a:array, a:element)
if l:index >= 0
call remove(a:array, l:index)
endif
endfunction

View file

@ -0,0 +1,9 @@
for [s:plug_mapping, s:direction, s:user_mapping] in [["prev", -1, "("], ["next", 1, ")"]]
let s:plug_mapping = "<Plug>dotfiles_indent_motion_".s:plug_mapping
for s:mode in ["n", "v", "o"]
execute s:mode."noremap" "<silent>" s:plug_mapping "<Cmd>call dotfiles#indent_motion#run(".s:direction.")<CR>"
if !empty(s:user_mapping)
execute s:mode."map" s:user_mapping s:plug_mapping
endif
endfor
endfor

View file

@ -106,10 +106,6 @@ set commentstring=//%s
nnoremap <C-n> <C-i> nnoremap <C-n> <C-i>
nnoremap <C-p> <C-o> nnoremap <C-p> <C-o>
nnoremap <leader>kk <Cmd>set keymap&<CR>
nnoremap <leader>kr <Cmd>set keymap=russian-jcuken-custom<CR>
nnoremap <leader>ku <Cmd>set keymap=ukrainian-jcuken-custom<CR>
nnoremap Q <nop> nnoremap Q <nop>
" normal mode " normal mode
@ -138,6 +134,19 @@ set commentstring=//%s
" }}} " }}}
" Keymap switcher {{{
nnoremap <leader>kk <Cmd>set keymap&<CR>
nnoremap <leader>kr <Cmd>set keymap=russian-jcuken-custom<CR>
nnoremap <leader>ku <Cmd>set keymap=ukrainian-jcuken-custom<CR>
nnoremap <C-o> <Cmd>DotfilesSwapKeymaps<CR>
let g:dotfiles_prev_keymap = &keymap
command! -nargs=0 DotfilesSwapKeymaps let [g:dotfiles_prev_keymap, &keymap] = [&keymap, g:dotfiles_prev_keymap]
" }}}
" Search {{{ " Search {{{
" ignore case if the pattern doesn't contain uppercase characters (use '\C' " ignore case if the pattern doesn't contain uppercase characters (use '\C'

View file

@ -36,6 +36,10 @@ nnoremap <silent><expr> <CR> empty(&buftype) ? ":write<bar>wall\<CR>" : "\<CR>"
" Ranger {{{ " Ranger {{{
let g:ranger_replace_netrw = 1 let g:ranger_replace_netrw = 1
let g:ranger_map_keys = 0 let g:ranger_map_keys = 0
" The default path (/tmp/chosenfile) is inaccessible at least on
" Android/Termux, so the tempname() function was chosen because it respects
" $TMPDIR.
let g:ranger_choice_file = tempname()
nnoremap <silent> <Leader>o <Cmd>Ranger<CR> nnoremap <silent> <Leader>o <Cmd>Ranger<CR>
" ranger.vim relies on the Bclose.vim plugin, but I use Bbye.vim, so this " ranger.vim relies on the Bclose.vim plugin, but I use Bbye.vim, so this
" command is here just for compatitabilty " command is here just for compatitabilty

View file

@ -8,6 +8,7 @@
nnoremap <leader>gw :GBrowse<CR> nnoremap <leader>gw :GBrowse<CR>
nnoremap <leader>gW :.GBrowse<CR> nnoremap <leader>gW :.GBrowse<CR>
nnoremap <leader>gc :Git commit % nnoremap <leader>gc :Git commit %
nnoremap <leader>gC :Git commit --amend
nnoremap <leader>gl :Gclog<CR> nnoremap <leader>gl :Gclog<CR>
nnoremap <leader>gp :Git push nnoremap <leader>gp :Git push
" }}} " }}}

View file

@ -70,7 +70,8 @@ export GOPATH=~/go
path_prepend path "$GOPATH/bin" path_prepend path "$GOPATH/bin"
# Rust # Rust
if [[ -f ~/.rustup/settings.toml ]]; then rustup_home="${RUSTUP_HOME:-$HOME/.rustup}"
if [[ -f "$rustup_home"/settings.toml ]]; then
# Make a low-effort attempt at quickly extracting the selected Rust toolchain # Make a low-effort attempt at quickly extracting the selected Rust toolchain
# from rustup's settings. The TOML file is obviously assumed to be well-formed # from rustup's settings. The TOML file is obviously assumed to be well-formed
# and syntactically correct because virtually always it's manipulated with the # and syntactically correct because virtually always it's manipulated with the
@ -78,7 +79,7 @@ if [[ -f ~/.rustup/settings.toml ]]; then
# because Rust toolchain names don't need escaping in strings. # because Rust toolchain names don't need escaping in strings.
# See also <https://github.com/toml-lang/toml/blob/master/toml.abnf>. # See also <https://github.com/toml-lang/toml/blob/master/toml.abnf>.
rust_toolchain="" rust_toolchain=""
< ~/.rustup/settings.toml while IFS= read -r line; do < "$rustup_home"/settings.toml while IFS= read -r line; do
if [[ "$line" =~ '^default_toolchain = "(.+)"$' ]]; then if [[ "$line" =~ '^default_toolchain = "(.+)"$' ]]; then
rust_toolchain="${match[1]}" rust_toolchain="${match[1]}"
break break
@ -88,16 +89,20 @@ if [[ -f ~/.rustup/settings.toml ]]; then
done; unset line done; unset line
if [[ -n "$rust_toolchain" ]]; then if [[ -n "$rust_toolchain" ]]; then
rust_sysroot=~/.rustup/toolchains/"$rust_toolchain" rust_sysroot="$rustup_home"/toolchains/"$rust_toolchain"
# path_append path "$rust_sysroot"/bin # path_append path "$rust_sysroot"/bin
path_prepend fpath "$rust_sysroot"/zsh/site-functions path_prepend fpath "$rust_sysroot"/zsh/site-functions
path_prepend manpath "$rust_sysroot"/share/man path_prepend manpath "$rust_sysroot"/share/man
path_prepend ld_library_path "$rust_sysroot"/lib
unset rust_sysroot
fi fi
unset rust_toolchain for rust_sysroot in "$rustup_home"/toolchains/*(/); do
# The filenames of all libraries in toolchain dirs are suffixed with their
# build hashes or the compiler identifier, so in practice conflicts are
# insanely unlikely.
path_prepend ld_library_path "$rust_sysroot"/lib
done
fi fi
unset rustup_home rust_toolchain rust_sysroot
path_prepend path ~/.cargo/bin path_prepend path ~/.cargo/bin

View file

@ -49,7 +49,7 @@ _plugin completions 'zsh-users/zsh-completions' "$_checkout_latest_version"
# Oh My Zsh {{{ # Oh My Zsh {{{
omz_features=(key-bindings termsupport) omz_features=(key-bindings termsupport)
omz_plugins=(git extract fasd) omz_plugins=(git)
_plugin ohmyzsh 'ohmyzsh/ohmyzsh' \ _plugin ohmyzsh 'ohmyzsh/ohmyzsh' \
load='lib/'${^omz_features}'.zsh' \ load='lib/'${^omz_features}'.zsh' \
@ -64,22 +64,35 @@ _plugin completions 'zsh-users/zsh-completions' "$_checkout_latest_version"
# fasd {{{ # fasd {{{
#unalias j if command_exists fasd; then
#j() { # Initialization taken from <https://github.com/ohmyzsh/ohmyzsh/blob/6fbad5bf72fad4ecf30ba4d4ffee62bac582f0ed/plugins/fasd/fasd.plugin.zsh>
# local _fasd_ret fasd_cache="${ZSH_CACHE_DIR}/fasd-init-cache"
# _fasd_ret="$( if [[ "${commands[fasd]}" -nt "$fasd_cache" || ! -s "$fasd_cache" ]]; then
# # -l: list all paths in the database (without scores) fasd --init posix-alias zsh-hook zsh-ccomp zsh-ccomp-install zsh-wcomp zsh-wcomp-install >| "$fasd_cache"
# # -d: list only directories fi
# # -R: in the reverse order source "$fasd_cache"
# fasd -l -d -R | unset fasd_cache
# fzf --height=40% --layout=reverse --tiebreak=index --query="$*"
# )" alias v='f -e "$EDITOR"'
# if [[ -d "$_fasd_ret" ]]; then alias o='a -e xdg-open'
# cd -- "$_fasd_ret"
# elif [[ -n "$_fasd_ret" ]]; then # alias j='zz'
# print -- "$_fasd_ret" j() {
# fi local _fasd_ret
#} _fasd_ret="$(
# -l: list all paths in the database (without scores)
# -d: list only directories
# -R: in the reverse order
fasd -l -d -R |
fzf --height=40% --layout=reverse --tiebreak=index --query="$*"
)"
if [[ -d "$_fasd_ret" ]]; then
cd -- "$_fasd_ret"
elif [[ -n "$_fasd_ret" ]]; then
print -- "$_fasd_ret"
fi
}
fi
# }}} # }}}