11util = require (" github_nvim.util" )
2+ gh = require (" github_nvim.gh" )
23
34M = {}
45
56
67function M .clone (config )
7- print (vim .inspect (config ))
8- is_repo_public = true
9- message = " no message"
10- messageHighlight = " SpecialKey"
11- repo_input = " "
8+ local repo_input = " "
129 local Popup = require (" nui.popup" )
1310 local Layout = require (" nui.layout" )
1411 local Input = require (" nui.input" )
@@ -35,10 +32,8 @@ function M.clone(config)
3532 prompt = " > " ,
3633 default_value = repo_input ,
3734 on_close = function ()
38- print (" Input Closed!" )
3935 end ,
4036 on_submit = function (value )
41- print (" Input Submitted: " .. value )
4237 end ,
4338 on_change = function (value )
4439 repo_input = value
@@ -61,25 +56,8 @@ function M.clone(config)
6156
6257 local function update_status ()
6358 local line = NuiLine ()
64- line :append (" Options: " )
65- local bufnr , ns_id , linenr_start = popup_one .bufnr , - 1 , 1
66- line :render (bufnr , ns_id , linenr_start )
67-
68- line = NuiLine ()
69- line :append (" Visibility: " )
70- line :append (is_repo_public and " public" or " private" , " Error" )
71- line :append (" <c-p>" , " SpecialKey" )
72- local bufnr , ns_id , linenr_start = popup_one .bufnr , - 1 , 2
73- line :render (bufnr , ns_id , linenr_start )
74-
75- -- NuiLine({ NuiText("one"), NuiText("two", "Error")}):render(bufnr, ns_id, 3)
76- NuiLine ({ NuiText (" " ) }):render (bufnr , ns_id , 3 )
77- NuiLine ({ NuiText (" Message: " ), NuiText (string.gsub (message , " \n " , " " ), messageHighlight ) }):render (bufnr , ns_id , 4 )
78- NuiLine ({ NuiText (" " ) }):render (bufnr , ns_id , 5 )
79-
80- line = NuiLine ()
8159 line :append (" Keymaps: " )
82- local bufnr , ns_id , linenr_start = popup_one .bufnr , - 1 , 6
60+ local bufnr , ns_id , linenr_start = popup_one .bufnr , - 1 , 1
8361 line :render (bufnr , ns_id , linenr_start )
8462 end
8563
@@ -97,67 +75,6 @@ function M.clone(config)
9775 }, { dir = " col" })
9876 )
9977
100- local function update_message (msg , hl )
101- message = msg
102- messageHighlight = hl
103- update_status ()
104- end
105-
106- local function do_clone (user_name , repo_name )
107- local user_dir = config .github_dir .. config .sep .. user_name
108- local repo_dir = user_dir .. config .sep .. repo_name
109- if util .path_exists (repo_dir ) then
110- update_message (" Error: repo exists" , " Error" )
111- util .promptYesNo (" remove local and retry?" , function ()
112- local code = util .rm_rf (repo_dir )
113- -- print(string.format("rm command returns %d", code))
114- do_clone (user_name , repo_name )
115- end )
116- return
117- end
118-
119- if not util .path_exists (user_dir ) then
120- print (" making user_dir " .. user_dir )
121- util .mkdir_p (user_dir )
122- end
123-
124- local clone_command = " gh repo clone " .. user_name .. config .sep .. repo_name
125- message = " running command " .. clone_command .. " ..."
126- update_status ()
127-
128- local function on_command_exit (result )
129- vim .schedule (function ()
130- if result .code == 0 then
131- update_message (" success, path: " .. repo_dir , " Error" )
132- if config .on_clone_success then
133- util .promptYesNo (" close window and open it?" , function ()
134- layout :unmount ()
135- config .on_clone_success (repo_dir )
136- end )
137- else
138- util .promptYesNo (" close window?" , function ()
139- layout :unmount ()
140- end )
141- end
142- else
143- update_message (" failed, reason: " .. result .stderr , " Error" )
144- util .promptYesNo (" remove local and retry?" , function ()
145- util .rm_rf (repo_dir )
146- do_clone (user_name , repo_name )
147- end )
148- end
149- end
150- )
151- end
152-
153-
154- vim .system ({ " bash" , " -c" , clone_command }, {
155- text = true ,
156- cwd = user_dir ,
157- }, on_command_exit )
158-
159- -- 错误处理
160- end
16178 local function handle_clone ()
16279 local user_name = " "
16380 local repo_name = " "
@@ -178,27 +95,23 @@ function M.clone(config)
17895 messageHighlight = " Error"
17996 update_status ()
18097
181- print (string.format (" repo: %s, visibility: %s" , repo_input , is_repo_public and " public" or " private" ))
182- do_clone (user_name , repo_name )
98+ gh .do_clone (config , user_name , repo_name , {
99+ on_success = function (repo_dir )
100+ layout :unmount ()
101+ util .open_project (repo_dir )
102+ end ,
103+ on_fail = function ()
104+ layout :unmount ()
105+ end
106+
107+ })
183108 end
184109 -- gh repo create github.nvim --template nvimdev/nvim-plugin-template --public --clone
185110
186111
187112
188113 update_status ()
189114 keymaps = {
190- {
191- mode = { " i" , " n" },
192- lhs = " <c-p>" ,
193- rhs = function ()
194- is_repo_public = not is_repo_public
195- update_status ()
196- end ,
197- opts = {
198- desc = " change visibility"
199- }
200-
201- },
202115 {
203116 mode = { " i" , " n" },
204117 lhs = " <c-g>" ,
@@ -221,7 +134,17 @@ function M.clone(config)
221134 mode = { " i" , " n" },
222135 lhs = " <c-c>" ,
223136 rhs = function ()
224- print (" close" )
137+ layout :unmount ()
138+ end ,
139+ opts = {
140+ desc = " close window"
141+ }
142+
143+ },
144+ {
145+ mode = { " i" , " n" },
146+ lhs = " <Esc>" ,
147+ rhs = function ()
225148 layout :unmount ()
226149 end ,
227150 opts = {
@@ -236,11 +159,10 @@ function M.clone(config)
236159 clone_input :map (mode , keymap .lhs , keymap .rhs , keymap .opts )
237160 popup_one :map (mode , keymap .lhs , keymap .rhs , keymap .opts )
238161 end
239- set_hints (keymap , 6 + i )
162+ set_hints (keymap , 1 + i )
240163 end
241164
242165 layout :mount ()
243166end
244167
245-
246168return M
0 commit comments