diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-23 14:11:05 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-23 14:11:05 +1000 |
| commit | dcd3cdc8642239700bddc07846b3743013a5daec (patch) | |
| tree | 1a77b027f09f7a9236c6e4538fe7072e59f3f401 /src | |
| parent | emojis: add missing emojis (diff) | |
| download | caelestia-cli-dcd3cdc8642239700bddc07846b3743013a5daec.tar.gz caelestia-cli-dcd3cdc8642239700bddc07846b3743013a5daec.tar.bz2 caelestia-cli-dcd3cdc8642239700bddc07846b3743013a5daec.zip | |
emoji: add fetch option
Diffstat (limited to 'src')
| -rw-r--r-- | src/caelestia/parser.py | 4 | ||||
| -rw-r--r-- | src/caelestia/subcommands/emoji.py | 86 |
2 files changed, 84 insertions, 6 deletions
diff --git a/src/caelestia/parser.py b/src/caelestia/parser.py index 37ce591..ad0fd99 100644 --- a/src/caelestia/parser.py +++ b/src/caelestia/parser.py @@ -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") diff --git a/src/caelestia/subcommands/emoji.py b/src/caelestia/subcommands/emoji.py index f04b502..5e9de21 100644 --- a/src/caelestia/subcommands/emoji.py +++ b/src/caelestia/subcommands/emoji.py @@ -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)) |