Hi,

This patch adds some intelligence to emacs mode filename completion when dealing
with quotes in ksh.

Example:

        $ ls '/boo<TAB>
        $ ls 'boot <point>

becomes:

        $ ls 'boot' <point>


Index: emacs.c
===================================================================
RCS file: /cvs/src/bin/ksh/emacs.c,v
retrieving revision 1.48
diff -u -p -r1.48 emacs.c
--- emacs.c     17 Dec 2013 16:37:05 -0000      1.48
+++ emacs.c     23 Jun 2014 15:00:41 -0000
@@ -1799,12 +1799,31 @@ do_complete(int flags,  /* XCF_{COMMAND,F
        nlen = x_longest_prefix(nwords, words);
        /* complete */
        if (nwords == 1 || nlen > olen) {
+               int isdir;
+
                x_goto(xbuf + start);
                x_delete(olen, false);
                x_escape(words[0], nlen, x_emacs_putbuf);
                x_adjust();
                completed = 1;
+
+               isdir = words[0][nlen - 1] == '/';
+
+               /* add matching quote if we began with one */
+               if (start > 0 && xbuf[start - 1] == '\'') {
+                       if (xbuf[start + nlen] != '\'' && !isdir)
+                               x_ins("'");
+                       if (!isdir)
+                               x_mv_forw(0);
+               }
+               if (start > 0 && xbuf[start - 1] == '"') {
+                       if (xbuf[start + nlen] != '"' && !isdir)
+                               x_ins("\"");
+                       if (!isdir)
+                               x_mv_forw(0);
+               }
        }
+
        /* add space if single non-dir match */
        if (nwords == 1 && words[0][nlen - 1] != '/') {
                x_ins(space);

Attachment: pgpqTFCCq500X.pgp
Description: PGP signature

Reply via email to