From 8a1a51e6fecbdef655ef4328f4611b8a5e544d39 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Thu, 24 Sep 2026 02:11:03 +0200 Subject: [PATCH] fix bugs with message hiding --- 1.vim | 826 ++++++-------------- src/Model/Chat/chatModel.ts | 14 +- src/Model/Files/fileModel.ts | 1 + src/Model/Global/storageModel.ts | 1 + src/ViewModel/Chat/chatMessageViewModel.ts | 170 ++-- src/ViewModel/Pages/messagePageViewModel.ts | 5 + 6 files changed, 348 insertions(+), 669 deletions(-) diff --git a/1.vim b/1.vim index f53d6bf7..1e3e52f4 100644 --- a/1.vim +++ b/1.vim @@ -12,8 +12,10 @@ inoremap coc#pum#visible() ? coc#pum#next(0) : coc#inline inoremap coc#pum#visible() ? coc#pum#prev(1) : coc#inline#visible() ? coc#inline#prev() : "\" inoremap coc#pum#visible() ? coc#pum#next(1) : coc#inline#visible() ? coc#inline#next() : "\" nnoremap  :NERDTreeFind +snoremap  c nnoremap  :NERDTree nmap  (ctrlp) +snoremap  "_c nnoremap  :NERDTreeToggle xmap \T (table-mode-tableize-delimiter) xmap \tt (table-mode-tableize) @@ -26,6 +28,10 @@ nnoremap \1 :call SN("1") nmap \rn (coc-rename) xmap gx NetrwBrowseXVis nmap gx NetrwBrowseX +snoremap "_c +snoremap c +snoremap c +snoremap c nnoremap GitGutterPreviewHunk :call gitgutter#utility#warn('Please change your map GitGutterPreviewHunk to (GitGutterPreviewHunk)') nnoremap (GitGutterPreviewHunk) :GitGutterPreviewHunk nnoremap GitGutterUndoHunk :call gitgutter#utility#warn('Please change your map GitGutterUndoHunk to (GitGutterUndoHunk)') @@ -132,6 +138,7 @@ set shiftwidth=4 set smarttab set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc set updatetime=500 +set window=39 set winminheight=0 set winminwidth=0 let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 @@ -147,19 +154,25 @@ if &shortmess =~ 'A' else set shortmess=aoO endif -badd +1 src/ViewModel/Pages/messagePageViewModel.ts +badd +131 src/ViewModel/Pages/messagePageViewModel.ts badd +1 src/ViewModel/Chat/chatMessageViewModel.ts -badd +1 src/Model/Chat/chatModel.ts -badd +37 src/View/Components/chatMessage.tsx -badd +19 src/View/Components/inlineReply.tsx -badd +0 src/View/Components/replyLink.tsx -badd +0 src/View/translations.ts +badd +482 src/Model/Chat/chatModel.ts +badd +14 src/View/Components/chatMessage.tsx +badd +1 src/View/Components/inlineReply.tsx +badd +5 src/View/Components/replyLink.tsx +badd +874 src/View/translations.ts +badd +266 src/View/chatPage.css +badd +19 src/View/ChatPages/messagePage.css +badd +7 src/View/Components/replyViewHeader.tsx +badd +0 src/View/ChatPages/messagePage.tsx +badd +80 src/View/Modals/messageFilterModal.tsx +badd +10 src/View/Components/monthGrid.tsx +badd +25 src/ViewModel/Global/coreViewModel.ts argglobal %argdel set stal=2 tabnew +setlocal\ bufhidden=wipe tabnew +setlocal\ bufhidden=wipe -tabnew +setlocal\ bufhidden=wipe tabrewind edit src/ViewModel/Pages/messagePageViewModel.ts let s:save_splitbelow = &splitbelow @@ -181,9 +194,9 @@ set winminheight=0 set winheight=1 set winminwidth=0 set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 75 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 75 + 91) / 183) argglobal enew file NERD_tree_tab_1 @@ -376,6 +389,7 @@ setlocal nowrap setlocal wrapmargin=0 wincmd w argglobal +balt src/ViewModel/Global/coreViewModel.ts let s:cpo_save=&cpo set cpo&vim nmap [c (GitGutterPrevHunk) @@ -523,12 +537,12 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 13 - ((12 * winheight(0) + 16) / 33) +let s:l = 21 - ((18 * winheight(0) + 18) / 37) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 13 -normal! 054| +keepjumps 21 +normal! $ wincmd w argglobal if bufexists(fnamemodify("src/ViewModel/Chat/chatMessageViewModel.ts", ":p")) | buffer src/ViewModel/Chat/chatMessageViewModel.ts | else | edit src/ViewModel/Chat/chatMessageViewModel.ts | endif @@ -680,18 +694,19 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 137 - ((20 * winheight(0) + 16) / 33) +let s:l = 202 - ((23 * winheight(0) + 18) / 37) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 137 -normal! 048| +keepjumps 202 +normal! 042| wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +3wincmd w +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 75 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 75 + 91) / 183) tabnext -edit src/Model/Chat/chatModel.ts +edit src/View/ChatPages/messagePage.css let s:save_splitbelow = &splitbelow let s:save_splitright = &splitright set splitbelow splitright @@ -711,531 +726,9 @@ set winminheight=0 set winheight=1 set winminwidth=0 set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) -argglobal -enew -file NERD_tree_tab_3 -balt src/Model/Chat/chatModel.ts -let s:cpo_save=&cpo -set cpo&vim -nnoremap :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap ? :call nerdtree#ui_glue#invokeKeyMap("?") -nnoremap A :call nerdtree#ui_glue#invokeKeyMap("A") -nnoremap B :call nerdtree#ui_glue#invokeKeyMap("B") -nnoremap C :call nerdtree#ui_glue#invokeKeyMap("C") -nnoremap CD :call nerdtree#ui_glue#invokeKeyMap("CD") -nnoremap D :call nerdtree#ui_glue#invokeKeyMap("D") -nnoremap FL :call nerdtree#ui_glue#invokeKeyMap("FL") -nnoremap F :call nerdtree#ui_glue#invokeKeyMap("F") -nnoremap I :call nerdtree#ui_glue#invokeKeyMap("I") -nnoremap J :call nerdtree#ui_glue#invokeKeyMap("J") -nnoremap K :call nerdtree#ui_glue#invokeKeyMap("K") -nnoremap O :call nerdtree#ui_glue#invokeKeyMap("O") -nnoremap P :call nerdtree#ui_glue#invokeKeyMap("P") -nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") -nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") -nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") -nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") -nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") -nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") -nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") -nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") -nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") -nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") -nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") -nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") -nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") -nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") -nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") -nnoremap q :call nerdtree#ui_glue#invokeKeyMap("q") -nnoremap r :call nerdtree#ui_glue#invokeKeyMap("r") -nnoremap s :call nerdtree#ui_glue#invokeKeyMap("s") -nnoremap t :call nerdtree#ui_glue#invokeKeyMap("t") -nnoremap u :call nerdtree#ui_glue#invokeKeyMap("u") -nnoremap x :call nerdtree#ui_glue#invokeKeyMap("x") -nnoremap :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap <2-LeftMouse> :call nerdtree#ui_glue#invokeKeyMap("<2-LeftMouse>") -nnoremap :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap :call nerdtree#ui_glue#invokeKeyMap("") -nnoremap :call nerdtree#ui_glue#invokeKeyMap("") -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal keymap= -setlocal noarabic -setlocal noautoindent -setlocal backupcopy= -setlocal balloonexpr= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden=hide -setlocal nobuflisted -setlocal buftype=nofile -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinscopedecls=public,protected,private -setlocal cinwords=if,else,while,do,for,switch -setlocal colorcolumn= -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal concealcursor=nvic -setlocal conceallevel=2 -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal cursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal noexpandtab -if &filetype != 'nerdtree' -setlocal filetype=nerdtree -endif -setlocal fillchars= -setlocal fixendofline -setlocal foldcolumn=0 -setlocal nofoldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal lispoptions= -setlocal lispwords= -setlocal nolist -setlocal listchars= -setlocal makeencoding= -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal nomodifiable -setlocal nrformats=bin,octal,hex -set number -setlocal nonumber -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal readonly -setlocal norelativenumber -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -set signcolumn=yes -setlocal signcolumn=yes -setlocal nosmartindent -setlocal nosmoothscroll -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal spelloptions= -setlocal statusline=%{exists('b:NERDTree')?b:NERDTree.root.path.str():''} -setlocal suffixesadd= -setlocal noswapfile -setlocal synmaxcol=3000 -if &syntax != 'nerdtree' -setlocal syntax=nerdtree -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal thesaurusfunc= -setlocal noundofile -setlocal undolevels=-123456 -setlocal varsofttabstop= -setlocal vartabstop= -setlocal virtualedit= -setlocal wincolor= -setlocal nowinfixheight -setlocal winfixwidth -setlocal nowrap -setlocal wrapmargin=0 -wincmd w -argglobal -balt src/ViewModel/Chat/chatMessageViewModel.ts -let s:cpo_save=&cpo -set cpo&vim -nmap [c (GitGutterPrevHunk) -nmap \hp (GitGutterPreviewHunk) -nmap \hu (GitGutterUndoHunk) -nmap \hs (GitGutterStageHunk) -xmap \hs (GitGutterStageHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal backupcopy= -setlocal balloonexpr= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinscopedecls=public,protected,private -setlocal cinwords=if,else,while,do,for,switch -setlocal colorcolumn= -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=//\ %s -setlocal complete=.,w,b,u,t,i -setlocal concealcursor= -setlocal conceallevel=0 -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal nocursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m -setlocal noexpandtab -if &filetype != 'typescript' -setlocal filetype=typescript -endif -setlocal fillchars= -setlocal fixendofline -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=croql -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include= -setlocal includeexpr= -setlocal indentexpr=GetTypescriptIndent() -setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e,0],0) -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255,$ -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal lispoptions= -setlocal lispwords= -setlocal nolist -setlocal listchars= -setlocal makeencoding= -setlocal makeprg=tsc\ \ $*\ % -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=bin,octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norelativenumber -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -set signcolumn=yes -setlocal signcolumn=yes -setlocal nosmartindent -setlocal nosmoothscroll -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal spelloptions= -setlocal statusline= -setlocal suffixesadd=.ts,.tsx -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'typescript' -setlocal syntax=typescript -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal thesaurusfunc= -setlocal noundofile -setlocal undolevels=-123456 -setlocal varsofttabstop= -setlocal vartabstop= -setlocal virtualedit= -setlocal wincolor= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let &fdl = &fdl -let s:l = 483 - ((5 * winheight(0) + 16) / 33) -if s:l < 1 | let s:l = 1 | endif -keepjumps exe s:l -normal! zt -keepjumps 483 -normal! $ -wincmd w -argglobal -if bufexists(fnamemodify("src/Model/Chat/chatModel.ts", ":p")) | buffer src/Model/Chat/chatModel.ts | else | edit src/Model/Chat/chatModel.ts | endif -balt src/ViewModel/Chat/chatMessageViewModel.ts -let s:cpo_save=&cpo -set cpo&vim -nmap [c (GitGutterPrevHunk) -nmap \hp (GitGutterPreviewHunk) -nmap \hu (GitGutterUndoHunk) -nmap \hs (GitGutterStageHunk) -xmap \hs (GitGutterStageHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) -let &cpo=s:cpo_save -unlet s:cpo_save -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal backupcopy= -setlocal balloonexpr= -setlocal nobinary -setlocal nobreakindent -setlocal breakindentopt= -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinscopedecls=public,protected,private -setlocal cinwords=if,else,while,do,for,switch -setlocal colorcolumn= -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=//\ %s -setlocal complete=.,w,b,u,t,i -setlocal concealcursor= -setlocal conceallevel=0 -setlocal completefunc= -setlocal nocopyindent -setlocal cryptmethod= -setlocal nocursorbind -setlocal nocursorcolumn -setlocal nocursorline -setlocal cursorlineopt=both -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m -setlocal noexpandtab -if &filetype != 'typescript' -setlocal filetype=typescript -endif -setlocal fillchars= -setlocal fixendofline -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=croql -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal formatprg= -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=-1 -setlocal include= -setlocal includeexpr= -setlocal indentexpr=GetTypescriptIndent() -setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e,0],0) -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255,$ -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal lispoptions= -setlocal lispwords= -setlocal nolist -setlocal listchars= -setlocal makeencoding= -setlocal makeprg=tsc\ \ $*\ % -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=bin,octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norelativenumber -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal scrolloff=-1 -setlocal shiftwidth=4 -setlocal noshortname -setlocal showbreak= -setlocal sidescrolloff=-1 -set signcolumn=yes -setlocal signcolumn=yes -setlocal nosmartindent -setlocal nosmoothscroll -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal spelloptions= -setlocal statusline= -setlocal suffixesadd=.ts,.tsx -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'typescript' -setlocal syntax=typescript -endif -setlocal tabstop=8 -setlocal tagcase= -setlocal tagfunc= -setlocal tags= -setlocal termwinkey= -setlocal termwinscroll=10000 -setlocal termwinsize= -setlocal textwidth=0 -setlocal thesaurus= -setlocal thesaurusfunc= -setlocal noundofile -setlocal undolevels=-123456 -setlocal varsofttabstop= -setlocal vartabstop= -setlocal virtualedit= -setlocal wincolor= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let &fdl = &fdl -let s:l = 491 - ((0 * winheight(0) + 16) / 33) -if s:l < 1 | let s:l = 1 | endif -keepjumps exe s:l -normal! zt -keepjumps 491 -normal! $ -wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) -tabnext -edit src/View/Components/chatMessage.tsx -let s:save_splitbelow = &splitbelow -let s:save_splitright = &splitright -set splitbelow splitright -wincmd _ | wincmd | -vsplit -wincmd _ | wincmd | -vsplit -2wincmd h -wincmd w -wincmd w -let &splitbelow = s:save_splitbelow -let &splitright = s:save_splitright -wincmd t -let s:save_winminheight = &winminheight -let s:save_winminwidth = &winminwidth -set winminheight=0 -set winheight=1 -set winminwidth=0 -set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 95 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 86 + 91) / 183) argglobal enew file NERD_tree_tab_4 @@ -1429,7 +922,7 @@ setlocal nowrap setlocal wrapmargin=0 wincmd w argglobal -balt src/Model/Chat/chatModel.ts +balt src/View/Components/monthGrid.tsx let s:cpo_save=&cpo set cpo&vim nmap [c (GitGutterPrevHunk) @@ -1446,7 +939,7 @@ let &cpo=s:cpo_save unlet s:cpo_save setlocal keymap= setlocal noarabic -setlocal autoindent +setlocal noautoindent setlocal backupcopy= setlocal balloonexpr= setlocal nobinary @@ -1461,8 +954,8 @@ setlocal cinoptions= setlocal cinscopedecls=public,protected,private setlocal cinwords=if,else,while,do,for,switch setlocal colorcolumn= -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=//\ %s +setlocal comments=s1:/*,mb:*,ex:*/ +setlocal commentstring=/*%s*/ setlocal complete=.,w,b,u,t,i setlocal concealcursor= setlocal conceallevel=0 @@ -1477,10 +970,10 @@ setlocal define= setlocal dictionary= setlocal nodiff setlocal equalprg= -setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal errorformat= setlocal noexpandtab -if &filetype != 'typescriptreact' -setlocal filetype=typescriptreact +if &filetype != 'css' +setlocal filetype=css endif setlocal fillchars= setlocal fixendofline @@ -1501,12 +994,12 @@ setlocal formatprg= setlocal grepprg= setlocal iminsert=0 setlocal imsearch=-1 -setlocal include= +setlocal include=^\\s*@import\\s\\+\\%(url(\\)\\= setlocal includeexpr= -setlocal indentexpr=GetTsxIndent() -setlocal indentkeys=0{,0},0),0],0,,!^F,o,O,e,*,<>>,<<>,/ +setlocal indentexpr=GetCSSIndent() +setlocal indentkeys=0{,0},!^F,o,O setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255,$ +setlocal iskeyword=@,48-57,_,192-255,- setlocal keywordprg= setlocal nolinebreak setlocal nolisp @@ -1515,7 +1008,7 @@ setlocal lispwords= setlocal nolist setlocal listchars= setlocal makeencoding= -setlocal makeprg=tsc\ \ $*\ % +setlocal makeprg= setlocal matchpairs=(:),{:},[:] setlocal nomodeline setlocal modifiable @@ -1523,7 +1016,7 @@ setlocal nrformats=bin,octal,hex set number setlocal number setlocal numberwidth=4 -setlocal omnifunc= +setlocal omnifunc=csscomplete#CompleteCSS setlocal path= setlocal nopreserveindent setlocal nopreviewwindow @@ -1549,11 +1042,11 @@ setlocal spellfile= setlocal spelllang=en setlocal spelloptions= setlocal statusline= -setlocal suffixesadd=.ts,.tsx +setlocal suffixesadd= setlocal swapfile setlocal synmaxcol=3000 -if &syntax != 'typescriptreact' -setlocal syntax=typescriptreact +if &syntax != 'css' +setlocal syntax=css endif setlocal tabstop=8 setlocal tagcase= @@ -1577,18 +1070,22 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 39 - ((14 * winheight(0) + 16) / 33) +let s:l = 22 - ((21 * winheight(0) + 21) / 42) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 39 +keepjumps 22 normal! $ wincmd w argglobal -if bufexists(fnamemodify("src/View/Components/replyLink.tsx", ":p")) | buffer src/View/Components/replyLink.tsx | else | edit src/View/Components/replyLink.tsx | endif -balt src/View/Components/inlineReply.tsx +if bufexists(fnamemodify("src/View/ChatPages/messagePage.tsx", ":p")) | buffer src/View/ChatPages/messagePage.tsx | else | edit src/View/ChatPages/messagePage.tsx | endif +balt src/View/Components/replyViewHeader.tsx let s:cpo_save=&cpo set cpo&vim +imap :call coc#snippet#jump(0, 0) +imap :call coc#snippet#jump(1, 0) +smap :call coc#snippet#jump(1, 0) +smap  :call coc#snippet#jump(0, 0) nmap [c (GitGutterPrevHunk) nmap \hp (GitGutterPreviewHunk) nmap \hu (GitGutterUndoHunk) @@ -1599,6 +1096,10 @@ xmap ac (GitGutterTextObjectOuterVisual) omap ac (GitGutterTextObjectOuterPending) xmap ic (GitGutterTextObjectInnerVisual) omap ic (GitGutterTextObjectInnerPending) +smap :call coc#snippet#jump(0, 0) +smap :call coc#snippet#jump(1, 0) +imap :call coc#snippet#jump(1, 0) +imap  :call coc#snippet#jump(0, 0) let &cpo=s:cpo_save unlet s:cpo_save setlocal keymap= @@ -1734,24 +1235,27 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 6 - ((5 * winheight(0) + 16) / 33) +let s:l = 69 - ((26 * winheight(0) + 21) / 42) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 6 -normal! 055| +keepjumps 69 +normal! $ wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) -exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 95 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 86 + 91) / 183) tabnext -edit src/View/translations.ts +edit src/ViewModel/Global/coreViewModel.ts let s:save_splitbelow = &splitbelow let s:save_splitright = &splitright set splitbelow splitright wincmd _ | wincmd | vsplit -1wincmd h +wincmd _ | wincmd | +vsplit +2wincmd h +wincmd w wincmd w let &splitbelow = s:save_splitbelow let &splitright = s:save_splitright @@ -1762,8 +1266,9 @@ set winminheight=0 set winheight=1 set winminwidth=0 set winwidth=1 -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 191 + 111) / 223) +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 90 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 91 + 91) / 183) argglobal enew file NERD_tree_tab_5 @@ -1957,6 +1462,163 @@ setlocal nowrap setlocal wrapmargin=0 wincmd w argglobal +balt src/View/translations.ts +let s:cpo_save=&cpo +set cpo&vim +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=//\ %s +setlocal complete=.,w,b,u,t,i +setlocal concealcursor= +setlocal conceallevel=0 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal nocursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal noexpandtab +if &filetype != 'typescript' +setlocal filetype=typescript +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=croql +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr=GetTypescriptIndent() +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e,0],0) +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255,$ +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg=tsc\ \ $*\ % +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=bin,octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline= +setlocal suffixesadd=.ts,.tsx +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'typescript' +setlocal syntax=typescript +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let &fdl = &fdl +let s:l = 12 - ((4 * winheight(0) + 21) / 42) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 12 +normal! 038| +wincmd w +argglobal +if bufexists(fnamemodify("src/View/translations.ts", ":p")) | buffer src/View/translations.ts | else | edit src/View/translations.ts | endif balt src/View/Components/replyLink.tsx let s:cpo_save=&cpo set cpo&vim @@ -2105,17 +1767,17 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 183 - ((12 * winheight(0) + 16) / 33) +let s:l = 879 - ((22 * winheight(0) + 21) / 42) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 183 -normal! $ +keepjumps 879 +normal! 065| wincmd w -2wincmd w -exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) -exe 'vert 2resize ' . ((&columns * 191 + 111) / 223) -tabnext 4 +exe 'vert 1resize ' . ((&columns * 31 + 91) / 183) +exe 'vert 2resize ' . ((&columns * 90 + 91) / 183) +exe 'vert 3resize ' . ((&columns * 91 + 91) / 183) +tabnext 1 set stal=1 if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 silent exe 'bwipe ' . s:wipebuf diff --git a/src/Model/Chat/chatModel.ts b/src/Model/Chat/chatModel.ts index 8f31150e..8406e170 100644 --- a/src/Model/Chat/chatModel.ts +++ b/src/Model/Chat/chatModel.ts @@ -95,6 +95,10 @@ export default class ChatModel { return [...this.getReactionDirPath(), id]; }; + readonly getPreviousFilterPath = (): string[] => { + return [StorageModelSubPaths.Chat, ...filePaths.chat.previousFilter(this.id)]; + } + // handlers readonly handleMessage = (body: string): void => { const chatMessage: ChatMessage | null = parseValidObject( @@ -265,6 +269,14 @@ export default class ChatModel { this.storageModel.write(this.getColorPath(), this.color); }; + readonly storeFilter = (filter: string): void => { + this.storageModel.write(this.getPreviousFilterPath(), filter); + } + + readonly getFilter = (): string => { + return this.storageModel.read(this.getPreviousFilterPath()); + } + readonly delete = () => { // untrack this.chatListModel.untrackChat(this); @@ -541,4 +553,4 @@ export const ChatMessageReactionReference: ChatMessageReaction = { content: "", isDeleting: false, -}; +} diff --git a/src/Model/Files/fileModel.ts b/src/Model/Files/fileModel.ts index 5ee7db4e..4b895b9b 100644 --- a/src/Model/Files/fileModel.ts +++ b/src/Model/Files/fileModel.ts @@ -200,6 +200,7 @@ export default class FileModel { export enum FileModelSubPath { Data = "data", Model = "model", + Chat = "chat", ModelView = "view", ModelTask = "tasks", ModelCalendar = "calendar", diff --git a/src/Model/Global/storageModel.ts b/src/Model/Global/storageModel.ts index 679e5268..5a0340c4 100644 --- a/src/Model/Global/storageModel.ts +++ b/src/Model/Global/storageModel.ts @@ -254,6 +254,7 @@ export const filePaths = { ...filePaths.chat.chatBase(id), "reactions", ], + previousFilter: (id: string) => [...filePaths.chat.chatBase(id), "previous-filter"], lastUsedPage: (id: string) => [ ...filePaths.chat.chatBase(id), "last-used-page", diff --git a/src/ViewModel/Chat/chatMessageViewModel.ts b/src/ViewModel/Chat/chatMessageViewModel.ts index 790ba155..52cdb1a9 100644 --- a/src/ViewModel/Chat/chatMessageViewModel.ts +++ b/src/ViewModel/Chat/chatMessageViewModel.ts @@ -99,109 +99,107 @@ export default class ChatMessageViewModel { this.isPresentingInfoModal.value = false; }; + toggleHiding = (): void => { + let hideForReactions: boolean = false; + let hideForReplyView: boolean = false; + + // reactions + const reactionFilter = this.messagePageViewModel.reactionFilter.value; + if (reactionFilter == undefined) { + hideForReactions = false; + } else { + let count: number = 0; + switch (reactionFilter) { + case ReactionSymbols.ThumbsUp: { + count = this.reactionsThumbsUpCount.value; + break; + } + case ReactionSymbols.Check: { + count = this.reactionsCheckCount.value; + break; + } + case ReactionSymbols.Stop: { + count = this.reactionsStopCount.value; + break; + } + case ReactionSymbols.Attention: { + count = this.reactionsAttentionCount.value; + break; + } + case ReactionSymbols.DoubleAttention: { + count = this.reactionsDoubleAttentionCount.value; + break; + } + case ReactionSymbols.Question: { + count = this.reactionsQuestionCount.value; + break; + } + } + hideForReactions = count == 0; + } + + // reply + const selectedMessage = this.messagePageViewModel.replyViewSelectedMessage.value; + if (selectedMessage == undefined) hideForReplyView = false; + else if (selectedMessage.chatMessage.id == this.chatMessage.id) hideForReplyView = false; + else if (this.inlineReply != undefined && selectedMessage.chatMessage.id == this.inlineReply.chatMessage.id) hideForReplyView = false; + else hideForReplyView = true; + + this.isHidden.value = hideForReactions || hideForReplyView; + } + // reactions handleReaction = (reaction: ChatMessageReaction): void => { - if (reaction.isDeleting) { - this.allReactions.remove(reaction.sender); - } else { - this.allReactions.set(reaction.sender, reaction); - } + if (reaction.isDeleting) { + this.allReactions.remove(reaction.sender); + } else { + this.allReactions.set(reaction.sender, reaction); + } - if (reaction.sender != this.coreViewModel.settingsModel.username) - return; - this.userReaction.value = reaction.isDeleting - ? undefined - : reaction.content; + if (reaction.sender != this.coreViewModel.settingsModel.username) + return; + this.userReaction.value = reaction.isDeleting + ? undefined + : reaction.content; }; sendReaction = (content: ReactionSymbols, isDeleting: boolean): void => { - this.messagePageViewModel.sendReaction( - this.chatMessage.id, - content, - isDeleting, - ); + this.messagePageViewModel.sendReaction( + this.chatMessage.id, + content, + isDeleting, + ); }; // load loadData = (): void => { - this.channel = this.chatMessage.channel; - this.sender = this.chatMessage.sender; - this.dateSent = new Date(this.chatMessage.dateSent).toLocaleString(); - this.body.value = this.chatMessage.body; - this.status.value = this.chatMessage.status; + this.channel = this.chatMessage.channel; + this.sender = this.chatMessage.sender; + this.dateSent = new Date(this.chatMessage.dateSent).toLocaleString(); + this.body.value = this.chatMessage.body; + this.status.value = this.chatMessage.status; - if (this.chatMessage.inlineReplyId) { - this.inlineReply = - this.messagePageViewModel.chatMessageViewModels.value.get( - this.chatMessage.inlineReplyId, - ); + if (this.chatMessage.inlineReplyId) { + this.inlineReply = + this.messagePageViewModel.chatMessageViewModels.value.get( + this.chatMessage.inlineReplyId, + ); this.inlineReply.replies.set(this.chatMessage.id, this); - } + } }; // init constructor( - public readonly coreViewModel: CoreViewModel, - public readonly messagePageViewModel: MessagePageViewModel, - chatMessage: ChatMessage, - sentByUser: boolean, + public readonly coreViewModel: CoreViewModel, + public readonly messagePageViewModel: MessagePageViewModel, + chatMessage: ChatMessage, + sentByUser: boolean, ) { - this.chatMessage = chatMessage; - this.sentByUser = sentByUser; - this.loadData(); + this.chatMessage = chatMessage; + this.sentByUser = sentByUser; + this.loadData(); - let hideForReactions: boolean = false; - let hideForReplyView: boolean = false; - - const updateHiding = () => { - this.isHidden.value = hideForReactions || hideForReplyView; - } - - this.messagePageViewModel.reactionFilter.subscribe((content) => { - if (content == undefined) { - hideForReactions = false; - updateHiding(); - return; - } - - let count: number = 0; - switch (content) { - case ReactionSymbols.ThumbsUp: { - count = this.reactionsThumbsUpCount.value; - break; - } - case ReactionSymbols.Check: { - count = this.reactionsCheckCount.value; - break; - } - case ReactionSymbols.Stop: { - count = this.reactionsStopCount.value; - break; - } - case ReactionSymbols.Attention: { - count = this.reactionsAttentionCount.value; - break; - } - case ReactionSymbols.DoubleAttention: { - count = this.reactionsDoubleAttentionCount.value; - break; - } - case ReactionSymbols.Question: { - count = this.reactionsQuestionCount.value; - break; - } - } - - hideForReactions = count == 0; - updateHiding(); - }); - - this.messagePageViewModel.replyViewSelectedMessage.subscribe(selectedMessage => { - if (selectedMessage == undefined) hideForReplyView = false; - else if (selectedMessage.chatMessage.id == this.chatMessage.id) hideForReplyView = false; - else if (this.inlineReply != undefined && selectedMessage.chatMessage.id == this.inlineReply.chatMessage.id) hideForReplyView = false; - else hideForReplyView = true; - updateHiding(); - }); + React.bulkSubscribe([this.messagePageViewModel.reactionFilter, this.messagePageViewModel.replyViewSelectedMessage, this.allReactions], this.toggleHiding); + this.toggleHiding(); } } diff --git a/src/ViewModel/Pages/messagePageViewModel.ts b/src/ViewModel/Pages/messagePageViewModel.ts index d1d46753..7cc679c8 100644 --- a/src/ViewModel/Pages/messagePageViewModel.ts +++ b/src/ViewModel/Pages/messagePageViewModel.ts @@ -127,10 +127,12 @@ export default class MessagePageViewModel extends Context { revokeReactionFilter = (): void => { this.reactionFilter.value = undefined; + this.chatViewModel.chatModel.storeFilter(""); }; setReactionFilter = (content: ReactionSymbols): void => { this.reactionFilter.value = content; + this.chatViewModel.chatModel.storeFilter(content); }; resetFilter = (): void => { @@ -196,6 +198,9 @@ export default class MessagePageViewModel extends Context { this.reactionFilter.value != undefined, ); + const previousFilter = this.chatViewModel.chatModel.getFilter() as any; + if (Object.values(ReactionSymbols).includes(previousFilter)) this.setReactionFilter(previousFilter); + // keystrokes this.registerKeyStroke(CommonKeys.Filter, this.showFilterModal); this.registerKeyStroke(CommonKeys.CloseOrCancel, () => {