diff options
| -rw-r--r-- | i3/config | 81 | ||||
| -rwxr-xr-x | install.sh | 3 | ||||
| -rw-r--r-- | py3status/config | 43 | ||||
| -rw-r--r-- | sxhkd/sxhkdrc | 62 | ||||
| -rw-r--r-- | terminal.py | 58 | ||||
| -rwxr-xr-x | terminal.sh | 22 | ||||
| -rw-r--r-- | vim/.vimrc | 5 | ||||
| -rw-r--r-- | vim/plug.vim | 180 | ||||
| -rwxr-xr-x | xorg/.xsession | 5 |
9 files changed, 274 insertions, 185 deletions
@@ -8,6 +8,7 @@ set $wsa "5:a" set $wss "6:s" set $wsd "7:d" set $wsf "8:f" +set $wst "9:term" floating_modifier $mod font pango:Droid Sans 11 @@ -22,46 +23,6 @@ workspace $wss output DP1-1 DP1-2 DP1 primary workspace $wsd output DP1-1 DP1-2 DP1 primary workspace $wsf output DP1-1 DP1-2 DP1 primary - -bindsym $mod+Return exec alacritty -bindsym $mod+space exec --no-startup-id rofi -show drun -bindsym $mod+backslash split h -bindsym $mod+minus split v -#bindsym $mod+s layout stacking -#bindsym $mod+w layout tabbed -bindsym $mod+Tab layout toggle split -bindsym $mod+p focus parent -#bindsym $mod+d focus child -bindsym $mod+r mode "resize" - -bindsym $mod+Shift+r restart -bindsym $mod+Shift+e exit -bindsym $mod+Shift+q kill -bindsym $mod+Shift+space floating toggle -bindsym $mod+Shift+Return fullscreen toggle - - -bindsym $mod+h focus left -bindsym $mod+j focus down -bindsym $mod+k focus up -bindsym $mod+l focus right - -bindsym $mod+Left focus left -bindsym $mod+Down focus down -bindsym $mod+Up focus up -bindsym $mod+Right focus right - -bindsym $mod+Shift+h move left -bindsym $mod+Shift+j move down -bindsym $mod+Shift+k move up -bindsym $mod+Shift+l move right - -bindsym $mod+Shift+Left move left -bindsym $mod+Shift+Down move down -bindsym $mod+Shift+Up move up -bindsym $mod+Shift+Right move right - - bindsym $mod+1 workspace $ws1 bindsym $mod+2 workspace $ws2 bindsym $mod+3 workspace $ws3 @@ -80,24 +41,6 @@ bindsym $mod+Shift+s move container to workspace $wss bindsym $mod+Shift+d move container to workspace $wsd bindsym $mod+Shift+f move container to workspace $wsf - -mode "resize" { - bindsym h resize shrink width 10 px or 10 ppt - bindsym j resize grow height 10 px or 10 ppt - bindsym k resize shrink height 10 px or 10 ppt - bindsym l resize grow width 10 px or 10 ppt - - bindsym Left resize shrink width 10 px or 10 ppt - bindsym Down resize grow height 10 px or 10 ppt - bindsym Up resize shrink height 10 px or 10 ppt - bindsym Right resize grow width 10 px or 10 ppt - - bindsym Return mode "default" - bindsym Escape mode "default" - bindsym $mod+r mode "default" -} - - bar { status_command py3status tray_output primary @@ -106,27 +49,7 @@ bar { font pango:Font Awesome 5 Free, Font Awesome 5 Brands, Droid Sans Mono 12 } - -# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the -# screen before suspend. Use loginctl lock-session to lock your screen. -#exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork - -# picom -exec --no-startup-id picom - -# gajim -exec --no-startup-id gajim - -# zeal -exec --no-startup-id zeal - -# background exec_always --no-startup-id feh --bg-scale ~/.dotfiles/pictures/bg1.jpg \ ~/.dotfiles/pictures/bg2.jpg -# terminal -for_window [instance="scratchpad_term"] \ - move scratchpad, \ - border none, \ - exec --no-startup-id ~/.dotfiles/terminal.sh -bindsym F12 exec --no-startup-id ~/.dotfiles/terminal.sh +for_window [instance="scratchpad_term"] move container to workspace $wst @@ -33,6 +33,9 @@ ln -sf -T $DOTFILES/qtile ~/.config/qtile # i3 ln -sf -T $DOTFILES/i3 ~/.config/i3 +# sxhkd +ln -sf -T $DOTFILES/sxhkd ~/.config/sxhkd + # sway ln -sf -T $DOTFILES/sway ~/.config/sway diff --git a/py3status/config b/py3status/config index 6ea24cc..84c0b2b 100644 --- a/py3status/config +++ b/py3status/config @@ -1,12 +1,4 @@ - -order += "static_string chromium" -order += "static_string falkon" -order += "static_string dolphin" -order += "static_string atom" -order += "static_string claws-mail" -order += "static_string keepassxc" -order += "static_string clementine" order += "wireless _first_" order += "ethernet _first_" order += "battery 0" @@ -14,41 +6,6 @@ order += "volume master" order += "tztime local" -static_string chromium { - format = "" - on_click 1 = "exec --no-startup-id chromium" -} - -static_string falkon { - format = "" - on_click 1 = "exec --no-startup-id falkon" -} - -static_string dolphin { - format = "" - on_click 1 = "exec --no-startup-id dolphin" -} - -static_string atom { - format = "" - on_click 1 = "exec --no-startup-id atom" -} - -static_string claws-mail { - format = "" - on_click 1 = "exec --no-startup-id claws-mail" -} - -static_string keepassxc { - format = "" - on_click 1 = "exec --no-startup-id keepassxc" -} - -static_string clementine { - format = "" - on_click 1 = "exec --no-startup-id clementine" -} - wireless _first_ { format_up = " (%quality at %essid, %bitrate) %ip" format_down = "" diff --git a/sxhkd/sxhkdrc b/sxhkd/sxhkdrc new file mode 100644 index 0000000..fa91ced --- /dev/null +++ b/sxhkd/sxhkdrc @@ -0,0 +1,62 @@ +F12 + python ~/.dotfiles/terminal.py + +mod4 + Return + alacritty +mod4 + space + rofi -show drun +mod4 + backslash + i3-msg "split h" +mod4 + minus + i3-msg "split v" +mod4 + Tab + i3-msg "layout toggle split" +mod4 + p + i3-msg "focus parent" +mod4 + r + i3-msg "mode resize" + +mod4 + shift + r + i3-msg "restart" +mod4 + shift + e + i3-msg "exit" +mod4 + shift + q + i3-msg "kill" +mod4 + shift + space + i3-msg "floating toggle" +mod4 + shift + Return + i3-msg "fullscreen toggle" + +mod4 + h + i3-msg "focus left" +mod4 + Left + i3-msg "focus left" +mod4 + j + i3-msg "focus down" +mod4 + Down + i3-msg "focus down" +mod4 + k + i3-msg "focus up" +mod4 + Up + i3-msg "focus up" +mod4 + l + i3-msg "focus right" +mod4 + Right + i3-msg "focus right" + +mod4 + shift + h + i3-msg "move left" +mod4 + shift + Left + i3-msg "move left" +mod4 + shift + j + i3-msg "move down" +mod4 + shift + Down + i3-msg "move down" +mod4 + shift + k + i3-msg "move up" +mod4 + shift + Up + i3-msg "move up" +mod4 + shift + l + i3-msg "move right" +mod4 + shift + Right + i3-msg "move right" diff --git a/terminal.py b/terminal.py new file mode 100644 index 0000000..c53ff53 --- /dev/null +++ b/terminal.py @@ -0,0 +1,58 @@ +import json +import subprocess + + +def send_msg(msg_type, msg): + p = subprocess.run(['i3-msg', '-t', msg_type, msg], + capture_output=True, + check=True) + return json.loads(p.stdout.decode('utf-8')) + + +def is_term_running(): + + def node_exists(node): + if node.get('window_properties', {}).get('instance') == 'scratchpad_term': + return True + return any(node_exists(i) for i in node.get('nodes', [])) + + tree = send_msg('get_tree', '') + return node_exists(tree) + + +def run_term(): + subprocess.Popen([ + 'alacritty', '--class', 'scratchpad_term', + '-e', 'tmux', 'new-session', '-A', '-s', 'default']) + + +def get_focused_workspace(): + workspaces = send_msg('get_workspaces', '') + for workspace in workspaces: + if workspace['focused']: + return workspace['name'] + + +def get_focused_output(focused_workspace): + outputs = send_msg('get_outputs', '') + for out in outputs: + if out['current_workspace'] == focused_workspace: + return out['name'] + + +def main(): + focused_workspace = get_focused_workspace() + if focused_workspace == '9:term': + send_msg('command', 'workspace back_and_forth') + else: + focused_output = get_focused_output(focused_workspace) + if not is_term_running(): + run_term() + send_msg('command', '[instance="scratchpad_term"] ' + 'move container to workspace "9:term"') + send_msg('command', 'workspace "9:term"') + send_msg('command', f'move workspace to output {focused_output}') + + +if __name__ == '__main__': + main() diff --git a/terminal.sh b/terminal.sh deleted file mode 100755 index 2b5b2f7..0000000 --- a/terminal.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/bash - -CLASSNAME=scratchpad_term -RESIZE_CMD="resize set 100 ppt 100 ppt" - -if ps -C i3 > /dev/null ; then - CMD=i3-msg - PROP=instance - RESIZE_CMD+=", resize shrink height 22 px" - MOVE_CMD="move position center" -elif ps -C sway > /dev/null ; then - CMD=swaymsg - PROP=app_id - MOVE_CMD="move position 0 0" -else - exit 1 -fi - -$CMD -t get_tree | jq -e "[.. | .$PROP? | . == \"$CLASSNAME\"] | any" -[[ $? -ne 0 ]] && alacritty --class $CLASSNAME -e tmux new-session -A -s default - -$CMD [$PROP=\"$CLASSNAME\"] scratchpad show, $RESIZE_CMD, $MOVE_CMD @@ -36,7 +36,8 @@ Plug 'Valloric/YouCompleteMe' Plug 'thaerkh/vim-indentguides' Plug 'vim-scripts/paredit.vim' Plug 'christoomey/vim-tmux-navigator' - +Plug 'ryanoasis/vim-devicons' +Plug 'Xuyuanp/nerdtree-git-plugin' "Plug 'dleonard0/pony-vim-syntax' "Plug 'terryma/vim-multiple-cursors' @@ -125,6 +126,8 @@ let g:gitgutter_realtime = 1 noremap <F5> :NERDTreeToggle<CR> noremap <F6> :TagbarToggle<CR> noremap <F7> :MBEToggle<CR> +noremap <F8> :tabp<CR> +noremap <F9> :tabn<CR> " center cursor vertically nnoremap <Leader>zz :let &scrolloff=999-&scrolloff<CR> diff --git a/vim/plug.vim b/vim/plug.vim index ac14332..69033ec 100644 --- a/vim/plug.vim +++ b/vim/plug.vim @@ -372,7 +372,7 @@ endfunction function! s:git_version_requirement(...) if !exists('s:git_version') - let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') + let s:git_version = map(split(split(s:system(['git', '--version']))[2], '\.'), 'str2nr(v:val)') endif return s:version_requirement(s:git_version, a:000) endfunction @@ -632,17 +632,39 @@ function! plug#(repo, ...) let g:plugs[name] = spec let s:loaded[name] = get(s:loaded, name, 0) catch - return s:err(v:exception) + return s:err(repo . ' ' . v:exception) endtry endfunction function! s:parse_options(arg) let opts = copy(s:base_spec) let type = type(a:arg) + let opt_errfmt = 'Invalid argument for "%s" option of :Plug (expected: %s)' if type == s:TYPE.string + if empty(a:arg) + throw printf(opt_errfmt, 'tag', 'string') + endif let opts.tag = a:arg elseif type == s:TYPE.dict call extend(opts, a:arg) + for opt in ['branch', 'tag', 'commit', 'rtp', 'dir', 'as'] + if has_key(opts, opt) + \ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) + throw printf(opt_errfmt, opt, 'string') + endif + endfor + for opt in ['on', 'for'] + if has_key(opts, opt) + \ && type(opts[opt]) != s:TYPE.list + \ && (type(opts[opt]) != s:TYPE.string || empty(opts[opt])) + throw printf(opt_errfmt, opt, 'string or list') + endif + endfor + if has_key(opts, 'do') + \ && type(opts.do) != s:TYPE.funcref + \ && (type(opts.do) != s:TYPE.string || empty(opts.do)) + throw printf(opt_errfmt, 'do', 'string or funcref') + endif if has_key(opts, 'dir') let opts.dir = s:dirpath(s:plug_expand(opts.dir)) endif @@ -864,8 +886,15 @@ endfunction function! s:chsh(swap) let prev = [&shell, &shellcmdflag, &shellredir] - if !s:is_win && a:swap - set shell=sh shellredir=>%s\ 2>&1 + if !s:is_win + set shell=sh + endif + if a:swap + if &shell =~# 'powershell\.exe' || &shell =~# 'pwsh$' + let &shellredir = '2>&1 | Out-File -Encoding UTF8 %s' + elseif &shell =~# 'sh' || &shell =~# 'cmd\.exe' + set shellredir=>%s\ 2>&1 + endif endif return prev endfunction @@ -898,7 +927,7 @@ function! s:regress_bar() endfunction function! s:is_updated(dir) - return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) + return !empty(s:system_chomp(['git', 'log', '--pretty=format:%h', 'HEAD...HEAD@{1}'], a:dir)) endfunction function! s:do(pull, force, todo) @@ -935,6 +964,7 @@ function! s:do(pull, force, todo) endif elseif type == s:TYPE.funcref try + call s:load_plugin(spec) let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') call spec.do({ 'name': name, 'status': status, 'force': a:force }) catch @@ -961,7 +991,7 @@ endfunction function! s:checkout(spec) let sha = a:spec.commit - let output = s:system('git rev-parse HEAD', a:spec.dir) + let output = s:system(['git', 'rev-parse', 'HEAD'], a:spec.dir) if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) let output = s:system( \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) @@ -1079,11 +1109,16 @@ function! s:update_impl(pull, force, args) abort normal! 2G silent! redraw - let s:clone_opt = get(g:, 'plug_shallow', 1) ? - \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' + let s:clone_opt = [] + if get(g:, 'plug_shallow', 1) + call extend(s:clone_opt, ['--depth', '1']) + if s:git_version_requirement(1, 7, 10) + call add(s:clone_opt, '--no-single-branch') + endif + endif if has('win32unix') || has('wsl') - let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' + call extend(s:clone_opt, ['-c', 'core.eol=lf', '-c', 'core.autocrlf=input']) endif let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' @@ -1264,7 +1299,7 @@ function! s:job_cb(fn, job, ch, data) endfunction function! s:nvim_cb(job_id, data, event) dict abort - return a:event == 'stdout' ? + return (a:event == 'stdout' || a:event == 'stderr') ? \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : \ s:job_cb('s:job_exit_cb', self, 0, a:data) endfunction @@ -1273,12 +1308,15 @@ function! s:spawn(name, cmd, opts) let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], \ 'new': get(a:opts, 'new', 0) } let s:jobs[a:name] = job - let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd - let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] if s:nvim + if has_key(a:opts, 'dir') + let job.cwd = a:opts.dir + endif + let argv = a:cmd call extend(job, { \ 'on_stdout': function('s:nvim_cb'), + \ 'on_stderr': function('s:nvim_cb'), \ 'on_exit': function('s:nvim_cb'), \ }) let jid = s:plug_call('jobstart', argv, job) @@ -1291,9 +1329,16 @@ function! s:spawn(name, cmd, opts) \ 'Invalid arguments (or job table is full)'] endif elseif s:vim8 + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) + if has_key(a:opts, 'dir') + let cmd = s:with_cd(cmd, a:opts.dir, 0) + endif + let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] let jid = job_start(s:is_win ? join(argv, ' ') : argv, { \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), + \ 'err_cb': function('s:job_cb', ['s:job_out_cb', job]), \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), + \ 'err_mode': 'raw', \ 'out_mode': 'raw' \}) if job_status(jid) == 'run' @@ -1304,7 +1349,7 @@ function! s:spawn(name, cmd, opts) let job.lines = ['Failed to start job'] endif else - let job.lines = s:lines(call('s:system', [cmd])) + let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) let job.error = v:shell_error != 0 let job.running = 0 endif @@ -1401,8 +1446,14 @@ while 1 " Without TCO, Vim stack is bound to explode let [error, _] = s:git_validate(spec, 0) if empty(error) if pull - let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' - call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) + let cmd = ['git', 'fetch'] + if has_tag && !empty(globpath(spec.dir, '.git/shallow')) + call extend(cmd, ['--depth', '99999999']) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, cmd, { 'dir': spec.dir }) else let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } endif @@ -1410,12 +1461,14 @@ while 1 " Without TCO, Vim stack is bound to explode let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } endif else - call s:spawn(name, - \ printf('git clone %s %s %s %s 2>&1', - \ has_tag ? '' : s:clone_opt, - \ prog, - \ plug#shellescape(spec.uri, {'script': 0}), - \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) + let cmd = ['git', 'clone'] + if !has_tag + call extend(cmd, s:clone_opt) + endif + if !empty(prog) + call add(cmd, prog) + endif + call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) endif if !s:jobs[name].running @@ -1452,7 +1505,7 @@ G_NVIM = vim.eval("has('nvim')") == '1' G_PULL = vim.eval('s:update.pull') == '1' G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) -G_CLONE_OPT = vim.eval('s:clone_opt') +G_CLONE_OPT = ' '.join(vim.eval('s:clone_opt')) G_PROGRESS = vim.eval('s:progress_opt(1)') G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) G_STOP = thr.Event() @@ -1989,7 +2042,7 @@ function! s:update_ruby() end } if VIM::evaluate('s:mac_gui') == 1 - clone_opt = VIM::evaluate('s:clone_opt') + clone_opt = VIM::evaluate('s:clone_opt').join(' ') progress = VIM::evaluate('s:progress_opt(1)') nthr.times do mtx.synchronize do @@ -2055,7 +2108,23 @@ function! s:shellesc_sh(arg) return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" endfunction +" Escape the shell argument based on the shell. +" Vim and Neovim's shellescape() are insufficient. +" 1. shellslash determines whether to use single/double quotes. +" Double-quote escaping is fragile for cmd.exe. +" 2. It does not work for powershell. +" 3. It does not work for *sh shells if the command is executed +" via cmd.exe (ie. cmd.exe /c sh -c command command_args) +" 4. It does not support batchfile syntax. +" +" Accepts an optional dictionary with the following keys: +" - shell: same as Vim/Neovim 'shell' option. +" If unset, fallback to 'cmd.exe' on Windows or 'sh'. +" - script: If truthy and shell is cmd.exe, escape for batchfile syntax. function! plug#shellescape(arg, ...) + if a:arg =~# '^[A-Za-z0-9_/:.-]\+$' + return a:arg + endif let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') let script = get(opts, 'script', 1) @@ -2105,8 +2174,24 @@ function! s:system(cmd, ...) let batchfile = '' try let [sh, shellcmdflag, shrd] = s:chsh(1) - let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd - if s:is_win + if type(a:cmd) == s:TYPE.list + " Neovim's system() supports list argument to bypass the shell + " but it cannot set the working directory for the command. + " Assume that the command does not rely on the shell. + if has('nvim') && a:0 == 0 + return system(a:cmd) + endif + let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"shell": &shell, "script": 0})')) + if &shell =~# 'powershell\.exe' + let cmd = '& ' . cmd + endif + else + let cmd = a:cmd + endif + if a:0 > 0 + let cmd = s:with_cd(cmd, a:1, type(a:cmd) != s:TYPE.list) + endif + if s:is_win && type(a:cmd) != s:TYPE.list let [batchfile, cmd] = s:batchfile(cmd) endif return system(cmd) @@ -2159,9 +2244,10 @@ function! s:git_validate(spec, check_branch) \ branch, a:spec.branch) endif if empty(err) - let [ahead, behind] = split(s:lastline(s:system(printf( - \ 'git rev-list --count --left-right HEAD...origin/%s', - \ a:spec.branch), a:spec.dir)), '\t') + let [ahead, behind] = split(s:lastline(s:system([ + \ 'git', 'rev-list', '--count', '--left-right', + \ printf('HEAD...origin/%s', a:spec.branch) + \ ], a:spec.dir)), '\t') if !v:shell_error && ahead if behind " Only mention PlugClean if diverged, otherwise it's likely to be @@ -2185,7 +2271,9 @@ endfunction function! s:rm_rf(dir) if isdirectory(a:dir) - call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) + return s:system(s:is_win + \ ? 'rmdir /S /Q '.plug#shellescape(a:dir) + \ : ['rm', '-rf', a:dir]) endif endfunction @@ -2267,6 +2355,7 @@ endfunction function! s:delete(range, force) let [l1, l2] = a:range let force = a:force + let err_count = 0 while l1 <= l2 let line = getline(l1) if line =~ '^- ' && isdirectory(line[2:]) @@ -2275,11 +2364,22 @@ function! s:delete(range, force) let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) let force = force || answer > 1 if answer - call s:rm_rf(line[2:]) + let err = s:rm_rf(line[2:]) setlocal modifiable - call setline(l1, '~'.line[1:]) - let s:clean_count += 1 - call setline(4, printf('Removed %d directories.', s:clean_count)) + if empty(err) + call setline(l1, '~'.line[1:]) + let s:clean_count += 1 + else + delete _ + call append(l1 - 1, s:format_message('x', line[1:], err)) + let l2 += len(s:lines(err)) + let err_count += 1 + endif + let msg = printf('Removed %d directories.', s:clean_count) + if err_count > 0 + let msg .= printf(' Failed to remove %d directories.', err_count) + endif + call setline(4, msg) setlocal nomodifiable endif endif @@ -2294,7 +2394,7 @@ function! s:upgrade() let new = tmp . '/plug.vim' try - let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) + let out = s:system(['git', 'clone', '--depth', '1', s:plug_src, tmp]) if v:shell_error return s:err('Error upgrading vim-plug: '. out) endif @@ -2489,11 +2589,13 @@ function! s:diff() call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') for [k, v] in plugs let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' - let cmd = 'git log --graph --color=never ' - \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') - \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) + let cmd = ['git', 'log', '--graph', '--color=never'] + if s:git_version_requirement(2, 10, 0) + call add(cmd, '--no-show-signature') + endif + call extend(cmd, ['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range]) if has_key(v, 'rtp') - let cmd .= ' -- '.plug#shellescape(v.rtp) + call extend(cmd, ['--', v.rtp]) endif let diff = s:system_chomp(cmd, v.dir) if !empty(diff) @@ -2561,7 +2663,7 @@ function! s:snapshot(force, ...) abort let names = sort(keys(filter(copy(g:plugs), \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) for name in reverse(names) - let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) + let sha = s:system_chomp(['git', 'rev-parse', '--short', 'HEAD'], g:plugs[name].dir) if !empty(sha) call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) redraw diff --git a/xorg/.xsession b/xorg/.xsession index cdefc55..f29c7ae 100755 --- a/xorg/.xsession +++ b/xorg/.xsession @@ -4,4 +4,7 @@ xset -b autorandr --change [[ -n $(xrandr | grep "connected 3840x2160") ]] && xrandr --dpi 120 [[ -n $(xrandr | grep "connected 3840x2160") ]] && echo "Xft.dpi: 120" | xrdb -override - +sxhkd & +picom & +gajim & +zeal & |
