diff --git a/scripts/clippath b/scripts/clippath new file mode 100755 index 0000000..b170ae9 --- /dev/null +++ b/scripts/clippath @@ -0,0 +1,83 @@ +#! /usr/bin/env python +import pyperclip +import argparse +import sys +import logging +import pathlib +import platform + +logger = logging.getLogger(__name__) + + +def convert_to_unix(path: str, args: argparse.Namespace) -> str: + output = path + + # Switch the slashes to forward slashes + output = output.replace("\\", "/") + + # If the path starts with a drive letter, handle it + if len(output) >= 2 and output[1] == ":": + # Get the drive letter + drive_letter = output[0] + + # Strip the front of the path + output = output[2:] + + # Add the mount point + output = f"{args.drive_letter_mount}/{drive_letter}{output}" + + return output + + +def convert_to_windows(path: str, args: argparse.Namespace) -> str: + output = path + + # Flip the path separators + output = output.replace("/", "\\") + + return output + + +def main() -> int: + # Handle program arguments + ap = argparse.ArgumentParser( + prog="clippath", description="Manipulates file paths in the clipboard" + ) + ap.add_argument( + "--destination-format", "-d", help="Destination format", choices=["windows", "unix"], default="windows" + ) + ap.add_argument("--drive-letter-mount", "-m", help="Mount point for drive letters", default="/mnt") + ap.add_argument( + "-v", "--verbose", help="Enable verbose logging", action="store_true" + ) + args = ap.parse_args() + + # Configure logging + logging.basicConfig( + level=logging.DEBUG if args.verbose else logging.INFO, + format="%(levelname)s: %(message)s", + ) + + # Read from clipboard + clipboard = pyperclip.paste() + + # Convert to the desired format + if args.destination_format == "windows": + converted = convert_to_windows(clipboard, args) + elif args.destination_format == "unix": + converted = convert_to_unix(clipboard, args) + else: + logger.error("Invalid destination format") + return 1 + + # Put the new path back into the clipboard + converted = converted.replace("\n", "").strip().lstrip() + pyperclip.copy(converted) + logger.info("New path copied to clipboard") + logger.info(converted) + + return 0 + + +if __name__ == "__main__": + sys.exit(main())