IMHO the following is about the only one that's tasteful in terms of project scope and not going off the deep end: https://github.com/hauntsaninja/pyp
IMHO the following is about the only one that's tasteful in terms of project scope and not going off the deep end: https://github.com/hauntsaninja/pyp
I made something similar myself, pyxargs [1], which doesn't have all the magic of pyp, but although being geared towards more xargs like usage, it also functions somewhat similarly.
For example, although not as clean as the magic variables x, l or line, you can use '{}'
ls | pyp 'x[:3]' == ls | pyxargs --pyev "'{}'[:3]"
Overall the syntax of pyp looks much better, and the --explain feature is nice since pyp seems to do a little more for you under the hood (the closest pyxargs equivalent being --dry-run). I think I'll start using pyp myself when not running commands over multiple directories of files or in parallel.But yeah I didn't know either existed and I wish I did, seems like it could be really useful in the shell
I didn't really highlight it in the documentation but it can also run commands in parallel as multiple windows in a multiplexer so it's easier to checkup on their progress or interact with them.
I like that you support the scripting use case with vanilla Python syntax. That's something that made Xonsh a non-starter for me (I'm not going to write scripts when syntax highlighting and auto-formatting don't work because it's a superset of valid Python syntax).
Evidently my definition of "going off the deep end" here is giving up lots of working tooling and integrations.
Lately I've been finding it useful to write bash scripts with some marcel, e.g.
#!/bin/bash
echo ...
pushd ...
marcel <<EOF
...
EOF"Saving streams" is killer. I've been "meaning to build something to solve that" for a looong time. :) :) But you did. Thanks!!
https://www.marceltheshell.org/saving-and-recalling-streams
-----
One feature request to think about if it doesn't exist: defining multiline functions right at the prompt, which you later export to a .py file. So I think a decent inline editor with support for arrow keys might be useful. https://www.marceltheshell.org/functions-1
This is not a showstopper obviously. The current 'import' functionality should be enough for me for now.
Why inline vs. shelling out a dedicated editor: because replacing the screen will take me out of flow because I frequently refer to previous commands' output on the terminal when constructing/editing the next command.
Multiline functions can be defined right now:
M 0.18.3 jao@loon ~$ f = (lambda: \
M +$ lambda x, y: x + y \
M +$ )
M 0.18.3 jao@loon ~$ (f(3,4))
7
So all that would be needed is a way to dump them into a file. That should be doable with
another function.One thing to note: You have choices beyond inline and imports for defining new functions. There is a startup file, typically in ~/.config/marcel/startup.py. You can define functions in there, or do imports. The REPL loop checks for modifications to that file, so if you change it, you pick up the changes for your next command.
For example, I just put this into my startup file:
def hello(x):
return f'Hello {x}'
and then without restarting marcel: M 0.18.3 jao@loon ~$ (hello('world'))
Hello world