Merge branch 'refs/heads/t/com_ls_compat'
authorAndre Noll <maan@tuebingen.mpg.de>
Thu, 17 Sep 2015 18:07:02 +0000 (20:07 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Thu, 17 Sep 2015 18:11:36 +0000 (20:11 +0200)
A single commit which adds support for the new syntax for the -l and -s options
of the ls command. These options should now be specified as -l=v rather than
-lv, for example. The old syntax still works, but support will be dropped in
v0.6.0.

* fdb039 Introduce new syntax for com_ls().

NEWS
afs.cmd
aft.c
client.c
web/manual.m4

diff --git a/NEWS b/NEWS
index 834b61fcb3b1906d88bccaae1eeea18c41fa1149..758cc3fdfdfe8dfa2817ba6f449c3f545f0bab62 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,9 @@ NEWS
 -----------------------------------------
 current master branch "magnetic momentum"
 -----------------------------------------
+
+Many new features and a lot of other improvements.
+
        - On Linux systems, local sockets are now created in the
          abstract name space by default. This allows to get rid of
          the socket specials in /var/paraslash.
@@ -16,7 +19,10 @@ current master branch "magnetic momentum"
          the background if no log file is given. Instead, all log
          messages go to /dev/null in this case.
        - Web page cleanup.
-
+       - New syntax for the -l and -s options of the ls command.
+         These options should now be specified as -l=v rather than
+         -lv, for example. The old syntax still works, but support
+         will be dropped in v0.6.0.
 
 Download: ./releases/paraslash-git.tar.bz2 (tarball)
 
diff --git a/afs.cmd b/afs.cmd
index bf6482b9719ef2ade361f7a09eb0e19ca604c7a0..07db3ccb6fadd270a8e2513f0084795e18230acd 100644 (file)
--- a/afs.cmd
+++ b/afs.cmd
@@ -36,19 +36,20 @@ H: only the tables given by table_name... are created.
 N: ls
 P: AFS_READ
 D: List audio files.
-U: ls [-l[s|l|v|m]] [-p] [-a] [-r] [-d] [-s{p|s|l|n|f|c|i|y|b|d|a}] [pattern...]
+U: ls [-l=mode] [-p] [-a] [-r] [-d] [-s=order] [pattern...]
 H: Print a list of all audio files matching pattern.
 H:
 H: Options:
 H:
-H: -l  Change listing mode. Defaults to short listing if not given.
+H: -l=mode     Change listing mode. Defaults to short listing if not given.
 H:
-H:    -ls: short listing mode
-H:    -ll: long listing mode (equivalent to -l)
-H:    -lv: verbose listing mode
-H:    -lp: parser-friendly mode
-H:    -lm: mbox listing mode
-H:    -lc: chunk-table listing mode
+H:    Available modes:
+H:    s: short listing mode
+H:    l: long listing mode (equivalent to -l)
+H:    v: verbose listing mode
+H:    p: parser-friendly mode
+H:    m: mbox listing mode
+H:    c: chunk-table listing mode
 H:
 H: -p  List full paths. If this option is not specified, only the basename
 H:     of each file is printed.
@@ -60,19 +61,20 @@ H: -r       Reverse sort order.
 H:
 H: -d  Print dates as seconds after the epoch.
 H:
-H: -s  Change sort order. Defaults to alphabetical path sort if not given.
-H:
-H:    -sp: by path
-H:    -sl: by last played time
-H:    -ss: by score (implies -a)
-H:    -sn: by num played count
-H:    -sf: by frequency
-H:    -sc: by number of channels
-H:    -si: by image id
-H:    -sy: by lyrics id
-H:    -sb: by bit rate
-H:    -sd: by duration
-H:    -sa: by audio format
+H: -s=order    Change sort order. Defaults to alphabetical path sort if not given.
+H:
+H:   Possible values for order:
+H:   p: by path
+H:   l: by last played time
+H:   s: by score (implies -a)
+H:   n: by num played count
+H:   f: by frequency
+H:   c: by number of channels
+H:   i: by image id
+H:   y: by lyrics id
+H:   b: by bit rate
+H:   d: by duration
+H:   a: by audio format
 ---
 N: lsatt
 P: AFS_READ
diff --git a/aft.c b/aft.c
index bf86acf80ca32a601a2e68cfd7b7a691ac3ba92a..102856bafd6ecf319f50d696149dc800dd1fab5a 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -1439,18 +1439,26 @@ int com_ls(struct command_context *cc)
                        i++;
                        break;
                }
+               /*
+                * Compatibility: Prior to 0.5.5 it was necessary to specify
+                * the listing mode without the '=' character as in -lv, for
+                * example. Now the variant with '=' is preferred and
+                * documented but we still accept the old way to specify the
+                * listing mode.
+                *
+                * Support for the legacy syntax can be dropped at 0.6.0
+                * or later.
+                */
                if (!strncmp(arg, "-l", 2)) {
-                       if (!*(arg + 2)) {
-                               mode = LS_MODE_LONG;
-                               continue;
-                       }
-                       if (*(arg + 3))
-                               return -E_AFT_SYNTAX;
-                       switch(*(arg + 2)) {
+                       arg += 2;
+                       if (*arg == '=')
+                               arg++;
+                       switch (*arg) {
                        case 's':
                                mode = LS_MODE_SHORT;
                                continue;
                        case 'l':
+                       case '\0':
                                mode = LS_MODE_LONG;
                                continue;
                        case 'v':
@@ -1485,10 +1493,12 @@ int com_ls(struct command_context *cc)
                        flags |= LS_FLAG_UNIXDATE;
                        continue;
                }
+               /* The compatibility remark above applies also to -s. */
                if (!strncmp(arg, "-s", 2)) {
-                       if (!*(arg + 2) || *(arg + 3))
-                               return -E_AFT_SYNTAX;
-                       switch(*(arg + 2)) {
+                       arg += 2;
+                       if (*arg == '=')
+                               arg++;
+                       switch (*arg) {
                        case 'p':
                                sort = LS_SORT_BY_PATH;
                                continue;
index f3bb92f8e1db84c425c558cd5fa3dd8fcf38a6db..35b49a168d5b0d680603e087ed7e6bcf3d309d9e 100644 (file)
--- a/client.c
+++ b/client.c
@@ -270,9 +270,9 @@ static void ls_completer(struct i9e_completion_info *ci,
                struct i9e_completion_result *cr)
 {
        char *opts[] = {
-               "--", "-l", "-ls", "-ll", "-lv", "-lp", "-lm", "-lc", "-p",
-               "-a", "-r", "-d", "-sp", "-sl", "-ss", "-sn", "-sf", "-sc",
-               "-si", "-sy", "-sb", "-sd", "-sa", NULL
+               "--", "-l", "-l=s", "-l=l", "-l=v", "-l=p", "-l=m", "-l=c",
+               "-p", "-a", "-r", "-d", "-s=p", "-s=l", "-s=s", "-s=n", "-s=f",
+               "-s=c", "-s=i", "-s=y", "-s=b", "-s=d", "-s=a", NULL
        };
        if (ci->word[0] == '-')
                i9e_complete_option(opts, ci, cr);
index d0fe28e0ac6fed4e67db6dd0d0cef8a6784e7940..8c00c99bb3ef884ff46ba1c8ba9a3d3cfa87e1e7 100644 (file)
@@ -751,7 +751,7 @@ is applied to all audio files matching this pattern:
 
 The command
 
-       para_client -- ls -lv
+       para_client -- ls -l=v
 
 gives you a verbose listing of your audio files also showing which
 attributes are set.