Skip to content

Commit 743a5a8

Browse files
committed
Ctrl-W to exit without saving
1 parent e9807e8 commit 743a5a8

File tree

2 files changed

+69
-62
lines changed

2 files changed

+69
-62
lines changed

colour.go

Lines changed: 51 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,71 @@
11
package main
22

33
import (
4-
"encoding/json"
5-
"fmt"
6-
"os"
4+
"encoding/json"
5+
"fmt"
6+
"os"
77
)
88

99
const (
10-
Reset Colour = "\033[0m"
11-
Default = "\033[39m"
12-
Black = "\033[30m"
13-
Red = "\033[91m"
14-
DarkRed = "\033[31m"
15-
Green = "\033[92m"
16-
DarkGreen = "\033[32m"
17-
DarkYellow = "\033[33m"
18-
Orange = "\033[38:5:202m" // "\033[93m"
19-
Blue = "\033[94m"
20-
DarkBlue = "\033[34m"
21-
Cyan = "\033[96m"
22-
Magenta = "\033[95m"
23-
DarkMagenta = "\033[35m"
24-
DarkCyan = "\033[36m"
25-
LightGray = "\033[37m"
26-
DarkGray = "\033[90m"
27-
White = "\033[97m"
10+
Reset Colour = "\033[0m"
11+
Default = "\033[39m"
12+
Black = "\033[30m"
13+
Red = "\033[91m"
14+
DarkRed = "\033[31m"
15+
Green = "\033[92m"
16+
DarkGreen = "\033[32m"
17+
DarkYellow = "\033[33m"
18+
Orange = "\033[38:5:202m" // "\033[93m"
19+
Blue = "\033[94m"
20+
DarkBlue = "\033[34m"
21+
Cyan = "\033[96m"
22+
Magenta = "\033[95m"
23+
DarkMagenta = "\033[35m"
24+
DarkCyan = "\033[36m"
25+
LightGray = "\033[37m"
26+
DarkGray = "\033[90m"
27+
White = "\033[97m"
2828
)
2929

3030
type ColourScheme struct {
31-
Keyword Colour `json:"Keyword"`
32-
Strings Colour `json:"Strings"`
33-
Comments Colour `json:"Comments"`
34-
Numbers Colour `json:"Numbers"`
35-
Todos Colour `json:"Todos"`
36-
Name string `json:"Name"`
31+
Keyword Colour `json:"Keyword"`
32+
Strings Colour `json:"Strings"`
33+
Comments Colour `json:"Comments"`
34+
Numbers Colour `json:"Numbers"`
35+
Todos Colour `json:"Todos"`
36+
Name string `json:"Name"`
3737
}
3838

3939
var defaultColourScheme = ColourScheme{
40-
Keyword: Orange, Strings: Green, Comments: DarkGray, Numbers: Blue, Todos: DarkYellow, Name: "Default",
40+
Keyword: Orange, Strings: Green, Comments: DarkGray, Numbers: Blue, Todos: DarkYellow, Name: "Default",
4141
}
4242

4343
func GetColourScheme() ColourScheme {
44-
v, exists := os.LookupEnv("GRAM_COLOUR_SCHEME")
45-
if !exists {
46-
return defaultColourScheme
47-
}
48-
colours := LoadColourSchemesFromFile("colours.json")
49-
for _, c := range colours {
50-
if c.Name == v {
51-
// TODO: Refactor hor colours are stored to allow for better colour scheme formats
52-
// TODO: Also, can't natively store \033 in file. More reason to migrate colour format
53-
return defaultColourScheme
54-
}
55-
}
56-
return defaultColourScheme
44+
v, exists := os.LookupEnv("GRAM_COLOUR_SCHEME")
45+
if !exists {
46+
return defaultColourScheme
47+
}
48+
colours := LoadColourSchemesFromFile("colours.json")
49+
for _, c := range colours {
50+
if c.Name == v {
51+
// TODO: Refactor hor colours are stored to allow for better colour scheme formats
52+
// TODO: Also, can't natively store \033 in file. More reason to migrate colour format
53+
return defaultColourScheme
54+
}
55+
}
56+
return defaultColourScheme
5757
}
5858

5959
func LoadColourSchemesFromFile(file string) []ColourScheme {
60-
bytes, err := os.ReadFile(file)
61-
if err != nil {
62-
return []ColourScheme{}
63-
}
60+
bytes, err := os.ReadFile(file)
61+
if err != nil {
62+
return []ColourScheme{}
63+
}
6464

65-
var colours []ColourScheme
66-
err = json.Unmarshal(bytes, &colours)
67-
if err != nil {
68-
panic(fmt.Errorf("%w", err))
69-
}
70-
return colours
65+
var colours []ColourScheme
66+
err = json.Unmarshal(bytes, &colours)
67+
if err != nil {
68+
panic(fmt.Errorf("%w", err))
69+
}
70+
return colours
7171
}

editor.go

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ const (
2525
SHIFT_LEFT = 1010
2626

2727
// Specific ANSI mappings
28-
BACKSPACE = 127
29-
ENTER = 13
30-
SEARCH = 6 // Ctrl-F on Mac OS
31-
UNDO = 26 // Ctrl-X on Mac OS
32-
COPY = 3 // Ctrl-C on Mac OS
33-
PASTE = 22 // Ctrl-V on Mac OS
34-
DELETE_ROW = 4 // Ctrl-D on Mac OS
35-
SAVE = 19 // Ctrl-S on Mac OS
28+
BACKSPACE = 127
29+
ENTER = 13
30+
SEARCH = 6 // Ctrl-F on Mac OS
31+
UNDO = 26 // Ctrl-X on Mac OS
32+
COPY = 3 // Ctrl-C on Mac OS
33+
PASTE = 22 // Ctrl-V on Mac OS
34+
DELETE_ROW = 4 // Ctrl-D on Mac OS
35+
SAVE = 19 // Ctrl-S on Mac OS
36+
SAVE_AND_EXIT = 17 // Ctrl-Q on Mac OS
37+
EXIT = 23 // Ctrl-W on Mac OS
3638
)
3739

3840
type Editor struct {
@@ -182,8 +184,14 @@ func (e *Editor) ReadCharBlock() byte {
182184
func (e *Editor) KeyPress() bool {
183185
x := e.ReadChar()
184186
switch x {
185-
case Ctrl('q'):
187+
188+
case SAVE_AND_EXIT:
189+
e.Save()
186190
return true
191+
192+
case EXIT:
193+
return true
194+
187195
case '\x1b':
188196
c := e.HandleEscapeCode()
189197
e.HandleMoveCursor(c)
@@ -416,15 +424,14 @@ func (e *Editor) DrawStatusBar() {
416424
}
417425

418426
func (e *Editor) Close() error {
419-
saveErr := e.Save()
420427
err := RevertTerminalMode(e.originalTermios)
421428
if err != nil {
422429
fmt.Println(fmt.Errorf(
423430
"Error on terminal close when disabling raw mode. Error: %w\n", err,
424431
).Error())
425432
}
426433
e.filename = ""
427-
return saveErr
434+
return err
428435
}
429436

430437
func (e *Editor) Save() error {

0 commit comments

Comments
 (0)