From b46e40e86b9580ec43a6ce62d49c59d7748c3176 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Tue, 17 Jan 2023 00:57:53 +0900 Subject: [PATCH] [vim] Automatically set RUNEWIDTH_EASTASIAN=1 when &ambiwidth == double --- CHANGELOG.md | 1 + plugin/fzf.vim | 13 +++++++++++++ 2 files changed, 14 insertions(+) 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 (fzf-normal) 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 TerminalWinOpen