[qutebrowser] Add untrack-url script by @AndreSouzaAbreu
This commit is contained in:
parent
8d5ad7b8de
commit
6dd3cced83
|
@ -27,8 +27,9 @@ c.hints.chars = "qwertasdfyxcv"
|
|||
c.hints.min_chars = 1
|
||||
|
||||
config.bind(',grl', 'greasemonkey-reload')
|
||||
config.bind(',ut', 'hint links spawn -u untrack-url -O {hint-url}')
|
||||
config.bind(',uT', 'spawn -u untrack-url -p {clipboard}')
|
||||
config.bind(',uu', 'spawn -u untrack-url -O {url}')
|
||||
config.bind(',uf', 'hint links spawn -u untrack-url -O {hint-url}')
|
||||
config.bind(',up', 'spawn -u untrack-url -p {clipboard}')
|
||||
|
||||
config.bind(',vu', 'spawn umpv {url}')
|
||||
config.bind(',vf', 'hint links spawn umpv {hint-url}')
|
||||
|
|
|
@ -0,0 +1,200 @@
|
|||
#!/usr/bin/env python
|
||||
# by @AndreSouzaAbreu
|
||||
|
||||
import subprocess
|
||||
import random
|
||||
import sys
|
||||
import os
|
||||
|
||||
DEST_DOMAINS = {
|
||||
"nitter": [
|
||||
"nitter.net",
|
||||
"nitter.42l.fr",
|
||||
"nitter.pussthecat.org",
|
||||
"nitter.nixnet.services",
|
||||
"nitter.fdn.fr",
|
||||
"nitter.1d4.us",
|
||||
"nitter.kavin.rocks",
|
||||
"nitter.vxempire.xyz",
|
||||
"nitter.unixfox.eu",
|
||||
"nitter.domain.glass",
|
||||
"nitter.eu",
|
||||
"nitter.ethibox.fr",
|
||||
"nitter.namazso.eu",
|
||||
"nitter.mailstation.de",
|
||||
"nitter.actionsack.com",
|
||||
"nitter.cattube.org",
|
||||
"nitter.40two.app",
|
||||
"nitter.skrep.in",
|
||||
"nitter.hu",
|
||||
"nitter.database.red",
|
||||
"nitter.exonip.de",
|
||||
"nitter.dark.fail",
|
||||
"nitter.moomoo.me",
|
||||
"nitter.ortion.xyz",
|
||||
],
|
||||
"invidious": [
|
||||
"yewtu.be",
|
||||
"invidious.snopyta.org",
|
||||
"invidious.kavin.rocks",
|
||||
"invidious.silkky.cloud",
|
||||
"invidious.048596.xyz",
|
||||
"invidious.exonip.de"
|
||||
"ytprivate.com",
|
||||
],
|
||||
"teddit": [
|
||||
"teddit.net",
|
||||
"teddit.ggc-project.de",
|
||||
"teddit.kavin.rocks",
|
||||
"teddit.zaggy.nl",
|
||||
"teddit.namazso.eu",
|
||||
"teddit.nautolan.racing",
|
||||
"teddit.tinfoil-hat.net",
|
||||
"teddit.domain.glass",
|
||||
"snoo.ioens.is"
|
||||
],
|
||||
"bibliogram": [
|
||||
"bibliogram.art",
|
||||
"bibliogram.snopyta.org",
|
||||
"bibliogram.pussthecat.org",
|
||||
"bibliogram.nixnet.services",
|
||||
"bibliogram.ethibox.fr",
|
||||
"insta.trom.tf",
|
||||
"bibliogram.hamster.dance",
|
||||
"bib.actionsack.com",
|
||||
],
|
||||
"openstreetmap": [
|
||||
"www.openstreetmap.org",
|
||||
]
|
||||
}
|
||||
|
||||
SRC_DOMAINS = {
|
||||
"youtube": [
|
||||
"www.youtube.com",
|
||||
"m.youtube.com",
|
||||
"youtube.com",
|
||||
"youtu.be",
|
||||
],
|
||||
"twitter" : [
|
||||
"mobile.twitter.com",
|
||||
"twitter.com",
|
||||
],
|
||||
"instagram": [
|
||||
"www.instagram.com",
|
||||
"instagram.com",
|
||||
],
|
||||
"reddit": [
|
||||
"www.reddit.com",
|
||||
"reddit.com",
|
||||
],
|
||||
"googlemaps": [
|
||||
"maps.google.com",
|
||||
]
|
||||
}
|
||||
|
||||
SRC_TO_DEST = {
|
||||
"googlemaps": "openstreetmaps",
|
||||
"instagram": "bibliogram",
|
||||
"reddit": "teddit",
|
||||
"twitter": "nitter",
|
||||
"youtube": "invidious",
|
||||
}
|
||||
|
||||
DEST_TO_SRC = {
|
||||
dest: src for src,dest in SRC_TO_DEST.items()
|
||||
}
|
||||
|
||||
ROFI_CMD="rofi -dmenu -p 'Pick up a instance' -location 2"
|
||||
DMENU_CMD="dmenu"
|
||||
|
||||
def src2dest(src):
|
||||
return SRC_TO_DEST[src]
|
||||
|
||||
def dest2src(dest):
|
||||
return DEST_TO_SRC[dest]
|
||||
|
||||
def get_dest_type(url):
|
||||
for src in SRC_TO_DEST:
|
||||
for domain in SRC_DOMAINS[src]:
|
||||
if domain in url:
|
||||
return src2dest(src)
|
||||
return ""
|
||||
|
||||
def get_untracked_url(url, dest_domain, dest_type):
|
||||
src_type = dest2src(dest_type)
|
||||
src_domains = SRC_DOMAINS[src_type]
|
||||
for domain in src_domains:
|
||||
if domain in url:
|
||||
return url.replace(domain, dest_domain)
|
||||
return ""
|
||||
|
||||
def get_dest_instances(dest_type):
|
||||
return DEST_DOMAINS[dest_type]
|
||||
|
||||
def pick_instance_from_user_selection(instances, cmd_menu):
|
||||
text = "\n".join(instances)
|
||||
cmd = f'echo -e "{text}" | {cmd_menu}'
|
||||
return subprocess.getoutput(cmd)
|
||||
|
||||
def pick_default_instance(instances):
|
||||
return instances[0]
|
||||
|
||||
def pick_random_instance(instances):
|
||||
return random.choices(instances)[0]
|
||||
|
||||
def pick_instance(instances, choice, cmd):
|
||||
if (choice == "user"):
|
||||
return pick_instance_from_user_selection(instances, cmd)
|
||||
if (choice == "random"):
|
||||
return pick_random_instance(instances)
|
||||
return pick_default_instance(instances)
|
||||
|
||||
def main(args):
|
||||
url = ""
|
||||
choice = "default"
|
||||
qute_command = "open"
|
||||
cmd = ROFI_CMD
|
||||
|
||||
while (len(args) > 0):
|
||||
v = args[0]
|
||||
args.pop(0)
|
||||
if v == "-o":
|
||||
qute_command = "open"
|
||||
elif v == "-O":
|
||||
qute_command = "open -t"
|
||||
elif v == "-y":
|
||||
qute_command = "yank"
|
||||
elif v == "-Y":
|
||||
qute_command = "yank-primary"
|
||||
elif v == "-r":
|
||||
choice = "random"
|
||||
elif v == "-p":
|
||||
choice = "user"
|
||||
elif v == "-d":
|
||||
choice = "user"
|
||||
cmd = DMENU_CMD
|
||||
elif v == "-R":
|
||||
choice = "user"
|
||||
cmd = ROFI_CMD
|
||||
else:
|
||||
url = v
|
||||
|
||||
# validate stuff
|
||||
if (url == ""):
|
||||
exit(1)
|
||||
dest_type = get_dest_type(url)
|
||||
if (dest_type == ""):
|
||||
exit(1)
|
||||
|
||||
instances = get_dest_instances(dest_type)
|
||||
instance = pick_instance(instances, choice, cmd)
|
||||
untracked_url = get_untracked_url(url, instance, dest_type)
|
||||
|
||||
QUTE_FIFO = os.environ['QUTE_FIFO']
|
||||
with open(QUTE_FIFO, 'a') as qute_fifo:
|
||||
qute_command = f"{qute_command} {untracked_url}"
|
||||
qute_fifo.write(qute_command)
|
||||
|
||||
args = sys.argv
|
||||
args.pop(0) # first arg is the script's file name
|
||||
main(args)
|
Loading…
Reference in New Issue