github.com/aretext/aretext@v1.3.0/state/config.go (about)

     1  package state
     2  
     3  import "github.com/aretext/aretext/config"
     4  
     5  // ToggleShowTabs shows or hides tab characters in the document.
     6  func ToggleShowTabs(s *EditorState) {
     7  	toggleFlagAndSetStatus(s, &s.documentBuffer.showTabs, "Showing tabs", "Hiding tabs")
     8  }
     9  
    10  // ToggleShowSpaces shows or hides space characters in the document.
    11  func ToggleShowSpaces(s *EditorState) {
    12  	toggleFlagAndSetStatus(s, &s.documentBuffer.showSpaces, "Showing spaces", "Hiding spaces")
    13  }
    14  
    15  // ToggleTabExpand toggles whether tabs should be expanded to spaces.
    16  func ToggleTabExpand(s *EditorState) {
    17  	toggleFlagAndSetStatus(s, &s.documentBuffer.tabExpand, "Enabled tab expand", "Disabled tab expand")
    18  }
    19  
    20  // ToggleShowLineNumbers shows or hides line numbers in the left margin.
    21  func ToggleShowLineNumbers(s *EditorState) {
    22  	toggleFlagAndSetStatus(s, &s.documentBuffer.showLineNum, "Showing line numbers", "Hiding line numbers")
    23  }
    24  
    25  // SetLineNumberMode sets the line number mode.
    26  func SetLineNumberMode(s *EditorState, mode config.LineNumberMode) {
    27  	switch mode {
    28  	case config.LineNumberModeAbsolute:
    29  		s.documentBuffer.lineNumberMode = config.LineNumberModeAbsolute
    30  		SetStatusMsg(s, StatusMsg{
    31  			Style: StatusMsgStyleSuccess,
    32  			Text:  "Showing absolute line numbers",
    33  		})
    34  	case config.LineNumberModeRelative:
    35  		s.documentBuffer.lineNumberMode = config.LineNumberModeRelative
    36  		SetStatusMsg(s, StatusMsg{
    37  			Style: StatusMsgStyleSuccess,
    38  			Text:  "Showing relative line numbers",
    39  		})
    40  	default:
    41  		SetStatusMsg(s, StatusMsg{
    42  			Style: StatusMsgStyleError,
    43  			Text:  "Line number mode not supported: " + string(mode),
    44  		})
    45  	}
    46  }
    47  
    48  // ToggleLineNumberMode toggles the line number mode between absolute and relative.
    49  func ToggleLineNumberMode(s *EditorState) {
    50  	switch s.documentBuffer.lineNumberMode {
    51  	case config.LineNumberModeAbsolute:
    52  		SetLineNumberMode(s, config.LineNumberModeRelative)
    53  		SetStatusMsg(s, StatusMsg{
    54  			Style: StatusMsgStyleSuccess,
    55  			Text:  "Showing relative line numbers",
    56  		})
    57  	case config.LineNumberModeRelative:
    58  		SetLineNumberMode(s, config.LineNumberModeAbsolute)
    59  		SetStatusMsg(s, StatusMsg{
    60  			Style: StatusMsgStyleSuccess,
    61  			Text:  "Hiding line numbers",
    62  		})
    63  	}
    64  }
    65  
    66  // ToggleAutoIndent enables or disables auto-indent.
    67  func ToggleAutoIndent(s *EditorState) {
    68  	toggleFlagAndSetStatus(s, &s.documentBuffer.autoIndent, "Enabled auto-indent", "Disabled auto-indent")
    69  }
    70  
    71  func toggleFlagAndSetStatus(s *EditorState, flagValue *bool, enabledMsg string, disabledMsg string) {
    72  	*flagValue = !(*flagValue)
    73  
    74  	var msg string
    75  	if *flagValue {
    76  		msg = enabledMsg
    77  	} else {
    78  		msg = disabledMsg
    79  	}
    80  
    81  	SetStatusMsg(s, StatusMsg{
    82  		Style: StatusMsgStyleSuccess,
    83  		Text:  msg,
    84  	})
    85  }