mirror of
https://github.com/wting/autojump
synced 2024-10-27 20:34:07 +00:00
Fish shell allows users to put function files in a directory which are loaded as command line commands during login See https://fishshell.com/docs/current/tutorial.html#tut_autoload for more - Add an option to install autojump.fish to a user's fish function directory (typically ~/.config/fish/functions) - During system install, copy the autojump.fish function file to /usr/share/fish/vendor_functions.d, the system fish function directory - On a non-system install, print instructions to add the autojump's fish function directory to the user's fish function path
207 lines
6.6 KiB
Python
Executable File
207 lines
6.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
from __future__ import print_function
|
|
|
|
import os
|
|
import platform
|
|
import shutil
|
|
import sys
|
|
|
|
sys.path.append('bin')
|
|
from autojump_argparse import ArgumentParser # noqa
|
|
|
|
|
|
def is_empty_dir(path):
|
|
"""
|
|
Checks if any files are present within a directory and all sub-directories.
|
|
"""
|
|
for _, _, files in os.walk(path):
|
|
if files:
|
|
return False
|
|
return True
|
|
|
|
|
|
def parse_arguments():
|
|
default_clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
|
|
|
|
parser = ArgumentParser(
|
|
description='Uninstalls autojump.')
|
|
parser.add_argument(
|
|
'-n', '--dryrun', action='store_true', default=False,
|
|
help='simulate installation')
|
|
parser.add_argument(
|
|
'-u', '--userdata', action='store_true', default=False,
|
|
help='delete user data')
|
|
parser.add_argument(
|
|
'-d', '--destdir', metavar='DIR',
|
|
help='custom destdir')
|
|
parser.add_argument(
|
|
'-p', '--prefix', metavar='DIR', default='',
|
|
help='custom prefix')
|
|
parser.add_argument(
|
|
'-z', '--zshshare', metavar='DIR', default='functions',
|
|
help='custom zshshare')
|
|
parser.add_argument(
|
|
'-i', '--fishfunc', metavar='DIR', default='fish_functions',
|
|
help='set fish function destination to DIR')
|
|
parser.add_argument(
|
|
'-c', '--clinkdir', metavar='DIR', default=default_clink_dir)
|
|
|
|
return parser.parse_args()
|
|
|
|
|
|
def remove_custom_installation(args, dryrun=False):
|
|
if not args.destdir:
|
|
return
|
|
|
|
bin_dir = os.path.join(args.destdir, args.prefix, 'bin')
|
|
doc_dir = os.path.join(args.destdir, args.prefix, 'share', 'man', 'man1')
|
|
etc_dir = os.path.join(args.destdir, 'etc', 'profile.d')
|
|
share_dir = os.path.join(args.destdir, args.prefix, 'share', 'autojump')
|
|
zshshare_dir = os.path.join(args.destdir, args.zshshare)
|
|
fishfunc_dir = os.path.join(args.destdir, args.fishfunc)
|
|
|
|
if not os.path.exists(share_dir):
|
|
return
|
|
|
|
print('\nFound custom installation...')
|
|
rm(os.path.join(bin_dir, 'autojump'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump_argparse.py'), dryrun)
|
|
if platform.system() == 'Windows':
|
|
if os.path.exists(args.clinkdir):
|
|
rm(os.path.join(args.clinkdir, 'autojump.lua'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump.bat'), dryrun)
|
|
rm(os.path.join(bin_dir, 'j.bat'), dryrun)
|
|
rm(os.path.join(bin_dir, 'jc.bat'), dryrun)
|
|
rm(os.path.join(bin_dir, 'jco.bat'), dryrun)
|
|
rm(os.path.join(bin_dir, 'jo.bat'), dryrun)
|
|
else:
|
|
rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
|
|
rm(os.path.join(fishfunc_dir, 'j.fish'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
|
|
rm(os.path.join(zshshare_dir, '_j'), dryrun)
|
|
rmdir(share_dir, dryrun)
|
|
rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
|
|
|
|
if is_empty_dir(args.destdir):
|
|
rmdir(args.destdir, dryrun)
|
|
|
|
|
|
def remove_system_installation(dryrun=False):
|
|
default_destdir = '/'
|
|
default_prefix = '/usr/local'
|
|
default_zshshare = '/usr/share/zsh/site-functions'
|
|
default_fishfunc = '/usr/share/fish/vendor_functions.d'
|
|
|
|
bin_dir = os.path.join(default_destdir, default_prefix, 'bin')
|
|
doc_dir = os.path.join(
|
|
default_destdir,
|
|
default_prefix,
|
|
'share',
|
|
'man',
|
|
'man1')
|
|
etc_dir = os.path.join(default_destdir, 'etc', 'profile.d')
|
|
share_dir = os.path.join(
|
|
default_destdir,
|
|
default_prefix,
|
|
'share',
|
|
'autojump')
|
|
zshshare_dir = os.path.join(default_destdir, default_zshshare)
|
|
fishfunc_dir = os.path.join(default_destdir, default_fishfunc)
|
|
|
|
if not os.path.exists(share_dir):
|
|
return
|
|
|
|
print('\nFound system installation...')
|
|
|
|
if os.geteuid() != 0:
|
|
print('Please rerun as root for system-wide uninstall, skipping...',
|
|
file=sys.stderr)
|
|
return
|
|
|
|
rm(os.path.join(bin_dir, 'autojump'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump_data.py'), dryrun)
|
|
rm(os.path.join(bin_dir, 'autojump_utils.py'), dryrun)
|
|
rm(os.path.join(etc_dir, 'autojump.sh'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.bash'), dryrun)
|
|
rm(os.path.join(fishfunc_dir, 'j.fish'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.tcsh'), dryrun)
|
|
rm(os.path.join(share_dir, 'autojump.zsh'), dryrun)
|
|
rm(os.path.join(zshshare_dir, '_j'), dryrun)
|
|
rmdir(share_dir, dryrun)
|
|
rm(os.path.join(doc_dir, 'autojump.1'), dryrun)
|
|
|
|
|
|
def remove_user_data(dryrun=False):
|
|
if platform.system() == 'Darwin':
|
|
data_home = os.path.join(
|
|
os.path.expanduser('~'),
|
|
'Library',
|
|
'autojump')
|
|
elif platform.system() == 'Windows':
|
|
data_home = os.path.join(
|
|
os.getenv('APPDATA'),
|
|
'autojump')
|
|
else:
|
|
data_home = os.getenv(
|
|
'XDG_DATA_HOME',
|
|
os.path.join(
|
|
os.path.expanduser('~'),
|
|
'.local',
|
|
'share',
|
|
'autojump'))
|
|
|
|
if os.path.exists(data_home):
|
|
print('\nFound user data...')
|
|
rmdir(data_home, dryrun)
|
|
|
|
|
|
def remove_user_installation(dryrun=False):
|
|
if platform.system() == 'Windows':
|
|
default_destdir = os.path.join(os.getenv('LOCALAPPDATA', ''),
|
|
'autojump')
|
|
clink_dir = os.path.join(os.getenv('LOCALAPPDATA', ''), 'clink')
|
|
else:
|
|
default_destdir = os.path.join(os.path.expanduser('~'), '.autojump')
|
|
|
|
if os.path.exists(default_destdir):
|
|
print('\nFound user installation...')
|
|
rmdir(default_destdir, dryrun)
|
|
if platform.system() == 'Windows' and os.path.exists(clink_dir):
|
|
rm(os.path.join(clink_dir, 'autojump.lua'), dryrun)
|
|
|
|
|
|
def rm(path, dryrun):
|
|
if os.path.exists(path):
|
|
print('deleting file:', path)
|
|
if not dryrun:
|
|
os.remove(path)
|
|
|
|
|
|
def rmdir(path, dryrun):
|
|
if os.path.exists(path):
|
|
print('deleting directory:', path)
|
|
if not dryrun:
|
|
shutil.rmtree(path)
|
|
|
|
|
|
def main(args):
|
|
if args.dryrun:
|
|
print('Uninstalling autojump (DRYRUN)...')
|
|
else:
|
|
print('Uninstalling autojump...')
|
|
|
|
remove_user_installation(args.dryrun)
|
|
remove_system_installation(args.dryrun)
|
|
remove_custom_installation(args, args.dryrun)
|
|
if args.userdata:
|
|
remove_user_data(args.dryrun)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(parse_arguments()))
|