eww why airline, very much more generic now

This commit is contained in:
əlemi 2021-01-30 22:48:08 +01:00
parent cd6ac810fc
commit 27315a1f8a
Signed by: alemi
GPG key ID: A4895B84D311642C
3 changed files with 50 additions and 49 deletions

View file

@ -1,17 +1,18 @@
# vim-combo # vim-combo
Have you ever wondered how sick is your function typing? That insane very long lambda you just written in one go must have been a hell of a combo, shame it wasn't tracked. Have you ever wanted to obsessively classify your performance against know people of yours with a not-really-so-relevant score in different languages?
This plugin comes right to the rescue: it keeps track of a "combo" counter that increases every time you press a key. Waiting for too long resets such counter.
Deleting won't increase your combo but it will reset the timer. By default, the timer is 1 second. It may seem tight but longer timers lead to incredibly big combos too easily.
Pasting counts as 1 (be it in Insert-Paste or directly from clipboard), movement does not affect the counter.
Wasn't until now! vim-combo is inspired by the power-mode many more graphical editors have. While all the particles and text shaking is nice, the thing I really wanted was to keep track of my typing combos. vim-combo is inspired by the power-mode many more graphical editors have. While all the particles and text shaking is nice, the thing I really wanted was to keep track of my typing combos.
So here comes vim-combo! Each text edit in insert mode (autocmd on TextChangedI) increases the counter. The counter gets resetted if you type nothing for more than a second (you can set it to any number of seconds with g:timeout) It uses a function called on buffer change (autocmd on TextChangedI) to increases the counter. Current time is checked every time against last best time.
Pasting counts as 1 (be it in Insert-Paste or directly from clipboard), movement does not affect the counter and backspace keeps the combo going without increasing the counter. vim-combo keeps track of your best combos for each filetype with files inside the hidden .combo folder (~/.vim/.combo). Every time vim loads, the best combo is loaded from file (one is kept for each filetype edited). Every time you get a new best score, the value on file is replaced.
vim-combo keeps track of your best combos for each filetype with files inside the hidden .combo folder (~/.vim/.combo). Every time vim loads, the best combo is loaded from file (one is kept for each filetype edited). Every time you get a new best score, the value on file is replaced. vim-combo also calculates the best combo across all filetypes, but it is not displayed by default (because my combo on .txt puts my combo on .c to shame). Use ```:ComboMaxOn, :ComboMaxOff``` to toggle.
There already are few plugins which provide particles (vim-particle, vim-power-mode) but they required windows. vim-combo can run on any system since it's only vim script! There already are few plugins which provide particles (vim-particle, vim-power-mode) but they required windows. vim-combo can run on any system since it's only vim script!
Note that vim-combo by default places the counter in section B of airline-vim. All combos will be always tracked, but by default not displayed (as of now) unless you use airline-vim. You can add ```%1*\[%{g:best_combo_all}|%{g:best_combo}\] %{g:combo_counter} ᛥ``` anywhere you'd like. If you know a good spot to place it by default, do contact me! I have no idea! If you just load this with a plugin manager, your combo will be tracked but not displayed anywhere. Current combo string is kept in `g:combo`, you can place it anywhere you'd like. If you don't have specific statusbar edits, you can add `set statusline=%{g:combo}` in your `.vimrc`.
Specific filetypes can be ignored (no combo will be counted while on them, and no best combo will be recorded). By default, .cmb files won't track combo. Note that none.cmb refers to files without extension, and should be in place (because the script does not create it). Specific filetypes can be ignored (no combo will be counted while on them, and no best combo will be recorded). By default, .cmb files won't track combo. Note that none.cmb refers to files without extension, and should be in place.
vim-combo should be pretty fast. It runs a lot but does very little (time difference, counter). If you have any issue contact me! vim-combo should be pretty fast. It runs a lot but does very little (time difference, counter). If you have any issue contact me!

View file

@ -1,20 +1,30 @@
*vim-combo.txt* Tracks keypresses in vim to build up combos *vim-combo.txt* Tracks keypresses in vim to build up combos
________________________________________________________________________________________________________/\\\______________________ _______________________________________________________________
________________________________________________________________________________________________________\/\\\______________________ ________________________________________________________________
__________________/\\\___________________________________________________________________________________\/\\\______________________ __________________/\\\___________________________________________
_____/\\\____/\\\_\///_____/\\\\\__/\\\\\____/\\\\\\\\\\\_____/\\\\\\\\_____/\\\\\_______/\\\\\__/\\\\\___\/\\\____________/\\\\\____ _____/\\\____/\\\_\///_____/\\\\\__/\\\\\_________________________
_____\//\\\__/\\\___/\\\__/\\\///\\\\\///\\\_\///////////____/\\\//////____/\\\///\\\___/\\\///\\\\\///\\\_\/\\\\\\\\\____/\\\///\\\__ _____\//\\\__/\\\___/\\\__/\\\///\\\\\///\\\_______________________
_______\//\\\/\\\___\/\\\_\/\\\_\//\\\__\/\\\________________/\\\__________/\\\__\//\\\_\/\\\_\//\\\__\/\\\_\/\\\////\\\__/\\\__\//\\\_ _______\//\\\/\\\___\/\\\_\/\\\_\//\\\__\/\\\_______________________
_________\//\\\\\____\/\\\_\/\\\__\/\\\__\/\\\_______________\//\\\________\//\\\__/\\\__\/\\\__\/\\\__\/\\\_\/\\\__\/\\\_\//\\\__/\\\__ _________\//\\\\\____\/\\\_\/\\\__\/\\\__\/\\\_______________________
___________\//\\\_____\/\\\_\/\\\__\/\\\__\/\\\________________\///\\\\\\\\__\///\\\\\/___\/\\\__\/\\\__\/\\\_\/\\\\\\\\\___\///\\\\\/___ ___________\//\\\_____\/\\\_\/\\\__\/\\\__\/\\\_______________________
_____________\///______\///__\///___\///___\///___________________\////////_____\/////_____\///___\///___\///__\/////////______\/////_____ _____________\///______\///__\///___\///___\///________________________
=========================================================================================================================================== ______________________________________________/\\\______________________
______________________________________________\/\\\______________________
_______________________________________________\/\\\______________________
____/\\\\\\\\_____/\\\\\_______/\\\\\__/\\\\\___\/\\\____________/\\\\\____
___/\\\//////____/\\\///\\\___/\\\///\\\\\///\\\_\/\\\\\\\\\____/\\\///\\\__
___/\\\__________/\\\__\//\\\_\/\\\_\//\\\__\/\\\_\/\\\////\\\__/\\\__\//\\\_
___\//\\\________\//\\\__/\\\__\/\\\__\/\\\__\/\\\_\/\\\__\/\\\_\//\\\__/\\\__
_____\///\\\\\\\\__\///\\\\\/___\/\\\__\/\\\__\/\\\_\/\\\\\\\\\___\///\\\\\/___
________\////////_____\/////_____\///___\///___\///__\/////////______\/////_____
=================================================================================
Each keystroke in insert mode increases your combo, Each keystroke in insert mode increases your combo,
but not typing for 1 second resets it. but not typing for 1 second (configurable) resets it.
The script is triggered whenever a text edit is detected in insert mode. The script is triggered whenever a text edit is detected in insert mode.
Progress is tracked per filetype (and stored in ~/.vim/.combo/). Progress is tracked per filetype (and stored in ~/.vim/.combo/).
By default inside the block B of airline vim a string x\|y\|z is By defa
displayed, where displayed, where
x is the current score x is the current score
y is the best score for this filetype y is the best score for this filetype
@ -22,12 +32,23 @@ displayed, where
When a new high score is achieved, it is automatically saved. When a new high score is achieved, it is automatically saved.
Each 10 points increases a combo bar next to the scores Each 10 points increases a combo bar next to the scores
If you get errors at launch, check that .combo folder exists. A none.cmb A string with your current score and your best score is kept in g:combo.
file should already be inside, create it if it is missing and place a 0 You can at any time show your score by running
inside. :echo g:combo
If you have a custom statusline, you can show current combo score there by
displaying g:combo. You can access best combo in g:combo_best and current
score in g:combo_counter, display them how you prefer.
If you just want to show your combo you can add
set statusline=%{g:combo}
to your .vimrc, but a plain statusline won't look very nice by itself.
You can change g:timeout to increase or decrease combo timeout.
If you get errors at launch, check wether you have a .vim folder in your home
folder and wether a .combo folder exists inside.
If you think you can help this little script, absolutely do contact me! If you think you can help this little script, absolutely do contact me!
There is a github (https://github.com/alemigliardi/vim-combo). I still know There is a github (https://github.com/alemigliardi/vim-combo).
very little of vim-script!
vim:tw=78:ts=8:ft=help:norl: vim:tw=78:ts=8:ft=help:norl:

View file

@ -25,7 +25,7 @@ endfor
" If file should be ignored, just set text, else continue with script " If file should be ignored, just set text, else continue with script
if g:disable_combo if g:disable_combo
let g:airline_section_b = airline#section#create(['[%{g:best_combo_all}] - ᛥ']) let g:combo = "N/A"
else else
" Find best score for current filetype. If none exists, start tracking " Find best score for current filetype. If none exists, start tracking
if filereadable(g:combo_file) if filereadable(g:combo_file)
@ -40,13 +40,8 @@ else
" Configure variables " Configure variables
let g:combo_counter = 0 " The actual combo variable let g:combo_counter = 0 " The actual combo variable
let g:timeout = 1 let g:timeout = 1
let g:combo = printf("[%d] 0", g:best_combo)
let g:last_combo = reltime() " Set current time as last combo time let g:last_combo = reltime() " Set current time as last combo time
hi User1 ctermfg=247 ctermbg=237
let g:status = '%1*[%{g:best_combo}] %{g:combo_counter} ᛥ%#airline_b#'
let g:status_max = '%1*[%{g:best_combo_all}|%{g:best_combo}] %{g:combo_counter} ᛥ%#airline_b#'
command ComboMaxOn let g:airline_section_b = airline#section#create([g:status_max]) | AirlineRefresh
command ComboMaxOff let g:airline_section_b = airline#section#create([g:status]) | AirlineRefresh
let g:airline_section_b = airline#section#create([g:status])
" Main check function, executed every time the file is changed " Main check function, executed every time the file is changed
function! UpdateCombo() function! UpdateCombo()
if reltimefloat(reltime(g:last_combo)) > g:timeout if reltimefloat(reltime(g:last_combo)) > g:timeout
@ -55,7 +50,7 @@ else
else else
let g:combo_counter +=1 let g:combo_counter +=1
endif endif
call UpdateColor() let g:combo = printf("[%d] %d", g:best_combo, g:combo_counter)
let g:last_combo = reltime() let g:last_combo = reltime()
endfunction endfunction
" Checks if a new combo has been achieved and saves it to file " Checks if a new combo has been achieved and saves it to file
@ -66,22 +61,6 @@ else
let g:best_combo = g:combo_counter let g:best_combo = g:combo_counter
endif endif
endfunction endfunction
" This is kind of sketchy but it works fast! Reloading is very slow
function! UpdateColor() " Hope User1 isn't used elsewhere?
if g:combo_counter == 1
hi User1 ctermfg=247 ctermbg=237
elseif g:combo_counter == 10
hi User1 ctermfg=2 ctermbg=237
elseif g:combo_counter == 30
hi User1 ctermfg=6 ctermbg=237
elseif g:combo_counter == 50
hi User1 ctermfg=5 ctermbg=237
elseif g:combo_counter == 70
hi User1 ctermfg=3 ctermbg=237
elseif g:combo_counter == 100
hi User1 ctermfg=1 ctermbg=237
endif
endfunction
autocmd TextChangedI * call UpdateCombo() " Every time text is changed, call combo function autocmd TextChangedI * call UpdateCombo() " Every time text is changed, call combo function
autocmd InsertLeave * call SaveCombo() autocmd InsertLeave * call SaveCombo()