summaryrefslogtreecommitdiff
path: root/src/caelestia/subcommands
diff options
context:
space:
mode:
Diffstat (limited to 'src/caelestia/subcommands')
-rw-r--r--src/caelestia/subcommands/emoji.py86
1 files changed, 81 insertions, 5 deletions
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))