various qol improvements
Some checks failed
Release / Bump Homebrew formula (push) Has been cancelled

+ C-u works with C-f and C-b (and their delete counterparts).
+ Opening files now allows adding a line number after to jump to.
This commit is contained in:
2025-11-27 12:48:10 -08:00
parent f200a7bfcd
commit bd68b809cd

50
main.c
View File

@@ -1130,7 +1130,6 @@ jump_to_position(int col, int row)
editor.curx = col; editor.curx = col;
editor.cury = row; editor.cury = row;
scroll();
display_refresh(); display_refresh();
} }
@@ -2323,8 +2322,10 @@ process_kcommand(int16_t c)
reset_editor(); reset_editor();
open_file(buf); open_file(buf);
display_refresh(); display_refresh();
free(buf);
jump_to_position(jumpx, jumpy); jump_to_position(jumpx, jumpy);
editor_set_status("file reloaded");
break; break;
case CTRL_KEY('s'): case CTRL_KEY('s'):
case 's': case 's':
@@ -2469,6 +2470,8 @@ process_normal(int16_t c)
void void
process_escape(int16_t c) process_escape(int16_t c)
{ {
int reps = 0;
editor_set_status("hi"); editor_set_status("hi");
switch (c) { switch (c) {
@@ -2481,13 +2484,25 @@ process_escape(int16_t c)
editor.curx = 0; editor.curx = 0;
break; break;
case 'b': case 'b':
find_prev_word(); reps = uarg_get();
while (reps--) {
find_prev_word();
}
break; break;
case 'd': case 'd':
delete_next_word(); reps = uarg_get();
while (reps--) {
delete_next_word();
}
break; break;
case 'f': case 'f':
find_next_word(); reps = uarg_get();
while (reps--) {
find_next_word();
}
break; break;
case 'm': case 'm':
toggle_markset(); toggle_markset();
@@ -2501,7 +2516,11 @@ process_escape(int16_t c)
toggle_markset(); toggle_markset();
break; break;
case BACKSPACE: case BACKSPACE:
delete_prev_word(); reps = uarg_get();
while (--reps) {
delete_prev_word();
}
break; break;
case ESC_KEY: case ESC_KEY:
case CTRL_KEY('g'): case CTRL_KEY('g'):
@@ -2509,6 +2528,8 @@ process_escape(int16_t c)
default: default:
editor_set_status("unknown ESC key: %04x", c); editor_set_status("unknown ESC key: %04x", c);
} }
uarg_clear();
} }
@@ -3032,8 +3053,10 @@ install_signal_handlers(void)
int int
main(int argc, char *argv[]) main(int argc, char *argv[])
{ {
int opt; char *arg;
int debug = 0; int lineno = 0;
int opt;
int debug = 0;
install_signal_handlers(); install_signal_handlers();
@@ -3063,7 +3086,20 @@ main(int argc, char *argv[])
open_file(argv[0]); open_file(argv[0]);
} }
if (argc > 1) {
arg = argv[1];
if (arg[0] == '+') {
arg++;
}
lineno = atoi(arg);
}
editor_set_status("C-k q to exit / C-k d to dump core"); editor_set_status("C-k q to exit / C-k d to dump core");
if (lineno < 1) {
editor_set_status("Invalid line number %s", arg);
} else {
jump_to_position(0, lineno - 1);
}
display_clear(NULL); display_clear(NULL);
loop(); loop();