Command Line Project Manager (clpm) is designed to make managing sets of files easier.
Watch the demo.
grep apples $j
svn commit $all
$ p v "My Vimfiles" # create a new project with shortcut "v" called "My Vimfiles"
$ p # list all projects
Projects:
* v My Vimfiles
$ f r .vimrc # add .vimrc to this project with shortcut "r"
$ f c .vim/colors/vividchalk.vim # add this file with shortcut "c"
$ f # list all files in the current project
Project: v (My Vimfiles)
Current files:
r .vimrc /home/dbradford
c vividchalk.vim /home/dbradford/.vim/colors
$ export EDITOR=vim
$ f c # edit file assigned to "c" with $EDITOR
$ fa # edit all files in project with $EDITOR
$ d t # cd to directory containing file with shortcut "t"
$ x t "cd /some/target/directory; make test" # add command with shortcut "t"
$ x t # execute command assigned to shortcut "t"
t/DMB.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.05 usr 0.02 sys + 0.05 cusr
0.03 csys = 0.14 CPU)
Result: PASS
$ cat $c >>$r # use shell commands to work with this set of files
Check out clpm into ~/.clpm
.
$ git clone https://github.com/tinypigdotcom/clpm.git ~/.clpm
Run the installer
$ ~/.clpm/bin/p install
Ubuntu note: Modify your ~/.profile
instead of ~/.bash_profile
.
Zsh note: Modify your ~/.zshrc
file instead of ~/.bash_profile
.
Follow the additional instructions from the installer
David M. Bradford, davembradford@gmail.com
Thanks to plenv for a better idea of how to do certain things like directory structure and documentation
Copyright (C) 2014, 2015, 2016 David M. Bradford
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ .
clpm
uses Data::Dumper
and eval
for persistance. It used Storable
initially, but after two separate instances of data corruption, that was abandoned in favor of YAML
, which in turn wasn't available in many environments, thus Data::Dumper
.$ z # or p --help or f --help or x --help etc
Command Line Program Managers (clpm) v2.0.0
Help commands:
z - this listing
Organization commands:
f - manage files
examples:
show list of files: $ f
edit file 1, 3, and L: $ f 13L
edit all files: $ fa
add file to the list : $ f , /tmp/a.out /etc/hosts /etc/passwd
add file with label L: $ f L /tmp/a.out
remove file 1, 3, L : $ f -13L
x - manage commands (same basic format as f)
examples:
show list of cmds: $ x
run cmd 1, 3, and L: $ x 13L
edit cmd 1, 3, and L: $ x .13L
edit all cmds: $ xa
add cmd to the list : $ x , 'echo hey' 'Optional Label'
NOTE: surround command with quotes
add cmd with label L: $ x L 'echo howdy; echo there' 'Optional Label'
remove cmd 1, 3, L : $ x -13L
p - change project/view list of projects
show project list: $ p
switch to project: $ p myproj
remove project: $ p -myproj
Current project: sst
$ p
Projects:
f rpg fight simulator
go getopts experiment
* sst shell script template
$ p s 'Shopping Cart'
Project: s (Shopping Cart)
Current files:
$ p
Projects:
f rpg fight simulator
go getopts experiment
* s Shopping Cart
sst shell script template
$ find .
.
./ShoppingCart
./ShoppingCart/Changes
./ShoppingCart/lib
./ShoppingCart/lib/ShoppingCart.pm
./ShoppingCart/Makefile.PL
./ShoppingCart/MANIFEST
./ShoppingCart/README
./ShoppingCart/t
./ShoppingCart/t/ShoppingCart.t
./www
./www/page
./www/page/items.html
./www/page/login.html
./www/page/shopping_cart.html
./www/script
./www/script/cartItems.js
./www/style
./www/style/home.css
$ cd ShoppingCart/
$ ls -l
total 7
-rw-rw-r-- 1 dbradford None 157 Jan 17 16:34 Changes
drwxrwxr-x+ 1 dbradford None 0 Jan 17 16:34 lib
-rw-rw-r-- 1 dbradford None 564 Jan 17 16:34 Makefile.PL
-rw-rw-r-- 1 dbradford None 73 Jan 17 16:34 MANIFEST
-rw-rw-r-- 1 dbradford None 1191 Jan 17 16:34 README
drwxrwxr-x+ 1 dbradford None 0 Jan 17 16:34 t
$ f m Makefile.PL
$ f t t/ShoppingCart.t
$ f s lib/ShoppingCart.pm
$ f
Project: s (Shopping Cart)
Current files:
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ f C Changes
$ f M MANIFEST
$ f R README
$ f
Project: s (Shopping Cart)
Current files:
C Changes /home/dbradford/shopping_cart/ShoppingCart
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
M MANIFEST /home/dbradford/shopping_cart/ShoppingCart
R README /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ f st
2 files to edit
$ fa
6 files to edit
$ f -R
$ f -CM
$ f
Project: s (Shopping Cart)
Current files:
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ x p 'perl Makefile.PL'
$ x p
perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for ShoppingCart
Writing MYMETA.yml and MYMETA.json
$ x t 'make test'
$ x t
make test
cp lib/ShoppingCart.pm blib/lib/ShoppingCart.pm
PERL_DL_NONLAZY=1 /usr/bin/perl.exe "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/ShoppingCart.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.03 usr 0.05 sys + 0.03 cusr 0.12 csys = 0.23 CPU)
Result: PASS
$ x c 'make clean'
$ x c
make clean
rm -f \
tmon.out ShoppingCart.def \
MYMETA.yml perl \
mon.out blibdirs.ts \
perlmain.c *perl.core \
so_locations MYMETA.json \
blib/arch/auto/ShoppingCart/extralibs.all core.*perl.*.? \
*.a blib/arch/auto/ShoppingCart/extralibs.ld \
*.o pm_to_blib.ts \
core.[0-9][0-9][0-9][0-9][0-9] core.[0-9][0-9][0-9][0-9] \
core.[0-9] ShoppingCart.bso \
libShoppingCart.def core.[0-9][0-9][0-9] \
ShoppingCart.x Makefile.aperl \
core ShoppingCart.exp \
pm_to_blib \
perl.exe core.[0-9][0-9] \
perl.exe
rm -rf \
blib
mv Makefile Makefile.old > /dev/null 2>&1
$ x C 'make realclean'
$ x C
make realclean
rm -f \
ShoppingCart.x libShoppingCart.def \
ShoppingCart.bso Makefile.aperl \
*.o ShoppingCart.def \
so_locations mon.out \
perlmain.c core.[0-9][0-9][0-9][0-9] \
MYMETA.yml core.[0-9][0-9] \
core.*perl.*.? blib/arch/auto/ShoppingCart/extralibs.all \
*.a core \
core.[0-9][0-9][0-9][0-9][0-9] core.[0-9] \
perl.exe pm_to_blib.ts \
tmon.out core.[0-9][0-9][0-9] \
*perl.core MYMETA.json \
perl.exe blib/arch/auto/ShoppingCart/extralibs.ld \
pm_to_blib ShoppingCart.exp \
blibdirs.ts \
perl
rm -rf \
blib
mv Makefile Makefile.old > /dev/null 2>&1
rm -f \
Makefile.old Makefile
rm -rf \
ShoppingCart-0.01
$ x pt
perl Makefile.PL
Checking if your kit is complete...
Looks good
Writing Makefile for ShoppingCart
Writing MYMETA.yml and MYMETA.json
make test
cp lib/ShoppingCart.pm blib/lib/ShoppingCart.pm
PERL_DL_NONLAZY=1 /usr/bin/perl.exe "-MExtUtils::Command::MM" "-e"
"test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/ShoppingCart.t .. ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.03 usr 0.02 sys + 0.03 cusr 0.05 csys = 0.12 CPU)
Result: PASS
$ pwd
/home/dbradford/shopping_cart/ShoppingCart
$ cd ..
$ ls
ShoppingCart www
$ cd www
$ ls page/
items.html login.html shopping_cart.html
$ f h page/shopping_cart.html
$ f j script/cartItems.js
$ f c style/home.css
$ f
Project: s (Shopping Cart)
Current files:
j cartItems.js /home/dbradford/shopping_cart/www/script
c home.css /home/dbradford/shopping_cart/www/style
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
h shopping_cart.html /home/dbradford/shopping_cart/www/page
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ d s
$ pwd
/home/dbradford/shopping_cart/ShoppingCart/lib
$ d c
$ pwd
/home/dbradford/shopping_cart/www/style
$ pwd
/home/dbradford/shopping_cart
$ export AF_DIR=`pwd`
$ af html
0 ./www/page/items.html
1 ./www/page/login.html
2 ./www/page/shopping_cart.html
$ cp $l $l.sv
$ cp $s $l
$ less $l
$ p
Projects:
f rpg fight simulator
go getopts experiment
sst shell script template
* s Shopping Cart
$ p cp s sw
Project: sw (Shopping Cart)
Current files:
j cartItems.js /home/dbradford/shopping_cart/www/script
c home.css /home/dbradford/shopping_cart/www/style
l login.html /home/dbradford/shopping_cart/www/page
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ p sw 'Shopping Cart (rework)'
Project: sw (Shopping Cart (rework))
Current files:
j cartItems.js /home/dbradford/shopping_cart/www/script
c home.css /home/dbradford/shopping_cart/www/style
l login.html /home/dbradford/shopping_cart/www/page
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ p mv sw rw
Project: rw (Shopping Cart (rework))
Current files:
j cartItems.js /home/dbradford/shopping_cart/www/script
c home.css /home/dbradford/shopping_cart/www/style
l login.html /home/dbradford/shopping_cart/www/page
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t
$ p \?shop
Projects:
rw Shopping Cart (rework)
s Shopping Cart
$ p ?rework
Project: rw (Shopping Cart (rework))
Current files:
j cartItems.js /home/dbradford/shopping_cart/www/script
c home.css /home/dbradford/shopping_cart/www/style
l login.html /home/dbradford/shopping_cart/www/page
m Makefile.PL /home/dbradford/shopping_cart/ShoppingCart
s ShoppingCart.pm /home/dbradford/shopping_cart/ShoppingCart/lib
t ShoppingCart.t /home/dbradford/shopping_cart/ShoppingCart/t