From 60c418e1224bf9c0ad68eb0187165d4eea7b69d6 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Fri, 26 Dec 2025 09:03:58 +0900 Subject: [PATCH 1/3] feat: passphrase in closure --- autoload/pass/get.vim | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/autoload/pass/get.vim b/autoload/pass/get.vim index ea3d2e5..7c360f4 100644 --- a/autoload/pass/get.vim +++ b/autoload/pass/get.vim @@ -69,28 +69,38 @@ endfunction " '' or passphrase function! pass#get#passphrase() abort - if exists('s:_passphrase') - return s:_passphrase + if exists('s:_get_passphrase') + return s:_get_passphrase() endif " passphrase detect - let s:_passphrase = '' if g:pass_use_agent " work pinentry - return s:_passphrase + return '' endif " check loop + let s:_passphrase = '' + for i in range(g:pass_passphrase_verify_retry) let s:_passphrase = inputsecret('passphrase: ') " verify if pass#util#passphrase_verify(pass#get#id(), s:_passphrase) " success redraw! + " setup passphrase closure + function s:_generate_get_passphrase_closure(_passphrase) + return {-> a:_passphrase} + endfunction + + let s:_get_passphrase = s:_generate_get_passphrase_closure(s:_passphrase) + unlet s:_passphrase " exit break endif + unlet s:_passphrase + " failure redraw! if (i + 1) == g:pass_passphrase_verify_retry @@ -98,7 +108,6 @@ function! pass#get#passphrase() abort \ string(i + 1) . '/' . \ string(g:pass_passphrase_verify_retry) . ']' . \ ' abort' - unlet s:_passphrase throw 'vim-pss: passphrase verify all failed' else echo 'passphrase verify failed [' . From ba80a97610ae1563e8410e27870df23ab92398c9 Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sun, 28 Dec 2025 09:33:48 +0900 Subject: [PATCH 2/3] fix: treat some code --- autoload/pass/get.vim | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/autoload/pass/get.vim b/autoload/pass/get.vim index 7c360f4..bebe78e 100644 --- a/autoload/pass/get.vim +++ b/autoload/pass/get.vim @@ -89,11 +89,12 @@ function! pass#get#passphrase() abort " success redraw! " setup passphrase closure - function s:_generate_get_passphrase_closure(_passphrase) - return {-> a:_passphrase} + function! s:_generate_get_passphrase_closure(passphrase) + return {-> a:passphrase} endfunction let s:_get_passphrase = s:_generate_get_passphrase_closure(s:_passphrase) + unlet s:_passphrase " exit break @@ -119,7 +120,10 @@ function! pass#get#passphrase() abort endif endfor - return get(s:, '_passphrase', '') + if exists('s:_get_passphrase') + return s:_get_passphrase() + endif + return '' endfunction " path From a9ff7a09eb2ca9c66f7b7cbe63b6f3ef2c572c0a Mon Sep 17 00:00:00 2001 From: Tsuyoshi CHO Date: Sun, 28 Dec 2025 09:38:03 +0900 Subject: [PATCH 3/3] fix: more code --- autoload/pass/get.vim | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/autoload/pass/get.vim b/autoload/pass/get.vim index bebe78e..a0eec2c 100644 --- a/autoload/pass/get.vim +++ b/autoload/pass/get.vim @@ -109,6 +109,7 @@ function! pass#get#passphrase() abort \ string(i + 1) . '/' . \ string(g:pass_passphrase_verify_retry) . ']' . \ ' abort' + " All failed, throw exception throw 'vim-pss: passphrase verify all failed' else echo 'passphrase verify failed [' . @@ -120,10 +121,8 @@ function! pass#get#passphrase() abort endif endfor - if exists('s:_get_passphrase') - return s:_get_passphrase() - endif - return '' + " Passed verification + return s:_get_passphrase() endfunction " path