summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-01-17 00:57:53 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-01-17 01:03:16 +0900
commitb46e40e86b9580ec43a6ce62d49c59d7748c3176 (patch)
tree5e6258ff7810da9d78c84116270fc298adc43d59
parenta6d6cdd1654f5e8c7d700bb491d9506ad60bec32 (diff)
[vim] Automatically set RUNEWIDTH_EASTASIAN=1 when &ambiwidth == double
-rw-r--r--CHANGELOG.md1
-rw-r--r--plugin/fzf.vim13
2 files changed, 14 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f259cfb5..4ca63072 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -92,6 +92,7 @@ CHANGELOG
for `--border-label`)
- Better support for (Windows) terminals where each box-drawing character
takes 2 columns. Set `RUNEWIDTH_EASTASIAN` environment variable to `1`.
+ - On Vim, the variable will be automatically set if `&ambiwidth` is `double`
- Behavior changes
- fzf will always execute the preview command if the command template
contains `{q}` even when it's empty. If you prefer the old behavior,
diff --git a/plugin/fzf.vim b/plugin/fzf.vim
index 7a754515..06c3a7f6 100644
--- a/plugin/fzf.vim
+++ b/plugin/fzf.vim
@@ -830,6 +830,17 @@ if exists(':tnoremap')
tnoremap <silent> <Plug>(fzf-normal) <C-\><C-n>
endif
+let s:warned = 0
+function! s:handle_ambidouble(dict)
+ if &ambiwidth == 'double'
+ let a:dict.env = { 'RUNEWIDTH_EASTASIAN': '1' }
+ elseif !s:warned && $RUNEWIDTH_EASTASIAN == '1' && &ambiwidth !=# 'double'
+ call s:warn("$RUNEWIDTH_EASTASIAN is '1' but &ambiwidth is not 'double'")
+ 2sleep
+ let s:warned = 1
+ endif
+endfunction
+
function! s:execute_term(dict, command, temps) abort
let winrest = winrestcmd()
let pbuf = bufnr('')
@@ -899,6 +910,7 @@ function! s:execute_term(dict, command, temps) abort
endif
let command .= s:term_marker
if has('nvim')
+ call s:handle_ambidouble(fzf)
call termopen(command, fzf)
else
let term_opts = {'exit_cb': function(fzf.on_exit)}
@@ -910,6 +922,7 @@ function! s:execute_term(dict, command, temps) abort
else
let term_opts.curwin = 1
endif
+ call s:handle_ambidouble(term_opts)
let fzf.buf = term_start([&shell, &shellcmdflag, command], term_opts)
if is_popup && exists('#TerminalWinOpen')
doautocmd <nomodeline> TerminalWinOpen