]> Zhao Yanbai Git Server - minix.git/commitdiff
Fix command line history in ash 73/273/2
authorLionel Sambuc <lionel@minix3.org>
Wed, 30 Jan 2013 14:36:51 +0000 (15:36 +0100)
committerLionel Sambuc <lionel@minix3.org>
Fri, 1 Feb 2013 10:41:47 +0000 (11:41 +0100)
Also did some cleanup in ash sources, to make minix modifications
more obvious, as well as some simplifications (by removing code which
is never compiled)

Removed EDITLINE support, use libedit, which does the termcap/terminfo
handling.

Change-Id: I19f7f425ed6a61298844631f9d7f3173cf7f30c0

17 files changed:
commands/ash/Makefile
commands/ash/bltin/echo.c
commands/ash/builtins.def
commands/ash/eval.c
commands/ash/exec.c
commands/ash/histedit.c
commands/ash/input.c
commands/ash/miscbltin.c
commands/ash/options.c
commands/ash/parser.c
commands/ash/shell.h
commands/ash/trap.c
commands/ash/var.c
docs/UPDATING
etc/ast/.ashrc
etc/ast/.profile
lib/libedit/makelist

index 9075a9f22dd80ac969174817cd32a38a09386afd..b0a06dec7dc6ed5a4e8435052332b675c2084fcf 100644 (file)
@@ -8,8 +8,6 @@ MAN=
 
 # Enable this line to disable command line editing
 #EDIT=-DNO_HISTORY
-# Enable this line to use the editline library instead of libedit
-EDIT=-DEDITLINE
 
 # Enable this line if your system does not have a <paths.h>
 #NO_PATHS_H=-DNO_PATHS_H
@@ -18,7 +16,7 @@ EDIT=-DEDITLINE
 NO_JOBS=-DJOBS=0
 MKB_NO_JOBS=-j
 
-SRCS=  alias.c arith.y arith_lex.l cd.c eval.c exec.c expand.c \
+SRCS=  alias.c arith.y arith_lex.l cd.c complete.c eval.c exec.c expand.c \
        histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
        mystring.c options.c output.c parser.c redir.c show.c \
        trap.c var.c setmode.c
index 9051c0c2cb81470bc55a5b1f97ceecd607430da0..72bb60e52f029d5035c41215ad9ce5cd0ff129e3 100644 (file)
@@ -41,18 +41,8 @@ __FBSDID("$FreeBSD: src/bin/sh/bltin/echo.c,v 1.14 2004/04/06 20:06:53 markm Exp
  * Echo command.
  */
 
-#ifdef __minix
-#define MINIX
-#endif
-
 #include "bltin.h"
 
-#ifndef MINIX
-/* #define eflag 1 */
-#else
-#undef eflag
-#endif
-
 int
 echocmd(argc, argv)
        int argc;
@@ -63,7 +53,7 @@ echocmd(argc, argv)
        char c;
        int count;
        int nflag = 0;
-#ifndef eflag
+#ifdef __minix
        int eflag = 0;
 #endif
 
@@ -71,7 +61,7 @@ echocmd(argc, argv)
        if (argc)
                ap++;
        if ((p = *ap) != NULL) {
-#ifdef MINIX
+#ifdef __minix
                if (equal(p, "--")) {
                        ap++;
                }
@@ -80,7 +70,7 @@ echocmd(argc, argv)
                        nflag++;
                        ap++;
                } else if (equal(p, "-e")) {
-#ifndef eflag
+#ifdef __minix
                        eflag++;
 #endif
                        ap++;
index 0deae5977ca31003d395832a9393fed0afe4dadf..b55ba83eb5e4147edbef7660fbcfb0ddef95e468 100644 (file)
@@ -47,8 +47,9 @@
 
 bltincmd       builtin
 commandcmd     command
-#alloccmd      alloc
+#if JOBS
 bgcmd -j       bg
+#endif
 breakcmd       break continue
 #catfcmd       catf
 cdcmd          cd chdir
@@ -62,15 +63,17 @@ exportcmd   export readonly
 exprcmd                expr test [
 falsecmd       false
 histcmd -h     fc
+#if JOBS
 fgcmd -j       fg
+#endif
 getoptscmd     getopts
 hashcmd                hash
 jobidcmd       jobid
 jobscmd                jobs
-#linecmd       line
 localcmd       local
-#nlechocmd     nlecho
+#ifndef SMALL
 #printfcmd     printf
+#endif
 pwdcmd         pwd
 readcmd                read
 returncmd      return
@@ -84,11 +87,7 @@ umaskcmd     umask
 unaliascmd     unalias
 unsetcmd       unset
 waitcmd                wait
-#foocmd                foo
 aliascmd       alias
 ulimitcmd      ulimit
 bindcmd                bind
 wordexpcmd     wordexp
-
-#
-# $PchId: builtins.def,v 1.5 2006/03/31 10:50:57 philip Exp $
index a44ead002da42719f5b35fd1afd87af09fe038f8..4c1df9c55997f4a64bf1c109443288e4b8bcba46 100644 (file)
@@ -72,7 +72,7 @@ __FBSDID("$FreeBSD: src/bin/sh/eval.c,v 1.42 2004/04/06 20:06:51 markm Exp $");
 #include "error.h"
 #include "show.h"
 #include "mystring.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #endif
 
@@ -194,7 +194,7 @@ evaltree(union node *n, int flags)
                exitstatus = 0;
                goto out;
        }
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
        displayhist = 1;        /* show history substitutions done with fc */
 #endif
        TRACE(("evaltree(0x%lx: %d) called\n", (long)n, n->type));
index 923515fc698d300797145db53f530723ef578945..e6a12e9adf5a71f9df1a5a12ac48ca4fda12f258 100644 (file)
@@ -155,7 +155,7 @@ tryexec(char *cmd, char **argv, char **envp)
        int e;
 
        execve(cmd, argv, envp);
-#if !__minix_vmd
+
        e = errno;
        if (e == ENOEXEC) {
                initshellproc();
@@ -166,7 +166,6 @@ tryexec(char *cmd, char **argv, char **envp)
                /*NOTREACHED*/
        }
        errno = e;
-#endif
 }
 
 /*
index 1e6ed1a0069f966c9e442a8b7a35b722395da754..e341c56d83d61900e6101b5da96651b576a5bf39 100644 (file)
@@ -58,7 +58,7 @@ __FBSDID("$FreeBSD: src/bin/sh/histedit.c,v 1.26 2004/04/06 20:06:51 markm Exp $
 #include "output.h"
 #include "mystring.h"
 #include "builtins.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #include "complete.h"
 #include "error.h"
@@ -179,7 +179,7 @@ sethistsize(hs)
                if (hs == NULL || *hs == '\0' ||
                   (histsize = atoi(hs)) < 0)
                        histsize = 100;
-               history(hist, &he, H_EVENT, histsize);
+               history(hist, &he, H_SETSIZE, histsize);
        }
 }
 
@@ -526,7 +526,7 @@ bindcmd(int argc, char **argv)
        error("not compiled with line editing support");
        return (0);
 }
-#endif /* !NO_HISTORY && !EDITLINE */
+#endif /* !NO_HISTORY */
 
 /*
  * $PchId: histedit.c,v 1.6 2006/04/10 14:52:58 philip Exp $
index fb234d2a65d92827e5050fd3c0553456fa199eb4..15fa04ccdd1a571a475ea494db108bb79a12b7b7 100644 (file)
@@ -63,16 +63,7 @@ __FBSDID("$FreeBSD: src/bin/sh/input.c,v 1.22 2004/04/06 20:06:51 markm Exp $");
 #include "error.h"
 #include "alias.h"
 #include "parser.h"
-#ifdef EDITLINE
-#ifdef __minix_vmd
-#include <readline/readline.h>
-#else
-/* What about other systems? */
-char *readline(char *prompt);
-#endif
-#else
 #include "myhistedit.h"
-#endif
 #include "redir.h"
 #include "trap.h"
 
@@ -118,9 +109,7 @@ STATIC struct parsefile *parsefile = &basepf;       /* current input file */
 int init_editline = 0;         /* editline library initialized? */
 int whichprompt;               /* -1 == PSE, 1 == PS1, 2 == PS2 */
 
-#ifndef EDITLINE
 EditLine *el;                  /* cookie for editline package */
-#endif
 
 STATIC void pushfile(void);
 static int preadfd(void);
@@ -193,7 +182,7 @@ preadfd(void)
        int nr;
        parsenextc = parsefile->buf;
 
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
        if (el != NULL && gotwinch) {
                gotwinch = 0;
                el_resize(el);
@@ -201,37 +190,6 @@ preadfd(void)
 #endif
 retry:
 #ifndef NO_HISTORY
-#ifdef EDITLINE
-       if (parsefile->fd == 0 && editable) {
-               static const char *rl_cp= NULL;
-               static size_t rl_off= 0;
-
-               if (!rl_cp)
-               {
-                       rl_cp = readline(getprompt(NULL));
-                       if (rl_cp == NULL)
-                               nr = 0;
-               }
-               if (rl_cp)
-               {
-                       nr= strlen(rl_cp+rl_off);
-                       if (nr >= BUFSIZ-1)
-                       {
-                               nr= BUFSIZ-1;
-                               (void) memcpy(parsenextc, rl_cp+rl_off, nr);
-                               rl_off += nr;
-                       }
-                       else
-                       {
-                               (void) memcpy(parsenextc, rl_cp+rl_off, nr);
-                               parsenextc[nr++]= '\n';
-                               free((void *)rl_cp);
-                               rl_cp= NULL;
-                               rl_off= 0;
-                       }
-               }
-       } else
-#else /* !EDITLINE */
        if (parsefile->fd == 0 && el) {
                const char *rl_cp;
 
@@ -243,7 +201,6 @@ retry:
                        (void) strcpy(parsenextc, rl_cp);
                }
        } else
-#endif /* !EDITLINE */
 #endif
                nr = read(parsefile->fd, parsenextc, BUFSIZ - 1);
 
@@ -343,7 +300,7 @@ check:
        savec = *q;
        *q = '\0';
 
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
        if (parsefile->fd == 0 && hist && something) {
                HistEvent he;
                INTOFF;
index 2b289160e84b5d8c3094d693b151747e0d5a1871..d63b1e27d9849fd0fad581d795271fc325682d3f 100644 (file)
@@ -91,9 +91,7 @@ readcmd(int argc __unused, char **argv __unused)
        struct timeval tv;
        char *tvptr;
 #ifndef __minix
-#ifndef __minix_vmd
        fd_set ifds;
-#endif
        struct termios told, tnew;
        int tsaved;
 #endif
index 5b8706d0389b799f7800a34ef843f519e07e09db..c93ca2be15bb30bb03f491162c04c1a761c6c68d 100644 (file)
@@ -59,7 +59,7 @@ __FBSDID("$FreeBSD: src/bin/sh/options.c,v 1.21 2004/04/06 20:06:51 markm Exp $"
 #include "error.h"
 #include "mystring.h"
 #include "builtins.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #endif
 
@@ -129,7 +129,7 @@ void
 optschanged(void)
 {
        setinteractive(iflag);
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
        histedit();
 #endif
        setjobctl(mflag);
index 20d462a886e457fbb3984e94debf5e6366e9da47..e06521400d24027e7014494a5d36166422461abf 100644 (file)
@@ -58,7 +58,7 @@ __FBSDID("$FreeBSD: src/bin/sh/parser.c,v 1.51.2.1 2005/03/03 03:43:20 obrien Ex
 #include "alias.h"
 #include "show.h"
 #include "eval.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #endif
 
@@ -1556,11 +1556,7 @@ setprompt(int which)
        whichprompt = which;
 
 #ifndef NO_HISTORY
-#ifdef EDITLINE
-       if (!editable)
-#else
        if (!el)
-#endif /* EDITLINE */
 #endif /* !NO_HISTORY */
                out2str(getprompt(NULL));
 }
index 7e33f18c1861ea09250a22c79e3c6c67e8ea2c36..9d76acf0de1933d3a2dcc35cec36e02a86a6d483 100644 (file)
@@ -81,11 +81,6 @@ extern char nullstr[1];              /* null string */
 #define TRACE(param)
 #endif
 
-#if defined(__minix) && !defined(__NBSD_LIBC)
-typedef long quad_t;           /* XXX */
-typedef unsigned long u_quad_t;        /* XXX */
-#endif
-
 /*
  * $PchId: shell.h,v 1.7 2006/05/22 12:47:00 philip Exp $
  */
index a1daa08ebb7ff0df8a093d42ced07c603937695f..56dc8572f2fa15b1d72908e4130584cd33931dcf 100644 (file)
@@ -57,19 +57,11 @@ __FBSDID("$FreeBSD: src/bin/sh/trap.c,v 1.29 2004/04/06 20:06:51 markm Exp $");
 #include "error.h"
 #include "trap.h"
 #include "mystring.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #endif
 #include "builtins.h"
 
-#if defined(__minix)
-#if !defined(__NBSD_LIBC)
-#define NO_SIGINTERRUPT
-#endif
-#define NO_SYS_SIGNAME
-#define NO_SYS_SIGLIST
-#endif
-
 typedef void (*sig_T)(int);
 
 /*
@@ -511,7 +503,7 @@ int flag;
 }
 #endif
 
-#ifdef NO_SYS_SIGNAME
+#ifdef __minix
 static char *strsigname(sig)
 int sig;
 {
@@ -524,11 +516,7 @@ int sig;
        case SIGILL:    return "ill";           /*  4 */
        case SIGTRAP:   return "trap";          /*  5 */
        case SIGABRT:   return "abrt";          /*  6 */
-#ifdef __minix_vmd
-       case SIGEMT:    return "emt";           /*  7 */
-#else
        case SIGBUS:    return "bus";           /*  7 */
-#endif
        case SIGFPE:    return "fpe";           /*  8 */
        case SIGKILL:   return "kill";          /*  9 */
        case SIGUSR1:   return "usr1";          /* 10 */
@@ -537,11 +525,7 @@ int sig;
        case SIGPIPE:   return "pipe";          /* 13 */
        case SIGALRM:   return "alrm";          /* 14 */
        case SIGTERM:   return "term";          /* 15 */
-#ifdef __minix_vmd
-       case 16:        return "Signal 16";     /* 16 */
-#else
        case SIGEMT:    return "emt";           /* 16 */
-#endif
        case SIGCHLD:   return "chld";          /* 17 */
        case SIGCONT:   return "cont";          /* 18 */
        case SIGSTOP:   return "stop";          /* 19 */
@@ -551,9 +535,6 @@ int sig;
        case SIGWINCH:  return "winch";         /* 23 */
        case SIGVTALRM: return "vtalrm";        /* 24 */
        case SIGPROF:   return "prof";          /* 25 */
-#ifdef __minix_vmd
-       case SIGFPEMU:  return "fpemu";         /* 30 */
-#endif
        default:        return "Signal n";
        }
 }
@@ -565,7 +546,7 @@ int sig;
 }
 #endif
 
-#ifdef NO_SYS_SIGLIST
+#ifdef __minix
 #include "signames.h"
 char *strsiglist(sig)
 int sig;
index b6665b29f24333e6e4cea539c07e0cad10cd63fe..061d3a5a027e545f632333e31545edc396db213f 100644 (file)
@@ -66,7 +66,7 @@ __FBSDID("$FreeBSD: src/bin/sh/var.c,v 1.26.2.1 2004/09/30 04:41:55 des Exp $");
 #include "error.h"
 #include "mystring.h"
 #include "parser.h"
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
 #include "myhistedit.h"
 #endif
 
@@ -102,7 +102,7 @@ struct var vvers;
 STATIC struct var voptind;
 
 STATIC const struct varinit varinit[] = {
-#if !defined(NO_HISTORY) && !defined(EDITLINE)
+#if !defined(NO_HISTORY)
        { &vhistsize,   VSTRFIXED|VTEXTFIXED|VUNSET,    "HISTSIZE=",
          sethistsize },
 #endif
index d012c819e6787980ad5c9a1b0a5a1e4b9777ba2d..04f49e13a25eab25f6e3738fe11ab92e76c4bbf2 100644 (file)
@@ -1,3 +1,12 @@
+20130130:
+       With the shell update, and following update of 'test', some
+       modifications are needed in .profile and .ashrc.
+       If you use the defaults, simply execute the following for all
+       of your users:
+
+       # cp etc/ast/.ashrc ~/
+       # cp etc/ast/.profile ~/
+
 20130114:
        The terminfo update is also linked to the databases functions,
        which means the tool used to generate the termcap entries has to
index 5d92c046691ebdc8a97378e94194e8706d8ce563..5757405c231212180320db2289154a7edda0a9eb 100644 (file)
@@ -12,8 +12,9 @@ export PATH=$HOME/bin:/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/pkg/bin:
 } # End of no-repeat.
 
 # Let cd display the current directory on the status line.
-if [ "$-" : '.*i.*' -a -t 0 -a -f /usr/bin/tget ] && tget -flag hs
+if [ -t 0 -a -f /usr/bin/tget ] && tget -flag hs
 then
+case $- in *i*)
        hostname=$(expr $(uname -n) : '\([^.]*\)')
        eval "cd()
        {
@@ -24,4 +25,6 @@ then
        }"
        unset hostname
        cd .
+       ;;
+esac
 fi
index 490b26d320aa70333f2f524e61d07a0663aede94..b74b1654296aa1f32f04b537c7636422c46d6e46 100644 (file)
@@ -1,7 +1,7 @@
 # Login shell profile.
 
-# Erase character and erase line interrupt keys
-stty sane erase '^H' kill '^U'
+# Activate emacs keybindings and command line history support
+set -o emacs
 
 # Check terminal type.
 case $TERM in
index 588397bc67287620a7a84d96906822df61a17790..bbb512bff9501ba7ea3db73f6f0943320202a05e 100644 (file)
@@ -201,11 +201,12 @@ _EOF
 
 #      generate editline.c from various .c files
 #
+#      LSC: Needed by MINIX's ASH, so do not hide those
 -e)
        echo "$FILES" | tr ' ' '\012' | $AWK '
        BEGIN {
            printf("/* Automatically generated file, do not edit */\n");
-           printf("#define protected static\n");
+           printf("#define protected /* LSC: see makelist static*/\n");
            printf("#define SCCSID\n");
        }
        {