Make create buffer and delete buffer, be internal commands. Dealing with the input handlers sheningans is too much.

Also improves the logic in the qpbrowser for the creation and deletion of buffers.
and simplify the logic in the internal commands.
This commit is contained in:
cschen 2025-02-18 20:25:26 +01:00
parent 8dc6a96bde
commit 0a25a5f7c1
5 changed files with 53 additions and 77 deletions

View file

@ -94,22 +94,22 @@
// 'buffer_id': 'test' // 'buffer_id': 'test'
} }
}, },
{ // {
"caption": "Codemp: Create Buffer", // "caption": "Codemp: Create Buffer",
"command": "codemp_create_buffer", // "command": "codemp_create_buffer",
"args": { // "args": {
// 'workspace_id': 'asd' // // 'workspace_id': 'asd'
// 'buffer_id': 'test' // // 'buffer_id': 'test'
} // }
}, // },
{ // {
"caption": "Codemp: Delete Buffer", // "caption": "Codemp: Delete Buffer",
"command": "codemp_delete_buffer", // "command": "codemp_delete_buffer",
"args": { // "args": {
// 'workspace_id': 'asd' // // 'workspace_id': 'asd'
// 'buffer_id': 'test' // // 'buffer_id': 'test'
} // }
}, // },
{ {
"caption": "Codemp: Sync", "caption": "Codemp: Sync",
"command": "codemp_sync_buffer", "command": "codemp_sync_buffer",

View file

@ -116,28 +116,10 @@ class CodempCreateBufferCommand(sublime_plugin.WindowCommand):
def is_enabled(self): def is_enabled(self):
return len(workspaces.lookup()) > 0 return len(workspaces.lookup()) > 0
def input_description(self) -> str:
return "Create Buffer: "
def input(self, args):
missingargs = [arg for arg in ["workspace_id", "buffer_id"] if arg not in args]
for arg in missingargs:
if arg == "workspace_id":
return SimpleListInput([
("workspace_id", session.client.active_workspaces()),
("buffer_id", "new buffer name")
])
if arg == "buffer_id":
return SimpleTextInput(
("buffer_id", "new buffer name"),
)
def run(self, workspace_id, buffer_id):# pyright: ignore[reportIncompatibleMethodOverride] def run(self, workspace_id, buffer_id):# pyright: ignore[reportIncompatibleMethodOverride]
try: vws = workspaces.lookupId(workspace_id) try: vws = workspaces.lookupId(workspace_id)
except KeyError: except KeyError:
sublime.error_message( sublime.error_message(f"You are not attached to the workspace '{workspace_id}'")
f"You are not attached to the workspace '{workspace_id}'"
)
logging.warning(f"You are not attached to the workspace '{workspace_id}'") logging.warning(f"You are not attached to the workspace '{workspace_id}'")
return return
@ -151,53 +133,30 @@ class CodempDeleteBufferCommand(sublime_plugin.WindowCommand):
def is_enabled(self): def is_enabled(self):
return len(workspaces.lookup()) > 0 return len(workspaces.lookup()) > 0
def input_description(self) -> str:
return "Delete buffer: "
def input(self, args):
# FIXME: THIS DOES NOT WORK SORRY
if "workspace_id" not in args:
return SimpleListInput(
("workspace_id", session.get_workspaces(owned=True, invited=False)),
)
if "buffer_id" not in args:
try: ws = workspaces.lookupId(args["workspace_id"])
except KeyError:
sublime.error_message("Workspace does not exists or is not attached.")
return sublime_plugin.BackInputHandler()
bflist = ws.handle.fetch_buffers().wait()
return SimpleListInput(
("buffer_id", bflist),
)
def run(self, workspace_id, buffer_id):# pyright: ignore[reportIncompatibleMethodOverride] def run(self, workspace_id, buffer_id):# pyright: ignore[reportIncompatibleMethodOverride]
try: vws = workspaces.lookupId(workspace_id) try: vws = workspaces.lookupId(workspace_id)
except KeyError: except KeyError:
sublime.error_message( sublime.error_message(f"You are not attached to the workspace '{workspace_id}'")
f"You are not attached to the workspace '{workspace_id}'"
)
logging.warning(f"You are not attached to the workspace '{workspace_id}'") logging.warning(f"You are not attached to the workspace '{workspace_id}'")
return return
if not sublime.ok_cancel_dialog( if buffer_id in buffers:
f"Confirm you want to delete the buffer '{buffer_id}'",
ok_title="delete", title="Delete Buffer?",
): return
try:
buffers.lookupId(buffer_id)
if not sublime.ok_cancel_dialog( if not sublime.ok_cancel_dialog(
"You are currently attached to '{buffer_id}'.\n\ "You are currently attached to '{buffer_id}'.\n\
Do you want to detach and delete it?", Do you want to detach and delete it?",
ok_title="yes", title="Delete Buffer?", ok_title="yes", title="Delete Buffer?",
): ): return
return
self.window.run_command( self.window.run_command(
"codemp_leave_buffer", "codemp_leave_buffer", {"buffer_id": buffer_id })
{ "workspace_id": workspace_id, "buffer_id": buffer_id })
except KeyError: pass else:
finally: if not sublime.ok_cancel_dialog(
vws.handle.delete_buffer(buffer_id).wait() f"Confirm you want to delete the buffer '{buffer_id}'",
ok_title="delete", title="Delete Buffer?",
): return
vws.handle.delete_buffer(buffer_id).wait()

View file

@ -175,7 +175,6 @@ class BufferRegistry():
del self._buffers[bf] del self._buffers[bf]
buffers = BufferRegistry() buffers = BufferRegistry()

View file

@ -1,5 +1,6 @@
import sublime_plugin import sublime_plugin
# Input handlers # Input handlers
############################################################ ############################################################
class SimpleTextInput(sublime_plugin.TextInputHandler): class SimpleTextInput(sublime_plugin.TextInputHandler):

View file

@ -108,6 +108,7 @@ class QPServerBrowser():
def create_workspace(name): def create_workspace(name):
self.window.run_command( self.window.run_command(
"codemp_create_workspace", {"workspace_id": name}) "codemp_create_workspace", {"workspace_id": name})
self.run()
self.window.show_input_panel("New Workspace Name", "", create_workspace, None, self.edit_server) self.window.show_input_panel("New Workspace Name", "", create_workspace, None, self.edit_server)
if index == 2: if index == 2:
@ -201,21 +202,37 @@ class QPWorkspaceBrowser():
"workspace_id": self.workspace_id, "workspace_id": self.workspace_id,
"buffer_id": name "buffer_id": name
}) })
self.window.show_input_panel("New Buffer Name", "", create_buffer, None, self.edit_workspace)
self.window.run_command(
"codemp_browse_workspace", {"workspace_id": self.workspace_id})
panel = self.window.show_input_panel("New Buffer Name", "", create_buffer, None, self.edit_workspace)
panel.settings().set("password", False)
elif index == 4: elif index == 4:
def delete_buffer(index): def delete_buffer(index):
if index == -1 or index == 0: if index == -1 or index == 0:
self.edit_workspace() self.edit_workspace()
# same warning as the server browser. Check your indexed 3 times # same warning as the server browser. Check your indexed 3 times
selected = self.entries[index] selected = self.entries[index+1]
self.window.run_command( self.window.run_command(
"codemp_delete_buffer", "codemp_delete_buffer",
{ {
"workspace_id": self.workspace_id, "workspace_id": self.workspace_id,
"buffer_id": selected.trigger "buffer_id": selected.trigger
}) })
show_qp(self.window, self.entries, delete_buffer, self.qp_placeholder())
def _():
buffers = workspaces.lookupId(self.workspace_id).handle.fetch_buffers()
QPWorkspaceBrowser(self.window, self.workspace_id, buffers.wait()).run()
sublime.set_timeout(_)
if len(self.entries) < 2:
sublime.message_dialog("The workspace is empty!")
sublime.set_timeout(self.run, 10)
else:
show_qp(self.window, self.entries[1:], delete_buffer, self.qp_placeholder())
elif index == 5: elif index == 5:
sublime.message_dialog("renaming is not yet implemented.") sublime.message_dialog("renaming is not yet implemented.")
self.edit_workspace() self.edit_workspace()