summaryrefslogtreecommitdiff
path: root/plugins/emoji/emoji.plugin.zsh
diff options
context:
space:
mode:
authorRobby Russell <robby@planetargon.com>2015-08-12 21:02:46 -0700
committerRobby Russell <robby@planetargon.com>2015-08-12 21:02:46 -0700
commitafc36e2710c05f031eb0b6449243881e78796de0 (patch)
tree91df0a418b679ab1e2f452f6315fbcc672500d27 /plugins/emoji/emoji.plugin.zsh
parentc45fff1f81f16a8c41a0576676642b084e727348 (diff)
parente56c8983539d8498bf52d70bd9fbe78f1a5d54ad (diff)
downloadzsh-afc36e2710c05f031eb0b6449243881e78796de0.tar.gz
zsh-afc36e2710c05f031eb0b6449243881e78796de0.tar.bz2
zsh-afc36e2710c05f031eb0b6449243881e78796de0.zip
Merge pull request #2446 from fallwith/emoji_plugin
Emoji plugin
Diffstat (limited to 'plugins/emoji/emoji.plugin.zsh')
-rw-r--r--plugins/emoji/emoji.plugin.zsh289
1 files changed, 289 insertions, 0 deletions
diff --git a/plugins/emoji/emoji.plugin.zsh b/plugins/emoji/emoji.plugin.zsh
new file mode 100644
index 000000000..a98d0b714
--- /dev/null
+++ b/plugins/emoji/emoji.plugin.zsh
@@ -0,0 +1,289 @@
+# emoji plugin
+#
+# Makes emoji support available within ZSH
+#
+# See the README for documentation.
+
+_omz_emoji_plugin_dir="${0:h}"
+
+() {
+
+local LC_ALL=en_US.UTF-8
+
+typeset -gAH emoji_groups
+typeset -gAH emoji_con
+typeset -gAH emoji2
+typeset -gAH emoji_skintone
+
+source "$_omz_emoji_plugin_dir/emoji-char-definitions.zsh"
+unset _omz_emoji_plugin_dir
+
+# These additional emoji are not in the definition file, but are useful in conjunction with it
+
+# This is a combinin character that can be placed after any other character to surround
+# it in a "keycap" symbol.
+# The digits 0-9 are already in the emoji table as keycap_digit_<N>, keycap_ten, etc.
+# It's unclear whether this should be in the $emoji array, because those characters are all ones
+# which can be displayed on their own.
+#emoji[combining_enclosing_keycap]="\U20E3"
+
+emoji[regional_indicator_symbol_letter_d_regional_indicator_symbol_letter_e]=$'\xF0\x9F\x87\xA9\xF0\x9F\x87\xAA'
+emoji[regional_indicator_symbol_letter_g_regional_indicator_symbol_letter_b]=$'\xF0\x9F\x87\xAC\xF0\x9F\x87\xA7'
+emoji[regional_indicator_symbol_letter_c_regional_indicator_symbol_letter_n]=$'\xF0\x9F\x87\xA8\xF0\x9F\x87\xB3'
+emoji[regional_indicator_symbol_letter_j_regional_indicator_symbol_letter_p]=$'\xF0\x9F\x87\xAF\xF0\x9F\x87\xB5'
+emoji[regional_indicator_symbol_letter_k_regional_indicator_symbol_letter_r]=$'\xF0\x9F\x87\xB0\xF0\x9F\x87\xB7'
+emoji[regional_indicator_symbol_letter_f_regional_indicator_symbol_letter_r]=$'\xF0\x9F\x87\xAB\xF0\x9F\x87\xB7'
+emoji[regional_indicator_symbol_letter_e_regional_indicator_symbol_letter_s]=$'\xF0\x9F\x87\xAA\xF0\x9F\x87\xB8'
+emoji[regional_indicator_symbol_letter_i_regional_indicator_symbol_letter_t]=$'\xF0\x9F\x87\xAE\xF0\x9F\x87\xB9'
+emoji[regional_indicator_symbol_letter_u_regional_indicator_symbol_letter_s]=$'\xF0\x9F\x87\xBA\xF0\x9F\x87\xB8'
+emoji[regional_indicator_symbol_letter_r_regional_indicator_symbol_letter_u]=$'\xF0\x9F\x87\xB7\xF0\x9F\x87\xBA'
+
+# Nonstandard alias names
+emoji[vulcan_salute]=$'\U1F596'
+
+
+# Emoji combining and auxiliary characters
+
+# "Variation Selectors" for controlling text vs emoji style presentation
+# These apply to the immediately preceding character
+emoji2[text_style]=$'\UFE0E'
+emoji2[emoji_style]=$'\UFE0F'
+# Joiner that indicates a single combined-form glyph (ligature) should be used
+emoji2[zero_width_joiner]=$'\U200D'
+# Skin tone modifiers
+emoji2[emoji_modifier_fitzpatrick_type_1_2]=$'\U1F3FB'
+emoji2[emoji_modifier_fitzpatrick_type_3]=$'\U1F3FC'
+emoji2[emoji_modifier_fitzpatrick_type_4]=$'\U1F3FD'
+emoji2[emoji_modifier_fitzpatrick_type_5]=$'\U1F3FE'
+emoji2[emoji_modifier_fitzpatrick_type_6]=$'\U1F3FF'
+# Various other combining characters. (Incomplete list; I selected ones that sound useful)
+emoji2[combining_enclosing_circle]=$'\U20DD'
+emoji2[combining_enclosing_square]=$'\U20DE'
+emoji2[combining_enclosing_diamond]=$'\U20DF'
+emoji2[combining_enclosing_circle_backslash]=$'\U20E0'
+emoji2[combining_enclosing_screen]=$'\U20E2'
+emoji2[combining_enclosing_keycap]=$'\U20E3'
+emoji2[combining_enclosing_upward_pointing_triangle]=$'\U20E4'
+
+# Easier access to skin tone modifiers
+emoji_skintone[1_2]=$'\U1F3FB'
+emoji_skintone[3]=$'\U1F3FC'
+emoji_skintone[4]=$'\U1F3FD'
+emoji_skintone[5]=$'\U1F3FE'
+emoji_skintone[6]=$'\U1F3FF'
+
+# Emoji groups
+# These are stored in a single associative array, $emoji_groups, to avoid cluttering up the global
+# namespace, and to allow adding additional group definitions at run time.
+# The keys are the group names, and the values are whitespace-separated lists of emoji character names.
+#
+# These extra local arrays are used to allow more convenient formatting of the source code.
+
+emoji_groups[fruits]="
+ tomato
+ aubergine
+ grapes
+ melon
+ watermelon
+ tangerine
+ banana
+ pineapple
+ red_apple
+ green_apple
+ peach
+ cherries
+ strawberry
+ lemon
+ pear
+"
+
+emoji_groups[vehicles]="
+ airplane
+ rocket
+ railway_car
+ high_speed_train
+ high_speed_train_with_bullet_nose
+ bus
+ ambulance
+ fire_engine
+ police_car
+ taxi
+ automobile
+ recreational_vehicle
+ delivery_truck
+ ship
+ speedboat
+ bicycle
+ helicopter
+ steam_locomotive
+ train
+ light_rail
+ tram
+ oncoming_bus
+ trolleybus
+ minibus
+ oncoming_police_car
+ oncoming_taxi
+ oncoming_automobile
+ articulated_lorry
+ tractor
+ monorail
+ mountain_railway
+ suspension_railway
+ mountain_cableway
+ aerial_tramway
+ rowboat
+ bicyclist
+ mountain_bicyclist
+ sailboat
+"
+
+emoji_groups[animals]="
+ snail
+ snake
+ horse
+ sheep
+ monkey
+ chicken
+ boar
+ elephant
+ octopus
+ spiral_shell
+ bug
+ ant
+ honeybee
+ lady_beetle
+ fish
+ tropical_fish
+ blowfish
+ turtle
+ hatching_chick
+ baby_chick
+ front_facing_baby_chick
+ bird
+ penguin
+ koala
+ poodle
+ bactrian_camel
+ dolphin
+ mouse_face
+ cow_face
+ tiger_face
+ rabbit_face
+ cat_face
+ dragon_face
+ spouting_whale
+ horse_face
+ monkey_face
+ dog_face
+ pig_face
+ frog_face
+ hamster_face
+ wolf_face
+ bear_face
+ panda_face
+ rat
+ mouse
+ ox
+ water_buffalo
+ cow
+ tiger
+ leopard
+ rabbit
+ cat
+ dragon
+ crocodile
+ whale
+ ram
+ goat
+ rooster
+ dog
+ pig
+ dromedary_camel
+"
+
+emoji_groups[faces]="
+ grinning_face_with_smiling_eyes
+ face_with_tears_of_joy
+ smiling_face_with_open_mouth
+ smiling_face_with_open_mouth_and_smiling_eyes
+ smiling_face_with_open_mouth_and_cold_sweat
+ smiling_face_with_open_mouth_and_tightly_closed_eyes
+ winking_face
+ smiling_face_with_smiling_eyes
+ face_savouring_delicious_food
+ relieved_face
+ smiling_face_with_heart_shaped_eyes
+ smirking_face
+ unamused_face
+ face_with_cold_sweat
+ pensive_face
+ confounded_face
+ face_throwing_a_kiss
+ kissing_face_with_closed_eyes
+ face_with_stuck_out_tongue_and_winking_eye
+ face_with_stuck_out_tongue_and_tightly_closed_eyes
+ disappointed_face
+ angry_face
+ pouting_face
+ crying_face
+ persevering_face
+ face_with_look_of_triumph
+ disappointed_but_relieved_face
+ fearful_face
+ weary_face
+ sleepy_face
+ tired_face
+ loudly_crying_face
+ face_with_open_mouth_and_cold_sweat
+ face_screaming_in_fear
+ astonished_face
+ flushed_face
+ dizzy_face
+ face_with_medical_mask
+"
+
+}
+
+# Prints a random emoji character
+#
+# random_emoji [group]
+#
+function random_emoji() {
+ local group=$1
+ local names
+ if [[ -z "$group" || "$group" == "all" ]]; then
+ names=(${(k)emoji})
+ else
+ names=(${=emoji_groups[$group_name]})
+ fi
+ local list_size=$#names
+ local random_index=$(( ( RANDOM % $list_size ) + 1 ))
+ local name=${names[$random_index]}
+ echo ${emoji[$name]}
+}
+
+# Displays a listing of emoji with their names
+#
+# display_emoji [group]
+#
+function display_emoji() {
+ local group=$1
+ local names
+ if [[ -z "$group" || "$group" == "all" ]]; then
+ names=(${(k)emoji})
+ else
+ names=(${=emoji_groups[$group]})
+ fi
+ # The extra spaces in output here are a hack for readability, since some
+ # terminals treat these emoji chars as single-width.
+ for i in $names; do
+ printf '%s ' "$emoji[$i]"
+ done
+ print
+ for i in $names; do
+ echo "${emoji[$i]} = $i"
+ done
+}
+
+