[ros-users] rosbash: roscd magic for cleaner title/prompt

Ivan Dryanovski ivan.dryanovski at gmail.com
Wed Feb 2 20:10:40 UTC 2011


I just tested what Carlos sent:

idryanov at idryanov-desktop:~/ros/ros$ roscd rviz/
[rviz]:$ cd src/rviz/
[rviz/src/rviz]:$ cd /
idryanov at idryanov-desktop:/$

I made another small tweak which fixes a bug when the name of the
package is occurs twice in the directory path. So, without further
ado, version 3 of the roscd hack:

###########################################
# To enter ROSCD_MODE, type in roscd name_of_package
# To exit ROSCD_MODE, type in roscd, or change to a directory outside
# the package (`cd /`, `cd ..` etc)
# If ROSCD_MODE is set, replaces the default bash prompt and tab title
# with [name_of_package].

export PS1_BAK=$PS1

PROMPT_COMMAND='
if [ "$ROSCD_MODE" ]; then
  basedir="${PWD#${PWD%%/${ROSCD_MODE}*}}"
  if [ -z $basedir ]; then
      unset ROSCD_MODE
      export PS1=$PS1_BAK
        else

      export PS1="\[\e]0;[ ${ROSCD_MODE}
]\a\]\[\e[31;1m\][$basedir]:\$ \[\e[0m\]"
  fi
       else
  export PS1=$PS1_BAK
fi'

function roscd {
    local rosvals

    if [ -z $1 ]; then
      cd ${ROS_ROOT}
      unset ROSCD_MODE
      return 0
    fi

    _ros_decode_path $1 forceeval
    if [ $? != 0 ]; then
      echo "roscd: No such package '$1'"
      return 1
    elif [ -z $rosvals ]; then
      cd ${ROS_ROOT}
      return 0
    else
      cd ${rosvals[1]}${rosvals[2]}${rosvals[3]}
      export ROSCD_MODE=${rosvals[0]}
      return 0
    fi
}
#################################



More information about the ros-users mailing list