def smart_tab(): """ This action is the default binding for the tab key, and will apply different behaviors depending on the current context. When expanding aliases, <tab> will move to the next field. Otherwise, when multiple lines are selected it will try to align special sequences like ":", "=>", "use" and ":=". Finally, it will automatically indent the selected lines. """ editor = GPS.EditorBuffer.get() # When expanding aliases, <tab> should move to the next field if aliases.is_in_alias_expansion(editor): aliases.toggle_next_field(editor) return # If multiple lines are selected, perform various alignments if not GPS.Logger("PREVENT_ALIGN_ON_TAB").active: if tabs_align_selection.get(): start = editor.selection_start() end = editor.selection_end() if abs(start.line() - end.line()) >= 1: align.align_colons() align.align_arrows() align.align_use_clauses() align.align_assignments() # if it's a python code, do it in python way if editor.file().language() == "python": d = python_tab_indent(editor, editor.selection_start(), editor.selection_end()) # Otherwise, reformat the current selection else: action = GPS.Action("Autoindent selection") if not action.execute_if_possible(): editor.insert(editor.current_view().cursor(), "\t")
def smart_tab(): """ This action is the default binding for the tab key, and will apply different behaviors depending on the current context. When expanding aliases, <tab> will move to the next field. Otherwise, when multiple lines are selected it will try to align special sequences like ":", "=>", "use" and ":=". Finally, it will automatically indent the selected lines. """ editor = GPS.EditorBuffer.get() # When expanding aliases, <tab> should move to the next field if aliases.is_in_alias_expansion(editor): aliases.toggle_next_field(editor) return # If multiple lines are selected, perform various alignments if not GPS.Logger("GPS.INTERNAL.PREVENT_ALIGN_ON_TAB").active: if tabs_align_selection.get(): start = editor.selection_start() end = editor.selection_end() if abs(start.line() - end.line()) >= 1: align.align_colons() align.align_arrows() align.align_use_clauses() align.align_assignments() # if it's a python code, do it in python way if editor.file().language() == "python": python_tab_indent(editor, editor.selection_start(), editor.selection_end()) # Otherwise, reformat the current selection else: action = GPS.Action("Autoindent selection") if not action.execute_if_possible(): editor.insert(editor.current_view().cursor(), "\t")
def smart_tab(): """ This action is the default binding for the tab key, and will apply different behaviors depending on the current context. When expanding aliases, <tab> will move to the next field. Otherwise: - if there is a multi-line selection, the selection will be reformatted; - otherwise, the current line will be reformatted """ editor = GPS.EditorBuffer.get() # When expanding aliases, <tab> will be handled by the aliases package if aliases.is_in_alias_expansion(editor): return # If multiple lines are selected, perform various alignments if not GPS.Logger("GPS.INTERNAL.PREVENT_ALIGN_ON_TAB").active: if tabs_align_selection.get(): start = editor.selection_start() end = editor.selection_end() if abs(start.line() - end.line()) >= 1: align.align_colons() align.align_arrows() align.align_use_clauses() align.align_assignments() # if it's a python code, do it in python way if editor.file().language() == "python": python_tab_indent(editor, editor.selection_start(), editor.selection_end()) # Otherwise, reformat the current selection else: action = GPS.Action("format selection") if not action.execute_if_possible(): editor.insert(editor.current_view().cursor(), "\t")