forked from Shinonome/caelestia-cli
emoji: add fetch option
This commit is contained in:
@@ -18,7 +18,7 @@ complete -c caelestia -n $not_seen -a 'scheme' -d 'Manage the colour scheme'
|
||||
complete -c caelestia -n $not_seen -a 'screenshot' -d 'Take a screenshot'
|
||||
complete -c caelestia -n $not_seen -a 'record' -d 'Start a screen recording'
|
||||
complete -c caelestia -n $not_seen -a 'clipboard' -d 'Open clipboard history'
|
||||
complete -c caelestia -n $not_seen -a 'emoji-picker' -d 'Toggle the emoji picker'
|
||||
complete -c caelestia -n $not_seen -a 'emoji' -d 'Emoji/glyph utilities'
|
||||
complete -c caelestia -n $not_seen -a 'wallpaper' -d 'Manage the wallpaper'
|
||||
complete -c caelestia -n $not_seen -a 'pip' -d 'Picture in picture utilities'
|
||||
|
||||
@@ -122,5 +122,9 @@ complete -c caelestia -n "$seen wallpaper" -s 'n' -l 'no-filter' -d 'Do not filt
|
||||
complete -c caelestia -n "$seen wallpaper" -s 't' -l 'threshold' -d 'The threshold to filter by' -r
|
||||
complete -c caelestia -n "$seen wallpaper" -s 'N' -l 'no-smart' -d 'Disable smart mode switching'
|
||||
|
||||
# Emoji
|
||||
complete -c caelestia -n "$seen emoji" -s 'p' -l 'picker' -d 'Open emoji/glyph picker'
|
||||
complete -c caelestia -n "$seen emoji" -s 'f' -l 'fetch' -d 'Fetch emoji/glyph data from remote'
|
||||
|
||||
# Pip
|
||||
complete -c caelestia -n "$seen pip" -s 'd' -l 'daemon' -d 'Start in daemon mode'
|
||||
|
||||
@@ -95,8 +95,10 @@ def parse_args() -> (argparse.ArgumentParser, argparse.Namespace):
|
||||
clipboard_parser.add_argument("-d", "--delete", action="store_true", help="delete from clipboard history")
|
||||
|
||||
# Create parser for emoji-picker opts
|
||||
emoji_parser = command_parser.add_parser("emoji-picker", help="toggle the emoji picker")
|
||||
emoji_parser = command_parser.add_parser("emoji", help="emoji/glyph utilities")
|
||||
emoji_parser.set_defaults(cls=emoji.Command)
|
||||
emoji_parser.add_argument("-p", "--picker", action="store_true", help="open the emoji/glyph picker")
|
||||
emoji_parser.add_argument("-f", "--fetch", action="store_true", help="fetch emoji/glyph data from remote")
|
||||
|
||||
# Create parser for wallpaper opts
|
||||
wallpaper_parser = command_parser.add_parser("wallpaper", help="manage the wallpaper")
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import json
|
||||
import subprocess
|
||||
from argparse import Namespace
|
||||
from urllib.request import urlopen
|
||||
|
||||
from caelestia.utils.paths import cli_data_dir
|
||||
|
||||
@@ -11,8 +13,82 @@ class Command:
|
||||
self.args = args
|
||||
|
||||
def run(self) -> None:
|
||||
emojis = (cli_data_dir / "emojis.txt").read_text()
|
||||
chosen = subprocess.check_output(
|
||||
["fuzzel", "--dmenu", "--placeholder=Type to search emojis"], input=emojis, text=True
|
||||
)
|
||||
subprocess.run(["wl-copy"], input=chosen.split()[0], text=True)
|
||||
if self.args.picker:
|
||||
emojis = (cli_data_dir / "emojis.txt").read_text()
|
||||
chosen = subprocess.check_output(
|
||||
["fuzzel", "--dmenu", "--placeholder=Type to search emojis"], input=emojis, text=True
|
||||
)
|
||||
subprocess.run(["wl-copy"], input=chosen.split()[0], text=True)
|
||||
elif self.args.fetch:
|
||||
self.fetch_emojis()
|
||||
else:
|
||||
print((cli_data_dir / "emojis.txt").read_text(), end="")
|
||||
|
||||
def fetch_emojis(self) -> None:
|
||||
data = [
|
||||
"¿? question upside down reversed spanish",
|
||||
"← left arrow",
|
||||
"↑ up arrow",
|
||||
"→ right arrow",
|
||||
"↓ down arrow",
|
||||
"←↑→↓ all directions up down left right arrows",
|
||||
"⇇ leftwards paired arrows",
|
||||
"⇉ rightwards paired arrows",
|
||||
"⇈ upwards paired arrows",
|
||||
"⇊ downwards paired arrows",
|
||||
"⬱ three leftwards arrows",
|
||||
"⇶ three rightwards arrows",
|
||||
"• dot circle separator",
|
||||
"「」 japanese quote square bracket",
|
||||
"¯\\_(ツ)_/¯ shrug idk i dont know",
|
||||
"(ง🔥ロ🔥)ง person with fire eyes eyes on fire",
|
||||
"↵ enter key return",
|
||||
"° degrees",
|
||||
"™ tm trademark",
|
||||
"® registered trademark",
|
||||
"© copyright",
|
||||
"— em dash",
|
||||
" windows super key",
|
||||
]
|
||||
|
||||
# Fetch emojis
|
||||
with urlopen(
|
||||
"https://raw.githubusercontent.com/milesj/emojibase/refs/heads/master/packages/data/en/compact.raw.json"
|
||||
) as f:
|
||||
emojis = json.load(f)
|
||||
|
||||
for emoji in emojis:
|
||||
line = [emoji["unicode"]]
|
||||
|
||||
if "emoticon" in emoji:
|
||||
if isinstance(emoji["emoticon"], str):
|
||||
line.append(emoji["emoticon"])
|
||||
else:
|
||||
line.extend(emoji["emoticon"])
|
||||
|
||||
line.append(emoji["label"])
|
||||
|
||||
if "tags" in emoji:
|
||||
line.extend(emoji["tags"])
|
||||
|
||||
data.append(" ".join(line))
|
||||
|
||||
# Fetch nerd font glyphs
|
||||
with urlopen("https://raw.githubusercontent.com/ryanoasis/nerd-fonts/refs/heads/master/glyphnames.json") as f:
|
||||
glyphs = json.load(f)
|
||||
|
||||
buckets = {}
|
||||
for name, glyph in glyphs.items():
|
||||
if name == "METADATA":
|
||||
continue
|
||||
|
||||
unicode = glyph["char"]
|
||||
if unicode not in buckets:
|
||||
buckets[unicode] = []
|
||||
buckets[unicode].append(f"nf-{name}")
|
||||
|
||||
for glyph, names in buckets.items():
|
||||
data.append(f"{glyph} {' '.join(names)}")
|
||||
|
||||
# Write to file
|
||||
(cli_data_dir / "emojis.txt").write_text("\n".join(data))
|
||||
|
||||
Reference in New Issue
Block a user