Главная страница


ru.linux

 
 - RU.LINUX ---------------------------------------------------------------------
 From : Mike Novikoff                        2:5020/1665.73 17 Oct 2007  13:13:13
 To : All
 Subject : ~/.bashrc_mp3
 -------------------------------------------------------------------------------- 
 
 #
 # This is formerly the fragment of the main 'lo:~mn/.bashrc',
 # now split into the separate file for easier maintenance.
 #
 # The most often directly used functions are mp3() and mp3s().
 # mp3  - plays its cmdline args || all files in current dir.
 # mp3s - wraps it into the `screen` session.
 #
 
 ############################################################## mp3 stuff ####
 #
 #alias mp3s='screen "mpg123 *.mp3"'
 #alias mp3s='screen mpg123 *.mp3'                               # 09.09.2006
 #
 mp3s ()  {                                                      # 07.03.2007
 
 # For filenames with spaces (and certain other escaped chars, e.g. [']):
 # 1) output the cmdline using ANOTHER field separator (other than space)
 # 2) restore the escaping backslashes (that were lost during expansion)
 #    where they are needed, i.e. before spaces and those "other chars"
 # 3) change "another separator" back to the normal space (NOT escaped!)
 
 local ARGS=$( (IFS="|"; echo "$*") \
                                 |sed "s/\([ '()#]\)/\\\\\1/g" |sed "s/|/ /g" )
 ####screen bash -c "mp3 $ARGS"
 screen -ln bash -c "mp3 $ARGS"          # 21.12.2006
 #      ^^^
 # do NOT write "logins" to utmp/wtmp (wtmp becomes cluttered very quickly)
 }
 #
 #############################################################################
 mp3list ()      {                                               # 07.03.2007
 echo
 #
 # Beware of the spaces in dirnames! `basename $(pwd)` would fail!
 #
 #echo \"$(pwd)\" |xargs basename                                \
 #
 # Instead of the rather costly above (subshell, pipeline, forks),
 # get it more simply: $PWD is a bash internal var [bashref.info],
 # and use the parameter substitution for substring removal on it
 # ${var##Pattern} (remove the longest part of $Pattern from $var)
 # [xref: "Advanced Bash-Scripting" by M.Cooper] -- mn, 01.12.2006
 #
         echo ${PWD##*/}                                         \
                                                                 \
         |sed "s/^#\?[0-9]\{1,3\}[[:space:]_-]\+//"              \
         |sed "s/^\(\(19\|20\)[0-9][0-9]\)[[:space:]_-]*/\1 - /" \
         |sed "s/_/ /g"                                          \
         |sed "s/^/\t/"
 echo
 /bin/ls -1U --indicator-style=none "$@"                         \
         |sed "s/\.\(mp\|MP\)3$//g"                              \
         |sed "s/^#\?\([0-9]*[[:space:]_.-]\+\)\{1,2\}//g"       \
         |sed "s/_/ /g"                                          \
         |nl -s") "
 echo
 }
 #############################################################################
 mp3recode ()    {                                               # 29.11.2006
 #
 # SIGINT [^C] will be received ONLY by mpg123 (as usual)
 #
     trap "" SIGINT                                      \
     && mpg123 "$@"                              2>&1    \
     |while read; do
     # Suppress egrep's own output, but use its exit code
         echo "$REPLY"                                   \
         |egrep '^(Title|Album|Comment) *:' > /dev/null  \
         && echo "$REPLY" |recode 1251/                  \
         || echo "$REPLY" \
                 |egrep -v '^Junk at the beginning [0-9]+$'
     done
 }
 #############################################################################
 mp3 ()  {                                                       # 29.11.2006
 #
 (   # SUBSHELL to make sure that the _global_ $IFS is NOT affected
     # (Also implies that $ARGS is local, thus no "local ARGS" here)
 
     # Set IFS to something that will hardly ever appear in filenames
     IFS="|"
 #   IFS="?"
 
 if [ "$*" ]; then ARGS="$*"     # If any filenames are given, use them
 else                            # or try '*.mp3' (lowercase) || '*.MP3'
 # (`ls` is used for testing, because `test` would not accept wildcards)
 #
     if /bin/ls *.mp3 >/dev/null 2>&1; then ARGS="*.mp3"; else
     if /bin/ls *.MP3 >/dev/null 2>&1; then ARGS="*.MP3"; else
     echo -n     "Neither '*.mp3' nor '*.MP3' found, and "
     echo        "no filenames given on the command line!";  return 1
     fi
     fi
 fi
 
 [ "$#" != "1" ] && mp3list $ARGS        # don't if JUST ONE from cmdline
 mp3recode $ARGS
 )
 }
 #############################################################################
 # Redefine 'screen()' from /etc/profile.d/screen.sh (screen-3.9.8-3mdk),
 # correcting the eggog: "$@" must be in quotes! Still, define $SCREENDIR
 # here (screen.sh was executed on login, the function was *defined*, but
 # wasn't yet *run*, thus the variable is not set).  -- mn@lo, 03.09.2006
 #
 screen ()       { SCREENDIR=$HOME/tmp  /usr/bin/screen "$@"; }
 * Originally in MINDO.LOCAL
 * Crossposted in RU.LINUX
 ---
  * Origin: Linux 2.4.35-mn i686 (2:5020/1665.73)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 ~/.bashrc_mp3   Mike Novikoff   17 Oct 2007 13:13:13 
Архивное /ru.linux/46504715d9cf.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional