Compare commits
15 Commits
1c5beed613
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
316eefe916
|
|||
|
3a821d832b
|
|||
|
b291163a80
|
|||
|
2e2bad65a2
|
|||
|
c46b1c5ea1
|
|||
|
5f40b97e9a
|
|||
|
5599ce14d7
|
|||
|
4008bb543b
|
|||
|
d0abb14567
|
|||
|
9e18be760c
|
|||
|
04d3d6e87f
|
|||
|
526a37301a
|
|||
|
7dc9efc0e4
|
|||
|
9bc8b4b93f
|
|||
|
ead724b75b
|
@@ -102,12 +102,16 @@ bindsym $mod+6 exec ~/.config/i3/multi-monitor-workspaces.sh -s 6
|
|||||||
bindsym $mod+7 exec ~/.config/i3/multi-monitor-workspaces.sh -s 7
|
bindsym $mod+7 exec ~/.config/i3/multi-monitor-workspaces.sh -s 7
|
||||||
bindsym $mod+8 exec ~/.config/i3/multi-monitor-workspaces.sh -s 8
|
bindsym $mod+8 exec ~/.config/i3/multi-monitor-workspaces.sh -s 8
|
||||||
bindsym $mod+9 exec ~/.config/i3/multi-monitor-workspaces.sh -s 9
|
bindsym $mod+9 exec ~/.config/i3/multi-monitor-workspaces.sh -s 9
|
||||||
bindsym $mod+0 exec ~/.config/i3/multi-monitor-workspaces.sh -s 0
|
bindsym $mod+0 exec ~/.config/i3/multi-monitor-workspaces.sh -s 10
|
||||||
|
|
||||||
# switch back to the previous workspace
|
# switch back to the previous workspace
|
||||||
workspace_auto_back_and_forth yes
|
workspace_auto_back_and_forth yes
|
||||||
bindsym $mod+Tab workspace back_and_forth
|
bindsym $mod+Tab workspace back_and_forth
|
||||||
|
|
||||||
|
# switch workspaces forward and backward
|
||||||
|
bindsym $mod+Next workspace next
|
||||||
|
bindsym $mod+Prior workspace prev
|
||||||
|
|
||||||
# Switch visible workspaces (e.g. multi monitor setup)
|
# Switch visible workspaces (e.g. multi monitor setup)
|
||||||
bindsym $mod+Shift+Tab exec i3-msg workspace "$( \
|
bindsym $mod+Shift+Tab exec i3-msg workspace "$( \
|
||||||
i3-msg -t get_workspaces | \
|
i3-msg -t get_workspaces | \
|
||||||
@@ -124,7 +128,7 @@ bindsym $mod+Shift+6 exec ~/.config/i3/multi-monitor-workspaces.sh -m 6
|
|||||||
bindsym $mod+Shift+7 exec ~/.config/i3/multi-monitor-workspaces.sh -m 7
|
bindsym $mod+Shift+7 exec ~/.config/i3/multi-monitor-workspaces.sh -m 7
|
||||||
bindsym $mod+Shift+8 exec ~/.config/i3/multi-monitor-workspaces.sh -m 8
|
bindsym $mod+Shift+8 exec ~/.config/i3/multi-monitor-workspaces.sh -m 8
|
||||||
bindsym $mod+Shift+9 exec ~/.config/i3/multi-monitor-workspaces.sh -m 9
|
bindsym $mod+Shift+9 exec ~/.config/i3/multi-monitor-workspaces.sh -m 9
|
||||||
bindsym $mod+Shift+0 exec ~/.config/i3/multi-monitor-workspaces.sh -m 0
|
bindsym $mod+Shift+0 exec ~/.config/i3/multi-monitor-workspaces.sh -m 10
|
||||||
|
|
||||||
# move focused container and switch to workspace
|
# move focused container and switch to workspace
|
||||||
bindsym Mod1+Shift+1 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 1
|
bindsym Mod1+Shift+1 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 1
|
||||||
@@ -136,7 +140,7 @@ bindsym Mod1+Shift+6 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 6
|
|||||||
bindsym Mod1+Shift+7 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 7
|
bindsym Mod1+Shift+7 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 7
|
||||||
bindsym Mod1+Shift+8 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 8
|
bindsym Mod1+Shift+8 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 8
|
||||||
bindsym Mod1+Shift+9 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 9
|
bindsym Mod1+Shift+9 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 9
|
||||||
bindsym Mod1+Shift+0 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 0
|
bindsym Mod1+Shift+0 exec ~/.config/i3/multi-monitor-workspaces.sh -ms 10
|
||||||
|
|
||||||
# reload the configuration file
|
# reload the configuration file
|
||||||
bindsym $mod+Shift+c reload
|
bindsym $mod+Shift+c reload
|
||||||
|
|||||||
@@ -25,25 +25,12 @@ done
|
|||||||
shift $((OPTIND - 1))
|
shift $((OPTIND - 1))
|
||||||
[ $# -gt 0 ] || usage
|
[ $# -gt 0 ] || usage
|
||||||
|
|
||||||
outputs="$(i3-msg -t get_outputs | jq -r '.[] | select(.active).name')"
|
|
||||||
num_outs="$(printf "%s\n" "$outputs" | wc -l)"
|
|
||||||
|
|
||||||
if [ "$num_outs" -lt 2 ]; then
|
|
||||||
# only one monitor
|
|
||||||
workspace="$1"
|
|
||||||
else
|
|
||||||
name="$(i3-msg -t get_tree \
|
name="$(i3-msg -t get_tree \
|
||||||
| jq -r '.. | objects | select(.focused).output')"
|
| jq -r '.. | objects | select(.focused).output')"
|
||||||
num="$(printf "%s\n" "$outputs" \
|
|
||||||
| grep -Fxn "$name" \
|
|
||||||
| cut -d: -f1)"
|
|
||||||
num="$((num - 1))"
|
|
||||||
|
|
||||||
# Omit the number on the first monitor
|
# NOTE: See `strip-wsnames` in polybar config. With it every monitor has its own
|
||||||
[ "$num" -gt 0 ] || num=
|
# 1-10 workspaces
|
||||||
|
workspace="$1: $name"
|
||||||
workspace="$num$1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$switch" ] && [ -z "$move" ]; then
|
if [ -z "$switch" ] && [ -z "$move" ]; then
|
||||||
printf "%s\n" "$workspace"
|
printf "%s\n" "$workspace"
|
||||||
|
|||||||
@@ -7,21 +7,19 @@
|
|||||||
# Print the current working directory of the focused kitty window. Returns 4 if
|
# Print the current working directory of the focused kitty window. Returns 4 if
|
||||||
# none exist or is focused.
|
# none exist or is focused.
|
||||||
|
|
||||||
|
if [ -n "$KITTY_LISTEN_ON" ]; then
|
||||||
|
socket_path="${KITTY_LISTEN_ON#unix:}"
|
||||||
|
else
|
||||||
socket_path="${TMPDIR:-/tmp}/kitty.$USER/kitty${1:+-$1}.sock"
|
socket_path="${TMPDIR:-/tmp}/kitty.$USER/kitty${1:+-$1}.sock"
|
||||||
|
fi
|
||||||
|
[ -e "$socket_path" ] || exit 1
|
||||||
|
|
||||||
# NOTE: the backticks are used for hacky line-continuation, taken from
|
# NOTE: Unfortunately kitten-@-ls(1) is slow, so communicate with the socket
|
||||||
# https://stackoverflow.com/a/7729087/2092762c9
|
# directly.
|
||||||
kitten @ --to unix:"$socket_path" ls \
|
printf '\eP@kitty-cmd{%s,%s,%s}\e\\' \
|
||||||
| jq -er ".[]`
|
'"cmd":"ls"' \
|
||||||
` | select(.is_focused).tabs.[]`
|
'"version":[0,26,0]' \
|
||||||
` | select(.is_focused).windows.[]`
|
'"payload":{"match":"state:focused"}' \
|
||||||
` | select(.is_focused).cwd"
|
| nc -U -q0 "$socket_path" \
|
||||||
|
| awk '{ print substr($0, 13, length($0) - 14) }' \
|
||||||
# An alternative version that uses recursive descent to find focused objects
|
| jq -er ".data | fromjson | .[].tabs.[].windows.[].cwd"
|
||||||
# that also have a `.cwd` key:
|
|
||||||
#
|
|
||||||
# | jq -er "..`
|
|
||||||
# ` | objects`
|
|
||||||
# ` | select(.is_focused)`
|
|
||||||
# ` | to_entries.[]`
|
|
||||||
# ` | select(.key == \"cwd\").value"
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ enable-ipc = true
|
|||||||
type = internal/i3
|
type = internal/i3
|
||||||
pin-workspaces = true
|
pin-workspaces = true
|
||||||
format = <label-state> <label-mode>
|
format = <label-state> <label-mode>
|
||||||
|
strip-wsnames = true
|
||||||
index-sort = true
|
index-sort = true
|
||||||
wrapping-scroll = false
|
wrapping-scroll = false
|
||||||
|
|
||||||
|
|||||||
@@ -22,10 +22,11 @@ done
|
|||||||
if ! pgrep -ax polybar >/dev/null 2>&1; then
|
if ! pgrep -ax polybar >/dev/null 2>&1; then
|
||||||
# launch Polybar on every monitor
|
# launch Polybar on every monitor
|
||||||
# https://github.com/polybar/polybar/issues/763
|
# https://github.com/polybar/polybar/issues/763
|
||||||
while read -r m; do
|
polybar --list-monitors \
|
||||||
export MONITOR="${m%%:*}"
|
| cut -d: -f1 \
|
||||||
|
| xargs -I'{}' -P0 \
|
||||||
|
env MONITOR='{}' \
|
||||||
polybar --reload -c "$BASE_DIR/config" main &
|
polybar --reload -c "$BASE_DIR/config" main &
|
||||||
done <<<"$(polybar --list-monitors)"
|
|
||||||
|
|
||||||
echo "Polybar launched..."
|
echo "Polybar launched..."
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -37,18 +37,30 @@ setlocal showbreak=NONE
|
|||||||
" This is very hacky.
|
" This is very hacky.
|
||||||
|
|
||||||
" Only if WinResized is supported
|
" Only if WinResized is supported
|
||||||
if has('##WinResized')
|
if exists('##WinResized')
|
||||||
|
|
||||||
augroup man_resized
|
augroup man_resized
|
||||||
" The reload has to be delayed slightly, since with an `edit` directly in
|
" The reload has to be delayed slightly, since with an `edit` directly in
|
||||||
" the autocmd, the buffer will just be cleared? (TODO)
|
" the autocmd, the buffer will just be cleared? (TODO)
|
||||||
" NOTE: One could add a wrapper function that checks for the existence of
|
au! WinResized <buffer> call s:redraw_man(v:event)
|
||||||
" already running timers similar to how it's done in the
|
|
||||||
" highlight_current group (see autocommands.vim), but this feels
|
|
||||||
" overkill here.
|
|
||||||
au! WinResized <buffer> call timer_start(10, function("s:redraw_delayed"))
|
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
|
function s:redraw_man(event)
|
||||||
|
if exists('w:disable_man_resizing')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
if exists('w:man_resizing_timer_id')
|
||||||
|
call timer_stop(w:man_resizing_timer_id)
|
||||||
|
endif
|
||||||
|
|
||||||
|
echo a:event
|
||||||
|
|
||||||
|
" TODO: make sure that a:event contains window number and that the width
|
||||||
|
" actually changed with getwininfo()
|
||||||
|
let w:man_resizing_timer_id = timer_start(10, function("s:redraw_delayed"))
|
||||||
|
endfunction
|
||||||
|
|
||||||
" The function can't be redefined during the reload of the ftplugin (i.e.
|
" The function can't be redefined during the reload of the ftplugin (i.e.
|
||||||
" triggered by `edit`), since it is currently executing (i.e. `edit`):
|
" triggered by `edit`), since it is currently executing (i.e. `edit`):
|
||||||
"
|
"
|
||||||
@@ -56,6 +68,8 @@ augroup END
|
|||||||
"
|
"
|
||||||
if !exists("*s:redraw_delayed")
|
if !exists("*s:redraw_delayed")
|
||||||
function s:redraw_delayed(timer_id)
|
function s:redraw_delayed(timer_id)
|
||||||
|
unlet w:man_resizing_timer_id
|
||||||
|
|
||||||
" Try to keep the position as close as possible, since edit will move to
|
" Try to keep the position as close as possible, since edit will move to
|
||||||
" the start of the file
|
" the start of the file
|
||||||
" TODO: this should be more accurate
|
" TODO: this should be more accurate
|
||||||
@@ -72,5 +86,5 @@ endif
|
|||||||
" lines, messing up the whole buffer. Since this is distracting, turn it off.
|
" lines, messing up the whole buffer. Since this is distracting, turn it off.
|
||||||
setlocal nowrap
|
setlocal nowrap
|
||||||
|
|
||||||
endif " has('##WinResized')
|
endif " exists('##WinResized')
|
||||||
" ------------------------------------------------------------------------------
|
" ------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -20,3 +20,27 @@ let g:gutentags_enabled = 0
|
|||||||
" When aborting a commit I usually use :cq which I can't when committing through
|
" When aborting a commit I usually use :cq which I can't when committing through
|
||||||
" fugitive. Abbreviate it to something that works.
|
" fugitive. Abbreviate it to something that works.
|
||||||
cabbrev <buffer> cq %d <Bar> x
|
cabbrev <buffer> cq %d <Bar> x
|
||||||
|
|
||||||
|
" Fold file listings (staged, unstaged, untracked, ...) and diff
|
||||||
|
setlocal foldmethod=syntax
|
||||||
|
|
||||||
|
" Unfold staged files and diff. inspired by:
|
||||||
|
" https://vi.stackexchange.com/questions/4050/how-to-search-for-pattern-in-certain-syntax-regions/27008#27008
|
||||||
|
if has("patch-8.2.0915") || has("nvim-0.7.0")
|
||||||
|
|
||||||
|
function s:open_fold(group, content)
|
||||||
|
" Find line containing `content` that is highlighted with `group`
|
||||||
|
let l:line_nr = search(a:content, "n", 0, 0, { ->
|
||||||
|
\ synstack('.', col('.'))
|
||||||
|
\ ->map('synIDattr(v:val, "name")')
|
||||||
|
\ ->match(a:group) < 0 })
|
||||||
|
if l:line_nr <= 0
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
execute l:line_nr->string() .. "foldopen"
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call s:open_fold("gitcommitSelected", "Changes to be committed:")
|
||||||
|
call s:open_fold("gitcommitDiff", "diff --")
|
||||||
|
|
||||||
|
endif " has("patch-8.2.0915") || has("nvim-0.7.0")
|
||||||
|
|||||||
@@ -26,10 +26,13 @@ endif
|
|||||||
" ctags
|
" ctags
|
||||||
if (executable('ctags'))
|
if (executable('ctags'))
|
||||||
packadd vim-gutentags
|
packadd vim-gutentags
|
||||||
|
" Don't index these folders
|
||||||
let g:gutentags_ctags_exclude = [
|
let g:gutentags_ctags_exclude = [
|
||||||
\ 'node_modules/*',
|
\ 'node_modules/*',
|
||||||
\ '.git/*',
|
\ '.git/*',
|
||||||
\ 'build/*'
|
\ 'build/*',
|
||||||
|
\ 'venv/*',
|
||||||
|
\ '__pycache__/*'
|
||||||
\]
|
\]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -53,4 +56,6 @@ if exists("g:loaded_nrrw_rgn")
|
|||||||
" Open narrow window above or to the left of the current window (default
|
" Open narrow window above or to the left of the current window (default
|
||||||
" is topleft). See :h aboveleft etc.
|
" is topleft). See :h aboveleft etc.
|
||||||
let g:nrrw_topbot_leftright = 'aboveleft'
|
let g:nrrw_topbot_leftright = 'aboveleft'
|
||||||
|
" Leave one more line of padding when the window is small
|
||||||
|
let g:nrrw_rgn_pad = 1
|
||||||
endif
|
endif
|
||||||
|
|||||||
@@ -119,6 +119,15 @@ if (exists('g:loaded_gitgutter'))
|
|||||||
" lines have been changed.
|
" lines have been changed.
|
||||||
set foldtext=gitgutter#fold#foldtext()
|
set foldtext=gitgutter#fold#foldtext()
|
||||||
endif
|
endif
|
||||||
|
" Use the number column for the signcolumn (e.g. gitgutter, lsp diagnostics),
|
||||||
|
" but don't fallback to 'auto' when &number is off
|
||||||
|
" TODO: install autocommand to set signcolumn to yes when number is turned off
|
||||||
|
" (and back to number when turned back on)
|
||||||
|
if &number
|
||||||
|
set signcolumn=number
|
||||||
|
else
|
||||||
|
set signcolumn=yes
|
||||||
|
endif
|
||||||
|
|
||||||
" Netrw
|
" Netrw
|
||||||
" Use tree style listing
|
" Use tree style listing
|
||||||
|
|||||||
@@ -50,14 +50,24 @@ if (get(g:, 'loaded_fzf'))
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Get red from my colorscheme
|
||||||
|
let s:red = {}
|
||||||
|
if exists("*onedark#GetColors")
|
||||||
|
let s:red = onedark#GetColors()->get("red", {})
|
||||||
|
endif
|
||||||
|
let s:red_cterm = s:red->get("cterm", "red")
|
||||||
|
let s:red_gui = s:red->get("gui", "red")
|
||||||
|
|
||||||
" Highlight trailing whitespaces
|
" Highlight trailing whitespaces
|
||||||
if match(&listchars, 'trail: \@!') > -1 && match(&listchars, '\vtab:( +)@!') > -1
|
if match(&listchars, 'trail: \@!') > -1 && match(&listchars, '\vtab:( +)@!') > -1
|
||||||
" Use foreground for coloring if tabs and trailing spaces are displayed
|
" Use foreground for coloring if tabs and trailing spaces are displayed
|
||||||
" as non-space characters
|
" as non-space characters
|
||||||
highlight TrailingWhitespace ctermfg=red guifg=red
|
execute "highlight TrailingWhitespace ctermfg=" .. s:red_cterm
|
||||||
|
\ .. " guifg=" .. s:red_gui
|
||||||
else
|
else
|
||||||
" Background otherwise
|
" Background otherwise
|
||||||
highlight TrailingWhitespace ctermbg=red guibg=red
|
execute "highlight TrailingWhitespace ctermbg=" .. s:red_cterm
|
||||||
|
\ .. " guibg=" .. s:red_gui
|
||||||
endif
|
endif
|
||||||
augroup HighlightTrailingWhitespace
|
augroup HighlightTrailingWhitespace
|
||||||
au!
|
au!
|
||||||
@@ -74,8 +84,10 @@ let g:spl_special_chars = {
|
|||||||
\ 'fr': 'àâæçèéêëîïôœùûüÿÀÂÆÇÈÉÊËÎÏÔŒÙÛÜŸ',
|
\ 'fr': 'àâæçèéêëîïôœùûüÿÀÂÆÇÈÉÊËÎÏÔŒÙÛÜŸ',
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
" Highlight non-ASCII characters in the red used by my color scheme "OneDark"
|
" Highlight non-ASCII characters in red
|
||||||
highlight NonASCIIChars ctermfg=white guifg=white ctermbg=204 guibg=#e06c75
|
execute "highlight NonASCIIChars ctermfg=white guifg=white "
|
||||||
|
\ .. "ctermbg=" .. s:red_cterm .. " guibg=" .. s:red_gui
|
||||||
|
|
||||||
" Do not highlight special characters that are valid in the respective spelllang
|
" Do not highlight special characters that are valid in the respective spelllang
|
||||||
function! HighlightNonASCIIChars()
|
function! HighlightNonASCIIChars()
|
||||||
if exists('w:non_ascii_match_id')
|
if exists('w:non_ascii_match_id')
|
||||||
|
|||||||
Reference in New Issue
Block a user