Compare commits

...

2 commits

Author SHA1 Message Date
a92c9cd07a
Add TODO and line numbers 2024-11-15 00:09:02 +00:00
5b0b67b5eb
Add usage and change description 2024-11-14 13:39:30 +00:00
4 changed files with 47 additions and 7 deletions

View file

@ -1,12 +1,38 @@
# vip # vip
Small, fast and featureful vim-insipired text editor with strictly no dependency. Small, fast and featureful vim-insipired text editor with strictly no dependency.
It has colorful syntax highlighting and integrate with [ccc](https://github.com/night0721/ccc) for picking files
# Usage # Usage
```sh ```sh
vip -c file # Cat mode
vip file vip file
vip -c file
``` ```
```
LEFT/h: left
DOWN/j: down
UP/k: up
RIGHT/l: right
HOME/0: start of line
END/$: end of line
PAGEUP: jump up a page
PAGEDOWN: jump down a page
Backspace/ctrl+h/del: delete char
:w: save file
:q(!): quit
i: insert mode
v: visual mode
ESC: normal mode
gg: start of file
G: end of file
dd: delete line
/: search
O: create new line above cursor
o: create new line below cursor
pv: open ccc
```
# Dependencies # Dependencies
None None

6
TODO Normal file
View file

@ -0,0 +1,6 @@
Line number
Auto indent
soft wrap lines
copy paste
multiple buffer information
keybinding in config

View file

@ -5,7 +5,8 @@
/* THEME */ /* THEME */
/* 38 and 48 is reversed as bar's color is reversed */ /* 38 and 48 is reversed as bar's color is reversed */
#define SURFACE_1_BG "\033[38;2;049;050;068m" #define SURFACE_0_BG "\033[38;2;49;50;68m"
#define SURFACE_1_BG "\033[38;2;69;71;90m"
#define OVERLAY_2_BG "\033[38;2;147;153;178m" #define OVERLAY_2_BG "\033[38;2;147;153;178m"
#define BLACK_FG "\033[40m" #define BLACK_FG "\033[40m"
#define BLACK_BG "\033[30m" #define BLACK_BG "\033[30m"

17
vip.c
View file

@ -100,7 +100,7 @@ void draw_status_bar(void)
} }
int coord_len = snprintf(coord, sizeof(coord), " %d:%d ", cur_editor->y + 1, cur_editor->x + 1); int coord_len = snprintf(coord, sizeof(coord), " %d:%d ", cur_editor->y + 1, cur_editor->x + 1);
bprintf(SURFACE_1_BG); /* background */ bprintf(SURFACE_0_BG); /* background */
/* text */ /* text */
switch (cur_editor->mode) { switch (cur_editor->mode) {
case NORMAL: case NORMAL:
@ -120,7 +120,7 @@ void draw_status_bar(void)
while (file_len < cols) { while (file_len < cols) {
if (cols - mode_len - git_len - file_len == info_len + lines_len + coord_len) { if (cols - mode_len - git_len - file_len == info_len + lines_len + coord_len) {
bprintf("%s%s", info, SURFACE_1_BG); bprintf("%s%s", info, SURFACE_0_BG);
if (cur_editor->mode == NORMAL) { if (cur_editor->mode == NORMAL) {
bprintf(BLUE_FG); bprintf(BLUE_FG);
} else if (cur_editor->mode == INSERT) { } else if (cur_editor->mode == INSERT) {
@ -585,11 +585,19 @@ void draw_rows(void)
char *c = &cur_editor->row[filerow].render[cur_editor->coloff]; char *c = &cur_editor->row[filerow].render[cur_editor->coloff];
unsigned char *hl = &cur_editor->row[filerow].hl[cur_editor->coloff]; unsigned char *hl = &cur_editor->row[filerow].hl[cur_editor->coloff];
int absydiff = abs(filerow - cur_editor->y);
if (absydiff == 0) {
int num_digits = snprintf(NULL, 0, "%d", cur_editor->y + 1);
int left_padding = (6 - num_digits) / 2;
int right_padding = 6 - num_digits - left_padding;
bprintf("%s%*s%d%*s ", SURFACE_1_BG, left_padding, "", cur_editor->y + 1, right_padding, "");
} else {
bprintf("%s%6d ", SURFACE_1_BG, absydiff);
}
for (int j = 0; j < len; j++) { for (int j = 0; j < len; j++) {
if (iscntrl(c[j])) { if (iscntrl(c[j])) {
bprintf("%s%c\033[m", OVERLAY_2_BG, '@' + c[j]); bprintf("%s%c\033[m", OVERLAY_2_BG, '@' + c[j]);
} else if (hl[j] == NORMAL) {
bprintf("%s%c", WHITE_BG, c[j]);
} else { } else {
switch (hl[j]) { switch (hl[j]) {
case NUMBER: case NUMBER:
@ -1112,7 +1120,6 @@ int main(int argc, char **argv)
} }
break; break;
case CTRL_KEY('l'):
case '\033': case '\033':
if (cur_editor->mode == INSERT) { if (cur_editor->mode == INSERT) {
move_xy(ARROW_LEFT); move_xy(ARROW_LEFT);