mirror of
				https://github.com/ohmyzsh/ohmyzsh.git
				synced 2024-05-11 05:55:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			289 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
# 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.
 | 
						|
 | 
						|
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]})
 | 
						|
  fi
 | 
						|
  local list_size=${#names}
 | 
						|
  [[ $list_size -eq 0 ]] && return 1
 | 
						|
  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
 | 
						|
}
 | 
						|
 | 
						|
 |