Blame view

plugins/emoji/emoji.plugin.zsh 6.78 KB
dcebc9e8f   mj   Squashed 'repos/r...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  # 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.
dcebc9e8f   mj   Squashed 'repos/r...
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
  
  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
ed37aae5b   mj   Squashed 'repos/r...
256
  	names=(${=emoji_groups[$group]})
dcebc9e8f   mj   Squashed 'repos/r...
257
    fi
ed37aae5b   mj   Squashed 'repos/r...
258
259
    local list_size=${#names}
    [[ $list_size -eq 0 ]] && return 1
dcebc9e8f   mj   Squashed 'repos/r...
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
    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
  }