From bbf92c58ec831bbac74f6da1cea33111e72f0348 Mon Sep 17 00:00:00 2001 From: Lisa Milne Date: Tue, 5 Dec 2023 20:04:33 +1000 Subject: [PATCH] some improvements to vi --- clite/core.js | 17 +++++++---------- clite/vi.js | 33 ++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/clite/core.js b/clite/core.js index 532044e..33ea9db 100644 --- a/clite/core.js +++ b/clite/core.js @@ -968,14 +968,6 @@ clite.io = { return vfsapi.mkFile(uid,path); } } - // TODO: get rid of this - //clite.io.open = function(pid,path,cb,open_link) { - //if (typeof cb === 'undefined') - //cb = false; - //if (typeof open_link === 'undefined') - //open_link = false; - //return getFileDes(pid,path,open_link,cb); - //} clite.io.open = function(pid,path,flags,cb) { var read = false; var write = false; @@ -2018,8 +2010,13 @@ clite.term = { }, keyup:function(e) { if (clite.term.data.isalt && clite.term.data.alt.israwIn) { - if (clite.term.data.handler != null) - clite.term.data.handler(e.key); + if (clite.term.data.handler != null) { + if (e.key == 'Tab') { + clite.term.data.handler('\t'); + }else{ + clite.term.data.handler(e.key); + } + } if (!clite.term.data.alt.echo) { e.target.value = ''; clite.term.data.buff = ''; diff --git a/clite/vi.js b/clite/vi.js index 33e3c8e..02c5bcd 100644 --- a/clite/vi.js +++ b/clite/vi.js @@ -13,6 +13,7 @@ clite.commands.load('vi',function(args,env,io) { var cursor_col = 0; var changed = false; var num = false; + var message = ''; function help() { stdio.printf(` @@ -85,6 +86,8 @@ Options: if (cursor_col == 0) { curses.printw('% 4d%c%s\n',i+1,cursor,lines[i][0]); }else{ + if (cursor_col > lines[i][0].length) + cursor_col = lines[i][0].length; var l = lines[i][0]; var b = l.substring(0,cursor_col); var e = l.substring(cursor_col); @@ -101,6 +104,8 @@ Options: if (cursor_col == 0) { curses.printw('%c%s\n',cursor,lines[i][0]); }else{ + if (cursor_col > lines[i][0].length) + cursor_col = lines[i][0].length; var l = lines[i][0]; var b = l.substring(0,cursor_col); var e = l.substring(cursor_col); @@ -111,6 +116,7 @@ Options: } } } + curses.printw('%s\t\t\t\t\t\t%d,%d\n',message,cursor_line,cursor_col); } function prepFile(fd) { @@ -191,10 +197,14 @@ Options: changed = false; } - if (quit && (!changed || force)) { - curses.endwin(); - io.exit(0); - return false; + if (quit) { + if (!changed || force) { + curses.endwin(); + io.exit(0); + return false; + }else{ + message = 'no write since last change (add ! to override)'; + } } return true; @@ -257,13 +267,14 @@ Options: curses.initscr(); cols = curses.getmaxx(); - rows = curses.getmaxy(); + rows = curses.getmaxy()-2; curses.cbreak(); curses.noecho(); curses.printw('Loading...'); function input(key) { if (mode == 0) { // view mode + //message = ''; switch (key) { case 'Up': case 'ArrowUp': @@ -284,28 +295,37 @@ Options: case 'i': curses.noecho(); mode = 2; + message = 'INSERT'; + showAt(topLine); break; case 'a': cursor_col = lines[cursor_line].length; curses.noecho(); mode = 2; + message = 'INSERT'; + showAt(topLine); break; case ':': curses.echo(); term.ttyctrl('iset',':'); cmd_buff = ':'; mode = 1; + showAt(topLine); break; } }else if (mode == 1) { // command mode + //message = ''; switch (key) { case 'Escape': mode = 0; + cmd_buff = ''; curses.noecho(); + showAt(topLine); break; case 'Enter': if (!doCommand(cmd_buff)) return; + showAt(topLine); cmd_buff = ''; term.ttyctrl('iset',''); break; @@ -315,10 +335,13 @@ Options: break; } }else{ // 2 edit mode + message = 'INSERT'; switch (key) { case 'Escape': mode = 0; curses.noecho(); + message = ''; + showAt(topLine); break; case 'Up': case 'ArrowUp':