popup-window.txt
通常のウィンドウの上に表示される
ポップアップウィンドウのテキストは編集できない
用途
メッセージ表示
ダイアログ表示
補完情報などを表示
zindex プロパティで重なりを設定できる
ウィンドウには ノーマル、ヴィジュアル、インサートモードにできない
やってみる
help に書いてあったコードを書いてみた
code:vim
let p_id = popup_create("hello world!", {
\ 'pos': 'botleft',
\ 'line': 'cursor-1',
\ 'col': 'cursor',
\ 'moved': 'WORD',
\})
echo p_id
これで、カーソル上に hello world と表示されるポップアップウィンドウが表示された!
カーソルを動かしたら、閉じた
オプション
time
ポップアップを表示する長さ
指定無しの場合、popup_close() が呼ばれるまで表示される
time を指定していない & popup_close() が呼ばれない 場合、閉じられることがなくなってしまう
頑張って、winid を取得するか、popup_clear() を呼び出すしかない
ポップアップフィルタ
ポップアップが表示されている間に押したキーを取得し、処理をするためのコールバック関数
ポップアップが非表示の場合、フィルタは呼び出されない
1 (True) を返すと、次のキーを読み込む (フィルターが続行される)
0 (False) を返すと、フィルターが破棄される
フィルタ関数は2つの引数を取る
ポップアップID(winid)
押したキー(key)
code:vim
function! MyFilter(winid, key) abort
if a:key == "\<F2>"
"do somethins
return 1
endif
if a:key == 'x'
call popup_close(a:winid)
return 1
endif
return 0
endfunction
x はポップアップを閉じるためのキーとしてよく使われる
具体的には popup_create の filter に指定する関数で常に return 1 を返してしまうと popup_close するタイミングが無くなり、終了する方法が無くなる → 積む
ポップアップコールバック
ポップアップが閉じたときに呼び出されるコールバック関数
2つの引数を取る
ポップアップウィンドウID(winid)
結果(result)
以下の値のいずれか
ポップアップウィンドウの行のインデックス
popup_close() の第2引数で渡された値
ポップアップウィンドウに対して処理を行う
コマンドを実行したい場合
win_execute() を使う
オプションを設定したい場合
setwinvar() を使う
popup window のバッファに設定する場合
setbufvar() も使える
call setbufvar(winbufnr(winid), '&filetype', 'java') みたいな
setbufvar でバッファに対して設定できる
winbufnr でウィンドウに関連付けられているバッファ番号を取得できる
すごいこれ、1つのことだけをやっているから、組み合わせることでいろいろなことが実現できるようになっている!