From 7085d8c5b4dd5a50f6a9bf98503f9c5f83e9dc76 Mon Sep 17 00:00:00 2001 From: William Ting Date: Fri, 23 Dec 2011 09:47:58 -1000 Subject: [PATCH 1/3] created local install for z-shell --- install.zsh | 128 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 51 deletions(-) diff --git a/install.zsh b/install.zsh index 2a8d1e8..8f2a9c4 100755 --- a/install.zsh +++ b/install.zsh @@ -20,17 +20,24 @@ function show_help { } prefix=/usr +local_install=false #command line parsing while true; do case "$1" in -h|--help|-\?) show_help; exit 0;; - -p|--prefix) if [ $# -gt 1 ]; then - prefix=$2; shift 2 - else - echo "--prefix or -p require an argument" 1>&2 - exit 1 - fi ;; + -l|--local); + local_install=true + prefix=~/.autojump + shift + ;; + -p|--prefix) + if [ $# -gt 1 ]; then + prefix=$2; shift 2 + else + echo "--prefix or -p require an argument" 1>&2 + exit 1 + fi ;; --) shift; break;; -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; *) break;; @@ -42,53 +49,72 @@ echo "Installing main files to ${prefix} ..." # add git revision to autojump ./git-version.sh -sudo mkdir -p ${prefix}/share/autojump/ -sudo mkdir -p ${prefix}/bin/ -sudo mkdir -p ${prefix}/share/man/man1/ -sudo cp icon.png ${prefix}/share/autojump/ -sudo cp jumpapplet ${prefix}/bin/ -sudo cp autojump ${prefix}/bin/ -sudo cp autojump.1 ${prefix}/share/man/man1/ +mkdir -p ${prefix}/share/autojump/ +mkdir -p ${prefix}/bin/ +mkdir -p ${prefix}/share/man/man1/ +cp icon.png ${prefix}/share/autojump/ +cp jumpapplet ${prefix}/bin/ +cp autojump ${prefix}/bin/ +cp autojump.1 ${prefix}/share/man/man1/ # autocompletion file in the first directory of the FPATH variable -fail=true -for f in $fpath -do - sudo cp _j $f && fail=false && break -done -if $fail -then - echo "Couldn't find a place to put the autocompletion file :-(" - echo "Still trying to install the rest of autojump..." -else - echo "Installed autocompletion file to $f" -fi - -if [ -d "/etc/profile.d" ]; then - sudo cp autojump.zsh /etc/profile.d/ - sudo cp autojump.sh /etc/profile.d/ - echo "Remember to add the line" - echo " source /etc/profile.d/autojump.zsh" - echo "or" - echo " source /etc/profile" - echo "to your ~/.zshrc if it's not there already" - echo - echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." -else - echo "Your distribution does not have a /etc/profile.d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.zshrc file to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]" - read ans - if [ ${#ans} -gt 0 ]; then - if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then - echo "" >> ~/.zshrc - echo "#autojump" >> ~/.zshrc - cat autojump.zsh >> ~/.zshrc - echo "Done!" - echo - echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." +if ( ! ${local_install} ); then + fail=true + for f in $fpath + do + sudo cp _j $f && fail=false && break + done + if $fail + then + echo "Couldn't find a place to put the autocompletion file :-(" + echo "Still trying to install the rest of autojump..." else - echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" + echo "Installed autocompletion file to $f" fi - else - echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" - fi + + if [ -d "/etc/profile.d" ]; then + sudo cp autojump.zsh /etc/profile.d/ + sudo cp autojump.sh /etc/profile.d/ + echo "Remember to add the line" + echo " source /etc/profile.d/autojump.zsh" + echo "or" + echo " source /etc/profile" + echo "to your ~/.zshrc if it's not there already" + echo + echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." + else + echo "Your distribution does not have a /etc/profile.d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.zshrc file to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]" + read ans + if [ ${#ans} -gt 0 ]; then + if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then + echo "" >> ~/.zshrc + echo "#autojump" >> ~/.zshrc + cat autojump.zsh >> ~/.zshrc + echo "Done!" + echo + echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." + else + echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" + fi + else + echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" + fi + fi +else + mkdir -p ${prefix}/functions/ + cp _j ${prefix}/functions/ + + mkdir -p ${prefix}/etc/profile.d/ + cp autojump.zsh ${prefix}/etc/profile.d/ + cp autojump.sh ${prefix}/etc/profile.d/ + + echo "Add the following lines to your ~/.zshrc:" + echo + echo " path=(${prefix}/bin \${path})" + echo " fpath=(${prefix}/functions \${fpath})" + echo " source ${prefix}/etc/profile.d/autojump.zsh" + echo + echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." + echo + echo "To remove autojump, delete the ${prefix} directory and relevant lines from ~/.zshrc." fi From 0f0ba550f9b5a32f63b875317f4f2e970938db19 Mon Sep 17 00:00:00 2001 From: William Ting Date: Fri, 23 Dec 2011 14:04:04 -1000 Subject: [PATCH 2/3] add local install, otherwise global install if run as root, text/formatting changes --- install.zsh | 102 ++++++++++++++++++++++++++++++---------------------- 1 file changed, 60 insertions(+), 42 deletions(-) diff --git a/install.zsh b/install.zsh index 8f2a9c4..97f0a07 100755 --- a/install.zsh +++ b/install.zsh @@ -16,34 +16,52 @@ #along with autojump. If not, see . function show_help { - echo "sudo ./install.sh [--prefix /usr/local]" + echo "sudo ./install.zsh [--local] [--prefix /usr/local]" } prefix=/usr -local_install=false +local=false #command line parsing while true; do - case "$1" in - -h|--help|-\?) show_help; exit 0;; - -l|--local); - local_install=true - prefix=~/.autojump - shift - ;; - -p|--prefix) - if [ $# -gt 1 ]; then - prefix=$2; shift 2 - else - echo "--prefix or -p require an argument" 1>&2 + case "$1" in + -h|--help|-\?) + show_help + exit 0 + ;; + -l|--local) + local=true + prefix=~/.autojump + shift + ;; + -p|--prefix) + if [ $# -gt 1 ]; then + prefix=$2; shift 2 + else + echo "--prefix or -p require an argument" 1>&2 + exit 1 + fi + ;; + --) + shift + break + ;; + -*) + echo "invalid option: $1" 1>&2 + show_help exit 1 - fi ;; - --) shift; break;; - -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; - *) break;; - esac + ;; + *) + break + ;; + esac done +if [[ $(whoami) != "root" ]] && ! ${local}; then + echo "Please rerun as root or use the --local option." + exit 1 +fi + echo "Installing main files to ${prefix} ..." # add git revision to autojump @@ -58,44 +76,43 @@ cp autojump ${prefix}/bin/ cp autojump.1 ${prefix}/share/man/man1/ # autocompletion file in the first directory of the FPATH variable -if ( ! ${local_install} ); then +if ( ! ${local} ); then fail=true for f in $fpath do - sudo cp _j $f && fail=false && break + cp _j $f && fail=false && break done if $fail then - echo "Couldn't find a place to put the autocompletion file :-(" + echo "Couldn't find a place to put the autocompletion file, please copy _j into your \$fpath" echo "Still trying to install the rest of autojump..." else echo "Installed autocompletion file to $f" fi if [ -d "/etc/profile.d" ]; then - sudo cp autojump.zsh /etc/profile.d/ - sudo cp autojump.sh /etc/profile.d/ - echo "Remember to add the line" - echo " source /etc/profile.d/autojump.zsh" - echo "or" - echo " source /etc/profile" - echo "to your ~/.zshrc if it's not there already" + cp -v autojump.zsh /etc/profile.d/ + cp -v autojump.sh /etc/profile.d/ + echo + echo "Add the following line to your ~/.zshrc:" + echo + echo -e "\tsource /etc/profile.d/autojump.zsh" echo echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." else echo "Your distribution does not have a /etc/profile.d directory, the default that we install one of the scripts to. Would you like us to copy it into your ~/.zshrc file to make it work? (If you have done this once before, delete the old version before doing it again.) [y/n]" read ans if [ ${#ans} -gt 0 ]; then - if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then - echo "" >> ~/.zshrc - echo "#autojump" >> ~/.zshrc - cat autojump.zsh >> ~/.zshrc - echo "Done!" - echo - echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." - else - echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" - fi + if [ $ans = "y" -o $ans = "Y" -o $ans = "yes" -o $ans = "Yes" ]; then + echo "" >> ~/.zshrc + echo "#autojump" >> ~/.zshrc + cat autojump.zsh >> ~/.zshrc + echo "Done!" + echo + echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." + else + echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" + fi else echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" fi @@ -108,11 +125,12 @@ else cp autojump.zsh ${prefix}/etc/profile.d/ cp autojump.sh ${prefix}/etc/profile.d/ + echo echo "Add the following lines to your ~/.zshrc:" echo - echo " path=(${prefix}/bin \${path})" - echo " fpath=(${prefix}/functions \${fpath})" - echo " source ${prefix}/etc/profile.d/autojump.zsh" + echo -e "\tpath=(${prefix}/bin \${path})" + echo -e "\tfpath=(${prefix}/functions \${fpath})" + echo -e "\tsource ${prefix}/etc/profile.d/autojump.zsh" echo echo "You need to source your ~/.zshrc (source ~/.zshrc) before you can start using autojump." echo From 04357595e2d7e52f8372fde4306cbdc9db31943f Mon Sep 17 00:00:00 2001 From: William Ting Date: Fri, 13 Jan 2012 11:05:43 -1000 Subject: [PATCH 3/3] remove some trailing whitespace, change root test to check for UID instead of whoami --- autojump | 20 ++++++++++---------- install.zsh | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/autojump b/autojump index 80462b4..08c6ffc 100755 --- a/autojump +++ b/autojump @@ -93,7 +93,7 @@ def save(path_dict, dic_file): # using rename to overwrite files shutil.move(temp.name, dic_file) try: #backup file - import time + import time if (not os.path.exists(dic_file+".bak") or time.time()-os.path.getmtime(dic_file+".bak")>86400): shutil.copy(dic_file, dic_file+".bak") @@ -147,14 +147,14 @@ def open_dic(dic_file, error_recovery=False): def forget(path_dict, dic_file): """Gradually forget about directories. Only call from the actual jump since it can take time""" - keyweight = sum(path_dict.values()) - if keyweight > MAX_KEYWEIGHT: + keyweight = sum(path_dict.values()) + if keyweight > MAX_KEYWEIGHT: for k in path_dict.keys(): path_dict[k] *= 0.9 * MAX_KEYWEIGHT / keyweight save(path_dict, dic_file) def clean_dict(sorted_dirs, path_dict): - """Limits the sized of the path_dict to MAX_STORED_PATHS. + """Limits the sized of the path_dict to MAX_STORED_PATHS. Returns True if keys were deleted""" if len(sorted_dirs) > MAX_STORED_PATHS: #remove 25 more than needed, to avoid doing it every time @@ -183,7 +183,7 @@ def match(path, pattern, ignore_case=False, only_end=False): return (does_match, eaten_path) def find_matches(dirs, patterns, result_list, ignore_case, max_matches, current_dir): - """Find max_matches paths that match the pattern, + """Find max_matches paths that match the pattern, and add them to the result_list""" for path, count in dirs: # Don't jump to where we alread are @@ -222,7 +222,7 @@ def shell_utility(): if ('-a', '') in optlist: # The home dir can be reached quickly by "cd" # and may interfere with other directories - if(args[-1] != os.path.expanduser("~")): + if(args[-1] != os.path.expanduser("~")): dicadd(path_dict, decode(args[-1])) save(path_dict, dic_file) elif ('--stat', '') in optlist: @@ -241,7 +241,7 @@ def shell_utility(): import re completion = False #userchoice is i if the pattern is __pattern__i, otherwise -1 - userchoice = -1 + userchoice = -1 results = [] if ('--completion', '') in optlist: completion = True @@ -286,10 +286,10 @@ def shell_utility(): find_matches(dirs, patterns, results, False, max_matches, current_dir) # If not found, try ignoring case. # On completion always show all results - if completion or not results: + if completion or not results: find_matches(dirs, patterns, results, ignore_case=True, - max_matches=max_matches, current_dir=current_dir) + max_matches=max_matches, current_dir=current_dir) # Keep the database to a reasonable size if not completion and clean_dict(dirs, path_dict): save(path_dict, dic_file) @@ -298,7 +298,7 @@ def shell_utility(): else: quotes = "" if userchoice != -1: - if len(results) > userchoice-1 : + if len(results) > userchoice-1 : output(unico("%s%s%s") % (quotes,results[userchoice-1],quotes)) elif len(results) > 1 and completion: output("\n".join(("%s%s%d%s%s" % (patterns[-1], diff --git a/install.zsh b/install.zsh index 97f0a07..c1e1fa2 100755 --- a/install.zsh +++ b/install.zsh @@ -57,7 +57,7 @@ while true; do esac done -if [[ $(whoami) != "root" ]] && ! ${local}; then +if [[ ${UID} != 0 ]] && ! ${local}; then echo "Please rerun as root or use the --local option." exit 1 fi