1

Add a script for manipulating filepaths in the clipboard

This commit is contained in:
Evan Pratten 2023-12-10 13:52:44 -05:00
parent 3f7fd81ed6
commit 5cb445da49

83
scripts/clippath Executable file
View File

@ -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())