1
0
mirror of https://github.com/wting/autojump synced 2024-10-27 20:34:07 +00:00

Merge pull request #85 from wting/install-zsh-local

Local installation (z-shell)
This commit is contained in:
Joel Schaerer 2012-02-06 21:30:19 -08:00
commit 9b9c0e1663
2 changed files with 112 additions and 68 deletions

View File

@ -93,7 +93,7 @@ def save(path_dict, dic_file):
# using rename to overwrite files # using rename to overwrite files
shutil.move(temp.name, dic_file) shutil.move(temp.name, dic_file)
try: #backup file try: #backup file
import time import time
if (not os.path.exists(dic_file+".bak") or if (not os.path.exists(dic_file+".bak") or
time.time()-os.path.getmtime(dic_file+".bak")>86400): time.time()-os.path.getmtime(dic_file+".bak")>86400):
shutil.copy(dic_file, dic_file+".bak") 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): def forget(path_dict, dic_file):
"""Gradually forget about directories. Only call """Gradually forget about directories. Only call
from the actual jump since it can take time""" from the actual jump since it can take time"""
keyweight = sum(path_dict.values()) keyweight = sum(path_dict.values())
if keyweight > MAX_KEYWEIGHT: if keyweight > MAX_KEYWEIGHT:
for k in path_dict.keys(): for k in path_dict.keys():
path_dict[k] *= 0.9 * MAX_KEYWEIGHT / keyweight path_dict[k] *= 0.9 * MAX_KEYWEIGHT / keyweight
save(path_dict, dic_file) save(path_dict, dic_file)
def clean_dict(sorted_dirs, path_dict): 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""" Returns True if keys were deleted"""
if len(sorted_dirs) > MAX_STORED_PATHS: if len(sorted_dirs) > MAX_STORED_PATHS:
#remove 25 more than needed, to avoid doing it every time #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) return (does_match, eaten_path)
def find_matches(dirs, patterns, result_list, ignore_case, max_matches, current_dir): 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""" and add them to the result_list"""
for path, count in dirs: for path, count in dirs:
# Don't jump to where we alread are # Don't jump to where we alread are
@ -222,7 +222,7 @@ def shell_utility():
if ('-a', '') in optlist: if ('-a', '') in optlist:
# The home dir can be reached quickly by "cd" # The home dir can be reached quickly by "cd"
# and may interfere with other directories # and may interfere with other directories
if(args[-1] != os.path.expanduser("~")): if(args[-1] != os.path.expanduser("~")):
dicadd(path_dict, decode(args[-1])) dicadd(path_dict, decode(args[-1]))
save(path_dict, dic_file) save(path_dict, dic_file)
elif ('--stat', '') in optlist: elif ('--stat', '') in optlist:
@ -241,7 +241,7 @@ def shell_utility():
import re import re
completion = False completion = False
#userchoice is i if the pattern is __pattern__i, otherwise -1 #userchoice is i if the pattern is __pattern__i, otherwise -1
userchoice = -1 userchoice = -1
results = [] results = []
if ('--completion', '') in optlist: if ('--completion', '') in optlist:
completion = True completion = True
@ -286,10 +286,10 @@ def shell_utility():
find_matches(dirs, patterns, results, False, max_matches, current_dir) find_matches(dirs, patterns, results, False, max_matches, current_dir)
# If not found, try ignoring case. # If not found, try ignoring case.
# On completion always show all results # On completion always show all results
if completion or not results: if completion or not results:
find_matches(dirs, patterns, results, find_matches(dirs, patterns, results,
ignore_case=True, 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 # Keep the database to a reasonable size
if not completion and clean_dict(dirs, path_dict): if not completion and clean_dict(dirs, path_dict):
save(path_dict, dic_file) save(path_dict, dic_file)
@ -298,7 +298,7 @@ def shell_utility():
else: quotes = "" else: quotes = ""
if userchoice != -1: if userchoice != -1:
if len(results) > userchoice-1 : if len(results) > userchoice-1 :
output(unico("%s%s%s") % (quotes,results[userchoice-1],quotes)) output(unico("%s%s%s") % (quotes,results[userchoice-1],quotes))
elif len(results) > 1 and completion: elif len(results) > 1 and completion:
output("\n".join(("%s%s%d%s%s" % (patterns[-1], output("\n".join(("%s%s%d%s%s" % (patterns[-1],

View File

@ -16,79 +16,123 @@
#along with autojump. If not, see <http://www.gnu.org/licenses/>. #along with autojump. If not, see <http://www.gnu.org/licenses/>.
function show_help { function show_help {
echo "sudo ./install.sh [--prefix /usr/local]" echo "sudo ./install.zsh [--local] [--prefix /usr/local]"
} }
prefix=/usr prefix=/usr
local=false
#command line parsing #command line parsing
while true; do while true; do
case "$1" in case "$1" in
-h|--help|-\?) show_help; exit 0;; -h|--help|-\?)
-p|--prefix) if [ $# -gt 1 ]; then show_help
prefix=$2; shift 2 exit 0
else ;;
echo "--prefix or -p require an argument" 1>&2 -l|--local)
exit 1 local=true
fi ;; prefix=~/.autojump
--) shift; break;; shift
-*) echo "invalid option: $1" 1>&2; show_help; exit 1;; ;;
*) break;; -p|--prefix)
esac 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 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} ..." echo "Installing main files to ${prefix} ..."
# add git revision to autojump # add git revision to autojump
./git-version.sh ./git-version.sh
sudo mkdir -p ${prefix}/share/autojump/ mkdir -p ${prefix}/share/autojump/
sudo mkdir -p ${prefix}/bin/ mkdir -p ${prefix}/bin/
sudo mkdir -p ${prefix}/share/man/man1/ mkdir -p ${prefix}/share/man/man1/
sudo cp icon.png ${prefix}/share/autojump/ cp icon.png ${prefix}/share/autojump/
sudo cp jumpapplet ${prefix}/bin/ cp jumpapplet ${prefix}/bin/
sudo cp autojump ${prefix}/bin/ cp autojump ${prefix}/bin/
sudo cp autojump.1 ${prefix}/share/man/man1/ cp autojump.1 ${prefix}/share/man/man1/
# autocompletion file in the first directory of the FPATH variable # autocompletion file in the first directory of the FPATH variable
fail=true if ( ! ${local} ); then
for f in $fpath fail=true
do for f in $fpath
sudo cp _j $f && fail=false && break do
done cp _j $f && fail=false && break
if $fail done
then if $fail
echo "Couldn't find a place to put the autocompletion file :-(" then
echo "Still trying to install the rest of autojump..." echo "Couldn't find a place to put the autocompletion file, please copy _j into your \$fpath"
else echo "Still trying to install the rest of autojump..."
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."
else 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 fi
else
echo "Then you need to put autojump.zsh, or the code from it, somewhere where it will get read. Good luck!" if [ -d "/etc/profile.d" ]; then
fi 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 fi