84 lines
2.2 KiB
Python
Executable File
84 lines
2.2 KiB
Python
Executable File
#! /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())
|