aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pw.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/pw.c b/pw.c
index e7669f1..d0990d2 100644
--- a/pw.c
+++ b/pw.c
@@ -177,7 +177,7 @@ static void clear_cur_line()
static void drawstatus(unsigned stat, char *cmd)
{
if (cmd) {
- printf(":%s", cmd);
+ printf("%s", cmd);
} else if ((stat & (stat_eof | stat_susp))) {
if ((stat & stat_eof))
printf("EOF ");
@@ -207,14 +207,14 @@ static void redraw(char **circbuf, int nlines, int hpos,
static void execute(char *cmd)
{
- char *arg = cmd + 1 + strspn(cmd + 1, " \t");
+ char *arg = cmd + 2 + strspn(cmd + 2, " \t");
clear_cur_line();
- switch (cmd[0]) {
+ switch (cmd[1]) {
case 'w': case 'a':
{
- FILE *f = fopen(arg, cmd[0] == 'w' ? "w" : "a");
+ FILE *f = fopen(arg, cmd[1] == 'w' ? "w" : "a");
int ok = 1;
if (!f) {
@@ -474,7 +474,8 @@ int main(int argc, char **argv)
break;
case ':':
kbd_state = kbd_colon;
- cmdbuf[0] = 0;
+ cmdbuf[0] = ch;
+ cmdbuf[1] = 0;
colcmd = cmdbuf;
break;
}
@@ -503,7 +504,7 @@ int main(int argc, char **argv)
case 27: case 13: case 3:
kbd_state = kbd_cmd;
stat |= stat_dirty;
- if (ch == 13 && cmdbuf[0]) {
+ if (ch == 13 && cmdbuf[1]) {
execute(cmdbuf);
stat &= ~stat_dirty;
kbd_state = kbd_result;
@@ -514,7 +515,7 @@ int main(int argc, char **argv)
case 8: case 127:
{
size_t len = strlen(cmdbuf);
- if (len == 0) {
+ if (len == 1) {
kbd_state = kbd_cmd;
colcmd = 0;
stat |= stat_dirty;
@@ -524,14 +525,14 @@ int main(int argc, char **argv)
}
break;
case 21:
- cmdbuf[0] = 0;
+ cmdbuf[1] = 0;
break;
case 23:
{
size_t len = strlen(cmdbuf);
- while (len > 0 && isspace((unsigned char) cmdbuf[len - 1]))
+ while (len > 1 && isspace((unsigned char) cmdbuf[len - 1]))
len--;
- while (len > 0 && !isspace((unsigned char) cmdbuf[len - 1]))
+ while (len > 1 && !isspace((unsigned char) cmdbuf[len - 1]))
len--;
cmdbuf[len] = 0;
}