dm
author viric@llimona
Mon, 14 May 2007 10:04:57 +0200
changeset 3 5b5abb696426
parent 2 11c4ec7423de
permissions -rwxr-xr-x
Added error messages
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     1
#!/bin/sh
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     2
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     3
# dm 0.9 - Directory Manager
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     4
#  (Instructions below the license)
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     5
# LICENSE
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     6
# Copyright (C) 2007 LluĂ­s Batlle i Rossell
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     7
# 
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     8
# This program is free software; you can redistribute it and/or
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
     9
# modify it under the terms of the GNU General Public License
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    10
# as published by the Free Software Foundation; either version 2
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    11
# of the License, or (at your option) any later version.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    12
# 
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    13
# This program is distributed in the hope that it will be useful,
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    14
# but WITHOUT ANY WARRANTY; without even the implied warranty of
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    15
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    16
# GNU General Public License for more details.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    17
# 
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    18
# You should have received a copy of the GNU General Public License
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    19
# along with this program; if not, write to the Free Software
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    20
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    21
#
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    22
# Instructions:
2
11c4ec7423de 'sort' sorts not-numerically, and fixed text width to 80 cols.
viric@llimona
parents: 1
diff changeset
    23
# 'dm' will manage a list of id-directory. 'dmcd' will allow the current shell
11c4ec7423de 'sort' sorts not-numerically, and fixed text width to 80 cols.
viric@llimona
parents: 1
diff changeset
    24
# to change to the directory given by 'id'.
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    25
#
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    26
# Examples:
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    27
#  $ dm 1 /tmp   # Adds the id '1' for /tmp
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    28
#  $ dm 2 .      # Adds the id '2' for the current dir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    29
#  $ dmcd 1      # Goes to /tmp
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    30
#  $ dmcd 2      # Goes to what was your current dir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    31
#  $ dm -d 2     # Deletes the entry for '2'.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    32
#  $ dm          # Shows your 'database'
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    33
#  1     /tmp
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    34
#  $ dm -h       # Shows help, and defines 'dmcd' for sh.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    35
#
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    36
# In order to use 'dmcd', you should define the function
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    37
# given by "dm -h" in your shell. Put it in your bashrc or
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    38
# a file like that.
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    39
#
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    40
# Your directory database is stored in ~/.dm .
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    41
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    42
function showdirs
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    43
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    44
    if [ -f ~/.dm ] ; then
2
11c4ec7423de 'sort' sorts not-numerically, and fixed text width to 80 cols.
viric@llimona
parents: 1
diff changeset
    45
        cat ~/.dm | sort
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    46
    fi
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    47
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    48
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    49
function testdir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    50
{
3
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    51
    if [ "$1x" == "x" ]; then
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    52
        echo "Error: You should specify an alias for a directory." 1>&2
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    53
        return 1
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    54
    fi
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    55
    if [ -f ~/.dm ] ; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    56
        grep "^$1	" ~/.dm > /dev/null 2> /dev/null
3
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    57
        if [ $? -ne 0 ]; then
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    58
            echo "Error: There is no directory for '$1'" 1>&2
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    59
            return 1
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    60
        fi
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    61
    else
3
5b5abb696426 Added error messages
viric@llimona
parents: 2
diff changeset
    62
        echo "Error: There is no directory for '$1'" 1>&2
0
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    63
        return 1
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    64
    fi
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    65
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    66
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    67
function deldir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    68
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    69
    # Remove the old def
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    70
    if [ -f ~/.dm ] ; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    71
        sed -i "/^$1\t/d" ~/.dm
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    72
    fi
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    73
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    74
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    75
function setdir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    76
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    77
    # Remove the old def
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    78
    deldir $1
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    79
    NEWDIR=`getpath "$2"`
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    80
    # Add new
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    81
    echo "$1	$NEWDIR" >> ~/.dm
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    82
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    83
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    84
function getdir
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    85
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    86
    if [ -f ~/.dm ] ; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    87
        grep "^$1	" ~/.dm | sed 's/^[^\t]*\t//'
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    88
    else
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    89
        return 1
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    90
    fi
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    91
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    92
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    93
function showhelp
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    94
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    95
    echo "usage: $0 [ -l | -d id | -t id | id | id newdir ]"
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    96
    echo 'For sh: function dmcd { dm -t $1 && cd `dm $1`; }'
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    97
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    98
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
    99
function getpath
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   100
{
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   101
    OLD=`pwd`
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   102
    cd "$1"
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   103
    pwd
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   104
    cd "$OLD"
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   105
}
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   106
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   107
# dm -t $1 && cd `dm $1`
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   108
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   109
if [ $# -lt 1 ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   110
    showdirs
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   111
elif [ $1 == "-l" ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   112
    showdirs
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   113
elif [ $1 == "-h" ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   114
    showhelp
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   115
elif [ $1 == "-d" ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   116
    deldir $2
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   117
elif [ $1 == "-t" ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   118
    testdir $2
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   119
elif [ $# -eq 2  ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   120
    setdir $1 $2
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   121
elif [ $# -eq 1  ]; then
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   122
    getdir $1
32ec38f06438 Version 0.9. Initial.
viric@mandarina
parents:
diff changeset
   123
fi