codemp-sublime/plugin/input_handlers.py
cschen 0a25a5f7c1 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.
2025-02-18 20:25:26 +01:00

152 lines
4.8 KiB
Python

import sublime_plugin
# Input handlers
############################################################
class SimpleTextInput(sublime_plugin.TextInputHandler):
def __init__(self, args):
if not isinstance(args, list):
args = [args]
self.input, *self.next_inputs = args
self.argname, self.default = self.input
def placeholder(self):
if isinstance(self.default, str):
return self.default
else:
return ""
def name(self):
return self.argname
def next_input(self, args):
if self.next_inputs:
if isinstance(self.next_inputs[0][1], list):
return SimpleListInput(self.next_inputs)
else:
return SimpleTextInput(self.next_inputs)
class SimpleListInput(sublime_plugin.ListInputHandler):
def __init__(self, args):
if not isinstance(args, list):
args = [args]
self.input, *self.next_inputs = args
self.argname, self.list = self.input
def name(self):
return self.argname
def list_items(self):
if isinstance(self.list, list):
return self.list
else:
return [self.list]
def next_input(self, args):
if self.next_inputs:
if isinstance(self.next_inputs[0][1], str):
return SimpleTextInput(self.next_inputs)
else:
return SimpleListInput(self.next_inputs)
# class ActiveWorkspacesIdList(sublime_plugin.ListInputHandler):
# def __init__(self, window=None, buffer_list=False, buffer_text=False):
# self.window = window
# self.buffer_list = buffer_list
# self.buffer_text = buffer_text
# def name(self):
# return "workspace_id"
# def list_items(self):
# return [vws.id for vws in client.all_workspaces(self.window)]
# def next_input(self, args):
# if self.buffer_list:
# return BufferIdList(args["workspace_id"])
# elif self.buffer_text:
# return SimpleTextInput(("buffer_id", "new buffer"))
# # To allow for having a selection and choosing non existing workspaces
# # we do a little dance: We pass this list input handler to a TextInputHandler
# # when we select "Create New..." which adds his result to the list of possible
# # workspaces and pop itself off the stack to go back to the list handler.
# class WorkspaceIdList(sublime_plugin.ListInputHandler):
# def __init__(self):
# assert client.codemp is not None # the command should not be available
# # at the moment, the client can't give us a full list of existing workspaces
# # so a textinputhandler would be more appropriate. but we keep this for the future
# self.add_entry_text = "* add entry..."
# self.list = client.codemp.list_workspaces(True, True).wait()
# self.list.sort()
# self.list.append(self.add_entry_text)
# self.preselected = None
# def name(self):
# return "workspace_id"
# def placeholder(self):
# return "Workspace"
# def list_items(self):
# if self.preselected is not None:
# return (self.list, self.preselected)
# else:
# return self.list
# def next_input(self, args):
# if args["workspace_id"] == self.add_entry_text:
# return AddListEntry(self)
# class BufferIdList(sublime_plugin.ListInputHandler):
# def __init__(self, workspace_id):
# vws = client.workspace_from_id(workspace_id)
# self.add_entry_text = "* create new..."
# self.list = vws.codemp.filetree(None)
# self.list.sort()
# self.list.append(self.add_entry_text)
# self.preselected = None
# def name(self):
# return "buffer_id"
# def placeholder(self):
# return "Buffer Id"
# def list_items(self):
# if self.preselected is not None:
# return (self.list, self.preselected)
# else:
# return self.list
# def next_input(self, args):
# if args["buffer_id"] == self.add_entry_text:
# return AddListEntry(self)
# class AddListEntry(sublime_plugin.TextInputHandler):
# # this class works when the list input handler
# # added appended a new element to it's list that will need to be
# # replaced with the entry added from here!
# def __init__(self, list_input_handler):
# self.parent = list_input_handler
# def name(self):
# return ""
# def validate(self, text: str) -> bool:
# return not len(text) == 0
# def confirm(self, text: str):
# self.parent.list.pop() # removes the add_entry_text
# self.parent.list.insert(0, text)
# self.parent.preselected = 0
# def next_input(self, args):
# return sublime_plugin.BackInputHandler()