Associate files and directories with app or alias and run it without preceding commands in xonsh shell.
BSD-2-CLAUSE License
xpip install -U xontrib-onepath
echo 'xontrib load onepath' >> ~/.xonshrc
# Reload xonsh
# Run: # Action that will be executed:
/ # cd /
executable_script # ./executable_script
.xonshrc # vim ~/.xonshrc
~/Downloads/logo.png # xdg-open ~/Downloads/logo.png
git # git
./git # cd ./git
If typed command is a registered name (i.e. git
) and which
command returns the path (i.e. /usr/bin/git
) it will be executed.
In other case the typed path will be used to make action. Default actions:
Priority | Type | Action |
---|---|---|
1 | <DIR> |
cd |
2 | <XFILE> |
<RUN> |
3 | text/ |
vim |
4 | image/ |
xdg-open |
You can add platform and tool depend actions:
import shutil as _shutil
from xonsh.platform import ON_LINUX #, ON_DARWIN, ON_WINDOWS, ON_WSL, IN_APPIMAGE, ON_CYGWIN, ON_MSYS, ON_POSIX, ON_FREEBSD, ON_DRAGONFLY, ON_NETBSD, ON_OPENBSD
xontrib load onepath
if ON_LINUX and _shutil.which('nvim'):
$XONTRIB_ONEPATH_ACTIONS['text/'] = 'nvim'
# | Type | Example |
---|---|---|
1 | Full path to file. | ~/.xonshrc |
2 | File name. | file.txt |
3 | File extension. | *.txt |
4 | MIME type/subtype and extension. | text/plain.txt |
5 | MIME type/subtype. | text/plain |
6 | MIME type. | text/ |
7 | Any file. |
<FILE> (constant) |
8 | Any executable file. |
<XFILE> (constant) |
9 | Any directory. |
<DIR> (constant) |
10 | Any file or directory. |
* (constant) |
To get MIME type for the file run file --mime-type --brief <file>
.
Use XONTRIB_ONEPATH_ACTIONS
environment variable to add new actions.
If you need more complex actions use callable xonsh aliases.
$XONTRIB_ONEPATH_ACTIONS['text/'] = 'vim' # Use vim to open any text file
$XONTRIB_ONEPATH_ACTIONS['.xonshrc'] = 'vim' # vim for `.xonshrc` file
$XONTRIB_ONEPATH_ACTIONS['*.log'] = 'tail' # tail for text type *.log files
$XONTRIB_ONEPATH_ACTIONS['text/plain.txt'] = 'less' # less for plain text *.txt files
$XONTRIB_ONEPATH_ACTIONS['<DIR>'] = 'ls' # list the files in the directory
$XONTRIB_ONEPATH_ACTIONS['application/zip'] = 'als' # list files in zip file using atool
$XONTRIB_ONEPATH_ACTIONS = {'*.xsh':'xonsh', **$XONTRIB_ONEPATH_ACTIONS} # Insert on top
xontrib load onepath
script.xsh # the same as: chmod +x script.xsh && ./script.xsh
import pandas as pd
def _view_csv_with_pandas(args):
print(pd.read_csv(args[0]))
aliases['view_csv_with_pandas'] = _view_csv_with_pandas
del _view_csv_with_pandas
$XONTRIB_ONEPATH_ACTIONS['application/csv'] = 'view_csv_with_pandas'
def _cdls(args):
cd @(args[0])
if int($(ls | wc -l).strip()) < 100:
ls --group-directories-first -a --color
aliases['cdls'] = _cdls
del _cdls
$XONTRIB_ONEPATH_ACTIONS['<DIR>'] = 'cdls'
To enable debug mode run $XONTRIB_ONEPATH_DEBUG = True
.
Install libmagic: brew install libmagic
.
If you mount NTFS partition with default permissions then all files will have execute permission
and onepath
will execute them instead of action. The right way
is to change default /etc/fstab
settings.
Example:
sudo umount /d
sudo mount -o uid=1000,gid=1000,dmask=027,fmask=137 /d
ls -la /d