forked from Shinonome/caelestia-cli
emoji: add fetch option
This commit is contained in:
@@ -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