From 6f994715d6e86297d1c9851666221cd2eb09ac3c Mon Sep 17 00:00:00 2001
From: Lucian Holland <lucian@anobii.com>
Date: Tue, 6 Sep 2011 23:12:56 +0100
Subject: [PATCH 1/2] Fixed incorrect sorting of versions

---
 nvm.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/nvm.sh b/nvm.sh
index be3d1ab..9ae9ad9 100755
--- a/nvm.sh
+++ b/nvm.sh
@@ -38,7 +38,7 @@ nvm_version()
         return
     fi
     if [ ! "$VERSION" ]; then
-        VERSION=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 2,1n -k 2,2n -k 3,3n | tail -n1`
+        VERSION=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 1.2,1n -k 2,2n -k 3,3n | tail -n1`
     fi
     if [ ! "$VERSION" ]; then
         echo "N/A"

From fda6e7f8defed84a7b09e563e6a4b1f062c2501a Mon Sep 17 00:00:00 2001
From: Lucian Holland <lucian@symposion.co.uk>
Date: Fri, 4 Nov 2011 20:36:04 +0000
Subject: [PATCH 2/2] Rewrote version listing system

Now sorts correctly in all instances and prints highlights
even in sorted views. Also will output a list of matching versions
for commands of the form nvm ls 0.4* rather than just printing one
version. nvm version 0.4 still prints the single latest matching
version, however.
---
 nvm.sh | 73 +++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 47 insertions(+), 26 deletions(-)

diff --git a/nvm.sh b/nvm.sh
index 9ae9ad9..d8ff132 100755
--- a/nvm.sh
+++ b/nvm.sh
@@ -20,34 +20,56 @@ fi
 nvm_version()
 {
     PATTERN=$1
-    VERSION=''
-    if [ -f "$NVM_DIR/alias/$PATTERN" ]; then
-        nvm_version `cat $NVM_DIR/alias/$PATTERN`
-        return
+    # The default version is the current one
+    if [ ! "$PATTERN" ]; then
+        PATTERN='current'
     fi
-    # If it looks like an explicit version, don't do anything funny
-    if [[ "$PATTERN" == v?*.?*.?* ]]; then
-        VERSION="$PATTERN"
+
+    VERSION=`nvm_ls $PATTERN | tail -n1`
+    echo "$VERSION"
+    
+    if [ "$VERSION" = 'N/A' ]; then
+        return 13
     fi
-    # The default version is the current one
-    if [ ! "$PATTERN" -o "$PATTERN" = 'current' ]; then
+}
+
+nvm_ls()
+{
+    PATTERN=$1
+    VERSIONS=''
+    if [ "$PATTERN" = 'current' ]; then
         VERSION=`node -v 2>/dev/null`
     fi
-    if [ "$PATTERN" = 'all' ]; then
-        (cd $NVM_DIR; \ls -dG v* 2>/dev/null || echo "N/A")
+
+    if [ -f "$NVM_DIR/alias/$PATTERN" ]; then
+        nvm_version `cat $NVM_DIR/alias/$PATTERN`
         return
     fi
-    if [ ! "$VERSION" ]; then
-        VERSION=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 1.2,1n -k 2,2n -k 3,3n | tail -n1`
+    # If it looks like an explicit version, don't do anything funny
+    if [[ "$PATTERN" == v?*.?*.?* ]]; then
+        VERSIONS="$PATTERN"
+    else
+        VERSIONS=`(cd $NVM_DIR; \ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 1.2,1n -k 2,2n -k 3,3n`
     fi
-    if [ ! "$VERSION" ]; then
+    if [ ! "$VERSIONS" ]; then
         echo "N/A"
-        return 13
-    elif [ -e "$NVM_DIR/$VERSION" ]; then
-        (cd $NVM_DIR; \ls -dG "$VERSION")
-    else
-        echo "$VERSION"
+        return
     fi
+    echo "$VERSIONS"
+    return
+}
+
+print_versions()
+{
+    OUTPUT=''
+    for VERSION in $1; do
+        PADDED_VERSION=`printf '%10s' $VERSION`
+        if [[ -d "$NVM_DIR/$VERSION" ]]; then
+             PADDED_VERSION="\033[0;34m$PADDED_VERSION\033[0m" 
+        fi
+        OUTPUT="$OUTPUT\n$PADDED_VERSION" 
+    done
+    echo -e "$OUTPUT" | column 
 }
 
 nvm()
@@ -189,13 +211,12 @@ nvm()
       echo "Now using node $VERSION"
     ;;
     "ls" | "list" )
-      if [ $# -ne 1 ]; then
-        nvm_version $2
-        return
+      print_versions "`nvm_ls $2`"
+      if [ $# -eq 1 ]; then
+        echo -ne "current: \t"; nvm_version current
+        nvm alias
       fi
-      nvm_version all
-      echo -ne "current: \t"; nvm_version current
-      nvm alias
+      return
     ;;
     "alias" )
       mkdir -p $NVM_DIR/alias
@@ -250,7 +271,7 @@ nvm()
         echo "Cache cleared."
     ;;
     "version" )
-        nvm_version $2
+        print_versions "`nvm_version $2`"
     ;;
     * )
       nvm help