From d2973d59ffe05904e1e929dd26c55e2419c25c39 Mon Sep 17 00:00:00 2001 From: ChelSlava Date: Mon, 30 Mar 2026 10:11:32 +0300 Subject: [PATCH] Add case insensitive sort option for keywords Closes #2521 --- src/robotide/controller/ctrlcommands.py | 5 ++++- src/robotide/controller/tablecontrollers.py | 15 ++++++++++++--- src/robotide/ui/treenodehandlers.py | 8 ++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/robotide/controller/ctrlcommands.py b/src/robotide/controller/ctrlcommands.py index 428671bd4..ed6113611 100644 --- a/src/robotide/controller/ctrlcommands.py +++ b/src/robotide/controller/ctrlcommands.py @@ -460,8 +460,11 @@ def _get_undo_command(self): class SortKeywords(_ReversibleCommand): index_difference = None + def __init__(self, case_insensitive=False): + self._case_insensitive = case_insensitive + def _execute(self, context): - index_difference = context.sort_keywords() + index_difference = context.sort_keywords(case_insensitive=self._case_insensitive) self._undo_command = RestoreKeywordOrder(index_difference) def _get_undo_command(self): diff --git a/src/robotide/controller/tablecontrollers.py b/src/robotide/controller/tablecontrollers.py index 4a36ac576..040335d72 100644 --- a/src/robotide/controller/tablecontrollers.py +++ b/src/robotide/controller/tablecontrollers.py @@ -374,9 +374,18 @@ def _configure_controller(self, ctrl, config): if config: ctrl.arguments.set_value(config) - def sort(self): - """Sorts the keywords of the controller by name""" - keywords_sorted = sorted(self._table.keywords, key=lambda userkeyword: userkeyword.name) + def sort(self, case_insensitive=False): + """Sorts the keywords of the controller by name + + Args: + case_insensitive: If True, sort without regard to case + """ + if case_insensitive: + keywords_sorted = sorted(self._table.keywords, + key=lambda userkeyword: userkeyword.name.lower()) + else: + keywords_sorted = sorted(self._table.keywords, + key=lambda userkeyword: userkeyword.name) index_difference = self._index_difference(self._table.keywords, keywords_sorted) self._table.keywords = keywords_sorted return index_difference diff --git a/src/robotide/ui/treenodehandlers.py b/src/robotide/ui/treenodehandlers.py index 3cc195254..8a7b1dada 100644 --- a/src/robotide/ui/treenodehandlers.py +++ b/src/robotide/ui/treenodehandlers.py @@ -41,6 +41,7 @@ LABEL_SORT_VARIABLES = 'Sort Variables' LABEL_SORT_TESTS = 'Sort Tests' LABEL_SORT_KEYWORDS = 'Sort Keywords' +LABEL_SORT_KEYWORDS_CI = 'Sort Keywords (Case Insensitive)' LABEL_NEW_SCALAR = 'New Scalar\tCtrl-Shift-V' LABEL_NEW_LIST_VARIABLE = 'New List Variable\tCtrl-Shift-L' LABEL_NEW_DICT_VARIABLE = 'New Dictionary Variable' @@ -297,6 +298,11 @@ def on_sort_keywords(self, event): """Sorts the keywords inside the treenode""" self.controller.execute(ctrlcommands.SortKeywords()) + def on_sort_keywords_case_insensitive(self, event): + __ = event + """Sorts the keywords inside the treenode (case insensitive)""" + self.controller.execute(ctrlcommands.SortKeywords(case_insensitive=True)) + def on_sort_variables(self, event): __ = event """Sorts the variables inside the treenode""" @@ -495,6 +501,7 @@ def __init__(self, *args): '---', _('Sort Variables'), _('Sort Keywords'), + _('Sort Keywords (Case Insensitive)'), '---', _('Exclude'), '---', @@ -515,6 +522,7 @@ def __init__(self, *args): '---', LABEL_SORT_VARIABLES, LABEL_SORT_KEYWORDS, + LABEL_SORT_KEYWORDS_CI, '---', LABEL_EXCLUDE, '---',