mirror of
https://github.com/xonsh/xonsh.git
synced 2025-03-04 08:24:40 +01:00
Merge pull request #3960 from jnoortheen/use-individual-file-for-xontrib-meta
Use individual file for xontrib meta
This commit is contained in:
commit
913077b0b0
16 changed files with 738 additions and 754 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -71,10 +71,6 @@ rever/
|
||||||
xonsh/webconfig/elm-stuff/
|
xonsh/webconfig/elm-stuff/
|
||||||
xonsh/webconfig/js/app.js
|
xonsh/webconfig/js/app.js
|
||||||
|
|
||||||
# venv (e.g, autovox)
|
|
||||||
venv/
|
|
||||||
.venv/
|
|
||||||
|
|
||||||
# VS Code
|
# VS Code
|
||||||
.vscode/
|
.vscode/
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,7 @@ For those of you who want the gritty details.
|
||||||
dumb_shell
|
dumb_shell
|
||||||
wizard
|
wizard
|
||||||
xonfig
|
xonfig
|
||||||
|
xontribs_meta
|
||||||
codecache
|
codecache
|
||||||
contexts
|
contexts
|
||||||
|
|
||||||
|
@ -84,6 +85,5 @@ For those of you who want the gritty details.
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
mplhooks
|
mplhooks
|
||||||
vox
|
vox
|
||||||
|
|
11
docs/api/xontribs_meta.rst
Normal file
11
docs/api/xontribs_meta.rst
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
.. _xonsh_xontribs_meta:
|
||||||
|
|
||||||
|
***********************************************
|
||||||
|
Xontribs (``xonsh.xontribs_meta``)
|
||||||
|
***********************************************
|
||||||
|
|
||||||
|
.. automodule:: xonsh.xontribs_meta
|
||||||
|
:members:
|
||||||
|
:undoc-members:
|
||||||
|
:private-members:
|
||||||
|
|
34
docs/conf.py
34
docs/conf.py
|
@ -17,7 +17,7 @@ os.environ["XONSH_DEBUG"] = "1"
|
||||||
|
|
||||||
from xonsh import __version__ as XONSH_VERSION
|
from xonsh import __version__ as XONSH_VERSION
|
||||||
from xonsh.environ import DEFAULT_VARS, Env
|
from xonsh.environ import DEFAULT_VARS, Env
|
||||||
from xonsh.xontribs import xontrib_metadata
|
from xonsh.xontribs_meta import get_xontribs
|
||||||
from xonsh import main
|
from xonsh import main
|
||||||
from xonsh.commands_cache import CommandsCache
|
from xonsh.commands_cache import CommandsCache
|
||||||
|
|
||||||
|
@ -320,8 +320,8 @@ def make_envvars():
|
||||||
|
|
||||||
|
|
||||||
def make_xontribs():
|
def make_xontribs():
|
||||||
md = xontrib_metadata()
|
xons = get_xontribs()
|
||||||
names = sorted(d["name"] for d in md["xontribs"] if "name" in d)
|
names = sorted(xons)
|
||||||
s = ".. list-table::\n" " :header-rows: 0\n\n"
|
s = ".. list-table::\n" " :header-rows: 0\n\n"
|
||||||
table = []
|
table = []
|
||||||
ncol = 5
|
ncol = 5
|
||||||
|
@ -344,33 +344,29 @@ def make_xontribs():
|
||||||
"-------\n\n"
|
"-------\n\n"
|
||||||
)
|
)
|
||||||
for name in names:
|
for name in names:
|
||||||
for d in md["xontribs"]:
|
d = xons[name]
|
||||||
if d.get("name", None) == name:
|
|
||||||
break
|
|
||||||
title = name
|
title = name
|
||||||
under = "." * len(title)
|
under = "." * len(title)
|
||||||
desc = d.get("description", "")
|
desc = d.description
|
||||||
if not isinstance(desc, str):
|
if not isinstance(desc, str):
|
||||||
desc = "".join(desc)
|
desc = "".join(desc)
|
||||||
pkgname = d.get("package", None)
|
if d.package is None:
|
||||||
if pkgname is None:
|
|
||||||
pkg = "unknown"
|
pkg = "unknown"
|
||||||
inst = ""
|
inst = ""
|
||||||
usage = ""
|
usage = ""
|
||||||
else:
|
else:
|
||||||
pd = md["packages"].get(pkgname, {})
|
pkg = d.package.name
|
||||||
pkg = pkgname
|
if d.package.url:
|
||||||
if "url" in pd:
|
pkg = "`{0} website <{1}>`_".format(pkg, d.package.url)
|
||||||
pkg = "`{0} website <{1}>`_".format(pkg, pd["url"])
|
if d.package.license:
|
||||||
if "license" in pd:
|
pkg = pkg + ", " + d.package.license
|
||||||
pkg = pkg + ", " + pd["license"]
|
|
||||||
inst = ""
|
inst = ""
|
||||||
installd = pd.get("install", {})
|
installd = d.package.install
|
||||||
if pkgname == "xonsh":
|
if d.package.name == "xonsh":
|
||||||
inst = "This xontrib is preinstalled with xonsh.\n\n"
|
inst = "This xontrib is preinstalled with xonsh.\n\n"
|
||||||
elif len(installd) > 0:
|
elif len(installd) > 0:
|
||||||
inst = "**Installation:**\n\n" ".. code-block:: xonsh\n\n"
|
inst = "**Installation:**\n\n" ".. code-block:: xonsh\n\n"
|
||||||
for k, v in sorted(pd.get("install", {}).items()):
|
for k, v in sorted(installd.items()):
|
||||||
cmd = "\n ".join(v.split("\n"))
|
cmd = "\n ".join(v.split("\n"))
|
||||||
inst += (" # install with {k}\n" " {cmd}").format(
|
inst += (" # install with {k}\n" " {cmd}").format(
|
||||||
k=k, cmd=cmd
|
k=k, cmd=cmd
|
||||||
|
@ -387,7 +383,7 @@ def make_xontribs():
|
||||||
low=name.lower(),
|
low=name.lower(),
|
||||||
title=title,
|
title=title,
|
||||||
under=under,
|
under=under,
|
||||||
url=d.get("url", "unknown"),
|
url=d.url or "unknown",
|
||||||
desc=desc,
|
desc=desc,
|
||||||
pkg=pkg,
|
pkg=pkg,
|
||||||
inst=inst,
|
inst=inst,
|
||||||
|
|
|
@ -176,46 +176,39 @@ Of course, you're under no obligation to register your xontrib. Users will
|
||||||
still be able to load your xontrib, as long as they have it installed.
|
still be able to load your xontrib, as long as they have it installed.
|
||||||
|
|
||||||
To register a xontrib, add an entry to
|
To register a xontrib, add an entry to
|
||||||
`the xontribs.json file <https://github.com/xonsh/xonsh/blob/master/xonsh/xontribs.json>`_
|
`the xontribs_meta.py file <https://github.com/xonsh/xonsh/blob/master/xonsh/xontribs_meta.py>`_
|
||||||
in the main xonsh repository. A pull request is probably best, but if you
|
in the main xonsh repository. A pull request is probably best, but if you
|
||||||
are having trouble figuring it out please contact one of the xonsh devs
|
are having trouble figuring it out please contact one of the xonsh devs
|
||||||
with the relevant information.
|
with the relevant information.
|
||||||
This is a JSON file with two top-level keys: ``"xontribs"`` and ``"packages"``.
|
This is Python file holds classes and functions to register new Xontrib.
|
||||||
|
|
||||||
The ``"xontribs"`` key is a list of dictionaries that describes the xontrib
|
The ``xontribs_meta.define_xontribs`` function returns a dictionary of all Xontribs.
|
||||||
module itself. Such entries have the following structure:
|
A sample ``Xontrib`` definition looks like this,
|
||||||
|
|
||||||
.. code-block:: json
|
.. code-block:: python
|
||||||
|
|
||||||
{"xontribs": [
|
{
|
||||||
{"name": "xontrib-name",
|
"awesome": Xontrib(
|
||||||
"package": "package-name",
|
url="http://example.com/api/xontrib",
|
||||||
"url": "http://example.com/api/xontrib",
|
description="Description and short intro for your xontrib."
|
||||||
"description": ["Textual description as string or list or strings ",
|
"It can span multi-lines. "
|
||||||
"enabling long content to be split over many lines."]
|
"Feel free to use a triple quotes if you want to have line-endings.",
|
||||||
}
|
package=_XontribPkg(
|
||||||
]
|
name="xontrib-awesome",
|
||||||
|
license="BSD",
|
||||||
|
install={
|
||||||
|
"pip": "xpip install xontrib-awesome",
|
||||||
|
"conda": "conda install xontrib-awesome",
|
||||||
|
},
|
||||||
|
url="https://example.com/",
|
||||||
|
),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
The ``"packages"`` key, on the other hand, is a dict mapping package names
|
.. note:: Note that you can have as many entries in the ``"install"`` dict as you
|
||||||
(associated with the xontrib entries) to metadata about the package. Package
|
want. Also, the keys are arbitrary labels, so feel free to pick whatever
|
||||||
entries have the following structure:
|
you want.
|
||||||
|
|
||||||
.. code-block:: json
|
.. seealso:: Checkout the API docs of the :doc:`api/xontribs_meta`
|
||||||
|
|
||||||
{"packages": {
|
|
||||||
"package-name": {
|
|
||||||
"license": "WTFPL v1.1",
|
|
||||||
"url": "http://example",
|
|
||||||
"install": {
|
|
||||||
"conda": "conda install package-name",
|
|
||||||
"pip": "xpip install package-name"}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Note that you can have as many entries in the ``"install"`` dict as you
|
|
||||||
want. Also, the keys are arbitrary labels, so feel free to pick whatever
|
|
||||||
you want.
|
|
||||||
|
|
||||||
Go forth!
|
Go forth!
|
||||||
|
|
23
news/use-py-for-xontribs-definition.rst
Normal file
23
news/use-py-for-xontribs-definition.rst
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
**Added:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Changed:**
|
||||||
|
|
||||||
|
* Use ``xontribs_meta.py`` instead of ``xontribs.json``
|
||||||
|
|
||||||
|
**Deprecated:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Removed:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Fixed:**
|
||||||
|
|
||||||
|
* <news item>
|
||||||
|
|
||||||
|
**Security:**
|
||||||
|
|
||||||
|
* <news item>
|
|
@ -1,5 +1,6 @@
|
||||||
#!/usr/bin/env xonsh
|
#!/usr/bin/env xonsh
|
||||||
import argparse
|
import argparse
|
||||||
|
import subprocess
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +8,7 @@ $XONSH_DEBUG = 1
|
||||||
$RAISE_SUBPROC_ERROR = True
|
$RAISE_SUBPROC_ERROR = True
|
||||||
|
|
||||||
|
|
||||||
def _replace_args(args:List[str], num:int) -> List[str]:
|
def _replace_args(args: List[str], num: int) -> List[str]:
|
||||||
return [
|
return [
|
||||||
(arg % num) if "%d" in arg else arg
|
(arg % num) if "%d" in arg else arg
|
||||||
for arg in args
|
for arg in args
|
||||||
|
@ -72,4 +73,7 @@ if __name__ == '__main__':
|
||||||
qa_parser.set_defaults(func=qa)
|
qa_parser.set_defaults(func=qa)
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
args.func(args)
|
try:
|
||||||
|
args.func(args)
|
||||||
|
except subprocess.CalledProcessError as ex:
|
||||||
|
parser.exit(1, f"Failed with {ex}")
|
||||||
|
|
|
@ -19,8 +19,7 @@ exclude =
|
||||||
feedstock,
|
feedstock,
|
||||||
rever,
|
rever,
|
||||||
.venv*/,
|
.venv*/,
|
||||||
# remove later
|
.local.out*/
|
||||||
pygments_cache.py
|
|
||||||
# lint nits that are acceptable in Xonsh project:
|
# lint nits that are acceptable in Xonsh project:
|
||||||
ignore =
|
ignore =
|
||||||
D100, # Missing docstring in public module
|
D100, # Missing docstring in public module
|
||||||
|
@ -46,8 +45,7 @@ ignore =
|
||||||
D411, # Missing blank line before section
|
D411, # Missing blank line before section
|
||||||
D407, # Missing dashed underline after section
|
D407, # Missing dashed underline after section
|
||||||
E122,
|
E122,
|
||||||
# E203 whitespace before ':'
|
E203, # whitespace before ':'
|
||||||
E203,
|
|
||||||
E402,
|
E402,
|
||||||
W503, # line break before binary operators is a good thing
|
W503, # line break before binary operators is a good thing
|
||||||
E731, # accept lambda assigned to a variable
|
E731, # accept lambda assigned to a variable
|
||||||
|
|
|
@ -1,12 +1,7 @@
|
||||||
"""xontrib tests, such as they are"""
|
"""xontrib tests, such as they are"""
|
||||||
import sys
|
import sys
|
||||||
import pytest
|
import pytest
|
||||||
from xonsh.xontribs import xontrib_metadata, xontrib_context, xontribs_load, xontribs_loaded
|
from xonsh.xontribs import xontrib_context, xontribs_load, xontribs_loaded
|
||||||
|
|
||||||
|
|
||||||
def test_load_xontrib_metadata():
|
|
||||||
# Simply tests that the xontribs JSON files isn't malformed.
|
|
||||||
xontrib_metadata()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -78,6 +73,7 @@ hello = 'world'
|
||||||
ctx = xontrib_context("script")
|
ctx = xontrib_context("script")
|
||||||
assert ctx == {"hello": "world"}
|
assert ctx == {"hello": "world"}
|
||||||
|
|
||||||
|
|
||||||
def test_xontrib_load(tmpmod):
|
def test_xontrib_load(tmpmod):
|
||||||
"""
|
"""
|
||||||
Test that .xsh xontribs are loadable
|
Test that .xsh xontribs are loadable
|
||||||
|
@ -90,7 +86,8 @@ hello = 'world'
|
||||||
)
|
)
|
||||||
|
|
||||||
xontribs_load(["script"])
|
xontribs_load(["script"])
|
||||||
assert 'script' in xontribs_loaded()
|
assert "script" in xontribs_loaded()
|
||||||
|
|
||||||
|
|
||||||
def test_xontrib_load_dashed(tmpmod):
|
def test_xontrib_load_dashed(tmpmod):
|
||||||
"""
|
"""
|
||||||
|
@ -104,5 +101,4 @@ hello = 'world'
|
||||||
)
|
)
|
||||||
|
|
||||||
xontribs_load(["scri-pt"])
|
xontribs_load(["scri-pt"])
|
||||||
assert 'scri-pt' in xontribs_loaded()
|
assert "scri-pt" in xontribs_loaded()
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@ else:
|
||||||
try:
|
try:
|
||||||
from xonsh import __amalgam__
|
from xonsh import __amalgam__
|
||||||
|
|
||||||
|
xontribs_meta = __amalgam__
|
||||||
|
_sys.modules["xonsh.xontribs_meta"] = __amalgam__
|
||||||
contexts = __amalgam__
|
contexts = __amalgam__
|
||||||
_sys.modules["xonsh.contexts"] = __amalgam__
|
_sys.modules["xonsh.contexts"] = __amalgam__
|
||||||
lazyasd = __amalgam__
|
lazyasd = __amalgam__
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
"""Provides completions for xonsh internal utilities"""
|
"""Provides completions for xonsh internal utilities"""
|
||||||
|
|
||||||
import xonsh.xontribs as xx
|
import xonsh.xontribs as xx
|
||||||
|
import xonsh.xontribs_meta as xmt
|
||||||
import xonsh.tools as xt
|
import xonsh.tools as xt
|
||||||
from xonsh.xonfig import XONFIG_MAIN_ACTIONS
|
from xonsh.xonfig import XONFIG_MAIN_ACTIONS
|
||||||
|
|
||||||
|
@ -21,10 +22,9 @@ def complete_xonfig(prefix, line, start, end, ctx):
|
||||||
|
|
||||||
|
|
||||||
def _list_installed_xontribs():
|
def _list_installed_xontribs():
|
||||||
meta = xx.xontrib_metadata()
|
meta = xmt.get_xontribs()
|
||||||
installed = []
|
installed = []
|
||||||
for md in meta["xontribs"]:
|
for name in meta:
|
||||||
name = md["name"]
|
|
||||||
spec = xx.find_xontrib(name)
|
spec = xx.find_xontrib(name)
|
||||||
if spec is not None:
|
if spec is not None:
|
||||||
installed.append(spec.name.rsplit(".")[-1])
|
installed.append(spec.name.rsplit(".")[-1])
|
||||||
|
|
|
@ -15,7 +15,7 @@ from xonsh.color_tools import rgb_to_ints
|
||||||
from xonsh.pygments_cache import get_all_styles
|
from xonsh.pygments_cache import get_all_styles
|
||||||
from xonsh.pyghooks import XonshStyle, xonsh_style_proxy, XonshHtmlFormatter, Token, XonshLexer
|
from xonsh.pyghooks import XonshStyle, xonsh_style_proxy, XonshHtmlFormatter, Token, XonshLexer
|
||||||
from xonsh.prompt.base import PromptFormatter
|
from xonsh.prompt.base import PromptFormatter
|
||||||
from xonsh.xontribs import xontrib_metadata
|
from xonsh.xontribs_meta import get_xontribs, Xontrib
|
||||||
|
|
||||||
|
|
||||||
$RAISE_SUBPROC_ERROR = True
|
$RAISE_SUBPROC_ERROR = True
|
||||||
|
@ -199,17 +199,23 @@ type alias XontribData =
|
||||||
xontribs : List XontribData
|
xontribs : List XontribData
|
||||||
xontribs ="""
|
xontribs ="""
|
||||||
|
|
||||||
|
|
||||||
|
def get_xontrib_item(xontrib_name: str, xontrib: Xontrib):
|
||||||
|
item = 'name = "' + xontrib_name + '", '
|
||||||
|
item += 'url = "' + xontrib.url + '", '
|
||||||
|
item += 'license = "' + (xontrib.package.license if xontrib.package else "") + '", '
|
||||||
|
d = rst_to_html("".join(xontrib.description)).replace("\n", "\\n")
|
||||||
|
item += 'description = "' + escape(d) + '"'
|
||||||
|
return item
|
||||||
|
|
||||||
|
|
||||||
def render_xontribs(lines):
|
def render_xontribs(lines):
|
||||||
print_color("Rendering {GREEN}xontribs{RESET}")
|
print_color("Rendering {GREEN}xontribs{RESET}")
|
||||||
lines.append(xontrib_header)
|
lines.append(xontrib_header)
|
||||||
md = xontrib_metadata()
|
md = get_xontribs()
|
||||||
packages = md["packages"]
|
for i, xontrib_name in enumerate(md):
|
||||||
for i, xontrib in enumerate(md["xontribs"]):
|
xontrib = md[xontrib_name]
|
||||||
item = 'name = "' + xontrib["name"] + '", '
|
item = get_xontrib_item(xontrib_name, xontrib)
|
||||||
item += 'url = "' + xontrib["url"] + '", '
|
|
||||||
item += 'license = "' + packages.get(xontrib["package"], {}).get("license", "") + '", '
|
|
||||||
d = rst_to_html("".join(xontrib["description"])).replace("\n", "\\n")
|
|
||||||
item += 'description = "' + escape(d) + '"'
|
|
||||||
pre = " [ " if i == 0 else " , "
|
pre = " [ " if i == 0 else " , "
|
||||||
lines.append(pre + "{ " + item + " }")
|
lines.append(pre + "{ " + item + " }")
|
||||||
lines.append(" ]")
|
lines.append(" ]")
|
||||||
|
|
|
@ -47,7 +47,8 @@ from xonsh.tools import (
|
||||||
color_style,
|
color_style,
|
||||||
)
|
)
|
||||||
from xonsh.foreign_shells import CANON_SHELL_NAMES
|
from xonsh.foreign_shells import CANON_SHELL_NAMES
|
||||||
from xonsh.xontribs import xontrib_metadata, find_xontrib, xontribs_loaded
|
from xonsh.xontribs import find_xontrib, xontribs_loaded
|
||||||
|
from xonsh.xontribs_meta import get_xontribs, Xontrib
|
||||||
from xonsh.lazyasd import lazyobject
|
from xonsh.lazyasd import lazyobject
|
||||||
|
|
||||||
HR = "'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'"
|
HR = "'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'`-.,_,.-*'"
|
||||||
|
@ -356,25 +357,23 @@ def _xontrib_path(visitor=None, node=None, val=None):
|
||||||
return ("xontribs", len(visitor.state.get("xontribs", ())))
|
return ("xontribs", len(visitor.state.get("xontribs", ())))
|
||||||
|
|
||||||
|
|
||||||
def make_xontrib(xontrib, package):
|
def make_xontrib(name: str, xontrib: Xontrib):
|
||||||
"""Makes a message and StoreNonEmpty node for a xontrib."""
|
"""Makes a message and StoreNonEmpty node for a xontrib."""
|
||||||
name = xontrib.get("name", "<unknown-xontrib-name>")
|
name = name or "<unknown-xontrib-name>"
|
||||||
msg = "\n{BOLD_CYAN}" + name + "{RESET}\n"
|
msg = "\n{BOLD_CYAN}" + name + "{RESET}\n"
|
||||||
if "url" in xontrib:
|
if xontrib.url:
|
||||||
msg += "{RED}url:{RESET} " + xontrib["url"] + "\n"
|
msg += "{RED}url:{RESET} " + xontrib.url + "\n"
|
||||||
if "package" in xontrib:
|
if xontrib.package:
|
||||||
msg += "{RED}package:{RESET} " + xontrib["package"] + "\n"
|
pkg = xontrib.package
|
||||||
if "url" in package:
|
msg += "{RED}package:{RESET} " + pkg.name + "\n"
|
||||||
if "url" in xontrib and package["url"] != xontrib["url"]:
|
if pkg.url:
|
||||||
msg += "{RED}package-url:{RESET} " + package["url"] + "\n"
|
if xontrib.url and pkg.url != xontrib.url:
|
||||||
if "license" in package:
|
msg += "{RED}package-url:{RESET} " + pkg.url + "\n"
|
||||||
msg += "{RED}license:{RESET} " + package["license"] + "\n"
|
if pkg.license:
|
||||||
|
msg += "{RED}license:{RESET} " + pkg.license + "\n"
|
||||||
msg += "{PURPLE}installed?{RESET} "
|
msg += "{PURPLE}installed?{RESET} "
|
||||||
msg += ("no" if find_xontrib(name) is None else "yes") + "\n"
|
msg += ("no" if find_xontrib(name) is None else "yes") + "\n"
|
||||||
desc = xontrib.get("description", "")
|
msg += _wrap_paragraphs(xontrib.description, width=69)
|
||||||
if not isinstance(desc, str):
|
|
||||||
desc = "".join(desc)
|
|
||||||
msg += _wrap_paragraphs(desc, width=69)
|
|
||||||
if msg.endswith("\n"):
|
if msg.endswith("\n"):
|
||||||
msg = msg[:-1]
|
msg = msg[:-1]
|
||||||
mnode = wiz.Message(message=msg)
|
mnode = wiz.Message(message=msg)
|
||||||
|
@ -385,10 +384,7 @@ def make_xontrib(xontrib, package):
|
||||||
|
|
||||||
def make_xontribs_wiz():
|
def make_xontribs_wiz():
|
||||||
"""Makes a xontrib wizard."""
|
"""Makes a xontrib wizard."""
|
||||||
md = xontrib_metadata()
|
return _make_flat_wiz(make_xontrib, get_xontribs().items())
|
||||||
pkgs = [md["packages"].get(d.get("package", None), {}) for d in md["xontribs"]]
|
|
||||||
w = _make_flat_wiz(make_xontrib, md["xontribs"], pkgs)
|
|
||||||
return w
|
|
||||||
|
|
||||||
|
|
||||||
def make_xonfig_wizard(default_file=None, confirm=False, no_wizard_file=None):
|
def make_xonfig_wizard(default_file=None, confirm=False, no_wizard_file=None):
|
||||||
|
|
|
@ -1,584 +0,0 @@
|
||||||
{"xontribs": [
|
|
||||||
{"name": "abbrevs",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"Adds ``abbrevs`` dictionary to hold user-defined command abbreviations. ",
|
|
||||||
"The dictionary is searched as you type and the matching words are replaced ",
|
|
||||||
"at the command line by the corresponding dictionary contents once you hit ",
|
|
||||||
"'Space' or 'Return' key. For instance a frequently used command such as ",
|
|
||||||
"``git status`` can be abbreviated to ``gst`` as follows::\n\n",
|
|
||||||
" $ xontrib load abbrevs\n",
|
|
||||||
" $ abbrevs['gst'] = 'git status'\n",
|
|
||||||
" $ gst # Once you hit <space> or <return>, 'gst' gets expanded to 'git status'.\n\n"]
|
|
||||||
},
|
|
||||||
{"name": "apt_tabcomplete",
|
|
||||||
"package": "xonsh-apt-tabcomplete",
|
|
||||||
"url": "https://github.com/DangerOnTheRanger/xonsh-apt-tabcomplete",
|
|
||||||
"description": ["Adds tabcomplete functionality to apt-get/apt-cache inside of xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "argcomplete",
|
|
||||||
"package": "xontrib-argcomplete",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-argcomplete",
|
|
||||||
"description": ["Argcomplete support to tab completion of python and xonsh scripts in xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "autojump",
|
|
||||||
"package": "xontrib-autojump",
|
|
||||||
"url": "https://github.com/sagartewari01/autojump-xonsh",
|
|
||||||
"description": ["autojump support for xonsh"]
|
|
||||||
},
|
|
||||||
{"name": "autovox",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Manages automatic activation of virtual environments."]
|
|
||||||
},
|
|
||||||
{"name": "autoxsh",
|
|
||||||
"package": "xonsh-autoxsh",
|
|
||||||
"url": "https://github.com/Granitas/xonsh-autoxsh",
|
|
||||||
"description": ["Adds automatic execution of xonsh script files called ",
|
|
||||||
"``.autoxsh`` when enterting a directory with ``cd`` function"]
|
|
||||||
},
|
|
||||||
{"name": "avox",
|
|
||||||
"package": "xontrib-avox",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-avox",
|
|
||||||
"description": ["Automatic (de)activation of virtual environments as you cd around"]
|
|
||||||
},
|
|
||||||
{"name": "back2dir",
|
|
||||||
"package": "xontrib-back2dir",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-back2dir",
|
|
||||||
"description": [
|
|
||||||
"Return to the most recently used directory when starting the xonsh shell. ",
|
|
||||||
"For example, if you were in the '/work' directory when you last exited xonsh, ",
|
|
||||||
"then your next xonsh session will start in the '/work' directory, instead of your home directory."]
|
|
||||||
},
|
|
||||||
{"name": "bashisms",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"Enables additional Bash-like syntax while at the command prompt. For ",
|
|
||||||
"example, the ``!!`` syntax for running the previous command is now usable. ",
|
|
||||||
"Note that these features are implemented as precommand events and these ",
|
|
||||||
"additions do not affect the xonsh language when run as script. That said, ",
|
|
||||||
"you might find them useful if you have strong muscle memory.\n\n",
|
|
||||||
"**Warning:** This xontrib may modify user command line input to implement ",
|
|
||||||
"its behavior. To see the modifications as they are applied (in unified diff",
|
|
||||||
"format), please set ``$XONSH_DEBUG`` to ``2`` or higher.\n\n",
|
|
||||||
"The xontrib also adds commands: ``alias``, ``export``, ``unset``, ``set``, ``shopt``, ``complete``."]
|
|
||||||
},
|
|
||||||
{"name": "base16_shell",
|
|
||||||
"package": "xontrib-base16-shell",
|
|
||||||
"url": "https://github.com/ErickTucto/xontrib-base16-shell",
|
|
||||||
"description": ["Change base16 shell themes"]
|
|
||||||
},
|
|
||||||
{"name": "coreutils",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"Additional core utilities that are implemented in xonsh. The current list ",
|
|
||||||
"includes:\n",
|
|
||||||
"\n",
|
|
||||||
"* cat\n",
|
|
||||||
"* echo\n",
|
|
||||||
"* pwd\n",
|
|
||||||
"* tee\n",
|
|
||||||
"* tty\n",
|
|
||||||
"* yes\n",
|
|
||||||
"\n",
|
|
||||||
"In many cases, these may have a lower performance overhead than the ",
|
|
||||||
"posix command line utility with the same name. This is because these ",
|
|
||||||
"tools avoid the need for a full subprocess call. Additionally, these ",
|
|
||||||
"tools are cross-platform."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "cmd_done",
|
|
||||||
"package": "xontrib-cmd-durations",
|
|
||||||
"url": "https://github.com/jnoortheen/xontrib-cmd-durations",
|
|
||||||
"description": [
|
|
||||||
"send notification once long-running command is finished.",
|
|
||||||
" Adds `long_cmd_duration` field to $PROMPT_FIELDS.",
|
|
||||||
" Note: It needs `xdotool` installed to detect current window."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "direnv",
|
|
||||||
"package": "xonsh-direnv",
|
|
||||||
"url": "https://github.com/74th/xonsh-direnv",
|
|
||||||
"description": [
|
|
||||||
"Supports direnv."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "hist_navigator",
|
|
||||||
"package": "xontrib-hist-navigator",
|
|
||||||
"url": "https://github.com/jnoortheen/xontrib-hist-navigator",
|
|
||||||
"description": [
|
|
||||||
"Move through directory history with nextd and prevd also with keybindings."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "distributed",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"The distributed parallel computing library hooks for xonsh. ",
|
|
||||||
"Importantly this provides a substitute 'dworker' command which enables ",
|
|
||||||
"distributed workers to have access to xonsh builtins.\n\n",
|
|
||||||
"Furthermore, this xontrib adds a 'DSubmitter' context manager for ",
|
|
||||||
"executing a block remotely. Moreover, this also adds a convenience ",
|
|
||||||
"function 'dsubmit()' for creating DSubmitter and Executor instances ",
|
|
||||||
"at the same time. Thus users may submit distributed jobs with::\n\n",
|
|
||||||
" with dsubmit('127.0.0.1:8786', rtn='x') as dsub:\n",
|
|
||||||
" x = $(echo I am elsewhere)\n\n",
|
|
||||||
" res = dsub.future.result()\n",
|
|
||||||
" print(res)\n\n",
|
|
||||||
"This is useful for long running or non-blocking jobs."
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{"name": "docker_tabcomplete",
|
|
||||||
"package": "xonsh-docker-tabcomplete",
|
|
||||||
"url": "https://github.com/xsteadfastx/xonsh-docker-tabcomplete",
|
|
||||||
"description": ["Adds tabcomplete functionality to docker inside of xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "free_cwd",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"Windows only xontrib, to release the lock on the current directory ",
|
|
||||||
"whenever the prompt is shown. Enabling this will allow the other ",
|
|
||||||
"programs or Windows Explorer to delete or rename the current or parent ",
|
|
||||||
"directories. Internally, it is accomplished by temporarily resetting ",
|
|
||||||
"CWD to the root drive folder while waiting at the prompt. This only ",
|
|
||||||
"works with the prompt_toolkit backend and can cause cause issues ",
|
|
||||||
"if any extensions are enabled that hook the prompt and relies on ",
|
|
||||||
"``os.getcwd()``"]
|
|
||||||
},
|
|
||||||
{"name": "fzf-widgets",
|
|
||||||
"package": "xontrib-fzf-widgets",
|
|
||||||
"url": "https://github.com/laloch/xontrib-fzf-widgets",
|
|
||||||
"description": ["Adds some fzf widgets to your xonsh shell."]
|
|
||||||
},
|
|
||||||
{"name": "gitinfo",
|
|
||||||
"package": "xontrib-gitinfo",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-gitinfo",
|
|
||||||
"description": ["Displays git information on entering a repository folder. Uses ``onefetch`` if available."]
|
|
||||||
},
|
|
||||||
{"name": "histcpy",
|
|
||||||
"package": "xontrib-histcpy",
|
|
||||||
"url": "https://github.com/con-f-use/xontrib-histcpy",
|
|
||||||
"description": [
|
|
||||||
"Useful aliases and shortcuts for extracting links and text",
|
|
||||||
"from command output history and putting them into the",
|
|
||||||
" clipboard."]
|
|
||||||
},
|
|
||||||
{"name": "jedi",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Use Jedi as xonsh's python completer."]
|
|
||||||
},
|
|
||||||
{"name": "kitty",
|
|
||||||
"package": "xontrib-kitty",
|
|
||||||
"url": "https://github.com/scopatz/xontrib-kitty",
|
|
||||||
"description": ["Xonsh hooks for the Kitty terminal emulator."]
|
|
||||||
},
|
|
||||||
{"name": "mpl",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Matplotlib hooks for xonsh, including the new 'mpl' alias ",
|
|
||||||
"that displays the current figure on the screen."]
|
|
||||||
},
|
|
||||||
{"name": "output_search",
|
|
||||||
"package": "xontrib-output-search",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-output-search",
|
|
||||||
"description": ["Get identifiers, names, paths, URLs and words from the previous command output ",
|
|
||||||
"and use them for the next command."]
|
|
||||||
},
|
|
||||||
{"name": "onepath",
|
|
||||||
"package": "xontrib-onepath",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-onepath",
|
|
||||||
"description": ["When you click to a file or folder in graphical OS they will be opened in associated app.",
|
|
||||||
"The xontrib-onepath brings the same logic for the xonsh shell. Type the filename or path",
|
|
||||||
"without preceding command and an associated action will be executed. The actions are customizable."]
|
|
||||||
},
|
|
||||||
{"name": "pdb",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Simple built-in debugger. Runs pdb on reception of SIGUSR1 signal."]
|
|
||||||
},
|
|
||||||
{"name": "pipeliner",
|
|
||||||
"package": "xontrib-pipeliner",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-pipeliner",
|
|
||||||
"description": ["Let your pipe lines flow thru the Python code in xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "powerline",
|
|
||||||
"package": "xontrib-powerline",
|
|
||||||
"url": "https://github.com/santagada/xontrib-powerline",
|
|
||||||
"description": ["Powerline for Xonsh shell"]
|
|
||||||
},
|
|
||||||
{"name": "powerline2",
|
|
||||||
"package": "xontrib-powerline2",
|
|
||||||
"url": "https://github.com/vaaaaanquish/xontrib-powerline2",
|
|
||||||
"description": ["Powerline for Xonsh shell forked from santagada/xontrib-powerline"]
|
|
||||||
},
|
|
||||||
{"name": "prompt_bar",
|
|
||||||
"package": "xontrib-prompt-bar",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-prompt-bar",
|
|
||||||
"description": ["An elegance bar style for prompt."]
|
|
||||||
},
|
|
||||||
{"name": "powerline_binding",
|
|
||||||
"package": "xontrib-powerline-binding",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-powerline-binding",
|
|
||||||
"description": ["Uses powerline to render the xonsh prompt"]
|
|
||||||
},
|
|
||||||
{"name": "prompt_ret_code",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Adds return code info to the prompt"]
|
|
||||||
},
|
|
||||||
{"name": "prompt_vi_mode",
|
|
||||||
"package": "xontrib-prompt-vi-mode",
|
|
||||||
"url": "https://github.com/t184256/xontrib-prompt-vi-mode",
|
|
||||||
"description": ["vi-mode status formatter for xonsh prompt"]
|
|
||||||
},
|
|
||||||
{"name": "pyenv",
|
|
||||||
"package": "xontrib-pyenv",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-pyenv",
|
|
||||||
"description": ["pyenv integration for xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "readable-traceback",
|
|
||||||
"package": "xontrib-readable-traceback",
|
|
||||||
"url": "https://github.com/6syun9/xontrib-readable-traceback",
|
|
||||||
"description": ["Make traceback easier to see for xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "sh",
|
|
||||||
"package": "xontrib-sh",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-sh",
|
|
||||||
"description": ["Paste and run commands from bash, zsh, fish in xonsh shell."]
|
|
||||||
},
|
|
||||||
{"name": "schedule",
|
|
||||||
"package": "xontrib-schedule",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-schedule",
|
|
||||||
"description": ["Xonsh Task Scheduling"]
|
|
||||||
},
|
|
||||||
{"name": "scrapy_tabcomplete",
|
|
||||||
"package": "xonsh-scrapy-tabcomplete",
|
|
||||||
"url": "https://github.com/Granitas/xonsh-scrapy-tabcomplete",
|
|
||||||
"description": ["Adds tabcomplete functionality to scrapy inside of xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "ssh_agent",
|
|
||||||
"package": "xontrib-ssh-agent",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-ssh-agent",
|
|
||||||
"description": ["ssh-agent integration"]
|
|
||||||
},
|
|
||||||
{"name": "vox",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Python virtual environment manager for xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "vox_tabcomplete",
|
|
||||||
"package": "xonsh-vox-tabcomplete",
|
|
||||||
"url": "https://github.com/Granitosaurus/xonsh-vox-tabcomplete",
|
|
||||||
"description": ["Adds tabcomplete functionality to vox inside of xonsh."]
|
|
||||||
},
|
|
||||||
{"name": "whole_word_jumping",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": [
|
|
||||||
"Jumping across whole words (non-whitespace) with Ctrl+Left/Right. ",
|
|
||||||
"Alt+Left/Right remains unmodified to jump over smaller word segments. ",
|
|
||||||
"Shift+Delete removes the whole word."]
|
|
||||||
},
|
|
||||||
{"name": "xo",
|
|
||||||
"package": "exofrills",
|
|
||||||
"url": "https://github.com/scopatz/xo",
|
|
||||||
"description": ["Adds an 'xo' alias to run the exofrills text editor in the ",
|
|
||||||
"current Python interpreter session. This shaves off a ",
|
|
||||||
"bit of the startup time when running your favorite, minimal ",
|
|
||||||
"text editor."]
|
|
||||||
},
|
|
||||||
{"name": "xog",
|
|
||||||
"package": "xonsh",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"description": ["Adds a simple command to establish and print temporary traceback log file."]
|
|
||||||
},
|
|
||||||
{"name": "xpg",
|
|
||||||
"package": "xontrib-xpg",
|
|
||||||
"url": "https://github.com/fengttt/xsh/tree/master/py",
|
|
||||||
"description": ["Run/plot/explain sql query for PostgreSQL."]
|
|
||||||
},
|
|
||||||
{"name": "z",
|
|
||||||
"package": "xontrib-z",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-z",
|
|
||||||
"description": ["Tracks your most used directories, based on 'frecency'."]
|
|
||||||
},
|
|
||||||
{"name": "zoxide",
|
|
||||||
"package": "xontrib-zoxide",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-zoxide",
|
|
||||||
"description": ["Zoxide integration for xonsh."]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"packages": {
|
|
||||||
"exofrills": {
|
|
||||||
"license": "WTFPL",
|
|
||||||
"url": "http://exofrills.org",
|
|
||||||
"install": {
|
|
||||||
"conda": "conda install -c conda-forge xo",
|
|
||||||
"pip": "xpip install exofrills"}
|
|
||||||
},
|
|
||||||
"xonsh": {
|
|
||||||
"license": "BSD 3-clause",
|
|
||||||
"url": "http://xon.sh",
|
|
||||||
"install": {
|
|
||||||
"conda": "conda install -c conda-forge xonsh",
|
|
||||||
"pip": "xpip install xonsh",
|
|
||||||
"aura": "sudo aura -A xonsh",
|
|
||||||
"yaourt": "yaourt -Sa xonsh"}
|
|
||||||
},
|
|
||||||
"xontrib-argcomplete": {
|
|
||||||
"license": "BSD",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-argcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-argcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-back2dir": {
|
|
||||||
"license": "BSD",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-back2dir",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-back2dir"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-autoxsh": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/Granitas/xonsh-autoxsh",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-autoxsh"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-apt-tabcomplete": {
|
|
||||||
"license": "BSD 2-clause",
|
|
||||||
"url": "https://github.com/DangerOnTheRanger/xonsh-apt-tabcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-apt-tabcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-click-tabcomplete": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/Granitosaurus/xonsh-click-tabcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-click-tabcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-direnv": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/74th/xonsh-direnv",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-direnv"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-docker-tabcomplete": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/xsteadfastx/xonsh-docker-tabcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-docker-tabcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-hist-navigator": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/jnoortheen/xontrib-hist-navigator",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-hist-navigator"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-scrapy-tabcomplete": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/Granitas/xonsh-scrapy-tabcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-scrapy-tabcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonsh-vox-tabcomplete": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/Granitosaurus/xonsh-vox-tabcomplete",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonsh-vox-tabcomplete"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xonda": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/gforsyth/xonda",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xonda"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-avox": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-avox",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-avox"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-cmd-durations": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/jnoortheen/xontrib-cmd-durations",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-cmd-durations"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-fzf-widgets": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/laloch/xontrib-fzf-widgets",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-fzf-widgets"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-gitinfo": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-gitinfo",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-gitinfo"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-histcpy": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/con-f-use/xontrib-histcpy",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-histcpy"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-kitty": {
|
|
||||||
"license": "BSD-3-Clause",
|
|
||||||
"url": "https://github.com/scopatz/xontrib-kitty",
|
|
||||||
"install": {
|
|
||||||
"conda": "conda install -c conda-forge xontrib-kitty",
|
|
||||||
"pip": "xpip install xontrib-kitty"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-output-search": {
|
|
||||||
"license": "BSD",
|
|
||||||
"url": "https://github.com/tokenizer/xontrib-output-search",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-output-search"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-onepath": {
|
|
||||||
"license": "BSD",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-onepath",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-onepath"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-pipeliner": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-pipeliner",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-pipeliner"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-powerline": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/santagada/xontrib-powerline",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-powerline"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-powerline2": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/vaaaaanquish/xontrib-powerline2",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-powerline2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-powerline-binding": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-powerline-binding",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-powerline-binding"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-prompt-bar": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-prompt-bar",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-prompt-bar"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-prompt-ret-code": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/Siecje/xontrib-prompt-ret-code",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-prompt-ret-code"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-prompt-vi-mode": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/t184256/xontrib-prompt-vi-mode",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-prompt-vi-mode"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-pyenv": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-pyenv",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-pyenv"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-readable-traceback": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/6syun9/xontrib-readable-traceback",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-readable-traceback"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-sh": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/anki-code/xontrib-sh",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-sh"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-schedule": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-schedule",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-schedule"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-ssh-agent": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-ssh-agent",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-ssh-agent"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-thefuck": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/meatballs/xontrib-thefuck",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-thefuck"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-xpg": {
|
|
||||||
"license": "Apache",
|
|
||||||
"url": "https://github.com/fengttt/xsh/py",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-xpg"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-z": {
|
|
||||||
"license": "GPLv3",
|
|
||||||
"url": "https://github.com/AstraLuma/xontrib-z",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-z"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xontrib-zoxide": {
|
|
||||||
"license": "MIT",
|
|
||||||
"url": "https://github.com/dyuri/xontrib-zoxide",
|
|
||||||
"install": {
|
|
||||||
"pip": "xpip install xontrib-zoxide"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,17 +1,18 @@
|
||||||
"""Tools for helping manage xontributions."""
|
"""Tools for helping manage xontributions."""
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import json
|
|
||||||
import builtins
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import builtins
|
||||||
import functools
|
import functools
|
||||||
import importlib
|
import importlib
|
||||||
import importlib.util
|
import importlib.util
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
import typing as tp
|
||||||
from enum import IntEnum
|
from enum import IntEnum
|
||||||
from xonsh.tools import print_color, print_exception, unthreadable
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from xonsh.xontribs_meta import get_xontribs
|
||||||
|
from xonsh.tools import print_color, print_exception, unthreadable
|
||||||
|
|
||||||
|
|
||||||
class ExitCode(IntEnum):
|
class ExitCode(IntEnum):
|
||||||
OK = 0
|
OK = 0
|
||||||
|
@ -42,14 +43,15 @@ def xontrib_context(name):
|
||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
def prompt_xontrib_install(names):
|
def prompt_xontrib_install(names: tp.List[str]):
|
||||||
"""Returns a formatted string with name of xontrib package to prompt user"""
|
"""Returns a formatted string with name of xontrib package to prompt user"""
|
||||||
md = xontrib_metadata()
|
xontribs = get_xontribs()
|
||||||
packages = []
|
packages = []
|
||||||
for name in names:
|
for name in names:
|
||||||
for xontrib in md["xontribs"]:
|
if name in xontribs:
|
||||||
if xontrib["name"] == name:
|
xontrib = xontribs[name]
|
||||||
packages.append(xontrib["package"])
|
if xontrib.package:
|
||||||
|
packages.append(xontrib.package.name)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
"The following xontribs are enabled but not installed: \n"
|
"The following xontribs are enabled but not installed: \n"
|
||||||
|
@ -76,44 +78,6 @@ def update_context(name, ctx=None):
|
||||||
return ctx.update(modctx)
|
return ctx.update(modctx)
|
||||||
|
|
||||||
|
|
||||||
@functools.lru_cache()
|
|
||||||
def xontrib_metadata():
|
|
||||||
"""Loads and returns the xontribs.json file."""
|
|
||||||
impres = None
|
|
||||||
pkg_resources = None
|
|
||||||
|
|
||||||
# NOTE: Reduce all of these alternate implementations when the minimum Python
|
|
||||||
# is >=3.7
|
|
||||||
try:
|
|
||||||
# Python 3.7
|
|
||||||
import importlib.resources as impres
|
|
||||||
except ImportError:
|
|
||||||
try:
|
|
||||||
# Optional backport for <3.7
|
|
||||||
import importlib_resources as impres
|
|
||||||
except ImportError:
|
|
||||||
try:
|
|
||||||
# Try the slower and clunkier pkg_resources
|
|
||||||
# This is only available if setuptools is part of the environment
|
|
||||||
import pkg_resources
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if impres:
|
|
||||||
with impres.open_text("xonsh", "xontribs.json") as f:
|
|
||||||
md = json.load(f)
|
|
||||||
elif pkg_resources:
|
|
||||||
# Despite the name, this is a bytes
|
|
||||||
bytesdata = pkg_resources.resource_string("xonsh", "xontribs.json")
|
|
||||||
md = json.loads(bytesdata.decode("utf-8"))
|
|
||||||
else:
|
|
||||||
path = os.path.join(os.path.dirname(__file__), "xontribs.json")
|
|
||||||
with open(path, "r") as f:
|
|
||||||
md = json.load(f)
|
|
||||||
|
|
||||||
return md
|
|
||||||
|
|
||||||
|
|
||||||
def xontribs_load(names, verbose=False):
|
def xontribs_load(names, verbose=False):
|
||||||
"""Load xontribs from a list of names"""
|
"""Load xontribs from a list of names"""
|
||||||
ctx = builtins.__xonsh__.ctx
|
ctx = builtins.__xonsh__.ctx
|
||||||
|
@ -138,39 +102,39 @@ def _load(ns):
|
||||||
return xontribs_load(ns.names, verbose=ns.verbose)
|
return xontribs_load(ns.names, verbose=ns.verbose)
|
||||||
|
|
||||||
|
|
||||||
def xontrib_installed(ns=None):
|
def xontrib_installed(names: tp.Set[str]):
|
||||||
"""Returns list of installed xontribs."""
|
"""Returns list of installed xontribs."""
|
||||||
installed_xontribs = set()
|
installed_xontribs = set()
|
||||||
xontrib_locations = importlib.util.find_spec("xontrib").submodule_search_locations
|
spec = importlib.util.find_spec("xontrib")
|
||||||
names = None if not ns or len(ns.names) == 0 else set(ns.names)
|
if spec:
|
||||||
if xontrib_locations:
|
xontrib_locations = spec.submodule_search_locations
|
||||||
for xl in xontrib_locations:
|
if xontrib_locations:
|
||||||
for x in Path(xl).glob("*"):
|
for xl in xontrib_locations:
|
||||||
name = x.name.split(".")[0]
|
for x in Path(xl).glob("*"):
|
||||||
if name[0] == "_" or (names and name not in names):
|
name = x.name.split(".")[0]
|
||||||
continue
|
if name[0] == "_" or (names and name not in names):
|
||||||
installed_xontribs.add(name)
|
continue
|
||||||
|
installed_xontribs.add(name)
|
||||||
return installed_xontribs
|
return installed_xontribs
|
||||||
|
|
||||||
|
|
||||||
def xontrib_data(ns):
|
def xontrib_data(ns):
|
||||||
"""Collects and returns the data about xontribs."""
|
"""Collects and returns the data about xontribs."""
|
||||||
meta = xontrib_metadata()
|
meta = get_xontribs()
|
||||||
data = {}
|
data = {}
|
||||||
names = None if not ns or len(ns.names) == 0 else set(ns.names)
|
names: tp.Set[str] = set() if not ns else set(ns.names)
|
||||||
for md in meta["xontribs"]:
|
for xo_name in meta:
|
||||||
name = md["name"]
|
if xo_name not in names:
|
||||||
if names is not None and md["name"] not in names:
|
|
||||||
continue
|
continue
|
||||||
spec = find_xontrib(name)
|
spec = find_xontrib(xo_name)
|
||||||
if spec is None:
|
if spec is None:
|
||||||
installed = loaded = False
|
installed = loaded = False
|
||||||
else:
|
else:
|
||||||
installed = True
|
installed = True
|
||||||
loaded = spec.name in sys.modules
|
loaded = spec.name in sys.modules
|
||||||
data[name] = {"name": name, "installed": installed, "loaded": loaded}
|
data[xo_name] = {"name": xo_name, "installed": installed, "loaded": loaded}
|
||||||
|
|
||||||
installed_xontribs = xontrib_installed(ns)
|
installed_xontribs = xontrib_installed(names)
|
||||||
for name in installed_xontribs:
|
for name in installed_xontribs:
|
||||||
if name not in data:
|
if name not in data:
|
||||||
loaded = f"xontrib.{name}" in sys.modules
|
loaded = f"xontrib.{name}" in sys.modules
|
||||||
|
|
583
xonsh/xontribs_meta.py
Normal file
583
xonsh/xontribs_meta.py
Normal file
|
@ -0,0 +1,583 @@
|
||||||
|
"""
|
||||||
|
This modules is the place where one would define the xontribs.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import functools
|
||||||
|
import typing as tp
|
||||||
|
|
||||||
|
|
||||||
|
class _XontribPkg(tp.NamedTuple):
|
||||||
|
"""Class to define package information of a xontrib.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
install
|
||||||
|
a mapping of tools with respective install commands. e.g. {"pip": "pip install xontrib"}
|
||||||
|
license
|
||||||
|
license type of the xontrib package
|
||||||
|
name
|
||||||
|
full name of the package. e.g. "xontrib-argcomplete"
|
||||||
|
url
|
||||||
|
URL to the homepage of the xontrib package.
|
||||||
|
"""
|
||||||
|
|
||||||
|
install: tp.Dict[str, str]
|
||||||
|
license: str = ""
|
||||||
|
name: str = ""
|
||||||
|
url: tp.Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
|
class Xontrib(tp.NamedTuple):
|
||||||
|
"""Meta class that is used to describe xontribs.
|
||||||
|
|
||||||
|
Attributes
|
||||||
|
----------
|
||||||
|
url
|
||||||
|
url to the home page of the xontrib.
|
||||||
|
description
|
||||||
|
short description about the xontrib.
|
||||||
|
package
|
||||||
|
pkg information for installing the xontrib
|
||||||
|
tags
|
||||||
|
category.
|
||||||
|
"""
|
||||||
|
|
||||||
|
url: str = ""
|
||||||
|
description: str = ""
|
||||||
|
package: tp.Optional[_XontribPkg] = None
|
||||||
|
tags: tp.Tuple[str, ...] = ()
|
||||||
|
|
||||||
|
|
||||||
|
@functools.lru_cache()
|
||||||
|
def get_xontribs() -> tp.Dict[str, Xontrib]:
|
||||||
|
"""Return xontrib definitions lazily."""
|
||||||
|
return define_xontribs()
|
||||||
|
|
||||||
|
|
||||||
|
def define_xontribs():
|
||||||
|
"""Xontrib registry."""
|
||||||
|
core_pkg = _XontribPkg(
|
||||||
|
name="xonsh",
|
||||||
|
license="BSD 3-clause",
|
||||||
|
install={
|
||||||
|
"conda": "conda install -c conda-forge xonsh",
|
||||||
|
"pip": "xpip install xonsh",
|
||||||
|
"aura": "sudo aura -A xonsh",
|
||||||
|
"yaourt": "yaourt -Sa xonsh",
|
||||||
|
},
|
||||||
|
url="http://xon.sh",
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
"abbrevs": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Adds ``abbrevs`` dictionary to hold user-defined "
|
||||||
|
"command abbreviations. The dictionary is searched "
|
||||||
|
"as you type and the matching words are replaced "
|
||||||
|
"at the command line by the corresponding "
|
||||||
|
"dictionary contents once you hit 'Space' or "
|
||||||
|
"'Return' key. For instance a frequently used "
|
||||||
|
"command such as ``git status`` can be abbreviated "
|
||||||
|
"to ``gst`` as follows::\n"
|
||||||
|
"\n"
|
||||||
|
" $ xontrib load abbrevs\n"
|
||||||
|
" $ abbrevs['gst'] = 'git status'\n"
|
||||||
|
" $ gst # Once you hit <space> or <return>, "
|
||||||
|
"'gst' gets expanded to 'git status'.\n"
|
||||||
|
"\n",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"apt_tabcomplete": Xontrib(
|
||||||
|
url="https://github.com/DangerOnTheRanger/xonsh-apt-tabcomplete",
|
||||||
|
description="Adds tabcomplete functionality to "
|
||||||
|
"apt-get/apt-cache inside of xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-apt-tabcomplete",
|
||||||
|
license="BSD 2-clause",
|
||||||
|
install={"pip": "xpip install xonsh-apt-tabcomplete"},
|
||||||
|
url="https://github.com/DangerOnTheRanger/xonsh-apt-tabcomplete",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"argcomplete": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-argcomplete",
|
||||||
|
description="Argcomplete support to tab completion of "
|
||||||
|
"python and xonsh scripts in xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-argcomplete",
|
||||||
|
license="BSD",
|
||||||
|
install={"pip": "xpip install xontrib-argcomplete"},
|
||||||
|
url="https://github.com/anki-code/xontrib-argcomplete",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"autojump": Xontrib(
|
||||||
|
url="https://github.com/sagartewari01/autojump-xonsh",
|
||||||
|
description="autojump support for xonsh",
|
||||||
|
),
|
||||||
|
"autovox": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Manages automatic activation of virtual " "environments.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"autoxsh": Xontrib(
|
||||||
|
url="https://github.com/Granitas/xonsh-autoxsh",
|
||||||
|
description="Adds automatic execution of xonsh script files "
|
||||||
|
"called ``.autoxsh`` when enterting a directory "
|
||||||
|
"with ``cd`` function",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-autoxsh",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xonsh-autoxsh"},
|
||||||
|
url="https://github.com/Granitas/xonsh-autoxsh",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"avox": Xontrib(
|
||||||
|
url="https://github.com/AstraLuma/xontrib-avox",
|
||||||
|
description="Automatic (de)activation of virtual environments as "
|
||||||
|
"you cd around",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-avox",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xontrib-avox"},
|
||||||
|
url="https://github.com/AstraLuma/xontrib-avox",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"back2dir": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-back2dir",
|
||||||
|
description="Return to the most recently used directory when "
|
||||||
|
"starting the xonsh shell. For example, if you "
|
||||||
|
"were in the '/work' directory when you last "
|
||||||
|
"exited xonsh, then your next xonsh session will "
|
||||||
|
"start in the '/work' directory, instead of your "
|
||||||
|
"home directory.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-back2dir",
|
||||||
|
license="BSD",
|
||||||
|
install={"pip": "xpip install xontrib-back2dir"},
|
||||||
|
url="https://github.com/anki-code/xontrib-back2dir",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"base16_shell": Xontrib(
|
||||||
|
url="https://github.com/ErickTucto/xontrib-base16-shell",
|
||||||
|
description="Change base16 shell themes",
|
||||||
|
),
|
||||||
|
"bashisms": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Enables additional Bash-like syntax while at the "
|
||||||
|
"command prompt. For example, the ``!!`` syntax "
|
||||||
|
"for running the previous command is now usable. "
|
||||||
|
"Note that these features are implemented as "
|
||||||
|
"precommand events and these additions do not "
|
||||||
|
"affect the xonsh language when run as script. "
|
||||||
|
"That said, you might find them useful if you "
|
||||||
|
"have strong muscle memory.\n"
|
||||||
|
"\n"
|
||||||
|
"**Warning:** This xontrib may modify user "
|
||||||
|
"command line input to implement its behavior. To "
|
||||||
|
"see the modifications as they are applied (in "
|
||||||
|
"unified diffformat), please set ``$XONSH_DEBUG`` "
|
||||||
|
"to ``2`` or higher.\n"
|
||||||
|
"\n"
|
||||||
|
"The xontrib also adds commands: ``alias``, "
|
||||||
|
"``export``, ``unset``, ``set``, ``shopt``, "
|
||||||
|
"``complete``.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"cmd_done": Xontrib(
|
||||||
|
url="https://github.com/jnoortheen/xontrib-cmd-durations",
|
||||||
|
description="send notification once long-running command is "
|
||||||
|
"finished. Adds `long_cmd_duration` field to "
|
||||||
|
"$PROMPT_FIELDS. Note: It needs `xdotool` "
|
||||||
|
"installed to detect current window.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-cmd-durations",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-cmd-durations"},
|
||||||
|
url="https://github.com/jnoortheen/xontrib-cmd-durations",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"coreutils": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Additional core utilities that are implemented "
|
||||||
|
"in xonsh. The current list includes:\n"
|
||||||
|
"\n"
|
||||||
|
"* cat\n"
|
||||||
|
"* echo\n"
|
||||||
|
"* pwd\n"
|
||||||
|
"* tee\n"
|
||||||
|
"* tty\n"
|
||||||
|
"* yes\n"
|
||||||
|
"\n"
|
||||||
|
"In many cases, these may have a lower "
|
||||||
|
"performance overhead than the posix command "
|
||||||
|
"line utility with the same name. This is "
|
||||||
|
"because these tools avoid the need for a full "
|
||||||
|
"subprocess call. Additionally, these tools are "
|
||||||
|
"cross-platform.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"direnv": Xontrib(
|
||||||
|
url="https://github.com/74th/xonsh-direnv",
|
||||||
|
description="Supports direnv.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-direnv",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xonsh-direnv"},
|
||||||
|
url="https://github.com/74th/xonsh-direnv",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"distributed": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="The distributed parallel computing library "
|
||||||
|
"hooks for xonsh. Importantly this provides a "
|
||||||
|
"substitute 'dworker' command which enables "
|
||||||
|
"distributed workers to have access to xonsh "
|
||||||
|
"builtins.\n"
|
||||||
|
"\n"
|
||||||
|
"Furthermore, this xontrib adds a 'DSubmitter' "
|
||||||
|
"context manager for executing a block "
|
||||||
|
"remotely. Moreover, this also adds a "
|
||||||
|
"convenience function 'dsubmit()' for creating "
|
||||||
|
"DSubmitter and Executor instances at the same "
|
||||||
|
"time. Thus users may submit distributed jobs "
|
||||||
|
"with::\n"
|
||||||
|
"\n"
|
||||||
|
" with dsubmit('127.0.0.1:8786', rtn='x') "
|
||||||
|
"as dsub:\n"
|
||||||
|
" x = $(echo I am elsewhere)\n"
|
||||||
|
"\n"
|
||||||
|
" res = dsub.future.result()\n"
|
||||||
|
" print(res)\n"
|
||||||
|
"\n"
|
||||||
|
"This is useful for long running or "
|
||||||
|
"non-blocking jobs.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"docker_tabcomplete": Xontrib(
|
||||||
|
url="https://github.com/xsteadfastx/xonsh-docker-tabcomplete",
|
||||||
|
description="Adds tabcomplete functionality to " "docker inside of xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-docker-tabcomplete",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xonsh-docker-tabcomplete"},
|
||||||
|
url="https://github.com/xsteadfastx/xonsh-docker-tabcomplete",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"free_cwd": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Windows only xontrib, to release the lock on the "
|
||||||
|
"current directory whenever the prompt is shown. "
|
||||||
|
"Enabling this will allow the other programs or "
|
||||||
|
"Windows Explorer to delete or rename the current "
|
||||||
|
"or parent directories. Internally, it is "
|
||||||
|
"accomplished by temporarily resetting CWD to the "
|
||||||
|
"root drive folder while waiting at the prompt. "
|
||||||
|
"This only works with the prompt_toolkit backend "
|
||||||
|
"and can cause cause issues if any extensions are "
|
||||||
|
"enabled that hook the prompt and relies on "
|
||||||
|
"``os.getcwd()``",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"fzf-widgets": Xontrib(
|
||||||
|
url="https://github.com/laloch/xontrib-fzf-widgets",
|
||||||
|
description="Adds some fzf widgets to your xonsh shell.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-fzf-widgets",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xontrib-fzf-widgets"},
|
||||||
|
url="https://github.com/laloch/xontrib-fzf-widgets",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"gitinfo": Xontrib(
|
||||||
|
url="https://github.com/dyuri/xontrib-gitinfo",
|
||||||
|
description="Displays git information on entering a repository "
|
||||||
|
"folder. Uses ``onefetch`` if available.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-gitinfo",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-gitinfo"},
|
||||||
|
url="https://github.com/dyuri/xontrib-gitinfo",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"hist_navigator": Xontrib(
|
||||||
|
url="https://github.com/jnoortheen/xontrib-hist-navigator",
|
||||||
|
description="Move through directory history with nextd "
|
||||||
|
"and prevd also with keybindings.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-hist-navigator",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-hist-navigator"},
|
||||||
|
url="https://github.com/jnoortheen/xontrib-hist-navigator",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"histcpy": Xontrib(
|
||||||
|
url="https://github.com/con-f-use/xontrib-histcpy",
|
||||||
|
description="Useful aliases and shortcuts for extracting links "
|
||||||
|
"and textfrom command output history and putting "
|
||||||
|
"them into the clipboard.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-histcpy",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xontrib-histcpy"},
|
||||||
|
url="https://github.com/con-f-use/xontrib-histcpy",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"jedi": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Use Jedi as xonsh's python completer.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"kitty": Xontrib(
|
||||||
|
url="https://github.com/scopatz/xontrib-kitty",
|
||||||
|
description="Xonsh hooks for the Kitty terminal emulator.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-kitty",
|
||||||
|
license="BSD-3-Clause",
|
||||||
|
install={
|
||||||
|
"conda": "conda install -c conda-forge " "xontrib-kitty",
|
||||||
|
"pip": "xpip install xontrib-kitty",
|
||||||
|
},
|
||||||
|
url="https://github.com/scopatz/xontrib-kitty",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"mpl": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Matplotlib hooks for xonsh, including the new 'mpl' "
|
||||||
|
"alias that displays the current figure on the screen.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"onepath": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-onepath",
|
||||||
|
description="When you click to a file or folder in graphical "
|
||||||
|
"OS they will be opened in associated app.The "
|
||||||
|
"xontrib-onepath brings the same logic for the "
|
||||||
|
"xonsh shell. Type the filename or pathwithout "
|
||||||
|
"preceding command and an associated action will "
|
||||||
|
"be executed. The actions are customizable.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-onepath",
|
||||||
|
license="BSD",
|
||||||
|
install={"pip": "xpip install xontrib-onepath"},
|
||||||
|
url="https://github.com/anki-code/xontrib-onepath",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"output_search": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-output-search",
|
||||||
|
description="Get identifiers, names, paths, URLs and "
|
||||||
|
"words from the previous command output and "
|
||||||
|
"use them for the next command.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-output-search",
|
||||||
|
license="BSD",
|
||||||
|
install={"pip": "xpip install xontrib-output-search"},
|
||||||
|
url="https://github.com/tokenizer/xontrib-output-search",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"pdb": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Simple built-in debugger. Runs pdb on reception of "
|
||||||
|
"SIGUSR1 signal.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"pipeliner": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-pipeliner",
|
||||||
|
description="Let your pipe lines flow thru the Python code " "in xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-pipeliner",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-pipeliner"},
|
||||||
|
url="https://github.com/anki-code/xontrib-pipeliner",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"powerline": Xontrib(
|
||||||
|
url="https://github.com/santagada/xontrib-powerline",
|
||||||
|
description="Powerline for Xonsh shell",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-powerline",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-powerline"},
|
||||||
|
url="https://github.com/santagada/xontrib-powerline",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"powerline2": Xontrib(
|
||||||
|
url="https://github.com/vaaaaanquish/xontrib-powerline2",
|
||||||
|
description="Powerline for Xonsh shell forked from "
|
||||||
|
"santagada/xontrib-powerline",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-powerline2",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-powerline2"},
|
||||||
|
url="https://github.com/vaaaaanquish/xontrib-powerline2",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"powerline_binding": Xontrib(
|
||||||
|
url="https://github.com/dyuri/xontrib-powerline-binding",
|
||||||
|
description="Uses powerline to render the xonsh " "prompt",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-powerline-binding",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-powerline-binding"},
|
||||||
|
url="https://github.com/dyuri/xontrib-powerline-binding",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"prompt_bar": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-prompt-bar",
|
||||||
|
description="An elegance bar style for prompt.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-prompt-bar",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-prompt-bar"},
|
||||||
|
url="https://github.com/anki-code/xontrib-prompt-bar",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"prompt_ret_code": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Adds return code info to the prompt",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"prompt_vi_mode": Xontrib(
|
||||||
|
url="https://github.com/t184256/xontrib-prompt-vi-mode",
|
||||||
|
description="vi-mode status formatter for xonsh prompt",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-prompt-vi-mode",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-prompt-vi-mode"},
|
||||||
|
url="https://github.com/t184256/xontrib-prompt-vi-mode",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"pyenv": Xontrib(
|
||||||
|
url="https://github.com/dyuri/xontrib-pyenv",
|
||||||
|
description="pyenv integration for xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-pyenv",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-pyenv"},
|
||||||
|
url="https://github.com/dyuri/xontrib-pyenv",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"readable-traceback": Xontrib(
|
||||||
|
url="https://github.com/6syun9/xontrib-readable-traceback",
|
||||||
|
description="Make traceback easier to see for " "xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-readable-traceback",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-readable-traceback"},
|
||||||
|
url="https://github.com/6syun9/xontrib-readable-traceback",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"schedule": Xontrib(
|
||||||
|
url="https://github.com/AstraLuma/xontrib-schedule",
|
||||||
|
description="Xonsh Task Scheduling",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-schedule",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-schedule"},
|
||||||
|
url="https://github.com/AstraLuma/xontrib-schedule",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"scrapy_tabcomplete": Xontrib(
|
||||||
|
url="https://github.com/Granitas/xonsh-scrapy-tabcomplete",
|
||||||
|
description="Adds tabcomplete functionality to " "scrapy inside of xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-scrapy-tabcomplete",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xonsh-scrapy-tabcomplete"},
|
||||||
|
url="https://github.com/Granitas/xonsh-scrapy-tabcomplete",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"sh": Xontrib(
|
||||||
|
url="https://github.com/anki-code/xontrib-sh",
|
||||||
|
description="Paste and run commands from bash, zsh, fish in xonsh "
|
||||||
|
"shell.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-sh",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-sh"},
|
||||||
|
url="https://github.com/anki-code/xontrib-sh",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"ssh_agent": Xontrib(
|
||||||
|
url="https://github.com/dyuri/xontrib-ssh-agent",
|
||||||
|
description="ssh-agent integration",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-ssh-agent",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-ssh-agent"},
|
||||||
|
url="https://github.com/dyuri/xontrib-ssh-agent",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"vox": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Python virtual environment manager for xonsh.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"vox_tabcomplete": Xontrib(
|
||||||
|
url="https://github.com/Granitosaurus/xonsh-vox-tabcomplete",
|
||||||
|
description="Adds tabcomplete functionality to vox " "inside of xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xonsh-vox-tabcomplete",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xonsh-vox-tabcomplete"},
|
||||||
|
url="https://github.com/Granitosaurus/xonsh-vox-tabcomplete",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"whole_word_jumping": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Jumping across whole words "
|
||||||
|
"(non-whitespace) with Ctrl+Left/Right. "
|
||||||
|
"Alt+Left/Right remains unmodified to "
|
||||||
|
"jump over smaller word segments. "
|
||||||
|
"Shift+Delete removes the whole word.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"xo": Xontrib(
|
||||||
|
url="https://github.com/scopatz/xo",
|
||||||
|
description="Adds an 'xo' alias to run the exofrills text editor in "
|
||||||
|
"the current Python interpreter session. This shaves "
|
||||||
|
"off a bit of the startup time when running your "
|
||||||
|
"favorite, minimal text editor.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="exofrills",
|
||||||
|
license="WTFPL",
|
||||||
|
install={
|
||||||
|
"conda": "conda install -c conda-forge xo",
|
||||||
|
"pip": "xpip install exofrills",
|
||||||
|
},
|
||||||
|
url="http://exofrills.org",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"xog": Xontrib(
|
||||||
|
url="http://xon.sh",
|
||||||
|
description="Adds a simple command to establish and print "
|
||||||
|
"temporary traceback log file.",
|
||||||
|
package=core_pkg,
|
||||||
|
),
|
||||||
|
"xpg": Xontrib(
|
||||||
|
url="https://github.com/fengttt/xsh/tree/master/py",
|
||||||
|
description="Run/plot/explain sql query for PostgreSQL.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-xpg",
|
||||||
|
license="Apache",
|
||||||
|
install={"pip": "xpip install xontrib-xpg"},
|
||||||
|
url="https://github.com/fengttt/xsh/py",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"z": Xontrib(
|
||||||
|
url="https://github.com/AstraLuma/xontrib-z",
|
||||||
|
description="Tracks your most used directories, based on 'frecency'.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-z",
|
||||||
|
license="GPLv3",
|
||||||
|
install={"pip": "xpip install xontrib-z"},
|
||||||
|
url="https://github.com/AstraLuma/xontrib-z",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
"zoxide": Xontrib(
|
||||||
|
url="https://github.com/dyuri/xontrib-zoxide",
|
||||||
|
description="Zoxide integration for xonsh.",
|
||||||
|
package=_XontribPkg(
|
||||||
|
name="xontrib-zoxide",
|
||||||
|
license="MIT",
|
||||||
|
install={"pip": "xpip install xontrib-zoxide"},
|
||||||
|
url="https://github.com/dyuri/xontrib-zoxide",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue