scripts: create dirty fzfsample python rewrite
This commit is contained in:
@ -1,8 +1,66 @@
|
|||||||
#!/bin/zsh
|
#!/usr/bin/python3
|
||||||
|
|
||||||
FILES=$(fd . | grep "\(wav\|mp3\)$" | sort -R)
|
import subprocess
|
||||||
if [[ $1 ]]; then
|
import argparse
|
||||||
FILES=$(echo $FILES | head -n $1)
|
import random
|
||||||
fi
|
from typing import List
|
||||||
selection=$(echo $FILES | fzf --preview "mpv --no-video {}" --preview-window=up:20%)
|
|
||||||
dragon-drop --and-exit "$selection"
|
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
prog="fzfsample", description="The dumbed down sample browser"
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument("-l", "--limit", action="store", help="limit sample count")
|
||||||
|
parser.add_argument("-i", "--ignore", action="append", help="ignore string")
|
||||||
|
parser.add_argument("-e", "--pattern", action="append", help="search for string")
|
||||||
|
parser.add_argument("-r", "--random", action="store_true", help="random order for args")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
files = subprocess.getoutput(r"fd \(wav\|mp3\)$ .").splitlines()
|
||||||
|
|
||||||
|
if args.random:
|
||||||
|
random.shuffle(files)
|
||||||
|
|
||||||
|
if args.ignore:
|
||||||
|
files = [
|
||||||
|
file
|
||||||
|
for file in files
|
||||||
|
if not any(ignore.lower() in file.lower() for ignore in args.ignore)
|
||||||
|
]
|
||||||
|
|
||||||
|
if args.pattern:
|
||||||
|
files = [
|
||||||
|
file
|
||||||
|
for file in files
|
||||||
|
if all(pattern.lower() in file.lower() for pattern in args.pattern)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
if args.limit:
|
||||||
|
files = files[: int(args.limit)]
|
||||||
|
|
||||||
|
|
||||||
|
def fzf(items: List[str]) -> str:
|
||||||
|
input = "\n".join(items)
|
||||||
|
|
||||||
|
fzf_process = subprocess.Popen(
|
||||||
|
["fzf", "--preview", "mpv --no-video {}", "--preview-window=up:20%"],
|
||||||
|
stdin=subprocess.PIPE,
|
||||||
|
stdout=subprocess.PIPE,
|
||||||
|
text=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
for item in items:
|
||||||
|
fzf_process.stdin.write(item + "\n")
|
||||||
|
|
||||||
|
fzf_process.stdin.close()
|
||||||
|
fzf_process.wait()
|
||||||
|
|
||||||
|
selected_item = fzf_process.stdout.read().strip()
|
||||||
|
|
||||||
|
return selected_item
|
||||||
|
|
||||||
|
|
||||||
|
selection = fzf(files)
|
||||||
|
if selection:
|
||||||
|
subprocess.run(["dragon-drop", "--and-exit", selection])
|
||||||
|
|||||||
Reference in New Issue
Block a user