1
- *popup.txt* For Vim バージョン 8.2. Last change: 2022 Jun 06
1
+ *popup.txt* For Vim バージョン 8.2. Last change: 2022 Jun 16
2
2
3
3
4
4
VIMリファレンスマニュアル by Bram Moolenaar
@@ -986,9 +986,7 @@ Note "x" はポップアップを閉じる通常の方法である。Escを使
986
986
==============================================================================
987
987
4. 例 *popup-examples*
988
988
989
- These examples use | Vim9 | script.
990
-
991
- TODO: もっと興味深い例
989
+ 以下の例では | Vim9 | script を使う。
992
990
993
991
*popup_dialog-example*
994
992
ユーザーに y/Y か n/N を押すように促す: >
@@ -1002,89 +1000,85 @@ TODO: もっと興味深い例
1002
1000
echomsg "'y' or 'Y' was NOT pressed"
1003
1001
endif
1004
1002
},
1003
+ padding: [2, 4, 2, 4],
1005
1004
})
1006
1005
<
1007
1006
*popup_menu-shortcut-example*
1008
1007
popup_filter_menu() をショートカットで拡張できるようにする: >
1009
1008
1010
- call popup_menu(['Save', 'Cancel', 'Discard'], #{
1011
- \ filter: 'MyMenuFilter',
1012
- \ callback: 'MyMenuHandler',
1013
- \ })
1014
-
1015
- func MyMenuFilter(id, key)
1016
- " ショートカットキーをハンドリングする
1017
- if a:key == 'S'
1018
- call popup_close(a:id, 1)
1019
- return 1
1020
- endif
1021
- if a:key == 'C'
1022
- call popup_close(a:id, 2)
1023
- return 1
1024
- endif
1025
- if a:key == 'D'
1026
- call popup_close(a:id, 3)
1027
- return 1
1028
- endif
1029
-
1030
- " ショートカットキーではない場合は通常のフィルタに渡す
1031
- return popup_filter_menu(a:id, a:key)
1032
- endfunc
1033
-
1034
- func MyMenuHandler(id, result)
1035
- echo $'Result: {a:result}'
1036
- endfunc
1009
+ popup_menu(['Save', 'Cancel', 'Discard'], {
1010
+ callback: (_, result) => {
1011
+ echo 'dialog result is' result
1012
+ },
1013
+ filter: (id, key) => {
1014
+ # ショートカットキーをハンドリングする
1015
+ if key == 'S' || key == 's'
1016
+ popup_close(id, 1)
1017
+ elseif key == 'C' || key == 'c'
1018
+ popup_close(id, 2)
1019
+ elseif key == 'D' || key == 'd'
1020
+ popup_close(id, 3)
1021
+ else
1022
+ # ショートカットキーではない場合は通常のフィルタに渡す
1023
+ endif
1024
+ return true
1025
+ },
1026
+ })
1037
1027
<
1038
1028
*popup_beval_example*
1039
1029
'ballooneval' のポップアップウィンドウの使用例: >
1040
1030
1041
1031
set ballooneval balloonevalterm
1042
1032
set balloonexpr=BalloonExpr()
1043
- let s:winid = 0
1044
- let s:last_text = ''
1045
-
1046
- func BalloonExpr()
1047
- if s:winid && popup_getpos(s:winid) != {}
1048
- " 以前のポップアップウィンドウがまだ表示されている
1049
- if v:beval_text == s:last_text
1050
- " まだ同じテキスト、既存のポップアップを保持
1051
- return ''
1033
+ var winid: number
1034
+ var last_text: string
1035
+
1036
+ def BalloonExpr(): string
1037
+ # ここで "v:beval_text" を使用して、興味深いものを検索する
1038
+ var text = v:beval_text
1039
+ if winid > 0 && popup_getpos(winid) != null_dict
1040
+ # 以前のポップアップウィンドウがまだ表示されている
1041
+ if text == last_text
1042
+ # まだ同じテキスト、既存のポップアップを保持
1043
+ return null_string
1044
+ endif
1045
+ popup_close(winid)
1052
1046
endif
1053
- call popup_close(s:winid)
1054
- endif
1055
- let s:winid = popup_beval(v:beval_text, #{mousemoved: 'word'})
1056
- let s:last_text = v:beval_text
1057
- return ''
1058
- endfunc
1059
- <
1047
+
1048
+ winid = popup_beval(text, {})
1049
+ last_text = text
1050
+ return null_string
1051
+ enddef
1052
+
1060
1053
テキストを非同期で取得する必要がある場合は、評価関数から空文字列を返し、テキス
1061
1054
トが利用可能になったら、popup_beval() を呼び出す。タイマーコールバックでシミュ
1062
1055
レートされた例: >
1063
1056
1064
1057
set ballooneval balloonevalterm
1065
1058
set balloonexpr=BalloonExpr()
1066
- let s:winid = 0
1067
- let s:balloonText = ''
1068
-
1069
- func BalloonExpr()
1070
- if s:winid && popup_getpos(s:winid) != {}
1071
- " 以前のポップアップウィンドウがまだ表示されている
1072
- if v:beval_text == s:balloonText
1073
- " まだ同じテキスト、既存のポップアップを保持
1074
- return ''
1059
+ var winid: number
1060
+ var last_text: string
1061
+
1062
+ def BalloonExpr(): string
1063
+ var text = v:beval_text
1064
+ if winid > 0 && popup_getpos(winid) != null_dict
1065
+ # 以前のポップアップウィンドウがまだ表示されている
1066
+ if text == last_text
1067
+ # まだ同じテキスト、既存のポップアップを保持
1068
+ return null_string
1069
+ endif
1070
+ popup_close(winid)
1075
1071
endif
1076
- call popup_close(s:winid)
1077
- let s:winid = 0
1078
- endif
1079
- " 表示するテキストの非同期検索をシミュレートする
1080
- let s:balloonText = v:beval_text
1081
- call timer_start(100, 'ShowPopup')
1082
- return ''
1083
- endfunc
1084
1072
1085
- func ShowPopup(id)
1086
- let s:winid = popup_beval(s:balloonText, #{mousemoved: 'word'})
1087
- endfunc
1073
+ # テキストを表示されるまで0.5秒かかる非同期検索をシミュレートする
1074
+ last_text = text
1075
+ timer_start(500, 'ShowPopup')
1076
+ return null_string
1077
+ enddef
1078
+
1079
+ def ShowPopup(timerid: number)
1080
+ winid = popup_beval('Result: ' .. last_text, {})
1081
+ enddef
1088
1082
<
1089
1083
1090
1084
vim:tw=78:ts=8:noet:ft=help:norl:
0 commit comments