diff --git a/_test_out.py b/_test_out.py
index f89bd5d..94711d4 100755
--- a/_test_out.py
+++ b/_test_out.py
@@ -1,4 +1,5 @@
#!/usr/bin/python
-for i in range(0, 5):
- print("\033[91mHello World!")
+for i in range(0, 10000):
+ print(f"\033[{(i % 7) + 30}mHello World!")
+ print(f"\033[{(i % 7) + 90}mHello World!")
diff --git a/src/sshare/plugin/config.py b/src/sshare/plugin/config.py
index 6df34ed..b12f099 100644
--- a/src/sshare/plugin/config.py
+++ b/src/sshare/plugin/config.py
@@ -12,6 +12,8 @@
# You should have received a copy of the GNU General Public License along with
# SSHare. If not, see .
+import argparse
+
class NoDefault: pass
def Flag(name=None, help=None):
@@ -33,6 +35,8 @@ class Argument:
self._short = None
self._long = name
+ self._is_remainder = kwargs.get("nargs", None) == argparse.REMAINDER
+
if not "default" in kwargs:
kwargs["default"] = NoDefault
kwargs["default"] = _None(kwargs["default"])
@@ -43,6 +47,8 @@ class Argument:
if self._long == None:
self._long = argument
self._kwargs["metavar"] = argument
+ if self._is_remainder:
+ self._long = self.dest()
def set_flags(self, short, long):
if short != None:
@@ -75,11 +81,13 @@ class Argument:
def add(self, arg_parser):
flags = []
- if self._short != None: flags.append(f"-{self._short}")
- if self._long != None: flags.append(f"--{self._long}")
- kwargs = self._kwargs | {
- "dest": self.dest()
- }
+ kwargs = self._kwargs
+ if self._is_remainder:
+ flags.append(self._long)
+ else:
+ if self._short != None: flags.append(f"-{self._short}")
+ if self._long != None: flags.append(f"--{self._long}")
+ kwargs["dest"] = self.dest()
arg_parser.add_argument(
*flags,
**kwargs
diff --git a/src/sshare/plugin/plugin.py b/src/sshare/plugin/plugin.py
index 558f2c2..dc413c6 100644
--- a/src/sshare/plugin/plugin.py
+++ b/src/sshare/plugin/plugin.py
@@ -35,6 +35,7 @@ class PluginLoader:
in ([ "command_line" ] if command_line else []) + [
"file",
"stdin",
+ "wrap_command",
"current_time",
"append_type",
"ssh",
diff --git a/src/sshare/plugins/stdin.py b/src/sshare/plugins/stdin.py
index 7b219b6..d4edc64 100644
--- a/src/sshare/plugins/stdin.py
+++ b/src/sshare/plugins/stdin.py
@@ -21,7 +21,7 @@ plugin_type = "source"
activate = { "stdin" }
config = {
- "suffix": "txt"
+ "suffix": "txt",
}
args = {
"stdin": Flag(help="Upload from stdin")
diff --git a/src/sshare/plugins/wrap_command.py b/src/sshare/plugins/wrap_command.py
new file mode 100644
index 0000000..410874b
--- /dev/null
+++ b/src/sshare/plugins/wrap_command.py
@@ -0,0 +1,50 @@
+# This file is part of SSHare.
+#
+# SSHare is free software: you can redistribute it and/or modify it under the terms of
+# the GNU General Public License as published by the Free Software Foundation,
+# either version 3 of the License, or (at your option) any later version.
+#
+# SSHare is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY
+# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# SSHare. If not, see .
+
+import argparse
+import locale
+import subprocess
+
+from sshare.plugin.config import Argument
+from sshare.plugin.source import Raw
+
+plugin_type = "source"
+
+activate = { "command" }
+config = {
+ "suffix": "txt",
+}
+args = {
+ "command": Argument(
+ nargs=argparse.REMAINDER,
+ help="Upload the contents of the wrapped command",
+ )
+}
+
+def init():
+ config.command = config.command[1:]
+
+def get_source():
+ output = b""
+ with subprocess.Popen(
+ config.command,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ bufsize=0,
+ ) as process:
+ for line in process.stdout:
+ print(line.decode(locale.getpreferredencoding()), end="")
+ output += line
+
+ return Raw(config.suffix, output)