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 2a8d1e8..c1e1fa2 100755 --- a/install.zsh +++ b/install.zsh @@ -16,79 +16,123 @@ #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=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 ;; - --) shift; break;; - -*) echo "invalid option: $1" 1>&2; show_help; exit 1;; - *) break;; - esac + 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 + ;; + *) + break + ;; + esac done +if [[ ${UID} != 0 ]] && ! ${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 ./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} ); then + fail=true + for f in $fpath + do + cp _j $f && fail=false && break + done + if $fail + then + 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 "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 + 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 + 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 + echo "Add the following lines to your ~/.zshrc:" + echo + 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 + echo "To remove autojump, delete the ${prefix} directory and relevant lines from ~/.zshrc." fi