1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
local pr = require("cmake.project")
local config = require("cmake.config")
local t = require("cmake.terminal")
local M = {}
local default_generate_exe_opts = {
notify = {
ok_message = "CMake build finished",
err_message = function(code)
return "CMake generate failed with code " .. tostring(code)
end,
},
}
local default_build_exe_opts = {
notify = {
ok_message = "CMake build finished",
err_message = function(code)
return "CMake build failed with code " .. tostring(code)
end,
},
}
M.generate = function(opts)
pr.create_fileapi_query({ idx = pr.current_generate_option_idx() }, function()
vim.schedule(function()
t.cmake_execute(pr.current_generate_option().generate_command, default_generate_exe_opts)
end)
end)
end
M.generate_select = function(opts)
local items = pr.generate_options(opts)
vim.ui.select(items, {
prompt = "Select configuration to generate:",
format_item = function(item)
return table.concat(item.name, config.variants_display.short.sep)
end,
}, function(choice, idx)
if not idx then
return
end
pr.set_current_generate_option(idx)
pr.create_fileapi_query({ idx = idx }, function()
vim.schedule(function()
t.cmake_execute(choice.generate_command, default_generate_exe_opts)
end)
end)
end)
end
M.build = function(opts)
if not pr.current_build_option_idx() then
M.build_select(opts)
else
pr.create_fileapi_query({ idx = pr.current_build_option_idx() }, function()
vim.schedule(function()
t.cmake_execute(pr.current_build_option().command, default_build_exe_opts)
end)
end)
end
end
M.build_select = function(opts)
local items = pr.current_generate_option(opts).build_options
vim.ui.select(items, {
prompt = "Select build option to generate:",
format_item = function(item)
return table.concat(item.name, config.variants_display.short.sep)
end,
}, function(choice, idx)
if not idx then
return
end
pr.set_current_build_option(idx)
pr.create_fileapi_query({ idx = idx }, function()
vim.schedule(function()
t.cmake_execute(choice.command, default_build_exe_opts)
end)
end)
end)
end
M.run_tagret = function(opts)
return
end
M.run_tagret_select = function(opts)
opts = opts or {}
opts.type = "EXECUTABLE"
local items = pr.current_targets(opts)
vim.ui.select(items, {
prompt = "Select tagret to run:",
format_item = function(item)
return item.name
end,
}, function(choice, idx)
if not idx then
return
end
pr.set_current_executable_target(idx)
local command = {
cwd = pr.current_directory(),
cmd = choice.path,
}
t.target_execute(command)
end)
end
return M
|