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 '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 '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 '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 'wallpaper' -d 'Manage the wallpaper'
|
||||||
complete -c caelestia -n $not_seen -a 'pip' -d 'Picture in picture utilities'
|
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 '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'
|
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
|
# Pip
|
||||||
complete -c caelestia -n "$seen pip" -s 'd' -l 'daemon' -d 'Start in daemon mode'
|
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")
|
clipboard_parser.add_argument("-d", "--delete", action="store_true", help="delete from clipboard history")
|
||||||
|
|
||||||
# Create parser for emoji-picker opts
|
# 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.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
|
# Create parser for wallpaper opts
|
||||||
wallpaper_parser = command_parser.add_parser("wallpaper", help="manage the wallpaper")
|
wallpaper_parser = command_parser.add_parser("wallpaper", help="manage the wallpaper")
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from argparse import Namespace
|
from argparse import Namespace
|
||||||
|
from urllib.request import urlopen
|
||||||
|
|
||||||
from caelestia.utils.paths import cli_data_dir
|
from caelestia.utils.paths import cli_data_dir
|
||||||
|
|
||||||
@@ -11,8 +13,82 @@ class Command:
|
|||||||
self.args = args
|
self.args = args
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
emojis = (cli_data_dir / "emojis.txt").read_text()
|
if self.args.picker:
|
||||||
chosen = subprocess.check_output(
|
emojis = (cli_data_dir / "emojis.txt").read_text()
|
||||||
["fuzzel", "--dmenu", "--placeholder=Type to search emojis"], input=emojis, text=True
|
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)
|
)
|
||||||
|
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