Skip to main content

Library of the useful macroses for the xonsh shell.

Project description

Library of the useful macros for the xonsh shell.

If you like the idea click ⭐ on the repo and tweet.

Installation

To install use pip:

xpip install xontrib-macro
# or: xpip install -U git+https://github.com/anki-code/xontrib-macro

Usage

By loading the whole module - recommended for interactive usage (type macro.<Tab>):

xontrib load macro
with! macro.data.Write('/tmp/hello', replace=True):  # more macros below
    world

By importing certain macro - recommended for scripts:

from xontrib.macro.data import Write
with! Write('/tmp/hello', replace=True):  # more macros below
    world

Macros

Block (xonsh builtin)

from xonsh.contexts import Block

with! Block() as b:
    any
    text
    here

b.macro_block
# 'any\ntext\nhere\n\n'
b.lines
# ['any', 'text', 'here', '']

data.Write

Write a file from block (rich list of parameters):

from xontrib.macro.data import Write

with! Write('/tmp/t/hello.xsh', chmod=0o700, replace=True, makedir=True, format={'name': 'world'}, verbose=True):
    echo {name}
    
## Make directories: /tmp/t
## Write to file: /tmp/t/hello.xsh
## Set chmod: rw- --- ---
## Set exec:  rwx --- ---

/tmp/t/hello.xsh
# world

There is also data.Replace() macro with mode='w', replace=True, makedir=True, replace_keep='a'.

Note! There is an upstream issue described below in "Known issues" section - the first lines that begin from # will be ignored in the block. As workaround to create shebang use Write(..., shebang="#!/bin/xonsh").

data.JsonBlock

Make json block and use it as dict:

from xontrib.macro.data import JsonBlock

with! JsonBlock() as j:
    {"hello": "world"}

j['hello']
# 'world'

data.XmlBlock

Simple XML macro context manager from xonsh macro tutorial. This will return the parsed XML tree from a macro block

from xontrib.macro.data import XmlBlock

with! XmlBlock() as tree:
    <note>
      <heading>Hello world!</heading>
      <body>
        Hello!
      </body>
    </note>

type(tree)
# xml.etree.ElementTree.Element

tree.find('body').text
# '\n    Hello!\n  '

run.Once

Run the code once and save mark about it in XONSH_DATA_DIR. In the next run the code will not be executed if it was not changed. If the code will be changed it will be executed again.

Example:

from xontrib.macro.run import Once

with! Once('First install'):
    if $(which pacman):
        pacman -S vim htop
    elif $(which apt):
        apt update && apt install -y vim htop

docker.RunInDocker

from xontrib.macro.docker import RunInDocker as docker

with! docker():  # default: image='ubuntu', executor='bash'
    echo hello

# hello

docker.RunInXonshDocker

from xontrib.macro.docker import RunInXonshDocker as Doxer

with! Doxer():  # default: image='xonsh/xonsh:slim', executor='/usr/local/bin/xonsh'
   echo Installing...
   pip install -U -q pip lolcat
   echo "We are in docker container now!" | lolcat
   
# We are in docker container now! (colorized)

This is the same as:

docker run -it --rm xonsh/xonsh:slim xonsh -c @("""
pip install -U -q pip lolcat
echo "We are in docker container now!" | lolcat
""")

Known issues

Context Manager Macro picks up comments from outside the block and ignore the initial comments in the block (4207). We can fix it in the xontrib by checking the indentation in the beginning line and the end line. PR is welcome!

Credits

This package was created with xontrib cookiecutter template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xontrib-macro-0.3.5.tar.gz (9.3 kB view details)

Uploaded Source

Built Distribution

xontrib_macro-0.3.5-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file xontrib-macro-0.3.5.tar.gz.

File metadata

  • Download URL: xontrib-macro-0.3.5.tar.gz
  • Upload date:
  • Size: 9.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for xontrib-macro-0.3.5.tar.gz
Algorithm Hash digest
SHA256 7a2e8a64002bbf513f23bee3b3800e2ae367e1a133176012cd7f220687ab95c3
MD5 c8e75d5cf5f5540fb9a0b91ee9a729bd
BLAKE2b-256 d5885addf328bb0b3e3b8409563429c2f321952880cf304b16444556568878d9

See more details on using hashes here.

File details

Details for the file xontrib_macro-0.3.5-py3-none-any.whl.

File metadata

File hashes

Hashes for xontrib_macro-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 be685affd3995e79d3d762b983aa11ddbb8611ea4d0f327d4671b66bcbea3e7d
MD5 6211eb01e7bffd9796c43e32de98548b
BLAKE2b-256 fa95a29001fcfa0edf0576f7a378f73baa3e8892ee752cfb16683237b8706ce3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page