Skip to content

Commit 4794a74

Browse files
authored
Merge pull request #257 from qujihan/master
增加新的runner
2 parents bd6257d + 1c644c9 commit 4794a74

File tree

4 files changed

+88
-0
lines changed

4 files changed

+88
-0
lines changed

README-cn.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ AsyncRun 提供足够的可能性和灵活性让你指定运行命令的各处
373373
| `floaterm_reuse` | 再一个可复用的 floaterm 窗口内运行 | [floaterm](https://github.com/voldikss/vim-floaterm) | [floaterm_reuse.vim](autoload/asyncrun/runner/floaterm.vim) |
374374
| `quickui` | 在 quickui 的浮窗里运行 | [vim-quickui](https://github.com/skywind3000/vim-quickui) | [quickui.vim](autoload/asyncrun/runner/quickui.vim) |
375375
| `toggleterm` | 使用 toggleterm 窗口运行 | [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) | [toggleterm.vim](autoload/asyncrun/runner/toggleterm.vim) |
376+
| `toggleterm2` | 使用自定义 toggleterm 窗口运行 | [toggleterm.nvim](https://github.com/akinsho/toggleterm.nvim) | [toggleterm.vim](autoload/asyncrun/runner/toggleterm2.vim) |
376377
| `xfce` | 在 xfce 终端中运行 | xfce4-terminal | [xfce.vim](autoload/asyncrun/runner/xfce.vim) |
377378
| `konsole` | 在 KDE 的自带终端里运行 | KDE | [konsole.vim](autoload/asyncrun/runner/konsole.vim) |
378379
| `macos` | 在 macOS 的系统终端内运行 | macOS | [macos.vim](autoload/asyncrun/runner/macos.vim) |
@@ -392,6 +393,19 @@ AsyncRun 提供足够的可能性和灵活性让你指定运行命令的各处
392393

393394
当你在 GVim 中使用 `gnome`, `konsole` 或者 `xfce` 之类的 runner 来运行程序,你会觉得就跟 IDE 里面启动命令行程序是一样的感觉。
394395

396+
当你使用toggleterm2这个runner,并且使用packer.nvim管理插件的时候,可以设置快捷键指定打开的窗口,比如:
397+
```lua
398+
use({
399+
"skywind3000/asyncrun.vim",
400+
as = "asyncrun",
401+
config = function()
402+
require("asyncrun_toggleterm").setup({
403+
mapping = "<leader>tt",
404+
start_in_insert = false,
405+
})
406+
end,
407+
})
408+
```
395409
所有 runner 皆可定制,你可以很方便的开发新 runner,详细见下一节 “自定义 Runner”。
396410

397411
### 自定义 Runner

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,20 @@ Screenshot for `gnome` runner:
423423

424424
When using `gnome`, `konsole`, or `xfce` runner in GVim, you get exactly the same experience like starting a command-line program from IDEs.
425425

426+
When you use toggleterm2 and use the packer.nvim management plugin, you can set shortcut keys to specify the open window, such as:
427+
```lua
428+
use({
429+
"skywind3000/asyncrun.vim",
430+
as = "asyncrun",
431+
config = function()
432+
require("asyncrun_toggleterm").setup({
433+
mapping = "<leader>tt",
434+
start_in_insert = false,
435+
})
436+
end,
437+
})
438+
```
439+
426440
All runners are customizable, you can modify or define your own runners, see the next section "customize runner".
427441

428442
### Customize Runner
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
function! asyncrun#runner#toggleterm2#run(opts)
2+
lua require("asyncrun_toggleterm").runner(vim.fn.eval("a:opts"))
3+
endfunction

lua/asyncrun_toggleterm.lua

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
local terminal = require("toggleterm.terminal").Terminal
2+
local M = {}
3+
4+
M.setup = function(opts)
5+
M._asyncrun_mapping = opts.mapping
6+
M._start_in_insert = opts.start_in_insert
7+
end
8+
9+
function M.reset()
10+
if M._asyncrun_term ~= nil then
11+
if vim.g.asynctasks_term_reuse ~= 1 then
12+
-- TODO: handle multiple terminals
13+
error("Terminal existed is not support . please set g.asynctasks_term_reuse = 1")
14+
else
15+
vim.notify("Delete existing terminal", "info")
16+
end
17+
M._asyncrun_term:shutdown()
18+
end
19+
20+
M._asyncrun_term = nil
21+
M._asyncrun_term_toggle = nil
22+
end
23+
24+
function M.runner(opts)
25+
M.reset()
26+
M._asyncrun_term = terminal:new({
27+
cmd = opts.cmd,
28+
dir = opts.cwd,
29+
close_on_exit = false,
30+
hidden = true,
31+
on_open = function(term)
32+
if M._start_in_insert then
33+
vim.cmd("startinsert!")
34+
else
35+
vim.cmd("stopinsert!")
36+
end
37+
end
38+
})
39+
40+
function M._asyncrun_term_toggle()
41+
M._asyncrun_term:toggle()
42+
end
43+
44+
if not opts.silent then
45+
M._asyncrun_term_toggle()
46+
end
47+
48+
if M._asyncrun_mapping then
49+
vim.api.nvim_set_keymap("n", M._asyncrun_mapping,
50+
"<cmd>lua require('asyncrun_toggleterm')._asyncrun_term_toggle()<CR>", {
51+
noremap = true,
52+
silent = true
53+
})
54+
end
55+
end
56+
57+
return M

0 commit comments

Comments
 (0)