emoji: add fetch option

This commit is contained in:
2 * r + 2 * t
2025-06-23 14:11:05 +10:00
parent 5ad5e47474
commit dcd3cdc864
3 changed files with 89 additions and 7 deletions
+5 -1
View File
@@ -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'
+3 -1
View File
@@ -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")
+76
View File
@@ -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:
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))