Repository: sdushantha/dotfiles Branch: master Commit: 69553b4a626c Files: 106 Total size: 754.3 KB Directory structure: gitextract_p0ok6nnr/ ├── .gitignore ├── X11/ │ ├── .Xresources │ └── .xinitrc ├── alacritty/ │ └── .config/ │ └── alacritty/ │ └── alacritty.toml ├── bin/ │ └── bin/ │ ├── applications/ │ │ └── radio │ ├── bugbounty/ │ │ ├── deadlinks │ │ └── vdp │ ├── just4fun/ │ │ ├── 10print │ │ ├── 2048 │ │ ├── bee │ │ ├── groot │ │ └── panes │ ├── keybinded/ │ │ ├── brightness/ │ │ │ ├── brightness │ │ │ ├── brightnessControl.sh │ │ │ └── restoreBrightness.sh │ │ ├── music_ctrl.sh │ │ ├── pop_mpv.sh │ │ ├── rofi_notes.sh │ │ └── vifm.py │ ├── light-theme/ │ │ └── libreoffice.sh │ └── utils/ │ ├── 0x0 │ ├── add-shadow │ ├── aperisolve │ ├── border │ ├── ce │ ├── cnf │ ├── darkmode.sh │ ├── duckmail │ ├── ew │ ├── ex │ ├── ffmpeg-wrappers/ │ │ ├── vid2 │ │ ├── vidcut │ │ └── vidmute │ ├── fwifi │ ├── gifgen │ ├── gym │ ├── h2s │ ├── kp │ ├── mmv │ ├── notes │ ├── ocr │ ├── pauseallmpv │ ├── qrshot │ ├── rofi-askpass │ ├── sk │ ├── sloc │ ├── tmpjn │ ├── tmpsh │ ├── touchpad │ ├── upld │ ├── urldecode │ ├── urlencode │ ├── webcam │ └── xcwd-helper ├── discord/ │ └── .config/ │ └── discord/ │ └── settings.json ├── dunst/ │ └── .config/ │ └── dunst/ │ └── dunstrc ├── flameshot/ │ └── .config/ │ └── flameshot/ │ └── flameshot.ini ├── gtk-2.0/ │ └── .config/ │ └── gtk-2.0/ │ └── gtkfilechooser.ini ├── gtk-3.0/ │ └── .config/ │ └── gtk-3.0/ │ ├── bookmarks │ └── settings.ini ├── i3/ │ └── .config/ │ └── i3/ │ └── config ├── mimetype/ │ ├── .config/ │ │ └── mimeapps.list │ └── .local/ │ └── share/ │ └── applications/ │ ├── browser.desktop │ ├── img.desktop │ ├── pdf.desktop │ ├── text.desktop │ └── video.desktop ├── mpv/ │ └── .config/ │ └── mpv/ │ ├── input.conf │ ├── mpv.conf │ └── scripts/ │ └── uosc.lua ├── nvim/ │ └── .config/ │ └── nvim/ │ ├── colors/ │ │ ├── idk.vim │ │ └── test.vim │ ├── init.lua │ └── lua/ │ ├── mappings.lua │ ├── options.lua │ └── plugins/ │ ├── configs/ │ │ ├── bufferline.lua │ │ └── lualine.lua │ └── init.lua ├── other/ │ └── .config/ │ └── user-dirs.dirs ├── picom/ │ └── .config/ │ └── picom/ │ └── picom.conf ├── polybar/ │ └── .config/ │ └── polybar/ │ ├── config.ini │ ├── launch.sh │ └── scripts/ │ ├── battery_widget.sh │ ├── bluetooth.sh │ ├── mic_status.sh │ ├── today.sh │ ├── vpn-ip.sh │ └── wifi_widget.sh ├── rofi/ │ └── .config/ │ └── rofi/ │ ├── config.rasi │ ├── scripts/ │ │ ├── chars.txt │ │ ├── rofi-farge.sh │ │ ├── rofi-finder.sh │ │ └── rofi-picker.sh │ └── themes/ │ ├── askpass.rasi │ ├── default.rasi │ └── run.rasi ├── vifm/ │ └── .config/ │ └── vifm/ │ ├── colors/ │ │ ├── Default.vifm │ │ └── minimal.vifm │ ├── scripts/ │ │ └── README │ ├── vifm-help.txt │ └── vifmrc ├── wget/ │ └── .config/ │ └── wgetrc └── zsh/ ├── .config/ │ └── aliases ├── .zprofile ├── .zshenv └── .zshrc ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ mpd/.config/mpd/mpd.log mpd/.config/mpd/mpdstate mpd/.config/mpd/mpd.pid mpd/.config/mpd/mpd.db nvim/.config/nvim/.netrwhist nvim/.config/nvim/tmp/* nvim/.config/nvim/plugged/* vifminfo.json token.txt battery-notify.sh packer_compiled.lua ================================================ FILE: X11/.Xresources ================================================ Xft.dpi: 120 ! These might also be useful depending on your monitor and personal preference: Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb ================================================ FILE: X11/.xinitrc ================================================ #!/bin/sh # # ~/.xinitrc # # Executed by startx (run your window manager from here) # # NOTICE: the exec commands MUST be the last command in this file. # anything after it WON'T get executed! # # Dont clutter the home directory USERXSESSION="$XDG_CACHE_HOME/X11/xsession" USERXSESSIONRC="$XDG_CACHE_HOME/X11/xsessionrc" ALTUSERXSESSION="$XDG_CACHE_HOME/X11/Xsession" ERRFILE="$XDG_CACHE_HOME/X11/xsession-errors" xrdb -merge ~/.Xresources # Set keyboard layout to Norwegian for Xorg. Seems like 'loadkeys' is not # persistant and might only affect the TTY session. Same goes with the # /etc/vconsole.conf setxkbmap -layout no -variant nodeadkeys -option caps:swapescape -option altwin:swap_lalt_lwin exec i3 --shmlog-size 0 ================================================ FILE: alacritty/.config/alacritty/alacritty.toml ================================================ [font] size = 10.4 [font.bold] family = "JetBrainsMono NerdFont" style = "Bold" [font.bold_italic] family = "JetBrainsMono NerdFont" style = "Bold Italic" [font.italic] family = "JetBrainsMono NerdFont" style = "Italic" [font.normal] family = "JetBrainsMono NerdFont" style = "Regular" [window.padding] x = 15 y = 15 ================================================ FILE: bin/bin/applications/radio ================================================ #!/usr/bin/env bash # # Siddharth Dushantha 2020 # version="1.0.0" config_file="$HOME/.config/radio/config.json" cache_dir="$HOME/.cache/radio" last_played="$cache_dir/last_played" pid_file="$cache_dir/pid" notification_icon_path="$cache_dir/icon.png" usage(){ cat << EOF radio radio -h | -l | --version radio {pause|resume} radio [STATION] Play your favorite radio station from the command line with ease Commands kill Same behavior as 'pause' pause Pause the radio. resume Resume the radio stop Same behavior as 'pause' Options -h, --help Show help -l, --list List available radio stations -n, --now-playing Show which station is playing --version Show version EOF } print_error() { printf "%b\n" "Error: $1" >&2 exit 1 } stop(){ kill -9 "$(cat "$pid_file")" 2> /dev/null # Remove the $pid_file when we stop the radio or else the script # will think that there is a "radio session" already playing rm "$pid_file" 2> /dev/null } play(){ # A very hacky form of fuzzy searching. # We list out the station names and then use grep to find the station name # which the user provided. This prevents the user from having to type out # the exact name of the station name. The reason for using 'head -n 1' is # is so that we can get the first match in case there are multiple matches. station_name=$(printf %s "$radio_stations" | jq -r keys[] | grep -i "$1" | head -n 1) if [ "$station_name" = "" ]; then notify-send "Radio" "Could not find a radio station named \"$1\"" -i "$notification_icon_path" exit 1 fi cover_art_url=$(printf %s "$radio_stations" | jq -r ".\"$station_name\".coverArtUrl") cover_art_ext=$(printf "${cover_art_url##*.}") cover_art_path="$cache_dir/$(printf %s "$station_name" | tr -d ' ').$cover_art_ext" stream_url=$(printf %s "$radio_stations" | jq -r ".\"$station_name\".streamUrl") # The cover art of the station is saved in teh cache so that we dont need # redownload it everytime the user listens to a station. [ ! -f "$cover_art_path" ] && curl -s "$cover_art_url" -o "$cover_art_path" # If the $pid_file *does not* exist, that means there is no other active radio # playing. But if it does exist, then we must kill the proccess otherwise # there would be multiple audios playing which is unpleasent. if [ -f "$pid_file" ]; then pid=$(cat "$pid_file") # We cannot just 'killall mpv' in order to stop any other radios "sessions" # from playing. This is because the user may be using mpv to view a video/image. # Thus, 'killall mpv' would also kill those proccesses. # Instead, we take the PID and get the exact command belonging to that PID. We # then check if the $streamUrl of the selected station is in the command # belonging to that PID. If so, that mean # shellcheck disable=SC2009 if ! ps -p "$pid" -o args | grep "$stream_url" > /dev/null; then stop else # The station the user specified is already being played, so there # there is nothing to do. return 0 fi fi # This is just for some extra ★bling★ # Notify the user what radio is being played along with # the appropriate cover art. notify-send "Radio" "Playing $station_name" -i "$cover_art_path" # We save the current station name in the cache so that the user can easily # play/pause the radio without having to provide the station name again when # wanting to play the same station they previoulsy listened to. printf %s "$station_name" > "$last_played" # This is where the radio is actually played mpv --no-terminal "$stream_url" & # Save the PID of the command above so that we can kill that proccess # if we need to stop the radio printf %s "$!" > "$pid_file" } play_last_played(){ if [ -f "$last_played" ]; then play "$(cat "$last_played")" else notify-send "Radio" "Couldn't find recently played station" -i "$notification_icon_path" fi } toggle(){ if [ -f "$pid_file" ]; then stop exit else play_last_played exit fi } main(){ mkdir -p "$cache_dir" [ ! -f "$config_file" ] && print_error "Couldn't find config file: $config_file" radio_stations=$(jq -r ".stations" < "$config_file") notification_icon_url=$(jq -r ".settings.notificationIconUrl" < "$config_file") [ ! -f "$notification_icon_path" ] && curl -s "$notification_icon_url" -o "$notification_icon_path" # Running this script wihtout any arguments, toggles the play/pause [ $# -eq 0 ] && toggle while [ "$1" ]; do case "$1" in --help | -h) usage exit ;; --version) echo "$version" exit ;; --list | -l) printf %s "$radio_stations" | jq -r keys[] | sed "s/^/- /g" exit ;; --now-playing | -n) notify-send "Radio" "Now playing $(cat $last_played)" -i "$notification_icon_path" exit ;; stop|kill|pause) stop exit ;; resume) play_last_played exit ;; -*) print_error "option '$1' does not exist" exit 1 ;; *) play "$@" exit ;; esac shift done } main "$@" ================================================ FILE: bin/bin/bugbounty/deadlinks ================================================ #!/usr/bin/env sh # # by Siddharth Dushantha 2021 # # A wrapper around blc[1] and subfinder[2] which finds dead links that # may be used to find broken link hijacking vulnerabilities[3] # # [1] https://github.com/stevenvachon/broken-link-checker/ # [2] https://github.com/projectdiscovery/subfinder # [3] https://gist.github.com/EdOverflow/24e0bb929169eb948bb7f3d0a2d5528f # version="1.0.0" subdomain_file="/tmp/subdomains.txt" usage(){ cat <&2 exit 1 } scan_url(){ if ! printf "%s" "$1" | grep -Eq "https:\/\/"; then print_error "URL doesn't start with 'https://'" fi blc "$1" | grep "─BROKEN─" } scan_domain(){ # Add the domain into the list so that it is also included # when we scan the subdomains for dead links. printf "%s\n" "$1" > "$subdomain_file" printf "%s\n" "Fetching all subdomains for '$1'" subfinder -d "$1" -silent >> "$subdomain_file" while read -r line; do printf "%s\n" "Scanning $line" blc "https://$line" | grep "─BROKEN─" done <"$subdomain_file" rm "$subdomain_file" } main(){ for dependency in blc subfinder; do if ! command -v "$dependency" >/dev/null 2>&1; then print_error "Could not find '$dependency', is it installed?" fi done [ $# -eq 0 ] && usage && exit while [ "$1" ]; do case "$1" in --help | -h) usage && exit ;; --domain | -d) scan_domain "$2" ;; --url| -u) scan_url "$2" ;; --version) echo "$version" && exit ;; -*) print_error "option '$1' does not exist" ;; *) usage && exit ;; esac shift done } main "$@" ================================================ FILE: bin/bin/bugbounty/vdp ================================================ #!/usr/bin/env bash # # by Siddharth Dushantha 2022 # usage(){ cat </dev/null 2>&1; then # Append to our list of missing dependencies dep_missing="$dep_missing $dependency" fi done if [ "${#dep_missing}" -gt 0 ]; then printf %s "Could not find the following dependencies: $dep_missing" exit 1 fi while [ "$1" ]; do case "$1" in --help | -h) usage && exit ;; --domain | -d) domain="$2" ;; --list | -l) list="$2" ;; --target | -t) target="$2";; --version) echo "$version" && exit ;; -*) usage ;; esac shift done if [ ! -z "$domain" ]; then target=$domain tmp_dir="$target/tmp" mkdir -p "$target" mkdir -p "$tmp_dir" # If using screen or tmux, change the name of the window to the name of the target if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then tmux rename-window -t${TMUX_PANE} "$target" fi printf %b "[\e[34mi\e[0m] Finding subdomains for $target" subfinder -d "$target" > "$tmp_dir/subdomains.txt" --silent printf %b "\e[2K\r[\e[34mi\e[0m] Found $(cat "$tmp_dir/subdomains.txt" | wc -l) subdomains on \e[34m$target\e[0m\n" # Remove duplicates sort -u "$tmp_dir/subdomains.txt" > "$tmp_dir/sorted_subdomains.txt" printf %b "[\e[34mi\e[0m] Removing dead subdomains\n" httpx -l "$tmp_dir/sorted_subdomains.txt" > "$tmp_dir/working_subdomains.txt" --silent printf %b "[\e[34mi\e[0m] Scanning vulnerabilities on $(cat "$tmp_dir/working_subdomains.txt" | wc -l) subdomains\n" nuclei -es info -list "$tmp_dir/working_subdomains.txt" -me "$target" --silent elif [ ! -z "$list" ] && [ ! -z "$target" ]; then printf %b "[\e[34mi\e[0m] Scanning for vulnerabilities" mkdir -p "$target" # If using screen or tmux, change the name of the window to the name of the target if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then tmux rename-window -t${TMUX_PANE} "$target" fi # Find vulnerabilities nuclei -es info -list "$list" -me "$target" --silent fi ================================================ FILE: bin/bin/just4fun/10print ================================================ #!/usr/bin/env python3 # Creates the famous 10print art, nothing special import random for i in range(100000):print(chr(9585+random.randint(0,1)), end="") ================================================ FILE: bin/bin/just4fun/bee ================================================ #!/usr/bin/env python BEE = """\n\033[1m \033[32m"Bee" careful \033[34m__ \033[32mwith sudo! \033[34m// \\ \\\_/ \033[33m// \033[35m''-.._.-''-.._.. \033[33m-(||)(') '''\033[0m""" print(BEE) ================================================ FILE: bin/bin/just4fun/groot ================================================  \^V//  |. .|  I AM (G)ROOT! - \ - / _  \_| |_/  \ \  __/_/__ |_______|  With great power comes great responsibility.  \ /  Use sudo wisely.  \___/  ================================================ FILE: bin/bin/just4fun/panes ================================================ #!/usr/bin/env bash # Author: GekkoP # Source: http://linuxbbq.org/bbs/viewtopic.php?f=4&t=1656#p33189 f=3 b=4 for j in f b; do for i in {0..7}; do printf -v $j$i %b "\e[${!j}${i}m" done done d=$'\e[1m' t=$'\e[0m' v=$'\e[7m' cat << EOF $f1███$d▄$t $f2███$d▄$t $f3███$d▄$t $f4███$d▄$t $f5███$d▄$t $f6███$d▄$t $f7███$d▄$t $f1███$d█$t $f2███$d█$t $f3███$d█$t $f4███$d█$t $f5███$d█$t $f6███$d█$t $f7███$d█$t $f1███$d█$t $f2███$d█$t $f3███$d█$t $f4███$d█$t $f5███$d█$t $f6███$d█$t $f7███$d█$t $d$f1 ▀▀▀ $f2▀▀▀ $f3▀▀▀ $f4▀▀▀ $f5▀▀▀ $f6▀▀▀ $f7▀▀▀ EOF ================================================ FILE: bin/bin/keybinded/brightness/brightness ================================================ 33.453367 ================================================ FILE: bin/bin/keybinded/brightness/brightnessControl.sh ================================================ #!/usr/bin/env bash # You can call this script like this: # $ ./brightnessControl.sh up # $ ./brightnessControl.sh down # Script inspired by these wonderful people: # https://github.com/dastorm/volume-notification-dunst/blob/master/volume.sh # https://gist.github.com/sebastiencs/5d7227f388d93374cebdf72e783fbd6a function get_brightness { xbacklight -get | cut -d '.' -f 1 } function send_notification { icon="preferences-system-brightness-lock" brightness=$(get_brightness) # Make the bar with the special character ─ (it's not dash -) # https://en.wikipedia.org/wiki/Box-drawing_character bar=$(seq -s "─" 0 $((brightness / 5)) | sed 's/[0-9]//g') # Send the notification dunstify -i "$icon" -r 5555 -u low " $bar" } case $1 in up) # increase the backlight by 5% xbacklight -inc 5 # We output the current brightness into a file, so that when we reboot # or restart i3wm, the brightness can be restored by running a command # that is in my i3 config xbacklight -get > $HOME/bin/keybinded/brightness/brightness send_notification ;; down) # decrease the backlight by 5% xbacklight -dec 5 xbacklight -get > $HOME/bin/keybinded/brightness/brightness send_notification ;; esac ================================================ FILE: bin/bin/keybinded/brightness/restoreBrightness.sh ================================================ #!/usr/bin/env bash # # Restore the brightness by taking the value in the file, brightness VALUE=$(cat $HOME/bin/keybinded/brightness/brightness) xbacklight -set $VALUE ================================================ FILE: bin/bin/keybinded/music_ctrl.sh ================================================ #!/usr/bin/env bash # # mpDris2 is needed _command="$1" if [ "$1" == "toggle" ]; then if [ $(playerctl status) == "Paused" ]; then _command="play" else _command="pause" fi fi playerctl --player="spotify,mpd" "$_command" ================================================ FILE: bin/bin/keybinded/pop_mpv.sh ================================================ #!/usr/bin/env bash # # Created by Siddharth Dushantha (sdushantha) # # Dependencies: xdotool, mpv, xclip, youtube-dl # # This script lets you pop almost any video from your web browser # into mpv. If you are not using a browser, then the script will # look in your clipboard to see if you have copied an url which # can be played on mpv. # # The reason I made this script was because I fed up of dragging # the url into mpv everytime I wanted to view a YouTube video # on mpv. # # ==How you can use this== # - Copy a url to a video and run the script and it will show it in mpv # - While on the webpage with the video, run the script, and the # video will be shown in mpv # # This script was tested using Firefox, so if you use another # browser, replace the value for WEB_BROSWER with the name # of your web browser (e.g Google Chrome, Opera, etc.) # Edit this with the name of your web browser WEB_BROWSER="Mozilla Firefox" # Checking if the user is currently on the web browser CURRENT=$(xdotool getwindowfocus getwindowname | grep "$WEB_BROWSER") # Get the exit code of the command above. # If the user is using a web browser, then the # exit code will be 0 STATUS=$? # If the user is using web browser... if [ $STATUS -eq 0 ];then # Then select the url bar and copy the url xdotool key ctrl+l xdotool key ctrl+c fi # Get the content from the clipboard URL=$(xclip -selection clipboard -o) notify-send "mpv" "Fetching video..." mpv $URL # Get the exit code if mpv STATUS=$? if [ $STATUS -ne 0 ];then notify-send "mpv" "Failed to fetch the video" exit fi ================================================ FILE: bin/bin/keybinded/rofi_notes.sh ================================================ #!/usr/bin/env bash # # Use rofi to select/create notes and then edit them using nvim # notes_directory="$HOME/documents/notes" note_name=$(ls ~/documents/notes | rofi -dmenu) note_path="$notes_directory/$note_name" [ -n "$note_name" ] && kitty -e nvim "$note_path" ================================================ FILE: bin/bin/keybinded/vifm.py ================================================ #!/usr/bin/env python import sys import subprocess import i3ipc import os i3 = i3ipc.Connection() def on(i3, e): e.container.command('floating enable') e.container.command("resize set 748 px 460 px, move window to position 347 px 230 px") sys.exit(0) os.popen("kitty -e /home/siddharth/bin/utils/vifmrun") i3.on('window::new', on) try: i3.main() finally: i3.main_quit() ================================================ FILE: bin/bin/light-theme/libreoffice.sh ================================================ #!/usr/bin/env bash # # This script allows me to run libreoffice with a light GTK theme. # To be able to get the light theme when launching the apps from your app # launcher, edit the .desktop file for all of the libreoffice. All you have # to do is to replace "libreoffice" with the path to this script in the exec # variable. # # Keep note, there are usually 2 "Exec" variables in each .desktop file. # # Example (diff): # - Exec=libreoffice --writer # + Exec=/path/to/this/script.sh --writer GTK_THEME="Arc" libreoffice $1 ================================================ FILE: bin/bin/utils/0x0 ================================================ #!/usr/bin/env bash URL="https://0x0.st" if [ $# -eq 0 ]; then echo "Usage: 0x0.st FILE\n" exit 1 fi FILE=$1 if [ ! -f "$FILE" ]; then echo "File ${FILE} not found" exit 1 fi RESPONSE=$(curl -s -F "file=@${FILE}" "${URL}") echo "${RESPONSE}" ================================================ FILE: bin/bin/utils/add-shadow ================================================ #!/usr/bin/env bash # This script adds a cool shadow effect to images, just like MacOS screenshots. # I usually use this for screenshots that I take with scrot # Source: https://stefanscherer.github.io/how-to-take-screenshots-with-drop-shadow/ convert "$1" \( +clone -background grey25 -shadow 80x40+5+30 \) +swap -background transparent -layers merge +repage "$1-shadow.png" ================================================ FILE: bin/bin/utils/aperisolve ================================================ #!/usr/bin/env bash HOST="https://www.aperisolve.com" ARGC=$# EXPECTED_ARGS=1 if [ $# -eq $EXPECTED_ARGS ] then P=$(realpath $1) # Get File Path Browser REPHASH=$(curl -s -F file=@$P $HOST/upload | jq .File | tr -d '"') # Upload and get hash xdg-open $HOST/$REPHASH # Open Browser else echo "[?] Usage: aperisolve " fi; ================================================ FILE: bin/bin/utils/border ================================================ #!/usr/bin/env sh # # Siddharth Dushantha # # Turn the i3wm border on/off and change the size # set_border(){ i3-msg "[class=.*] border pixel $1" > /dev/null 2>&1 } # RegEx to match integers regex="^[0-9]+$" if [ "$1" = "on" ]; then set_border 1 elif [ "$1" = "off" ]; then set_border 0 elif printf %b "$1" | grep -Eq "$regex"; then set_border $1 fi ================================================ FILE: bin/bin/utils/ce ================================================ #!/usr/bin/env bash # # This script lets me compile and execute in one go. # # Usage: ce CODE OUTPUT # # Example: # ce test.c test # code="$1" output="$2" gcc "$code" -o "$output" ./"$output" ================================================ FILE: bin/bin/utils/cnf ================================================ #!/usr/bin/env sh # # by Siddharth Dushantha 2021 # # cnf - Command Not Found # # An utility which get the previous command that returned a # command not found error and then checks if there is package # which has that command. If a package is found, then it asks # you if you want to intall it. # # !!README!! # In order for this scrip to work, create a command-not-found handler # function in your shell's config file (e.g bashrc, zshrc, etc) and put the # command below in the function: # # mkdir -p "/tmp/command_not_found" # echo -n "$1" > "/tmp/command_not_found/command" # # echo "zsh: command not found: $1" && exit 1 # # Each shell has a different command-not-found handler function name: # In the zsh its a function named command_not_found_handler[1] # In the bash its a function named command_not_found_handle[2] # # [1] https://zsh.sourceforge.io/Doc/Release/Command-Execution.html#Command-Execution # [2] https://www.gnu.org/software/bash/manual/bash.html#Command-Search-and-Execution # command_name=$(cat "/tmp/command_not_found/command") # Fetch the package name which contains the file /usr/bin/COMMAND package_name=$(pacman -Fq "/usr/bin/$command_name" | head) # If no package is found output the error message which ZSH shows by default if [ -z "$package_name" ]; then printf "%b\n" "Couldn't find the package containing the '\e[1m$command_name\e[0m' command" exit 1 fi # Notify user and ask whether or not they want to install the package printf "%b\n" "Command '\e[1m$command_name\e[0m' not found, but was found in the '\e[1m$package_name\e[0m' package." read -p "Would you like to install it? [Y/n] " -N1 confirm # Just adding a few blank lines so that things look clean printf "%b" "\n\n" if printf %s "$confirm" | grep -Eq "[yY]"; then sudo pacman -S "$package_name" fi ================================================ FILE: bin/bin/utils/darkmode.sh ================================================ #!/usr/bin/env sh setGTKTheme(){ # I run i3 along with GNOME services in the background, therefore # I'm able to use 'gsettings'. Change the command according to your system if [ "$1" == "light" ]; then gsettings set org.gnome.desktop.interface gtk-theme "Kali-Light" elif [ "$1" == "dark" ]; then gsettings set org.gnome.desktop.interface gtk-theme "Kali-Dark" else printf %s "Error in setGTKTheme: got invalid argument '$1'" fi } setLightMode(){ setGTKTheme light } setDarkMode(){ setGTKTheme dark } main(){ while [ "$1" ]; do case "$1" in on) setDarkMode && exit ;; off) setLightMode && exit ;; esac shift done } main "$@" ================================================ FILE: bin/bin/utils/duckmail ================================================ #!/usr/bin/env sh # # by Siddharth Dushantha 2023 # # Dependencies: jq, curl, xclip # # duckmail is a POSIX shell script that generates @duck.com email address using # Duck Duck Go's Email Protection service. # # This file contains the auth token that is needed inorder to generate a duck email address auth_token_path="$HOME/.config/duckmail/token.txt" auth_token=$(cat "$auth_token_path") # This is DuckDuckGo's logo. This image gets used as an icon for notifications thats are sent ddg_icon_path="$HOME/.config/duckmail/ddg.png" output(){ # This function show output to STDOUT or as a notification depending on whether or not # the user executes duckmail through the terminal or a program such as 'rofi' message="$1" if [ -z "$TERM" ] || [ "$TERM" = "dumb" ]; then notify-send "DuckDuckGo" "$message" --icon "$ddg_icon_path" else printf "%b\n" "$message" fi } main(){ # Iterate of the array of dependencies and check if the user has them installed. # # dep_missing allows us to keep track of how many dependencies the user is missing # and then print out the missing dependencies once the checking is done. dep_missing="" for dependency in jq curl xclip; do if ! command -v "$dependency" >/dev/null 2>&1; then # Append to our list of missing dependencies dep_missing="$dep_missing $dependency" fi done if [ "${#dep_missing}" -gt 0 ]; then printf %s "Could not find the following dependencies:$dep_missing" exit 1 fi # The user may provide a flag such as the ones mentioed in the list below: # --clipboard # --copy # -c # # Since they all start with one or more '-' and a 'c' we can simply check for "-{1,2}c" if printf "%b" "$1" | grep -Eq -- "-{1,2}c"; then copy_to_clipboard=true fi # Without the auth token, we're unable to genereate a @duck.com address if [ ! -f "$auth_token_path" ]; then output "Auth token file could not be found at $auth_token_path" exit 1 fi if [ -z "$auth_token" ];then output "Auth token file is empty" exit 1 fi # Using the DuckDuckGo's Email Protection service's API endpoint, we fetch the username response=$(curl -s "https://quack.duckduckgo.com/api/email/addresses" -X POST -H "Authorization: Bearer $auth_token") if printf "%b" "$response" | grep -Eq "invalid_token"; then output "Your token is invalid" exit 1 fi username=$(printf "%b" "$response" | jq -r .address) duck_address="$username@duck.com" # If $TERM is not present or is set to 'dumb', we asume the user is executing duckmail # through a program such as 'rofi'. Therefore, we much force duckmail to save the duck # adress to the clipboard as the user will be unable to copy the output sent to STDOUT if [ -z "$TERM" ] || [ "$TERM" = "dumb" ]; then copy_to_clipboard=true fi if [ "$copy_to_clipboard" = true ]; then printf "%b" "$duck_address" | xclip -sel c output "Duck address copied!" exit fi printf "%b\n" "$duck_address" } main "$@" ================================================ FILE: bin/bin/utils/ew ================================================ #!/bin/sh # # Siddharth Dushantha 2020 # # https://github.com/sdushantha/bin # # ew - Edit Which # Quickly edit the source code of a command. This is pretty much a short # cut for doing --> vim $(which mycommand) file_path=$(command -v "$1" 2>/dev/null) if [ -z "$file_path" ]; then printf "%s\n" "Error: $1 not found" exit 1 fi $EDITOR "$file_path" ================================================ FILE: bin/bin/utils/ex ================================================ #!/usr/bin/env bash # # A better way to extract archives. # I got this from the web, so credits goes to who ever wrote this. SAVEIFS=$IFS IFS="$(printf '\n\t')" extract() { if [ -z "$1" ]; then # display usage if no parameters given echo "Usage: extract ." echo " extract [path/file_name_2.ext] [path/file_name_3.ext]" else for n in "$@" do if [ -f "$n" ] ; then case "${n%,}" in *.cbt|*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar) tar xvf "$n" ;; *.lzma) unlzma ./"$n" ;; *.bz2) bunzip2 ./"$n" ;; *.cbr|*.rar) unrar x -ad ./"$n" ;; *.gz) gunzip ./"$n" ;; *.cbz|*.epub) unzip ./"$n" ;; *.z) uncompress ./"$n" ;; *.7z|*.apk|*.arj|*.zip|*.cab|*.cb7|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.pkg|*.rpm|*.udf|*.wim|*.xar) 7z x ./"$n" ;; *.xz) unxz ./"$n" ;; *.exe) cabextract ./"$n" ;; *.cpio) cpio -id < ./"$n" ;; *.cba|*.ace) unace x ./"$n" ;; *.zpaq) zpaq x ./"$n" ;; *.arc) arc e ./"$n" ;; *.cso) ciso 0 ./"$n" ./"$n.iso" && \ extract "$n.iso" && \rm -f "$n" ;; *) echo "extract: '$n' - unknown archive method" return 1 ;; esac else echo "'$n' - file does not exist" return 1 fi done fi } IFS=$SAVEIFS extract "$@" ================================================ FILE: bin/bin/utils/ffmpeg-wrappers/vid2 ================================================ #!/usr/bin/env bash # # Convert a video to...MP4, AVI, etc # # usage: vid2 FILE_FORMAT FILE # FILE_FORMAT="$1" FILE="$2" OUTPUT="$FILENAME.$FILE_FORMAT" FILENAME=$(basename -- "$2") FILENAME="${FILENAME%.*}" ffmpeg -hide_banner \ -i "$FILE" \ -codec copy \ "$OUTPUT" ================================================ FILE: bin/bin/utils/ffmpeg-wrappers/vidcut ================================================ #!/usr/bin/env bash # # Cut a video from timestamp x to y. # # Example: # vid-cut myvideo.mp4 00:01 00:12 output.mp4 # VIDEO="$1" FROM="$2" TO="$3" OUTPUT="$4" # This is where the actual cutting happens ffmpeg -i "$VIDEO" \ -ss "$FROM" \ -t "$TO" \ -async 1 \ "$OUTPUT" ================================================ FILE: bin/bin/utils/ffmpeg-wrappers/vidmute ================================================ #!/usr/bin/env bash # # Remove audio from a video file # # usage: vid-mute myvideo.mp4 myvideo-muted.mp4 # INPUT="$1" OUTPUT="$2" ffmpeg -i "$INPUT" \ -c copy \ -an \ "$OUTPUT" ================================================ FILE: bin/bin/utils/fwifi ================================================ #!/usr/bin/env bash has() { local verbose=false if [[ $1 == '-v' ]]; then verbose=true shift fi for c in "$@"; do c="${c%% *}" if ! command -v "$c" &> /dev/null; then [[ "$verbose" == true ]] && err "$c not found" return 1 fi done } err() { printf '\e[31m%s\e[0m\n' "$*" >&2 } die() { (( $# > 0 )) && err "$*" exit 1 } has -v nmcli fzf || die SSID=$(nmcli --color yes device wifi | fzf --ansi --height=40% --reverse --cycle --inline-info --header-lines=1 | awk '{print $2}') [[ -z "$SSID" ]] && exit echo "connecting to \"${SSID}\"..." nmcli -a device wifi connect "$SSID" ================================================ FILE: bin/bin/utils/gifgen ================================================ #!/usr/bin/env bash # Echo help/usage message show_help() { echo "gifgen 1.1.2" echo echo "Usage: gifgen [options] [input]" echo echo "Options:" echo " -o Output file [input.gif]" echo " -f Frames per second [10]" echo " -s Optimize for static background" echo " -v Display verbose output from ffmpeg" echo echo "Examples:" echo " $ gifgen video.mp4" echo " $ gifgen -o demo.gif SCM_1457.mp4" echo " $ gifgen -sf 15 screencap.mov" } # Setup defaults pid=$$ palette="/tmp/gif-palette-$pid.png" fps="10" verbosity="warning" stats_mode="full" dither="sierra2_4a" # Parse args while getopts "hi:o:f:sv" opt; do case "$opt" in h) show_help=true ;; o) output=$OPTARG ;; f) fps=$OPTARG ;; s) stats_mode="diff" dither="none" ;; v) verbosity="info" ;; esac done shift "$((OPTIND-1))" # Grab input file from end of command input=$1 # Show help and exit if we have no input [[ "$input" = "" ]] || [[ $show_help = true ]] && show_help && exit # Check for ffmpeg before encoding type ffmpeg >/dev/null 2>&1 || { echo "Error: gifgen requires ffmpeg to be installed" exit 1 } # Set output if not specified if [[ "$output" = "" ]]; then input_filename=${input##*/} output=${input_filename%.*}.gif fi echo -e "[\033[1mI\033[0m] Using video \033[1m$input\033[0m" echo -e "[\033[1mI\033[0m] Extracting frames from video" # Encode GIF ffmpeg -v "$verbosity" -i "$input" -vf "fps=$fps,palettegen=stats_mode=$stats_mode" -y "$palette" [[ "$verbosity" = "info" ]] && echo echo -e "[\033[1mI\033[0m] Encoding GIF" ffmpeg -v "$verbosity" -i "$input" -i "$palette" -lavfi "fps=$fps [x]; [x][1:v] paletteuse=dither=$dither" -y "$output" echo -e "[\033[1mI\033[0m] Saved GIF as \033[1m$output\033[0m" ================================================ FILE: bin/bin/utils/gym ================================================ #!/usr/bin/env python3 # # Siddharth Dushantha 2022 # # Check number of people at the gym # import requests import re r = requests.get("https://spicheren.no/besokstall/") html = r.text total_visits = re.findall(r"Total visits: (\d+) -->", html) print(f"Total visitors: {total_visits[0]}") ================================================ FILE: bin/bin/utils/h2s ================================================ #!/usr/bin/env sh # # by Siddharth Dushantha # # Change the HTTPS git url to a SSH git url # url=$(git config --get remote.origin.url) if [ $(echo "$url" | grep "git@github.com") ]; then printf "%s\n" "Already SSH compatible url" exit fi username_reponame=$(echo $url | cut -d "/" -f 4-5) ssh_url="git@github.com:$username_reponame" git remote set-url origin "$ssh_url" printf "Changed remote git url to SSH compatible: %s\n" "$ssh_url" ================================================ FILE: bin/bin/utils/kp ================================================ #!/usr/bin/env bash # mnemonic: [K]ill [P]rocess # show output of "ps -ef", use [tab] to select one or multiple entries # press [enter] to kill selected processes and go back to the process list. # or press [escape] to go back to the process list. Press [escape] twice to exit completely. pid=$(ps -ef | sed 1d | eval "fzf ${FZF_DEFAULT_OPTS} -m --header='Select proccess to kill'" | awk '{print $2}') if [ "x$pid" != "x" ] then echo "$pid" | xargs kill "-${1:-9}" kp fi ================================================ FILE: bin/bin/utils/mmv ================================================ #!/usr/bin/env bash set -eu # Lists the current directory's files in Vim, so you can edit it and save to rename them # USAGE: vimv [file1 file2] # https://github.com/thameera/vimv declare -r FILENAMES_FILE=$(mktemp "${TMPDIR:-/tmp}/vimv.XXX") trap '{ rm -f "${FILENAMES_FILE}" ; }' EXIT if [ $# -ne 0 ]; then src=( "$@" ) else IFS=$'\r\n' GLOBIGNORE='*' command eval 'src=($(ls))' fi for ((i=0;i<${#src[@]};++i)); do echo "${src[i]}" >> "${FILENAMES_FILE}" done ${EDITOR:-vi} "${FILENAMES_FILE}" IFS=$'\r\n' GLOBIGNORE='*' command eval 'dest=($(cat "${FILENAMES_FILE}"))' if (( ${#src[@]} != ${#dest[@]} )); then echo "WARN: Number of files changed. Did you delete a line by accident? Aborting.." >&2 exit 1 fi declare -i count=0 for ((i=0;i<${#src[@]};++i)); do if [ "${src[i]}" != "${dest[i]}" ]; then mkdir -p "$(dirname "${dest[i]}")" if git ls-files --error-unmatch "${src[i]}" > /dev/null 2>&1; then git mv --verbose "${src[i]}" "${dest[i]}" else mv --interactive --verbose "${src[i]}" "${dest[i]}" fi ((++count)) fi done echo "$count" files renamed. ================================================ FILE: bin/bin/utils/notes ================================================ #!/usr/bin/env sh notes_dir="$HOME/documents/notes" file_name=$(ls "$notes_dir" | fzf) if [ -z "$file_name" ]; then nvim -c "cd $notes_dir" else nvim ~/documents/notes/$file_name fi ================================================ FILE: bin/bin/utils/ocr ================================================ #!/usr/bin/env bash # # Siddharth Dushantha 2020 # # https://github.com/sdushantha/bin # TEXT_FILE="/tmp/ocr.txt" IMAGE_FILE="/tmp/ocr.png" # Check if the needed dependencies are installed dependencies=(tesseract maim notify-send xclip) for dependency in "${dependencies[@]}"; do type -p "$dependency" &>/dev/null || { # The reason why we are sending the error as a notification is because # user is most likely going to run this script by binding it to their # keyboard, therefor they cant see any text that is outputed using echo notify-send "ocr" "Could not find '${dependency}', is it installed?" echo "Could not find '${dependency}', is it installed?" exit 1 } done # Take screenshot by selecting the area maim -s "$IMAGE_FILE" # Get the exit code of the previous command. # So in this case, it is the screenshot command. If it did not exit with an # exit code 0, then it means the user canceled the process of taking a # screenshot by doing something like pressing the escape key STATUS=$? # If the user pressed the escape key or did something to terminate the proccess # taking a screenshot, then just exit [ $STATUS -ne 0 ] && exit 1 # Do the magic (∩^o^)⊃━☆゚.*・。゚ # Notice how I have removing the extension .txt from the file path. This is # because tesseract adds .txt to the given file path anyways. So if we were to # specify /tmp/ocr.txt as the file path, tesseract would out the text to # /tmp/ocr.txt.txt tesseract "$IMAGE_FILE" "${TEXT_FILE//\.txt/}" 2> /dev/null # Remove the new page character. # Source: https://askubuntu.com/a/1276441/782646 sed -i 's/\x0c//' "$TEXT_FILE" # Check if the text was detected by checking number # of lines in the file NUM_LINES=$(wc -l < $TEXT_FILE) if [ "$NUM_LINES" -eq 0 ]; then notify-send "ocr" "no text was detected" exit 1 fi # Copy text to clipboard xclip -selection clip < "$TEXT_FILE" # Send a notification with the text that was grabbed using OCR notify-send "ocr" "$(cat $TEXT_FILE)" # Clean up # "Always leave the area better than you found it" # - My first grade teacher rm "$TEXT_FILE" rm "$IMAGE_FILE" ================================================ FILE: bin/bin/utils/pauseallmpv ================================================ #!/usr/bin/env bash for i in /tmp/mpvsoc*; do [ -e "$i" ] || break echo '{ "command": ["set_property", "pause", true] }' | socat - "$i"; done ================================================ FILE: bin/bin/utils/qrshot ================================================ #!/usr/bin/env bash # # Siddharth Dushantha 2022 # # https://github.com/sdushantha/bin # image_file="/tmp/ocr.png" # Check if the needed dependencies are installed dependencies=(maim notify-send zbarimg xclip) for dependency in "${dependencies[@]}"; do type -p "$dependency" &>/dev/null || { # The reason why we are sending the error as a notification is because # user is most likely going to run this script by binding it to their # keyboard, therefor they cant see any text that is outputed using echo notify-send "ocr" "Could not find '${dependency}', is it installed?" echo "Could not find '${dependency}', is it installed?" exit 1 } done # Take screenshot by selecting the area maim -s "$image_file" # Get the exit code of the previous command. # So in this case, it is the screenshot command. If it did not exit with an # exit code 0, then it means the user canceled the process of taking a # screenshot by doing something like pressing the escape key status=$? # If the user pressed the escape key or did something to terminate the proccess # taking a screenshot, then just exit [ $status -ne 0 ] && exit 1 # Use zbarimg to decode the text from the QR code decoded_text=$(zbarimg "$image_file" -q --raw) if [ -z "$decoded_text" ]; then notify-send "qrshot" "no qr code was found" rm $image_file && exit 1 fi # Copy text to clipboard printf %b "$decoded_text" | xclip -selection clip # Let us know that something was decoded notify-send "qrshot" "$decoded_text" # Cleaning up the trash that was left behind rm $image_file ================================================ FILE: bin/bin/utils/rofi-askpass ================================================ #!/usr/bin/env bash rofi -dmenu\ -password\ -i\ -no-fixed-num-lines\ -p "Password:"\ -theme themes/askpass.rasi ================================================ FILE: bin/bin/utils/sk ================================================ #!/usr/bin/env bash # # Toggle screenkey # if pgrep screenkey > /dev/null 2>&1; then killall screenkey > /dev/null 2>&1 & notify-send "Screenkey" "Turned off" else screenkey \ --geometry 350x700-20+430 \ --font "JetBrains Mono Nerd Font" \ --bg-color "#101010" \ --font-color "#e9e4e4" \ --no-systray \ > /dev/null 2>&1 & notify-send "Screenkey" "Turned on" fi ================================================ FILE: bin/bin/utils/sloc ================================================ #!/bin/sh # # http://github.com/mitchweaver/bin # # count lines of code in a shellscript # ignores comments and blank lines # usage() { >&2 printf 'Usage: %s [file] or %s < [file]\n' "${0##*/}" "${0##*/}" exit 1 } if [ "$1" ] ; then case ${1#-} in h) usage ;; *) [ -f "$1" ] || usage esac printf '%s' 'SLOC: ' sed '/^\s*#/d;/^\s*$/d' "$1" | wc -l | sed 's/ //g' else printf '%s' 'SLOC: ' sed '/^\s*#/d;/^\s*$/d' | wc -l | sed 's/ //g' fi ================================================ FILE: bin/bin/utils/tmpjn ================================================ #!/usr/bin/env sh # # by Siddharth Dushantha 2020 # # tmpjn - Temporary Jupyter Notebook # nb_file_name="notebook.ipynb" cd "$(mktemp -d)" # The content of an "empty" Jupyter Notebook file. # Even though the file is not empty, Jupyter Notebook will # detect that this a Interactive Python Notebook. cat >"$nb_file_name" << EOL { "cells": [], "metadata": {}, "nbformat": 4, "nbformat_minor": 5 } EOL # Open the "empty" Notebook jupyter notebook "$nb_file_name" ================================================ FILE: bin/bin/utils/tmpsh ================================================ #!/usr/bin/env bash # # http://github.com/mitchweaver # # open a shell in a temporary dir without adding commands to history # cd "$(mktemp -d)" || exit zsh ================================================ FILE: bin/bin/utils/touchpad ================================================ #!/usr/bin/env bash # # Siddharth Dushantha 2021 # # Disable/enable the touchpad # position=$(xinput list --name-only | grep -n "Touchpad" | cut -d : -f 1) touchpad_id=$(xinput list --id-only | sed -n "$position p") touchpad_status=$(xinput list-props 12 | grep "Device Enabled" | cut -d : -f 2) if [ "$touchpad_status" -eq 1 ]; then xinput disable "$touchpad_id" notify-send "Touchpad" "Disabled touchpad" elif [ "$touchpad_status" -eq 0 ]; then xinput enable "$touchpad_id" notify-send "Touchpad" "Enabled touchpad" else notify "Touchpad" "Unknown status: $touchpad_status" fi ================================================ FILE: bin/bin/utils/upld ================================================ #!/usr/bin/env sh if [ $# -eq 0 ];then echo -e "No arguments specified.\nUsage:\n transfer \n ... | transfer ">&2 exit 1 fi if tty -s;then file="$1" file_name=$(basename "$file") if [ ! -e "$file" ];then echo "$file: No such file or directory">&2 return 1 fi if [ -d "$file" ];then file_name="$file_name.zip" , (cd "$file"&&zip -r -q - .)|curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name"|tee /dev/null, else cat "$file"|curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name"|tee /dev/null fi else file_name=$1;curl --progress-bar --upload-file "-" "https://transfer.sh/$file_name"|tee /dev/null fi ================================================ FILE: bin/bin/utils/urldecode ================================================ #!/usr/bin/env python3 import sys import urllib.parse print(urllib.parse.unquote_plus(sys.argv[1])) ================================================ FILE: bin/bin/utils/urlencode ================================================ #!/usr/bin/env python3 import sys, urllib.parse print(urllib.parse.quote_plus(sys.argv[1])) ================================================ FILE: bin/bin/utils/webcam ================================================ #!/usr/bin/env bash # # Show webcam # mpv --demuxer-lavf-format=video4linux2 \ --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:"/dev/video0" \ --profile=low-latency \ --untimed \ --vf=hflip \ --no-keepaspect-window &> /dev/null & ================================================ FILE: bin/bin/utils/xcwd-helper ================================================ #!/usr/bin/env bash # # by Siddharth Dushantha 2023 # # A script that only allows xcwd to be used for opening a terminal from certain applications. # If the current window is Discord, the xcwd will return '/usr/bin/' and that's not where we # want to open our terminal. So 'xcwd' only works properly when launching while our focused # window is a terminal such as Alacritty. Thunar used work, but no longer works. # # Example usage: # alacritty --working-directory=$(xcwd-helper) # current_dir="$(xcwd)" allowed_program_classes="Alacritty" active_window_class=$(xdotool getactivewindow getwindowclassname) if ! printf %s "$allowed_program_classes" | grep -q "$active_window_class"; then printf %s "$HOME" exit fi printf %s "$current_dir" ================================================ FILE: discord/.config/discord/settings.json ================================================ { "chromiumSwitches": {}, "IS_MAXIMIZED": false, "IS_MINIMIZED": false, "WINDOW_BOUNDS": { "x": 0, "y": 24, "width": 1536, "height": 936 }, "SKIP_HOST_UPDATE": true } ================================================ FILE: dunst/.config/dunst/dunstrc ================================================ [global] monitor = 0 # If this option is set to mouse or keyboard, the monitor option # will be ignored. follow = mouse # Geometery reference --> [{width}]x{height}[+/-{x}+/-{y}] geometry = "300x0-12+37" # Radius of the four corners of the notification corner_radius = 5 # Show how many messages are currently hidden (because of geometry). indicate_hidden = yes # Shrink window if it's smaller than the width. Will be ignored if width is 0. shrink = no # The transparency of the window. Range: [0; 100]. transparency = 0 # The height of the entire notification. If the height is smaller # than the font height and padding combined, it will be raised # to the font height and padding. notification_height = 0 # Show multiple notifications in the same box separator_height = 2 # Define a color for the separator. # possible values are: # * auto: dunst tries to find a color fitting to the background; # * foreground: use the same color as the foreground; # * frame: use the same color as the frame; # * anything else will be interpreted as a X color. separator_color = auto # Add vertical padding to the inside of the notification padding = 10 # Add horizontal padding for when the text gets long enough horizontal_padding = 10 # The frame color and width of the notification frame_width = 2 frame_color = "#333333" sort = yes # How long a user needs to be idle for sticky notifications idle_threshold = 120 # Font and typography settings font = JetBrains Mono Nerdfont 10 alignment = left word_wrap = yes # The spacing between lines. If the height is smaller than the font height, it will get raised to the font height. line_height = 0 # Allow some HTML tags like and in notifications markup = full # Format for how notifications will be displayed #format = "%s\n%b" format = "%s %p\n%b" show_age_threshold = 60 # When word_wrap is set to no, specify where to make an ellipsis in long lines. # Possible values are "start", "middle" and "end". ellipsize = middle # Ignore newlines '\n' in notifications. ignore_newline = no # Stack together notifications with the same content stack_duplicates = true # Hide the count of stacked notifications with the same content hide_duplicate_count = true # Display indicators for URLs (U) and actions (A). show_indicators = no # Align icons left/right/off icon_position = left # Scale larger icons down to this size, set to 0 to disable max_icon_size = 48 icon_path = /usr/share/icons/Paper/16x16/status/:/usr/share/icons/Paper/16x16/devices/:/usr/share/icons/Paper/16x16/apps/ sticky_history = yes history_length = 20 # Always run rule-defined scripts, even if the notification is suppressed always_run_script = true startup_notification = false force_xinerama = false ### mouse # Defines action of mouse event # Possible values are: # * none: Don't do anything. # * do_action: If the notification has exactly one action, or one is marked as default, # invoke it. If there are multiple and no default, open the context menu. # * close_current: Close current notification. # * close_all: Close all notifications. mouse_left_click = do_action mouse_middle_click = close_all mouse_right_click = close_current [urgency_low] # This urgency should be used only # for volume/brightness notification background = "#111116" foreground = "#a8a8a8" timeout = 1 icon = /dev/null [urgency_normal] background = "#111116" foreground = "#a8a8a8" timeout = 10 icon = /dev/null [urgency_critical] background = "#d64e4e" foreground = "#f0e0e0" frame_color = "#d64e4e" timeout = 0 icon = /usr/share/icons/Paper/16x16/status/dialog-warning.png [skip-rule] appname=discord skip_display=true ================================================ FILE: flameshot/.config/flameshot/flameshot.ini ================================================ [General] checkForUpdates=false contrastOpacity=102 contrastUiColor=#7c8fa3 disabledTrayIcon=true drawColor=#ff0000 drawFontSize=27 drawThickness=4 filenamePattern=%F-%H%M%S saveAfterCopy=true saveAsFileExtension=png savePath=/home/siddharth/pictures/screenshots savePathFixed=true showDesktopNotification=false showHelp=false showSidePanelButton=false showStartupLaunchMessage=false startupLaunch=false uiColor=#abc4e0 undoLimit=104 uploadHistoryMax=22 [Shortcuts] TYPE_COPY=Return ================================================ FILE: gtk-2.0/.config/gtk-2.0/gtkfilechooser.ini ================================================ [Filechooser Settings] LocationMode=path-bar ShowHidden=false ShowSizeColumn=true GeometryX=1020 GeometryY=0 GeometryWidth=840 GeometryHeight=630 SortColumn=name SortOrder=ascending StartupMode=recent ================================================ FILE: gtk-3.0/.config/gtk-3.0/bookmarks ================================================ file:///home/siddharth/documents file:///home/siddharth/downloads file:///home/siddharth/pictures file:///home/siddharth/videos file:///home/siddharth/pictures/screenshots file:///home/siddharth/projects ================================================ FILE: gtk-3.0/.config/gtk-3.0/settings.ini ================================================ [Settings] gtk-theme-name=Arc-Dark gtk-icon-theme-name=Paper gtk-font-name=Noto Sans 11 gtk-cursor-theme-name=Adwaita gtk-cursor-theme-size=0 gtk-toolbar-style=GTK_TOOLBAR_BOTH gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-button-images=1 gtk-menu-images=1 gtk-enable-event-sounds=1 gtk-enable-input-feedback-sounds=1 gtk-xft-antialias=1 gtk-xft-hinting=1 gtk-xft-hintstyle=hintfull gtk-xft-rgba=rgb ================================================ FILE: i3/.config/i3/config ================================================ # Norwegian speacial letters # Æ = ae # Ø = oslash # Å = aring # General {{{ # Define names for default workspaces for which we configure key bindings later on. # We use variables to avoid repeating the names in multiple places. set $ws1 "1" set $ws2 "2" set $ws3 "3" set $ws4 "4" set $ws5 "5" set $ws6 "6" set $ws7 "7" set $ws8 "8" set $ws9 "9" set $ws10 "10" # The pixles of the gaps gaps inner 0 gaps outer 0 smart_borders on font pango:Hack 9 #}}} # Keybindings {{{ set $mod Mod4 # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod # kill focused window bindsym $mod+q kill # change focus bindsym $mod+h focus left bindsym $mod+j focus down bindsym $mod+k focus up bindsym $mod+l focus right # move focused window bindsym $mod+Shift+h move left bindsym $mod+Shift+j move down bindsym $mod+Shift+k move up bindsym $mod+Shift+l move right # split in horizontal orientation bindsym $mod+period split h # split in vertical orientation bindsym $mod+comma split v # enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle # change container layout (tacked, tabbed, toggle split) bindsym $mod+t layout tabbed bindsym $mod+Shift+t layout splith # toggle tiling / floating bindsym $mod+Shift+space floating toggle,move absolute position center # focus the parent container bindsym $mod+a focus parent # switch to workspace bindsym $mod+1 workspace $ws1 bindsym $mod+2 workspace $ws2 bindsym $mod+3 workspace $ws3 bindsym $mod+4 workspace $ws4 bindsym $mod+5 workspace $ws5 bindsym $mod+6 workspace $ws6 bindsym $mod+7 workspace $ws7 bindsym $mod+8 workspace $ws8 bindsym $mod+9 workspace $ws9 bindsym $mod+0 workspace $ws10 # move focused container to workspace bindsym $mod+Shift+1 move container to workspace $ws1 bindsym $mod+Shift+2 move container to workspace $ws2 bindsym $mod+Shift+3 move container to workspace $ws3 bindsym $mod+Shift+4 move container to workspace $ws4 bindsym $mod+Shift+5 move container to workspace $ws5 bindsym $mod+Shift+6 move container to workspace $ws6 bindsym $mod+Shift+7 move container to workspace $ws7 bindsym $mod+Shift+8 move container to workspace $ws8 bindsym $mod+Shift+9 move container to workspace $ws9 bindsym $mod+Shift+0 move container to workspace $ws10 # Restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $mod+Shift+r restart # Exit i3 (logs you out of your X session) bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" # Resize window # Mod1 = Alt bindsym $mod+Mod1+h resize shrink width 1 px or 1 ppt bindsym $mod+Mod1+j resize grow height 1 px or 1 ppt bindsym $mod+Mod1+k resize shrink height 1 px or 1 ppt bindsym $mod+Mod1+l resize grow width 1 px or 1 ppt # Launch terminal bindsym $mod+Return exec alacritty --working-directory="$(command -v xcwd >/dev/null && xcwd | awk -F '\n' '{print $1}'|| echo $HOME)" # Launch a terminal with vifm bindsym $mod+Shift+Return exec alacritty --working-directory="$(command -v xcwd >/dev/null && xcwd | awk -F '\n' '{print $1}' || echo $HOME)" -e vifmrun # Keybindings that do things using rofi bindsym $mod+space exec --no-startup-id rofi -show drun bindsym $mod+n exec bash $HOME/bin/keybinded/rofi_notes.sh bindsym $mod+ae exec bash $HOME/bin/keybinded/rofi_todo.sh bindsym $mod+v exec rofi -modi "clipboard:greenclip print" -show clipboard -run-command '{cmd}' && xdotool key ctrl+shift+v bindsym $mod+Shift+d exec bash $HOME/.config/rofi/scripts/rofi-picker.sh bindsym $mod+o exec zsh -c "bash $HOME/.config/rofi/scripts/rofi-finder.sh $HOME" bindsym $mod+Shift+c exec bash $HOME/.config/rofi/scripts/rofi-farge.sh # Lauch my Calculator bindsym XF86Calculator exec qalculate-gtk # Volume controls bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ 0 && pactl set-sink-volume @DEFAULT_SINK@ +5% bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ 0 && pactl set-sink-volume @DEFAULT_SINK@ -5% bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle # Music control bindsym XF86AudioNext exec --no-startup-id bash $HOME/bin/keybinded/music_ctrl.sh next bindsym XF86AudioPrev exec --no-startup-id bash $HOME/bin/keybinded/music_ctrl.sh previous bindsym XF86AudioPlay exec --no-startup-id bash $HOME/bin/keybinded/music_ctrl.sh toggle bindsym XF86AudioStop exec --no-startup-id bash $HOME/bin/keybinded/music_ctrl.sh pause # Toggle mic bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute 0 toggle # Brightness control bindsym XF86MonBrightnessUp exec brightnessctl s 5%+ bindsym XF86MonBrightnessDown exec brightnessctl s 5%- # Screenshot selected area # You need to use `--release` in the binding. # See "4.3. Keyboard bindings" on i3wm docs bindsym $mod+Shift+x --release exec flameshot gui # Select color from screen and save the value to clipboard bindsym $mod+c --release exec farge --no-color-code --no-preview # Rotating the display. Keybinings taken from Windows. bindsym Control+Mod1+Up exec xrandr -o normal bindsym Control+Mod1+Down exec xrandr -o inverted bindsym Control+Mod1+Right exec xrandr -x # Hide/unhide windows. A little similar to minimizing/maximizing # windows on a DE bindsym $mod+m move scratchpad bindsym $mod+shift+m scratchpad show # Control dunst notifications bindsym Control+space exec dunstctl close #bindsym Control+Shift+space exec dunstctl all bindsym Control+Shift+period exec dunstctl context # Lock my screen bindsym $mod+x exec betterlockscreen --lock # Launch Thunar bindsym $mod+E exec thunar & #}}} # Autorun {{{ # exec -> On start-up # exec_always -> On start-up and reload exec_always --no-startup-id feh pictures/current/* --bg-fill --no-fehbg exec_always --no-startup-id picom exec_always --no-startup-id bash $HOME/bin/keybinded/brightness/restoreBrightness.sh exec_always --no-startup-id bash $HOME/.config/polybar/launch.sh exec_always --no-startup-id dunst exec_always --no-startup-id i3-auto-layout exec_always --no-startup-id flameshot exec_always --no-startup-id xfce4-power-manager exec_always --no-startup-id greenclip daemon exec_always --no-startup-id nm-applet #exec --no-startup-id /usr/lib/gsd-xsettings exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 #}}} # Window rules {{{ # Gives a border to the windows. for_window [class="^.*"] border pixel 1 # class border backgr. text indicator child_border client.focused #2c2f3e #2c2f3e #F5C2E7 #8c8c8c #8c8c8c client.focused_inactive #2c2f3e #2c2f3e #F5C2E7 #333333 #333333 client.unfocused #121317 #121317 #D9E0EE #333333 #333333 client.urgent #f28fad #f28fad #000000 #333333 #f28fad client.placeholder #333333 #333333 #000000 #333333 #333333 # Dialogs, popups, etc should be floating and in the center of the screen for_window [window_role="task_dialog"] floating enable, move absolute position center, border pixel 0 for_window [window_role="Dialog"] floating enable, move absolute position center, border pixel 0 for_window [window_role="pop-up"] floating enable, move absolute position center for_window [window_role="bubble"] floating enable, move absolute position center for_window [window_role="Preferences"] floating enable, move absolute position center for_window [window_type="dialog"] floating enable, move absolute position center, border pixel 0 for_window [window_type="menu"] floating enable, move absolute position center for_window [title="(Open File|File Upload)"] floating enable, move absolute position center for_window [class="zoom"] floating enable for_window [class="[Bb]lueberry.py"] floating enable for_window [class="mpv"] floating enable for_window [class="[qQ]alculate-gtk"] floating enable for_window [class="[Ss]imple[Ss]creen[Rr]ecorder"] floating enable for_window [class="[Gg]nome-calendar"] floating enable for_window [class="[Dd]ragon-drag-and-drop"] floating enable, border pixel 0 for_window [class="Windscribe[2]"] floating enable, border pixel 0 for_window [class="die"] floating enable for_window [class="[Xx][Cc]alc"] floating enable for_window [class="[N]sxiv"] floating enable # Prevent mouse from changing the focus focus_follows_mouse yes # Fixes graphics glitch new_window none #}}} ================================================ FILE: mimetype/.config/mimeapps.list ================================================ [Default Applications] inode/directory=thunar.desktop; text/x-shellscript=text.desktop; text/plain=text.desktop; text/x-makefile=text.desktop; image/png=img.desktop; image/jpeg=img.desktop; image/gif=img.desktop; application/pdf=pdf.desktop; video/x-matroska=video.desktop; video/mp4=video.desktop; x-scheme-handler/http=browser.desktop; x-scheme-handler/https=browser.desktop; [Added Associations] application/json=text.desktop; ================================================ FILE: mimetype/.local/share/applications/browser.desktop ================================================ [Desktop Entry] Type=Application Name=Web Browser Exec=/usr/bin/firefox %u ================================================ FILE: mimetype/.local/share/applications/img.desktop ================================================ [Desktop Entry] Type=Application Name=Image viewer Exec=/usr/bin/nsxiv -a %f ================================================ FILE: mimetype/.local/share/applications/pdf.desktop ================================================ [Desktop Entry] Type=Application Name=PDF reader Exec=/usr/bin/firefox %u ================================================ FILE: mimetype/.local/share/applications/text.desktop ================================================ [Desktop Entry] Type=Application Name=Text editor Exec=/usr/bin/alacritty -e nvim %u ================================================ FILE: mimetype/.local/share/applications/video.desktop ================================================ [Desktop Entry] Type=Application Name=Video viewer Exec=/usr/bin/mpv -quiet "%u" ================================================ FILE: mpv/.config/mpv/input.conf ================================================ # Seeking l seek 5 # Forward h seek -5 # Rewind # Volume controle j add volume -2 # Decrease volume k add volume 2 # Increase volume # Hit the space bar to play/pause SPACE cycle pause # Quit mpv q quit # Zoom in and out + add video-zoom 0.1 - add video-zoom -0.1 # Vim like keybindings to pan H add video-pan-x 0.1 # Pan left L add video-pan-x -0.1 # Pan right K add video-pan-y 0.1 # Pan up J add video-pan-y -0.1 # Pan down # Reset the panning and zooming = set video-zoom 0 ; set video-pan-x 0 ; set video-pan-y 0 # Mute/Unmute m cycle mute # Next/Prev in playlist n playlist-next p playlist-prev # Disable the arrow keys because I rather # get used to VIM keys left ignore right ignore up ignore down ignore # Rotate Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0" # Open curren file in dragon so you can drag and drop it Ctrl+o run "/bin/bash" "-c" "dragon-drag-and-drop \"${path}\"" # Copy the full path of the current file Ctrl+c run "/bin/bash" "-c" "echo $PWD/${path} | xclip -selection c && dunstify mpv \"File path copied to clipboard\"" # Copy only the name of the file Ctrl+Shift+c run "/bin/bash" "-c" "echo ${path} | xclip -selection c && dunstify mpv \"File name copied to clipboard\"" ================================================ FILE: mpv/.config/mpv/mpv.conf ================================================ # Adjusting the initial window size geometry=36% # Disable On Screen Controlers osc=no # uosc provides its own seeking/volume indicators, so you also don't need this osd-bar=no # uosc will draw its own window controls if you disable window border border=no # Enable the best hardware decoder hwdec=yes # If the current file is an image, keep # it open forever image-display-duration=inf # Loops the playlist forever loop-playlist=inf # Loop files in case of webms or gifs loop-file=inf # I honestly dont know what these lines # do, but all I know is that these lines # allow me to display images properly # source: https://git.io/fjvtn scale=spline36 cscale=spline36 dscale=mitchell dither-depth=auto correct-downscaling sigmoid-upscaling script-opts=ytdl_hook-ytdl_path=yt-dlp [extension.mp3] geometry=250x250 ================================================ FILE: mpv/.config/mpv/scripts/uosc.lua ================================================ --[[ uosc 2.16.0 - 2022-Mar-21 | https://github.com/darsain/uosc Minimalist cursor proximity based UI for MPV player. uosc replaces the default osc UI, so that has to be disabled first. Place these options into your `mpv.conf` file: ``` # required so that the 2 UIs don't fight each other osc=no # uosc provides its own seeking/volume indicators, so you also don't need this osd-bar=no # uosc will draw its own window controls if you disable window border border=no ``` Options go in `script-opts/uosc.conf`. Defaults: ``` # timeline size when fully retracted, 0 will hide it completely timeline_size_min=2 # timeline size when fully expanded, in pixels, 0 to disable timeline_size_max=40 # same as ^ but when in fullscreen timeline_size_min_fullscreen=0 timeline_size_max_fullscreen=60 # same thing as calling toggle-progress command once on startup timeline_start_hidden=no # comma separated states when timeline should always be visible. available: paused, audio timeline_persistency= # timeline opacity timeline_opacity=0.8 # top border of background color to help visually separate timeline from video timeline_border=1 # when scrolling above timeline, wheel will seek by this amount of seconds timeline_step=5 # display seekable buffered ranges for streaming videos, syntax `color:opacity`, # color is an BBGGRR hex code, set to `none` to disable timeline_cached_ranges=345433:0.5 # floating number font scale adjustment timeline_font_scale=1 # timeline chapters style: none, dots, lines, lines-top, lines-bottom chapters=dots chapters_opacity=0.3 # where to display volume controls: none, left, right volume=right volume_size=40 volume_size_fullscreen=60 volume_persistency= volume_opacity=0.8 volume_border=1 volume_step=1 volume_font_scale=1 # playback speed widget: mouse drag or wheel to change, click to reset speed=no speed_size=46 speed_size_fullscreen=68 speed_persistency= speed_opacity=1 speed_step=0.1 speed_font_scale=1 # controls all menus, such as context menu, subtitle loader/selector, etc menu_item_height=36 menu_item_height_fullscreen=50 menu_wasd_navigation=no menu_hjkl_navigation=no menu_opacity=0.8 menu_font_scale=1 # menu button widget # can be: never, bottom-bar, center menu_button=never menu_button_size=26 menu_button_size_fullscreen=30 menu_button_persistency= menu_button_opacity=1 menu_button_border=1 # top bar with window controls and media title # can be: never, no-border, always top_bar=no-border top_bar_size=40 top_bar_size_fullscreen=46 top_bar_persistency= top_bar_controls=yes top_bar_title=yes # window border drawn in no-border mode window_border_size=1 window_border_opacity=0.8 # pause video on clicks shorter than this number of milliseconds, 0 to disable pause_on_click_shorter_than=0 # flash duration in milliseconds used by `flash-{element}` commands flash_duration=1000 # distances in pixels below which elements are fully faded in/out proximity_in=40 proximity_out=120 # BBGGRR - BLUE GREEN RED hex color codes color_foreground=ffffff color_foreground_text=000000 color_background=000000 color_background_text=ffffff # use bold font weight throughout the whole UI font_bold=no # show total time instead of time remaining total_time=no # hide UI when mpv autohides the cursor autohide=no # can be: none, flash, static, manual (controlled by flash-pause-indicator and decide-pause-indicator commands) pause_indicator=flash # screen dim when stuff like menu is open, 0 to disable curtain_opacity=0.5 # sizes to list in stream quality menu stream_quality_options=4320,2160,1440,1080,720,480,360,240,144 # load first file when calling next on a last file in a directory and vice versa directory_navigation_loops=no # file types to look for when navigating media files media_types=3gp,avi,bmp,flac,flv,gif,h264,h265,jpeg,jpg,m4a,m4v,mid,midi,mkv,mov,mp3,mp4,mp4a,mp4v,mpeg,mpg,oga,ogg,ogm,ogv,opus,png,rmvb,svg,tif,tiff,wav,weba,webm,webp,wma,wmv # file types to look for when loading external subtitles subtitle_types=aqt,gsub,jss,sub,ttxt,pjs,psb,rt,smi,slt,ssf,srt,ssa,ass,usf,idx,vt # used to approximate text width # if you are using some wide font and see a lot of right side clipping in menus, # try bumping this up font_height_to_letter_width_ratio=0.5 # `chapter_ranges` lets you transform chapter indicators into range indicators. # # Chapter range definition syntax: # ``` # start_patternend_pattern # ``` # # Multiple start and end patterns can be defined by separating them with `|`: # ``` # p1|pNp1|pN # ``` # # Multiple chapter ranges can be defined by separating them with comma: # # chapter_ranges=range1,rangeN # # One of `start_pattern`s can be a custom keyword `{bof}` that will match # beginning of file when it makes sense. # # One of `end_pattern`s can be a custom keyword `{eof}` that will match end of # file when it makes sense. # # Patterns are lua patterns (http://lua-users.org/wiki/PatternsTutorial). # They only need to occur in a title, not match it completely. # Matching is case insensitive. # # `color` is a `bbggrr` hexadecimal color code. # `opacity` is a float number from 0 to 1. # # Examples: # # Display anime openings and endings as ranges: # ``` # chapter_ranges=^op| op$|opening<968638:0.5>.*, ^ed| ed$|^end|ending$<968638:0.5>.*|{eof} # ``` # # Display skippable youtube video sponsor blocks from https://github.com/po5/mpv_sponsorblock # ``` # chapter_ranges=sponsor start<3535a5:.5>sponsor end, segment start<3535a5:0.5>segment end # ``` chapter_ranges=^op| op$|opening<968638:0.5>.*, ^ed| ed$|^end|ending$<968638:0.5>.*|{eof}, sponsor start<3535a5:.5>sponsor end, segment start<3535a5:0.5>segment end ``` Available keybindings (place into `input.conf`): ``` Key script-binding uosc/peek-timeline Key script-binding uosc/toggle-progress Key script-binding uosc/flash-timeline Key script-binding uosc/flash-top-bar Key script-binding uosc/flash-volume Key script-binding uosc/flash-speed Key script-binding uosc/flash-pause-indicator Key script-binding uosc/decide-pause-indicator Key script-binding uosc/menu Key script-binding uosc/load-subtitles Key script-binding uosc/subtitles Key script-binding uosc/audio Key script-binding uosc/video Key script-binding uosc/playlist Key script-binding uosc/chapters Key script-binding uosc/stream-quality Key script-binding uosc/open-file Key script-binding uosc/next Key script-binding uosc/prev Key script-binding uosc/first Key script-binding uosc/last Key script-binding uosc/next-file Key script-binding uosc/prev-file Key script-binding uosc/first-file Key script-binding uosc/last-file Key script-binding uosc/delete-file-next Key script-binding uosc/delete-file-quit Key script-binding uosc/show-in-directory Key script-binding uosc/open-config-directory ``` ]] if mp.get_property('osc') == 'yes' then mp.msg.info('Disabled because original osc is enabled!') return end local assdraw = require('mp.assdraw') local opt = require('mp.options') local utils = require('mp.utils') local msg = require('mp.msg') local osd = mp.create_osd_overlay('ass-events') local infinity = 1e309 -- OPTIONS/CONFIG/STATE local options = { timeline_size_min = 2, timeline_size_max = 40, timeline_size_min_fullscreen = 0, timeline_size_max_fullscreen = 60, timeline_start_hidden = false, timeline_persistency = '', timeline_opacity = 0.8, timeline_border = 1, timeline_step = 5, timeline_cached_ranges = '345433:0.5', timeline_font_scale = 1, chapters = 'dots', chapters_opacity = 0.3, volume = 'right', volume_size = 40, volume_size_fullscreen = 60, volume_persistency = '', volume_opacity = 0.8, volume_border = 1, volume_step = 1, volume_font_scale = 1, speed = false, speed_size = 46, speed_size_fullscreen = 60, speed_persistency = '', speed_opacity = 1, speed_step = 0.1, speed_font_scale = 1, menu_item_height = 36, menu_item_height_fullscreen = 50, menu_wasd_navigation = false, menu_hjkl_navigation = false, menu_opacity = 0.8, menu_font_scale = 1, menu_button = 'never', menu_button_size = 26, menu_button_size_fullscreen = 30, menu_button_opacity = 1, menu_button_persistency = '', menu_button_border = 1, top_bar = 'no-border', top_bar_size = 40, top_bar_size_fullscreen = 46, top_bar_persistency = '', top_bar_controls = true, top_bar_title = true, window_border_size = 1, window_border_opacity = 0.8, pause_on_click_shorter_than = 0, flash_duration = 1000, proximity_in = 40, proximity_out = 120, color_foreground = 'ffffff', color_foreground_text = '000000', color_background = '000000', color_background_text = 'ffffff', total_time = false, font_bold = false, autohide = false, pause_indicator = 'flash', curtain_opacity = 0.5, stream_quality_options = '4320,2160,1440,1080,720,480,360,240,144', directory_navigation_loops = false, media_types = '3gp,asf,avi,bmp,flac,flv,gif,h264,h265,jpeg,jpg,m4a,m4v,mid,midi,mkv,mov,mp3,mp4,mp4a,mp4v,mpeg,mpg,oga,ogg,ogm,ogv,opus,png,rmvb,svg,tif,tiff,wav,weba,webm,webp,wma,wmv', subtitle_types = 'aqt,gsub,jss,sub,ttxt,pjs,psb,rt,smi,slt,ssf,srt,ssa,ass,usf,idx,vt', font_height_to_letter_width_ratio = 0.5, chapter_ranges = '^op| op$|opening<968638:0.5>.*, ^ed| ed$|^end|ending$<968638:0.5>.*|{eof}, sponsor start<3535a5:.5>sponsor end, segment start<3535a5:0.5>segment end', } opt.read_options(options, 'uosc') local config = { render_delay = 0.03, -- sets max rendering frequency font = mp.get_property('options/osd-font'), menu_parent_opacity = 0.4, menu_min_width = 260 } local bold_tag = options.font_bold and '\\b1' or '' local display = { width = 1280, height = 720, aspect = 1.77778, } local cursor = { hidden = true, -- true when autohidden or outside of the player window x = 0, y = 0, } local state = { os = (function() if os.getenv('windir') ~= nil then return 'windows' end local homedir = os.getenv('HOME') if homedir ~= nil and string.sub(homedir,1,6) == '/Users' then return 'macos' end return 'linux' end)(), cwd = mp.get_property('working-directory'), media_title = '', duration = nil, position = nil, pause = false, chapters = nil, chapter_ranges = nil, border = mp.get_property_native('border'), fullscreen = mp.get_property_native('fullscreen'), maximized = mp.get_property_native('window-maximized'), fullormaxed = mp.get_property_native('fullscreen') or mp.get_property_native('window-maximized'), render_timer = nil, render_last_time = 0, volume = nil, volume_max = nil, mute = nil, is_audio = nil, -- true if file is audio only (mp3, etc) cursor_autohide_timer = mp.add_timeout(mp.get_property_native('cursor-autohide') / 1000, function() if not options.autohide then return end handle_mouse_leave() end), mouse_bindings_enabled = false, cached_ranges = nil, } local forced_key_bindings -- defined at the bottom next to events -- HELPERS function round(number) local modulus = number % 1 return modulus < 0.5 and math.floor(number) or math.ceil(number) end function call_me_maybe(fn, value1, value2, value3) if fn then fn(value1, value2, value3) end end function split(str, pattern) local list = {} local full_pattern = '(.-)' .. pattern local last_end = 1 local start_index, end_index, capture = str:find(full_pattern, 1) while start_index do list[#list +1] = capture last_end = end_index + 1 start_index, end_index, capture = str:find(full_pattern, last_end) end if last_end <= (#str + 1) then capture = str:sub(last_end) list[#list +1] = capture end return list end function itable_find(haystack, needle) local is_needle = type(needle) == 'function' and needle or function(index, value) return value == needle end for index, value in ipairs(haystack) do if is_needle(index, value) then return index, value end end end function itable_filter(haystack, needle) local is_needle = type(needle) == 'function' and needle or function(index, value) return value == needle end local filtered = {} for index, value in ipairs(haystack) do if is_needle(index, value) then filtered[#filtered + 1] = value end end return filtered end function itable_remove(haystack, needle) local should_remove = type(needle) == 'function' and needle or function(value) return value == needle end local new_table = {} for _, value in ipairs(haystack) do if not should_remove(value) then new_table[#new_table + 1] = value end end return new_table end function itable_slice(haystack, start_pos, end_pos) start_pos = start_pos and start_pos or 1 end_pos = end_pos and end_pos or #haystack if end_pos < 0 then end_pos = #haystack + end_pos + 1 end if start_pos < 0 then start_pos = #haystack + start_pos + 1 end local new_table = {} for index, value in ipairs(haystack) do if index >= start_pos and index <= end_pos then new_table[#new_table + 1] = value end end return new_table end function table_copy(table) local new_table = {} for key, value in pairs(table) do new_table[key] = value end return new_table end -- Sorting comparator close to (but not exactly) how file explorers sort files local word_order_comparator = (function() local symbol_order local default_order if state.os == 'win' then symbol_order = { ['!'] = 1, ['#'] = 2, ['$'] = 3, ['%'] = 4, ['&'] = 5, ['('] = 6, [')'] = 6, [','] = 7, ['.'] = 8, ["'"] = 9, ['-'] = 10, [';'] = 11, ['@'] = 12, ['['] = 13, [']'] = 13, ['^'] = 14, ['_'] = 15, ['`'] = 16, ['{'] = 17, ['}'] = 17, ['~'] = 18, ['+'] = 19, ['='] = 20, } default_order = 21 else symbol_order = { ['`'] = 1, ['^'] = 2, ['~'] = 3, ['='] = 4, ['_'] = 5, ['-'] = 6, [','] = 7, [';'] = 8, ['!'] = 9, ["'"] = 10, ['('] = 11, [')'] = 11, ['['] = 12, [']'] = 12, ['{'] = 13, ['}'] = 14, ['@'] = 15, ['$'] = 16, ['*'] = 17, ['&'] = 18, ['%'] = 19, ['+'] = 20, ['.'] = 22, ['#'] = 23, } default_order = 21 end return function (a, b) a = a:lower() b = b:lower() for i = 1, math.max(#a, #b) do local ai = a:sub(i, i) local bi = b:sub(i, i) if ai == nil and bi then return true end if bi == nil and ai then return false end local a_order = symbol_order[ai] or default_order local b_order = symbol_order[bi] or default_order if a_order == b_order then return a < b else return a_order < b_order end end end end)() -- Creates in-between frames to animate value from `from` to `to` numbers. -- Returns function that terminates animation. -- `to` can be a function that returns target value, useful for movable targets. -- `speed` is an optional float between 1-instant and 0-infinite duration -- `callback` is called either on animation end, or when animation is canceled function tween(from, to, setter, speed, callback) if type(speed) ~= 'number' then callback = speed speed = 0.3 end local timeout local getTo = type(to) == 'function' and to or function() return to end local cutoff = math.abs(getTo() - from) * 0.01 function tick() from = from + ((getTo() - from) * speed) local is_end = math.abs(getTo() - from) <= cutoff setter(is_end and getTo() or from) request_render() if is_end then call_me_maybe(callback) else timeout:resume() end end timeout = mp.add_timeout(0.016, tick) tick() return function() timeout:kill() call_me_maybe(callback) end end -- Kills ongoing animation if one is already running on this element. -- Killed animation will not get its `on_end` called. function tween_element(element, from, to, setter, speed, callback) if type(speed) ~= 'number' then callback = speed speed = 0.3 end tween_element_stop(element) element.stop_current_animation = tween( from, to, function(value) setter(element, value) end, speed, function() element.stop_current_animation = nil call_me_maybe(callback, element) end ) end -- Stopped animation will not get its on_end called. function tween_element_is_tweening(element) return element and element.stop_current_animation end -- Stopped animation will not get its on_end called. function tween_element_stop(element) call_me_maybe(element and element.stop_current_animation) end -- Helper to automatically use an element property setter function tween_element_property(element, prop, from, to, speed, callback) tween_element(element, from, to, function(_, value) element[prop] = value end, speed, callback) end function get_point_to_rectangle_proximity(point, rect) local dx = math.max(rect.ax - point.x, 0, point.x - rect.bx + 1) local dy = math.max(rect.ay - point.y, 0, point.y - rect.by + 1) return math.sqrt(dx*dx + dy*dy); end function text_width_estimate(letters, font_size) return letters and letters * font_size * options.font_height_to_letter_width_ratio or 0 end function opacity_to_alpha(opacity) return 255 - math.ceil(255 * opacity) end function ass_opacity(opacity, fraction) fraction = fraction ~= nil and fraction or 1 if type(opacity) == 'number' then return string.format('{\\alpha&H%X&}', opacity_to_alpha(opacity * fraction)) else return string.format( '{\\1a&H%X&\\2a&H%X&\\3a&H%X&\\4a&H%X&}', opacity_to_alpha((opacity[1] or 0) * fraction), opacity_to_alpha((opacity[2] or 0) * fraction), opacity_to_alpha((opacity[3] or 0) * fraction), opacity_to_alpha((opacity[4] or 0) * fraction) ) end end -- Ensures path is absolute and normalizes slashes to the current platform function normalize_path(path) if not path or is_protocol(path) then return path end -- Ensure path is absolute if not (path:match('^/') or path:match('^%a+:') or path:match('^\\\\')) then path = utils.join_path(state.cwd, path) end -- Use proper slashes if state.os == 'windows' then return path:gsub('/', '\\') else return path:gsub('\\', '/') end end -- Check if path is a protocol, such as `http://...` function is_protocol(path) return path:match('^%a[%a%d-_]+://') end function get_extension(path) local parts = split(path, '%.') return parts and #parts > 1 and parts[#parts] or nil end -- Serializes path into its semantic parts function serialize_path(path) if not path or is_protocol(path) then return end path = normalize_path(path) local parts = split(path, '[\\/]+') if parts[#parts] == '' then table.remove(parts, #parts) end -- remove trailing separator local basename = parts and parts[#parts] or path local dirname = #parts > 1 and table.concat(itable_slice(parts, 1, #parts - 1), state.os == 'windows' and '\\' or '/') or nil local dot_split = split(basename, '%.') return { path = path:sub(-1) == ':' and state.os == 'windows' and path..'\\' or path, is_root = dirname == nil, dirname = dirname, basename = basename, filename = #dot_split > 1 and table.concat(itable_slice(dot_split, 1, #dot_split - 1), '.') or basename, extension = #dot_split > 1 and dot_split[#dot_split] or nil, } end function get_files_in_directory(directory, allowed_types) local files, error = utils.readdir(directory, 'files') if not files then msg.error('Retrieving files failed: '..(error or '')) return end -- Filter only requested file types if allowed_types then files = itable_filter(files, function(_, file) local extension = get_extension(file) return extension and itable_find(allowed_types, extension:lower()) end) end table.sort(files, word_order_comparator) return files end function get_adjacent_file(file_path, direction, allowed_types) local current_file = serialize_path(file_path) local files = get_files_in_directory(current_file.dirname, allowed_types) if not files then return end for index, file in ipairs(files) do if current_file.basename == file then if direction == 'forward' then if files[index + 1] then return utils.join_path(current_file.dirname, files[index + 1]) end if options.directory_navigation_loops and files[1] then return utils.join_path(current_file.dirname, files[1]) end else if files[index - 1] then return utils.join_path(current_file.dirname, files[index - 1]) end if options.directory_navigation_loops and files[#files] then return utils.join_path(current_file.dirname, files[#files]) end end -- This is the only file in directory return nil end end end -- Can't use `os.remove()` as it fails on paths with unicode characters. -- Returns `result, error`, result is table of `status:number(<0=error), stdout, stderr, error_string, killed_by_us:boolean` function delete_file(file_path) local args = state.os == 'windows' and {'cmd', '/C', 'del', file_path} or {'rm', file_path} return mp.command_native({name = 'subprocess', args = args, playback_only = false, capture_stdout = true, capture_stderr = true}) end -- Ensures chapters are in chronological order function get_normalized_chapters() local chapters = mp.get_property_native('chapter-list') if not chapters then return end -- Copy table chapters = itable_slice(chapters) -- Ensure chronological order of chapters table.sort(chapters, function(a, b) return a.time < b.time end) return chapters end function is_element_persistent(name) local option_name = name..'_persistency'; return (options[option_name].audio and state.is_audio) or (options[option_name].paused and state.pause) end -- Element --[[ Signature: { -- element rectangle coordinates ax = 0, ay = 0, bx = 0, by = 0, -- cursor<>element relative proximity as a 0-1 floating number -- where 0 = completely away, and 1 = touching/hovering -- so it's easy to work with and throw into equations proximity = 0, -- raw cursor<>element proximity in pixels proximity_raw = infinity, -- called when element is created ?init = function(this), -- called manually when disposing of element ?destroy = function(this), -- triggered when event happens and cursor is above element ?on_{event_name} = function(this), -- triggered when any event happens anywhere on a page ?on_global_{event_name} = function(this), -- object ?render = function(this_element), } ]] local Element = { ax = 0, ay = 0, bx = 0, by = 0, proximity = 0, proximity_raw = infinity, } Element.__index = Element function Element.new(props) local element = setmetatable(props, Element) element._eventListeners = {} -- Flash timer element._flash_out_timer = mp.add_timeout(options.flash_duration / 1000, function() local getTo = function() return element.proximity end element:tween_property('forced_proximity', 1, getTo, function() element.forced_proximity = nil end) end) element._flash_out_timer:kill() element:init() return element end function Element:init() end function Element:destroy() end -- Call method if it exists function Element:maybe(name, ...) if self[name] then return self[name](self, ...) end end -- Tween helpers function Element:tween(...) tween_element(self, ...) end function Element:tween_property(...) tween_element_property(self, ...) end function Element:tween_stop() tween_element_stop(self) end function Element:is_tweening() tween_element_is_tweening(self) end -- Event listeners function Element:on(name, handler) if self._eventListeners[name] == nil then self._eventListeners[name] = {} end local preexistingIndex = itable_find(self._eventListeners[name], handler) if preexistingIndex then return else self._eventListeners[name][#self._eventListeners[name] + 1] = handler end end function Element:off(name, handler) if self._eventListeners[name] == nil then return end local index = itable_find(self._eventListeners, handler) if index then table.remove(self._eventListeners, index) end end function Element:trigger(name, ...) self:maybe('on_'..name, ...) if self._eventListeners[name] == nil then return end for _, handler in ipairs(self._eventListeners[name]) do handler(...) end request_render() end -- Briefly flashes the element for `options.flash_duration` milliseconds. -- Useful to visualize changes of volume and timeline when changed via hotkeys. -- Implemented by briefly adding animated `forced_proximity` property to the element. function Element:flash() if options.flash_duration > 0 and (self.proximity < 1 or self._flash_out_timer:is_enabled()) then self:tween_stop() self.forced_proximity = 1 self._flash_out_timer:kill() self._flash_out_timer:resume() end end -- ELEMENTS local Elements = {itable = {}} Elements.__index = Elements local elements = setmetatable({}, Elements) function Elements:add(name, element) local insert_index = #Elements.itable + 1 -- Replace if element already exists if self:has(name) then insert_index = itable_find(Elements.itable, function(_, element) return element.name == name end) end element.name = name Elements.itable[insert_index] = element self[name] = element request_render() end function Elements:remove(name, props) Elements.itable = itable_remove(Elements.itable, self[name]) self[name] = nil request_render() end function Elements:trigger(name, ...) for _, element in self:ipairs() do element:trigger(name, ...) end end function Elements:has(name) return self[name] ~= nil end function Elements:ipairs() return ipairs(Elements.itable) end function Elements:pairs(elements) return pairs(self) end -- MENU --[[ Usage: ``` local items = { {title = 'Foo title', hint = 'Ctrl+F', value = 'foo'}, {title = 'Bar title', hint = 'Ctrl+B', value = 'bar'}, { title = 'Submenu', items = { {title = 'Sub item 1', value = 'sub1'}, {title = 'Sub item 2', value = 'sub2'} } } } function open_item(value) value -- value from `item.value` end menu:open(items, open_item) ``` ]] local Menu = {} Menu.__index = Menu local menu = setmetatable({key_bindings = {}, is_closing = false}, Menu) function Menu:is_open(menu_type) return elements.menu ~= nil and (not menu_type or elements.menu.type == menu_type) end function Menu:open(items, open_item, opts) opts = opts or {} if menu:is_open() then if not opts.parent_menu then menu:close(true, function() menu:open(items, open_item, opts) end) return end else menu:enable_key_bindings() elements.curtain:fadein() end elements:add('menu', Element.new({ type = nil, -- menu type such as `menu`, `chapters`, ... title = nil, width = nil, height = nil, offset_x = 0, -- used to animated from/to left when submenu item_height = nil, item_spacing = 1, item_content_spacing = nil, font_size = nil, scroll_step = nil, scroll_height = nil, scroll_y = 0, opacity = 0, relative_parent_opacity = 0.4, items = items, active_item = nil, selected_item = nil, open_item = open_item, parent_menu = nil, init = function(this) -- Already initialized if this.width ~= nil then return end -- Apply options for key, value in pairs(opts) do this[key] = value end if not this.selected_item then this.selected_item = this.active_item end -- Set initial dimensions this:on_display_change() -- Scroll to active item this:scroll_to_item(this.active_item) -- Transition in animation menu.transition = {to = 'child', target = this} local start_offset = this.parent_menu and (this.parent_menu.width + this.width) / 2 or 0 tween_element(menu.transition.target, 0, 1, function(_, pos) this:set_offset_x(round(start_offset * (1 - pos))) this.opacity = pos this:set_parent_opacity(1 - ((1 - config.menu_parent_opacity) * pos)) end, function() menu.transition = nil update_proximities() end) end, destroy = function(this) request_render() end, on_display_change = function(this) this.item_height = state.fullormaxed and options.menu_item_height_fullscreen or options.menu_item_height this.font_size = round(this.item_height * 0.48 * options.menu_font_scale) this.item_content_spacing = round((this.item_height - this.font_size) * 0.6) this.scroll_step = this.item_height + this.item_spacing -- Estimate width of a widest item local estimated_max_width = 0 for _, item in ipairs(this.items) do local item_text_length = ((item.title and item.title:len() or 0) + (item.hint and item.hint:len() or 0)) local spacings_in_item = item.hint and 3 or 2 local estimated_width = text_width_estimate(item_text_length, this.font_size) + (this.item_content_spacing * spacings_in_item) if estimated_width > estimated_max_width then estimated_max_width = estimated_width end end -- Also check menu title local menu_title_length = this.title and this.title:len() or 0 local estimated_menu_title_width = text_width_estimate(menu_title_length, this.font_size) if estimated_menu_title_width > estimated_max_width then estimated_max_width = estimated_menu_title_width end -- Coordinates and sizes are of the scrollable area to make -- consuming values in rendering easier. Title drawn above this, so -- we need to account for that in max_height and ay position. this.width = round(math.min(math.max(estimated_max_width, config.menu_min_width), display.width * 0.9)) local title_height = this.title and this.scroll_step or 0 local max_height = round(display.height * 0.9) - title_height this.height = math.min(round(this.scroll_step * #this.items) - this.item_spacing, max_height) this.scroll_height = math.max((this.scroll_step * #this.items) - this.height - this.item_spacing, 0) this.ax = round((display.width - this.width) / 2) + this.offset_x this.ay = round((display.height - this.height) / 2 + (title_height / 2)) this.bx = round(this.ax + this.width) this.by = round(this.ay + this.height) if this.parent_menu then this.parent_menu:on_display_change() end end, update = function(this, props) if props then for key, value in pairs(props) do this[key] = value end end -- Reset indexes and scroll this:select_index(this.selected_item) this:activate_index(this.active_item) this:scroll_to(this.scroll_y) -- Trigger changes and re-render this:on_display_change() request_render() end, set_offset_x = function(this, offset) local delta = offset - this.offset_x this.offset_x = offset this.ax = this.ax + delta this.bx = this.bx + delta if this.parent_menu then this.parent_menu:set_offset_x(offset - ((this.width + this.parent_menu.width) / 2) - this.item_spacing) else update_proximities() end end, fadeout = function(this, callback) this:tween(1, 0, function(this, pos) this.opacity = pos this:set_parent_opacity(pos * config.menu_parent_opacity) end, callback) end, set_parent_opacity = function(this, opacity) if this.parent_menu then this.parent_menu.opacity = opacity this.parent_menu:set_parent_opacity(opacity * config.menu_parent_opacity) end end, get_item_index_below_cursor = function(this) return math.ceil((cursor.y - this.ay + this.scroll_y) / this.scroll_step) end, get_first_visible_index = function(this) return round(this.scroll_y / this.scroll_step) + 1 end, get_last_visible_index = function(this) return round((this.scroll_y + this.height) / this.scroll_step) end, get_centermost_visible_index = function(this) return round((this.scroll_y + (this.height / 2)) / this.scroll_step) end, scroll_to = function(this, pos) this.scroll_y = math.max(math.min(pos, this.scroll_height), 0) request_render() end, scroll_to_item = function(this, index) if (index and index >= 1 and index <= #this.items) then this:scroll_to(round((this.scroll_step * (index - 1)) - ((this.height - this.scroll_step) / 2))) end end, select_index = function(this, index) this.selected_item = (index and index >= 1 and index <= #this.items) and index or nil request_render() end, select_value = function(this, value) this:select_index(itable_find(this.items, function(_, item) return item.value == value end)) end, activate_index = function(this, index) this.active_item = (index and index >= 1 and index <= #this.items) and index or nil request_render() end, activate_value = function(this, value) this:activate_index(itable_find(this.items, function(_, item) return item.value == value end)) end, delete_index = function(this, index) if (index and index >= 1 and index <= #this.items) then local previous_active_value = this.active_index and this.items[this.active_index].value or nil table.remove(this.items, index) this:on_display_change() if previous_active_value then this:activate_value(previous_active_value) end this:scroll_to_item(this.selected_item) end end, delete_value = function(this, value) this:delete_index(itable_find(this.items, function(_, item) return item.value == value end)) end, prev = function(this) local default_anchor = this.scroll_height > this.scroll_step and this:get_centermost_visible_index() or this:get_last_visible_index() local current_index = this.selected_item or default_anchor + 1 this.selected_item = math.max(current_index - 1, 1) this:scroll_to_item(this.selected_item) end, next = function(this) local default_anchor = this.scroll_height > this.scroll_step and this:get_centermost_visible_index() or this:get_first_visible_index() local current_index = this.selected_item or default_anchor - 1 this.selected_item = math.min(current_index + 1, #this.items) this:scroll_to_item(this.selected_item) end, back = function(this) if menu.transition then local transition_target = menu.transition.target local transition_target_type = menu.transition.target tween_element_stop(transition_target) if transition_target_type == 'parent' then elements:add('menu', transition_target) end menu.transition = nil transition_target:back() return else menu.transition = {to = 'parent', target = this.parent_menu} end if menu.transition.target == nil then menu:close() return end local target = menu.transition.target local to_offset = -target.offset_x + this.offset_x tween_element(target, 0, 1, function(_, pos) this:set_offset_x(round(to_offset * pos)) this.opacity = 1 - pos this:set_parent_opacity(config.menu_parent_opacity + ((1 - config.menu_parent_opacity) * pos)) end, function() menu.transition = nil elements:add('menu', target) update_proximities() end) end, open_selected_item = function(this, soft) -- If there is a transition active and this method got called, it -- means we are animating from this menu to parent menu, and all -- calls to this method should be relayed to the parent menu. if menu.transition and menu.transition.to == 'parent' then local target = menu.transition.target tween_element_stop(target) menu.transition = nil target:open_selected_item(soft) return end if this.selected_item then local item = this.items[this.selected_item] -- Is submenu if item.items then local opts = table_copy(opts) opts.parent_menu = this menu:open(item.items, this.open_item, opts) else if soft ~= true then menu:close(true) end this.open_item(item.value) end end end, open_selected_item_soft = function(this) this:open_selected_item(true) end, close = function(this) menu:close() end, on_global_mbtn_left_down = function(this) if this.proximity_raw == 0 then this.selected_item = this:get_item_index_below_cursor() this:open_selected_item() else -- check if this is clicking on any parent menus local parent_menu = this.parent_menu repeat if parent_menu then if get_point_to_rectangle_proximity(cursor, parent_menu) == 0 then this:back() return end parent_menu = parent_menu.parent_menu end until parent_menu == nil menu:close() end end, on_global_mouse_move = function(this) if this.proximity_raw == 0 then this.selected_item = this:get_item_index_below_cursor() else if this.selected_item then this.selected_item = nil end end request_render() end, on_wheel_up = function(this) this.selected_item = nil this:scroll_to(this.scroll_y - this.scroll_step) -- Selects item below cursor this:on_global_mouse_move() request_render() end, on_wheel_down = function(this) this.selected_item = nil this:scroll_to(this.scroll_y + this.scroll_step) -- Selects item below cursor this:on_global_mouse_move() request_render() end, on_pgup = function(this) this.selected_item = nil this:scroll_to(this.scroll_y - this.height) end, on_pgdwn = function(this) this.selected_item = nil this:scroll_to(this.scroll_y + this.height) end, on_home = function(this) this.selected_item = nil this:scroll_to(0) end, on_end = function(this) this.selected_item = nil this:scroll_to(this.scroll_height) end, render = render_menu, })) elements.menu:maybe('on_open') end function Menu:add_key_binding(key, name, fn, flags) menu.key_bindings[#menu.key_bindings + 1] = name mp.add_forced_key_binding(key, name, fn, flags) end function Menu:enable_key_bindings() menu.key_bindings = {} -- The `mp.set_key_bindings()` method would be easier here, but that -- doesn't support 'repeatable' flag, so we are stuck with this monster. menu:add_key_binding('up', 'menu-prev1', self:create_action('prev'), 'repeatable') menu:add_key_binding('down', 'menu-next1', self:create_action('next'), 'repeatable') menu:add_key_binding('left', 'menu-back1', self:create_action('back')) menu:add_key_binding('right', 'menu-select1', self:create_action('open_selected_item')) menu:add_key_binding('shift+right', 'menu-select-soft1', self:create_action('open_selected_item_soft')) menu:add_key_binding('shift+mbtn_left', 'menu-select-soft', self:create_action('open_selected_item_soft')) if options.menu_wasd_navigation then menu:add_key_binding('w', 'menu-prev2', self:create_action('prev'), 'repeatable') menu:add_key_binding('a', 'menu-back2', self:create_action('back')) menu:add_key_binding('s', 'menu-next2', self:create_action('next'), 'repeatable') menu:add_key_binding('d', 'menu-select2', self:create_action('open_selected_item')) menu:add_key_binding('shift+d', 'menu-select-soft2', self:create_action('open_selected_item_soft')) end if options.menu_hjkl_navigation then menu:add_key_binding('h', 'menu-back3', self:create_action('back')) menu:add_key_binding('j', 'menu-next3', self:create_action('next'), 'repeatable') menu:add_key_binding('k', 'menu-prev3', self:create_action('prev'), 'repeatable') menu:add_key_binding('l', 'menu-select3', self:create_action('open_selected_item')) menu:add_key_binding('shift+l', 'menu-select-soft3', self:create_action('open_selected_item_soft')) end menu:add_key_binding('mbtn_back', 'menu-back-alt3', self:create_action('back')) menu:add_key_binding('bs', 'menu-back-alt4', self:create_action('back')) menu:add_key_binding('enter', 'menu-select-alt3', self:create_action('open_selected_item')) menu:add_key_binding('kp_enter', 'menu-select-alt4', self:create_action('open_selected_item')) menu:add_key_binding('esc', 'menu-close', self:create_action('close')) menu:add_key_binding('pgup', 'menu-page-up', self:create_action('on_pgup')) menu:add_key_binding('pgdwn', 'menu-page-down', self:create_action('on_pgdwn')) menu:add_key_binding('home', 'menu-home', self:create_action('on_home')) menu:add_key_binding('end', 'menu-end', self:create_action('on_end')) end function Menu:disable_key_bindings() for _, name in ipairs(menu.key_bindings) do mp.remove_key_binding(name) end menu.key_bindings = {} end function Menu:create_action(name) return function(...) if elements.menu then elements.menu:maybe(name, ...) end end end function Menu:close(immediate, callback) if type(immediate) ~= 'boolean' then callback = immediate end if elements:has('menu') and not menu.is_closing then function close() elements.menu:maybe('on_close') elements.menu:destroy() elements:remove('menu') menu.is_closing = false update_proximities() menu:disable_key_bindings() call_me_maybe(callback) end menu.is_closing = true elements.curtain:fadeout() if immediate then close() else elements.menu:fadeout(close) end end end -- ICONS --[[ ASS \shadN shadows are drawn also below the element, which when there is an opacity in play, blends icon colors into ugly greys. The mess below is an attempt to fix it by rendering shadows for icons with clipping. Add icons by adding functions to render them to `icons` table. Signature: function(pos_x, pos_y, size) => string Function has to return ass path coordinates to draw the icon centered at pox_x and pos_y of passed size. ]] local icons = {} function icon(name, icon_x, icon_y, icon_size, shad_x, shad_y, shad_size, backdrop, opacity, clip) local ass = assdraw.ass_new() local icon_path = icons[name](icon_x, icon_y, icon_size) local icon_color = options['color_'..backdrop..'_text'] local shad_color = options['color_'..backdrop] local use_border = (shad_x + shad_y) == 0 local icon_border = use_border and shad_size or 0 -- clip can't clip out shadows, a very annoying limitation I can't work -- around without going back to ugly default ass shadows, but atm I actually -- don't need clipping of icons with shadows, so I'm choosing to ignore this if not clip then clip = '' end if not use_border then ass:new_event() ass:append('{\\blur0\\bord0\\shad0\\1c&H'..shad_color..'\\iclip('..ass.scale..', '..icon_path..')}') ass:append(ass_opacity(opacity)) ass:pos(shad_x + shad_size, shad_y + shad_size) ass:draw_start() ass:append(icon_path) ass:draw_stop() end ass:new_event() ass:append('{\\blur0\\bord'..icon_border..'\\shad0\\1c&H'..icon_color..'\\3c&H'..shad_color..clip..'}') ass:append(ass_opacity(opacity)) ass:pos(0, 0) ass:draw_start() ass:append(icon_path) ass:draw_stop() return ass.text end function icons._volume(muted, pos_x, pos_y, size) local ass = assdraw.ass_new() local scale = size / 200 function x(number) return pos_x + (number * scale) end function y(number) return pos_y + (number * scale) end ass:move_to(x(-85), y(-35)) ass:line_to(x(-50), y(-35)) ass:line_to(x(-5), y(-75)) ass:line_to(x(-5), y(75)) ass:line_to(x(-50), y(35)) ass:line_to(x(-85), y(35)) if muted then ass:move_to(x(76), y(-35)) ass:line_to(x(50), y(-9)) ass:line_to(x(24), y(-35)) ass:line_to(x(15), y(-26)) ass:line_to(x(41), y(0)) ass:line_to(x(15), y(26)) ass:line_to(x(24), y(35)) ass:line_to(x(50), y(9)) ass:line_to(x(76), y(35)) ass:line_to(x(85), y(26)) ass:line_to(x(59), y(0)) ass:line_to(x(85), y(-26)) else ass:move_to(x(20), y(-30)) ass:line_to(x(20), y(30)) ass:line_to(x(35), y(30)) ass:line_to(x(35), y(-30)) ass:move_to(x(55), y(-60)) ass:line_to(x(55), y(60)) ass:line_to(x(70), y(60)) ass:line_to(x(70), y(-60)) end return ass.text end function icons.volume(pos_x, pos_y, size) return icons._volume(false, pos_x, pos_y, size) end function icons.volume_muted(pos_x, pos_y, size) return icons._volume(true, pos_x, pos_y, size) end function icons.menu_button(pos_x, pos_y, size) local ass = assdraw.ass_new() local scale = size / 100 function x(number) return pos_x + (number * scale) end function y(number) return pos_y + (number * scale) end local line_height = 14 local line_spacing = 18 for i = -1, 1 do local offs = i * (line_height + line_spacing) ass:move_to(x(-50), y(offs - line_height/2)) ass:line_to(x(50), y(offs - line_height/2)) ass:line_to(x(50), y(offs + line_height/2)) ass:line_to(x(-50), y(offs + line_height/2)) end return ass.text end function icons.arrow_right(pos_x, pos_y, size) local ass = assdraw.ass_new() local scale = size / 200 function x(number) return pos_x + (number * scale) end function y(number) return pos_y + (number * scale) end ass:move_to(x(-22), y(-80)) ass:line_to(x(-45), y(-57)) ass:line_to(x(12), y(0)) ass:line_to(x(-45), y(57)) ass:line_to(x(-22), y(80)) ass:line_to(x(58), y(0)) return ass.text end -- STATE UPDATES function update_display_dimensions() local o = mp.get_property_native('osd-dimensions') display.width = o.w display.height = o.h display.aspect = o.aspect -- Tell elements about this elements:trigger('display_change') -- Some elements probably changed their rectangles as a reaction to `display_change` update_proximities() request_render() end function update_element_cursor_proximity(element) if cursor.hidden then element.proximity_raw = infinity element.proximity = 0 else local range = options.proximity_out - options.proximity_in element.proximity_raw = get_point_to_rectangle_proximity(cursor, element) element.proximity = menu:is_open() and 0 or 1 - (math.min(math.max(element.proximity_raw - options.proximity_in, 0), range) / range) end end function update_proximities() local capture_mbtn_left = false local capture_wheel = false local menu_only = menu:is_open() local mouse_leave_elements = {} local mouse_enter_elements = {} -- Calculates proximities and opacities for defined elements for _, element in elements:ipairs() do local previous_proximity_raw = element.proximity_raw -- If menu is open, all other elements have to be disabled if menu_only then if element.name == 'menu' then capture_mbtn_left = true capture_wheel = true update_element_cursor_proximity(element) else element.proximity_raw = infinity element.proximity = 0 end else update_element_cursor_proximity(element) end -- Element has global forced key listeners if element.on_global_mbtn_left_down then capture_mbtn_left = true end if element.on_global_wheel_up or element.on_global_wheel_down then capture_wheel = true end if element.proximity_raw == 0 then -- Element has local forced key listeners if element.on_mbtn_left_down then capture_mbtn_left = true end if element.on_wheel_up or element.on_wheel_up then capture_wheel = true end -- Mouse entered element area if previous_proximity_raw ~= 0 then mouse_enter_elements[#mouse_enter_elements + 1] = element end else -- Mouse left element area if previous_proximity_raw == 0 then mouse_leave_elements[#mouse_leave_elements + 1] = element end end end -- Enable key group captures elements request. if capture_mbtn_left then forced_key_bindings.mbtn_left:enable() else forced_key_bindings.mbtn_left:disable() end if capture_wheel then forced_key_bindings.wheel:enable() else forced_key_bindings.wheel:disable() end -- Trigger `mouse_leave` and `mouse_enter` events for _, element in ipairs(mouse_leave_elements) do element:trigger('mouse_leave') end for _, element in ipairs(mouse_enter_elements) do element:trigger('mouse_enter') end end -- ELEMENT RENDERERS function render_timeline(this) if this.size_max == 0 or state.duration == nil or state.duration == 0 or state.position == nil then return end local size_min = this:get_effective_size_min() local size = this:get_effective_size() if size < 1 then return end local ass = assdraw.ass_new() -- Text opacity rapidly drops to 0 just before it starts overflowing, or before it reaches timeline.size_min local hide_text_below = math.max(this.font_size * 0.7, size_min * 2) local hide_text_ramp = hide_text_below / 2 local text_opacity = math.max(math.min(size - hide_text_below, hide_text_ramp), 0) / hide_text_ramp local spacing = math.max(math.floor((this.size_max - this.font_size) / 2.5), 4) local progress = state.position / state.duration -- Background bar coordinates local bax = this.ax local bay = this.by - size local bbx = this.bx local bby = this.by -- Foreground bar coordinates local fax = bax local fay = bay + this.top_border local fbx = fax + this.width * progress local fby = bby local foreground_size = bby - bay local foreground_coordinates = fax..','..fay..','..fbx..','..fby -- for clipping -- Background ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'\\iclip('..foreground_coordinates..')}') ass:append(ass_opacity(math.max(options.timeline_opacity - 0.1, 0))) ass:pos(0, 0) ass:draw_start() ass:rect_cw(bax, bay, bbx, bby) ass:draw_stop() -- Foreground ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_foreground..'}') ass:append(ass_opacity(options.timeline_opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(fax, fay, fbx, fby) ass:draw_stop() -- Seekable ranges if options.timeline_cached_ranges and state.cached_ranges then local range_height = math.max(foreground_size / 8, size_min) local range_ay = fby - range_height for _, range in ipairs(state.cached_ranges) do ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.timeline_cached_ranges.color..'}') ass:append(ass_opacity(options.timeline_cached_ranges.opacity)) ass:pos(0, 0) ass:draw_start() local range_start = math.max(type(range['start']) == 'number' and range['start'] or 0.000001, 0.000001) local range_end = math.min(type(range['end']) and range['end'] or state.duration, state.duration) ass:rect_cw( bax + this.width * (range_start / state.duration), range_ay, bax + this.width * (range_end / state.duration), range_ay + range_height ) ass:draw_stop() end end -- Custom ranges if state.chapter_ranges ~= nil then for i, chapter_range in ipairs(state.chapter_ranges) do for i, range in ipairs(chapter_range.ranges) do local rax = bax + this.width * (range['start'].time / state.duration) local rbx = bax + this.width * (range['end'].time / state.duration) ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..chapter_range.color..'}') ass:append(ass_opacity(chapter_range.opacity)) ass:pos(0, 0) ass:draw_start() -- for 1px chapter size, use the whole size of the bar including padding if size <= 1 then ass:rect_cw(rax, bay, rbx, bby) else ass:rect_cw(rax, fay, rbx, fby) end ass:draw_stop() end end end -- Chapters if ( options.chapters ~= 'none' and ( state.chapters ~= nil and #state.chapters > 0 or state.ab_loop_a and state.ab_loop_a > 0 or state.ab_loop_b and state.ab_loop_b > 0 ) ) then local half_size = size / 2 local dots = false local chapter_size, chapter_y if options.chapters == 'dots' then dots = true chapter_size = math.min(6, (foreground_size / 2) + 2) chapter_y = math.min(fay + chapter_size, fay + half_size) elseif options.chapters == 'lines' then chapter_size = size chapter_y = fay + (chapter_size / 2) elseif options.chapters == 'lines-top' then chapter_size = math.min(this.size_max / 3.5, size) chapter_y = fay + (chapter_size / 2) elseif options.chapters == 'lines-bottom' then chapter_size = math.min(this.size_max / 3.5, size) chapter_y = fay + size - (chapter_size / 2) end if chapter_size ~= nil then -- for 1px chapter size, use the whole size of the bar including padding chapter_size = size <= 1 and foreground_size or chapter_size local chapter_half_size = chapter_size / 2 local draw_chapter = function (time) local chapter_x = bax + this.width * (time / state.duration) local color = chapter_x > fbx and options.color_foreground or options.color_background ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..color..'}') ass:append(ass_opacity(options.chapters_opacity)) ass:pos(0, 0) ass:draw_start() if dots then local bezier_stretch = chapter_size * 0.67 ass:move_to(chapter_x - chapter_half_size, chapter_y) ass:bezier_curve( chapter_x - chapter_half_size, chapter_y - bezier_stretch, chapter_x + chapter_half_size, chapter_y - bezier_stretch, chapter_x + chapter_half_size, chapter_y ) ass:bezier_curve( chapter_x + chapter_half_size, chapter_y + bezier_stretch, chapter_x - chapter_half_size, chapter_y + bezier_stretch, chapter_x - chapter_half_size, chapter_y ) else ass:rect_cw(chapter_x, chapter_y - chapter_half_size, chapter_x + 1, chapter_y + chapter_half_size) end ass:draw_stop() end if state.chapters ~= nil then for i, chapter in ipairs(state.chapters) do draw_chapter(chapter.time) end end if state.ab_loop_a and state.ab_loop_a > 0 then draw_chapter(state.ab_loop_a) end if state.ab_loop_b and state.ab_loop_b > 0 then draw_chapter(state.ab_loop_b) end end end if text_opacity > 0 then -- Elapsed time if state.elapsed_seconds then local elapsed_x = bax + spacing local elapsed_y = fay + (size / 2) ass:new_event() ass:append('{\\blur0\\bord0\\shad0\\1c&H'..options.color_foreground_text..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'\\clip('..foreground_coordinates..')') ass:append(ass_opacity(math.min(options.timeline_opacity + 0.1, 1), text_opacity)) ass:pos(elapsed_x, elapsed_y) ass:an(4) ass:append(state.elapsed_time) ass:new_event() ass:append('{\\blur0\\bord0\\shad1\\1c&H'..options.color_background_text..'\\4c&H'..options.color_background..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'\\iclip('..foreground_coordinates..')') ass:append(ass_opacity(math.min(options.timeline_opacity + 0.1, 1), text_opacity)) ass:pos(elapsed_x, elapsed_y) ass:an(4) ass:append(state.elapsed_time) end -- End time local end_time if options.total_time then end_time = this.total_time else end_time = state.remaining_time and '-'..state.remaining_time end if end_time then local end_x = bbx - spacing local end_y = fay + (size / 2) ass:new_event() ass:append('{\\blur0\\bord0\\shad0\\1c&H'..options.color_foreground_text..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'\\clip('..foreground_coordinates..')') ass:append(ass_opacity(math.min(options.timeline_opacity + 0.1, 1), text_opacity)) ass:pos(end_x, end_y) ass:an(6) ass:append(end_time) ass:new_event() ass:append('{\\blur0\\bord0\\shad1\\1c&H'..options.color_background_text..'\\4c&H'..options.color_background..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'\\iclip('..foreground_coordinates..')') ass:append(ass_opacity(math.min(options.timeline_opacity + 0.1, 1), text_opacity)) ass:pos(end_x, end_y) ass:an(6) ass:append(end_time) end end if (this.proximity_raw == 0 or this.pressed) and not (elements.speed and elements.speed.dragging) then -- Hovered time local hovered_seconds = state.duration * (cursor.x / display.width) local box_half_width_guesstimate = (this.font_size * 4.2) / 2 ass:new_event() ass:append('{\\blur0\\bord1\\shad0\\1c&H'..options.color_background_text..'\\3c&H'..options.color_background..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'') ass:append(ass_opacity(math.min(options.timeline_opacity + 0.1, 1))) ass:pos(math.min(math.max(cursor.x, box_half_width_guesstimate), display.width - box_half_width_guesstimate), fay) ass:an(2) ass:append(mp.format_time(hovered_seconds)) -- Cursor line ass:new_event() ass:append('{\\blur0\\bord0\\xshad-1\\yshad0\\1c&H'..options.color_foreground..'\\4c&H'..options.color_background..'}') ass:append(ass_opacity(0.2)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(cursor.x, fay, cursor.x + 1, fby) ass:draw_stop() end return ass end function render_top_bar(this) local opacity = this:get_effective_proximity() if not this.enabled or opacity == 0 then return end local ass = assdraw.ass_new() if options.top_bar_controls then -- Close button local close = elements.window_controls_close if close.proximity_raw == 0 then -- Background on hover ass:new_event() ass:append('{\\blur0\\bord0\\1c&H2311e8}') ass:append(ass_opacity(this.button_opacity, opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(close.ax, close.ay, close.bx, close.by) ass:draw_stop() end ass:new_event() ass:append('{\\blur0\\bord1\\shad1\\3c&HFFFFFF\\4c&H000000}') ass:append(ass_opacity(this.button_opacity, opacity)) ass:pos(close.ax + (this.button_width / 2), close.ay + (this.size / 2)) ass:draw_start() ass:move_to(-this.icon_size, this.icon_size) ass:line_to(this.icon_size, -this.icon_size) ass:move_to(-this.icon_size, -this.icon_size) ass:line_to(this.icon_size, this.icon_size) ass:draw_stop() -- Maximize button local maximize = elements.window_controls_maximize if maximize.proximity_raw == 0 then -- Background on hover ass:new_event() ass:append('{\\blur0\\bord0\\1c&H222222}') ass:append(ass_opacity(this.button_opacity, opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(maximize.ax, maximize.ay, maximize.bx, maximize.by) ass:draw_stop() end ass:new_event() ass:append('{\\blur0\\bord2\\shad0\\1c\\3c&H000000}') ass:append(ass_opacity({[3] = this.button_opacity}, opacity)) ass:pos(maximize.ax + (this.button_width / 2), maximize.ay + (this.size / 2)) ass:draw_start() ass:rect_cw(-this.icon_size + 1, -this.icon_size + 1, this.icon_size + 1, this.icon_size + 1) ass:draw_stop() ass:new_event() ass:append('{\\blur0\\bord2\\shad0\\1c\\3c&HFFFFFF}') ass:append(ass_opacity({[3] = this.button_opacity}, opacity)) ass:pos(maximize.ax + (this.button_width / 2), maximize.ay + (this.size / 2)) ass:draw_start() ass:rect_cw(-this.icon_size, -this.icon_size, this.icon_size, this.icon_size) ass:draw_stop() -- Minimize button local minimize = elements.window_controls_minimize if minimize.proximity_raw == 0 then -- Background on hover ass:new_event() ass:append('{\\blur0\\bord0\\1c&H222222}') ass:append(ass_opacity(this.button_opacity, opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(minimize.ax, minimize.ay, minimize.bx, minimize.by) ass:draw_stop() end ass:new_event() ass:append('{\\blur0\\bord1\\shad1\\3c&HFFFFFF\\4c&H000000}') ass:append(ass_opacity(this.button_opacity, opacity)) ass:append('{\\1a&HFF&}') ass:pos(minimize.ax + (this.button_width / 2), minimize.ay + (this.size / 2)) ass:draw_start() ass:move_to(-this.icon_size, 0) ass:line_to(this.icon_size, 0) ass:draw_stop() end -- Window title if options.top_bar_title and state.media_title then local clip_coordinates = this.ax..','..this.ay..','..(this.title_bx - this.spacing)..','..this.by ass:new_event() ass:append('{\\q2\\blur0\\bord1\\shad0\\1c&HFFFFFF\\3c&H000000\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'\\clip('..clip_coordinates..')') ass:append(ass_opacity(1, opacity)) ass:pos(this.ax + this.spacing, this.ay + (this.size / 2)) ass:an(4) ass:append(state.media_title) end return ass end function render_volume(this) local slider = elements.volume_slider local opacity = this:get_effective_proximity() if this.width == 0 or opacity == 0 then return end local ass = assdraw.ass_new() if slider.height > 0 then -- Background bar coordinates local bax = slider.ax local bay = slider.ay local bbx = slider.bx local bby = slider.by -- Foreground bar coordinates local height_without_border = slider.height - (options.volume_border * 2) local fax = slider.ax + options.volume_border local fay = slider.ay + (height_without_border * (1 - math.min(state.volume / state.volume_max, 1))) + options.volume_border local fbx = slider.bx - options.volume_border local fby = slider.by - options.volume_border -- Path to draw a foreground bar with a 100% volume indicator, already -- clipped by volume level. Can't just clip it with rectangle, as it itself -- also needs to be used as a path to clip the background bar and volume -- number. local fpath = assdraw.ass_new() fpath:move_to(fbx, fby) fpath:line_to(fax, fby) local nudge_bottom_y = slider.nudge_y + slider.nudge_size if fay <= nudge_bottom_y and slider.draw_nudge then fpath:line_to(fax, math.min(nudge_bottom_y)) if fay <= slider.nudge_y then fpath:line_to((fax + slider.nudge_size), slider.nudge_y) local nudge_top_y = slider.nudge_y - slider.nudge_size if fay <= nudge_top_y then fpath:line_to(fax, nudge_top_y) fpath:line_to(fax, fay) fpath:line_to(fbx, fay) fpath:line_to(fbx, nudge_top_y) else local triangle_side = fay - nudge_top_y fpath:line_to((fax + triangle_side), fay) fpath:line_to((fbx - triangle_side), fay) end fpath:line_to((fbx - slider.nudge_size), slider.nudge_y) else local triangle_side = nudge_bottom_y - fay fpath:line_to((fax + triangle_side), fay) fpath:line_to((fbx - triangle_side), fay) end fpath:line_to(fbx, nudge_bottom_y) else fpath:line_to(fax, fay) fpath:line_to(fbx, fay) end fpath:line_to(fbx, fby) -- Background ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'\\iclip('..fpath.scale..', '..fpath.text..')}') ass:append(ass_opacity(math.max(options.volume_opacity - 0.1, 0), opacity)) ass:pos(0, 0) ass:draw_start() ass:move_to(bax, bay) ass:line_to(bbx, bay) local half_border = options.volume_border / 2 if slider.draw_nudge then ass:line_to(bbx, math.max(slider.nudge_y - slider.nudge_size + half_border, bay)) ass:line_to(bbx - slider.nudge_size + half_border, slider.nudge_y) ass:line_to(bbx, slider.nudge_y + slider.nudge_size - half_border) end ass:line_to(bbx, bby) ass:line_to(bax, bby) if slider.draw_nudge then ass:line_to(bax, slider.nudge_y + slider.nudge_size - half_border) ass:line_to(bax + slider.nudge_size - half_border, slider.nudge_y) ass:line_to(bax, math.max(slider.nudge_y - slider.nudge_size + half_border, bay)) end ass:line_to(bax, bay) ass:draw_stop() -- Foreground ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_foreground..'}') ass:append(ass_opacity(options.volume_opacity, opacity)) ass:pos(0, 0) ass:draw_start() ass:append(fpath.text) ass:draw_stop() -- Current volume value local volume_string = tostring(round(state.volume * 10) / 10) local font_size = round(((this.width * 0.6) - (#volume_string * (this.width / 20))) * options.volume_font_scale) if fay < slider.by - slider.spacing then ass:new_event() ass:append('{\\blur0\\bord0\\shad0\\1c&H'..options.color_foreground_text..'\\fn'..config.font..'\\fs'..font_size..bold_tag..'\\clip('..fpath.scale..', '..fpath.text..')}') ass:append(ass_opacity(math.min(options.volume_opacity + 0.1, 1), opacity)) ass:pos(slider.ax + (slider.width / 2), slider.by - slider.spacing) ass:an(2) ass:append(volume_string) end if fay > slider.by - slider.spacing - font_size then ass:new_event() ass:append('{\\blur0\\bord0\\shad1\\1c&H'..options.color_background_text..'\\4c&H'..options.color_background..'\\fn'..config.font..'\\fs'..font_size..bold_tag..'\\iclip('..fpath.scale..', '..fpath.text..')}') ass:append(ass_opacity(math.min(options.volume_opacity + 0.1, 1), opacity)) ass:pos(slider.ax + (slider.width / 2), slider.by - slider.spacing) ass:an(2) ass:append(volume_string) end end -- Mute button local mute = elements.volume_mute local icon_name = state.mute and 'volume_muted' or 'volume' ass:new_event() ass:append(icon( icon_name, mute.ax + (mute.width / 2), mute.ay + (mute.height / 2), mute.width * 0.7, -- x, y, size 0, 0, options.volume_border, -- shadow_x, shadow_y, shadow_size 'background', options.volume_opacity * opacity -- backdrop, opacity )) return ass end function render_speed(this) if not this.dragging and (elements.curtain.opacity > 0) then return end local proximity = this:get_effective_proximity() local opacity = this.dragging and 1 or proximity if opacity == 0 then return end local ass = assdraw.ass_new() -- Coordinates local ax = this.ax -- local ay = this.ay + timeline.size_max - timeline:get_effective_size() local ay = this.ay local bx = this.bx local by = ay + this.height local half_width = (this.width / 2) local half_x = ax + half_width -- Notches local speed_at_center = state.speed if this.dragging then speed_at_center = this.dragging.start_speed + ((-this.dragging.distance / this.step_distance) * options.speed_step) speed_at_center = math.min(math.max(speed_at_center, 0.01), 100) end local nearest_notch_speed = round(speed_at_center / this.notch_every) * this.notch_every local nearest_notch_x = half_x + (((nearest_notch_speed - speed_at_center) / this.notch_every) * this.notch_spacing) local guide_size = math.floor(this.height / 7.5) local notch_by = by - guide_size local notch_ay_big = ay + round(this.font_size * 1.1) local notch_ay_medium = notch_ay_big + ((notch_by - notch_ay_big) * 0.2) local notch_ay_small = notch_ay_big + ((notch_by - notch_ay_big) * 0.4) local from_to_index = math.floor(this.notches / 2) for i = -from_to_index, from_to_index do local notch_speed = nearest_notch_speed + (i * this.notch_every) if notch_speed < 0 or notch_speed > 100 then goto continue end local notch_x = nearest_notch_x + (i * this.notch_spacing) local notch_thickness = 1 local notch_ay = notch_ay_small if (notch_speed % (this.notch_every * 10)) < 0.00000001 then notch_ay = notch_ay_big notch_thickness = 1 elseif (notch_speed % (this.notch_every * 5)) < 0.00000001 then notch_ay = notch_ay_medium end ass:new_event() ass:append('{\\blur0\\bord1\\shad0\\1c&HFFFFFF\\3c&H000000}') ass:append(ass_opacity(math.min(1.2 - (math.abs((notch_x - ax - half_width) / half_width)), 1), opacity)) ass:pos(0, 0) ass:draw_start() ass:move_to(notch_x - notch_thickness, notch_ay) ass:line_to(notch_x + notch_thickness, notch_ay) ass:line_to(notch_x + notch_thickness, notch_by) ass:line_to(notch_x - notch_thickness, notch_by) ass:draw_stop() ::continue:: end -- Center guide ass:new_event() ass:append('{\\blur0\\bord1\\shad0\\1c&HFFFFFF\\3c&H000000}') ass:append(ass_opacity(options.speed_opacity, opacity)) ass:pos(0, 0) ass:draw_start() ass:move_to(half_x, by - 2 - guide_size) ass:line_to(half_x + guide_size, by - 2) ass:line_to(half_x - guide_size, by - 2) ass:draw_stop() -- Speed value local speed_text = (round(state.speed * 100) / 100)..'x' ass:new_event() ass:append('{\\blur0\\bord1\\shad0\\1c&H'..options.color_background_text..'\\3c&H'..options.color_background..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..'}') ass:append(ass_opacity(options.speed_opacity, opacity)) ass:pos(half_x, ay) ass:an(8) ass:append(speed_text) return ass end function render_menu_button(this) local opacity = this:get_effective_proximity() if this.width == 0 or opacity == 0 then return end if this.proximity_raw > 0 then opacity = opacity / 2 end local ass = assdraw.ass_new() -- Menu button local burger = elements.menu_button ass:new_event() ass:append(icon( 'menu_button', burger.ax + (burger.width / 2), burger.ay + (burger.height / 2), burger.width, -- x, y, size 0, 0, options.menu_button_border, -- shadow_x, shadow_y, shadow_size 'background', options.menu_button_opacity * opacity -- backdrop, opacity )) return ass end function render_menu(this) local ass = assdraw.ass_new() if this.parent_menu then ass:merge(this.parent_menu:render()) end -- Menu title if this.title then -- Background ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'}') ass:append(ass_opacity(options.menu_opacity, this.opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(this.ax, this.ay - this.item_height, this.bx, this.ay - 1) ass:draw_stop() -- Title ass:new_event() ass:append('{\\blur0\\bord0\\shad1\\b1\\1c&H'..options.color_background_text..'\\4c&H'..options.color_background..'\\fn'..config.font..'\\fs'..this.font_size..'\\q2\\clip('..this.ax..','..this.ay - this.item_height..','..this.bx..','..this.ay..')}') ass:append(ass_opacity(options.menu_opacity, this.opacity)) ass:pos(display.width / 2, this.ay - (this.item_height * 0.5)) ass:an(5) ass:append(this.title) end local scroll_area_clip = '\\clip('..this.ax..','..this.ay..','..this.bx..','..this.by..')' for index, item in ipairs(this.items) do local item_ay = this.ay - this.scroll_y + (this.item_height * (index - 1) + this.item_spacing * (index - 1)) local item_by = item_ay + this.item_height local item_clip = '' -- Clip items overflowing scroll area if item_ay <= this.ay or item_by >= this.by then item_clip = scroll_area_clip end if item_by < this.ay or item_ay > this.by then goto continue end local is_active = this.active_item == index local font_color, background_color, ass_shadow, ass_shadow_color local icon_size = this.font_size if is_active then font_color, background_color = options.color_foreground_text, options.color_foreground ass_shadow, ass_shadow_color = '\\shad0', '' else font_color, background_color = options.color_background_text, options.color_background ass_shadow, ass_shadow_color = '\\shad1', '\\4c&H'..background_color end local has_submenu = item.items ~= nil local hint_width = 0 if item.hint then hint_width = text_width_estimate(item.hint:len(), this.font_size) + this.item_content_spacing elseif has_submenu then hint_width = icon_size + this.item_content_spacing end -- Background ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..background_color..item_clip..'}') ass:append(ass_opacity(options.menu_opacity, this.opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(this.ax, item_ay, this.bx, item_by) ass:draw_stop() -- Selected highlight if this.selected_item == index then ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_foreground..item_clip..'}') ass:append(ass_opacity(0.1, this.opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(this.ax, item_ay, this.bx, item_by) ass:draw_stop() end -- Title if item.title then item.ass_save_title = item.ass_save_title or item.title:gsub("([{}])","\\%1") local title_clip_x = (this.bx - hint_width - this.item_content_spacing) local title_clip = '\\clip('..this.ax..','..math.max(item_ay, this.ay)..','..title_clip_x..','..math.min(item_by, this.by)..')' ass:new_event() ass:append('{\\blur0\\bord0\\shad1\\1c&H'..font_color..'\\4c&H'..background_color..'\\fn'..config.font..'\\fs'..this.font_size..bold_tag..title_clip..'\\q2}') ass:append(ass_opacity(options.menu_opacity, this.opacity)) ass:pos(this.ax + this.item_content_spacing, item_ay + (this.item_height / 2)) ass:an(4) ass:append(item.ass_save_title) end -- Hint if item.hint then item.ass_save_hint = item.ass_save_hint or item.hint:gsub("([{}])","\\%1") ass:new_event() ass:append('{\\blur0\\bord0'..ass_shadow..'\\1c&H'..font_color..''..ass_shadow_color..'\\fn'..config.font..'\\fs'..(this.font_size - 1)..bold_tag..item_clip..'}') ass:append(ass_opacity(options.menu_opacity * (has_submenu and 1 or 0.5), this.opacity)) ass:pos(this.bx - this.item_content_spacing, item_ay + (this.item_height / 2)) ass:an(6) ass:append(item.ass_save_hint) elseif has_submenu then ass:new_event() ass:append(icon( 'arrow_right', this.bx - this.item_content_spacing - (icon_size / 2), -- x item_ay + (this.item_height / 2), -- y icon_size, -- size 0, 0, 1, -- shadow_x, shadow_y, shadow_size is_active and 'foreground' or 'background', this.opacity, -- backdrop, opacity item_clip )) end ::continue:: end -- Scrollbar if this.scroll_height > 0 then local groove_height = this.height - 2 local thumb_height = math.max((this.height / (this.scroll_height + this.height)) * groove_height, 40) local thumb_y = this.ay + 1 + ((this.scroll_y / this.scroll_height) * (groove_height - thumb_height)) ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_foreground..'}') ass:append(ass_opacity(options.menu_opacity, this.opacity * 0.8)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(this.bx - 3, thumb_y, this.bx - 1, thumb_y + thumb_height) ass:draw_stop() end return ass end -- MAIN RENDERING -- Request that render() is called. -- The render is then either executed immediately, or rate-limited if it was -- called a small time ago. function request_render() if state.render_timer == nil then state.render_timer = mp.add_timeout(0, render) end if not state.render_timer:is_enabled() then local now = mp.get_time() local timeout = config.render_delay - (now - state.render_last_time) if timeout < 0 then timeout = 0 end state.render_timer.timeout = timeout state.render_timer:resume() end end function render() state.render_last_time = mp.get_time() -- Actual rendering local ass = assdraw.ass_new() for _, element in elements.ipairs() do local result = element:maybe('render') if result then ass:new_event() ass:merge(result) end end -- submit if osd.res_x == display.width and osd.res_y == display.height and osd.data == ass.text then return end osd.res_x = display.width osd.res_y = display.height osd.data = ass.text osd.z = 2000 osd:update() end -- STATIC ELEMENTS elements:add('window_border', Element.new({ size = nil, -- set in init init = function(this) this:update_size(); end, update_size = function(this) this.size = options.window_border_size > 0 and not state.fullormaxed and not state.border and options.window_border_size or 0 end, on_prop_border = function(this) this:update_size() end, on_prop_fullormaxed = function(this) this:update_size() end, render = function(this) if this.size > 0 then local ass = assdraw.ass_new() local clip_coordinates = this.size..','..this.size..','..(display.width - this.size)..','..(display.height - this.size) ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'\\iclip('..clip_coordinates..')}') ass:append(ass_opacity(options.window_border_opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(0, 0, display.width, display.height) ass:draw_stop() return ass end end })) elements:add('pause_indicator', Element.new({ base_icon_opacity = options.pause_indicator == 'flash' and 1 or 0.8, paused = false, type = options.pause_indicator, is_manual = options.pause_indicator == 'manual', fadeout_requested = false, opacity = 0, init = function(this) local initial_call = true mp.observe_property('pause', 'bool', function(_, paused) if initial_call then initial_call = false return end this.paused = paused if options.pause_indicator == 'flash' then this:flash() elseif options.pause_indicator == 'static' then this:decide() end end) end, flash = function(this) if not this.is_manual and this.type ~= 'flash' then return end -- can't wait for pause property event listener to set this, because when this is used inside a binding like: -- cycle pause; script-binding uosc/flash-pause-indicator -- the pause event is not fired fast enough, and indicator starts rendering with old icon this.paused = mp.get_property_native('pause') if this.is_manual then this.type = 'flash' end this.opacity = 1 this:tween_property('opacity', 1, 0, 0.15) end, -- decides whether static indicator should be visible or not decide = function(this) if not this.is_manual and this.type ~= 'static' then return end this.paused = mp.get_property_native('pause') -- see flash() for why this line is necessary if this.is_manual then this.type = 'static' end this.opacity = this.paused and 1 or 0 request_render() -- works around an mpv race condition bug during pause on windows builds, which cause osd updates to be ignored -- .03 was still loosing renders, .04 was fine, but to be safe I added 10ms more mp.add_timeout(.05, function() osd:update() end) end, render = function(this) if this.opacity == 0 then return end local ass = assdraw.ass_new() local is_static = this.type == 'static' -- Background fadeout if is_static then ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'}') ass:append(ass_opacity(0.3, this.opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(0, 0, display.width, display.height) ass:draw_stop() end -- Icon local size = round((math.min(display.width, display.height) * (is_static and 0.20 or 0.15)) / 2) size = size + size * (1 - this.opacity) if this.paused then ass:new_event() ass:append('{\\blur0\\bord1\\1c&H'..options.color_foreground..'\\3c&H'..options.color_background..'}') ass:append(ass_opacity(this.base_icon_opacity, this.opacity)) ass:pos(display.width / 2, display.height / 2) ass:draw_start() ass:rect_cw(-size, -size, -size / 3, size) ass:draw_stop() ass:new_event() ass:append('{\\blur0\\bord1\\1c&H'..options.color_foreground..'\\3c&H'..options.color_background..'}') ass:append(ass_opacity(this.base_icon_opacity, this.opacity)) ass:pos(display.width / 2, display.height / 2) ass:draw_start() ass:rect_cw(size / 3, -size, size, size) ass:draw_stop() else ass:new_event() ass:append('{\\blur0\\bord1\\1c&H'..options.color_foreground..'\\3c&H'..options.color_background..'}') ass:append(ass_opacity(this.base_icon_opacity, this.opacity)) ass:pos(display.width / 2, display.height / 2) ass:draw_start() ass:move_to(-size * 0.6, -size) ass:line_to(size, 0) ass:line_to(-size * 0.6, size) ass:draw_stop() end return ass end })) elements:add('timeline', Element.new({ pressed = false, size_max = 0, size_min = 0, -- set in `on_display_change` handler based on `state.fullormaxed` size_min_override = options.timeline_start_hidden and 0 or nil, -- used for toggle-progress command font_size = 0, -- calculated in on_display_change total_time = nil, -- set in op_prop_duration listener top_border = options.timeline_border, get_effective_proximity = function(this) if this.pressed or is_element_persistent('timeline') then return 1 end if this.forced_proximity then return this.forced_proximity end return (elements.volume_slider and elements.volume_slider.pressed) and 0 or this.proximity end, get_effective_size_min = function(this) return this.size_min_override or this.size_min end, get_effective_size = function(this) if elements.speed and elements.speed.dragging then return this.size_max end local size_min = this:get_effective_size_min() return size_min + math.ceil((this.size_max - size_min) * this:get_effective_proximity()) end, update_dimensions = function(this) if state.fullormaxed then this.size_min = options.timeline_size_min_fullscreen this.size_max = options.timeline_size_max_fullscreen else this.size_min = options.timeline_size_min this.size_max = options.timeline_size_max end this.font_size = math.floor(math.min((this.size_max + 60) * 0.2, this.size_max * 0.96) * options.timeline_font_scale) this.ax = elements.window_border.size this.ay = display.height - elements.window_border.size - this.size_max - this.top_border this.bx = display.width - elements.window_border.size this.by = display.height - elements.window_border.size this.width = this.bx - this.ax end, on_prop_border = function(this) this:update_dimensions() end, on_prop_fullormaxed = function(this) this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, on_prop_duration = function(this, value) this.total_time = value and mp.format_time(value) or nil end, set_from_cursor = function(this) mp.commandv('seek', (((cursor.x - this.ax) / this.width) * 100), 'absolute-percent+exact') end, on_mbtn_left_down = function(this) this.pressed = true this:set_from_cursor() end, on_global_mbtn_left_up = function(this) this.pressed = false end, on_global_mouse_leave = function(this) this.pressed = false end, on_global_mouse_move = function(this) if this.pressed then this:set_from_cursor() end end, on_wheel_up = function(this) if options.timeline_step > 0 then mp.commandv('seek', -options.timeline_step) end end, on_wheel_down = function(this) if options.timeline_step > 0 then mp.commandv('seek', options.timeline_step) end end, render = render_timeline, })) elements:add('top_bar', Element.new({ button_opacity = 0.8, enabled = false, get_effective_proximity = function(this) if is_element_persistent('top_bar') then return 1 end if this.forced_proximity then return this.forced_proximity end return (elements.volume_slider and elements.volume_slider.pressed) and 0 or this.proximity end, decide_enabled = function(this) if options.top_bar == 'no-border' then this.enabled = not state.border or state.fullormaxed elseif options.top_bar == 'always' then this.enabled = true else this.enabled = false end this.enabled = this.enabled and (options.top_bar_controls or options.top_bar_title) end, update_dimensions = function(this) this.size = state.fullormaxed and options.top_bar_size_fullscreen or options.top_bar_size this.icon_size = round(this.size / 8) this.spacing = math.ceil(this.size * 0.25) this.font_size = math.floor(this.size - (this.spacing * 2)) this.button_width = round(this.size * 1.15) this.ay = elements.window_border.size this.bx = display.width - elements.window_border.size this.by = this.size + elements.window_border.size this.title_bx = this.bx - (options.top_bar_controls and (this.button_width * 3) or 0) this.ax = options.top_bar_title and elements.window_border.size or this.title_bx end, on_prop_border = function(this) this:decide_enabled() this:update_dimensions() end, on_prop_fullormaxed = function(this) this:decide_enabled() this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, render = render_top_bar, })) if options.top_bar_controls then elements:add('window_controls_minimize', Element.new({ update_dimensions = function(this) this.ax = elements.top_bar.bx - (elements.top_bar.button_width * 3) this.ay = elements.top_bar.ay this.bx = this.ax + elements.top_bar.button_width this.by = this.ay + elements.top_bar.size end, on_prop_border = function(this) this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, on_mbtn_left_down = function() mp.commandv('cycle', 'window-minimized') end })) elements:add('window_controls_maximize', Element.new({ update_dimensions = function(this) this.ax = elements.top_bar.bx - (elements.top_bar.button_width * 2) this.ay = elements.top_bar.ay this.bx = this.ax + elements.top_bar.button_width this.by = this.ay + elements.top_bar.size end, on_prop_border = function(this) this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, on_mbtn_left_down = function() mp.commandv('cycle', 'window-maximized') end })) elements:add('window_controls_close', Element.new({ update_dimensions = function(this) this.ax = elements.top_bar.bx - elements.top_bar.button_width this.ay = elements.top_bar.ay this.bx = this.ax + elements.top_bar.button_width this.by = this.ay + elements.top_bar.size end, on_prop_border = function(this) this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, on_mbtn_left_down = function() mp.commandv('quit') end })) end if itable_find({'left', 'right'}, options.volume) then elements:add('volume', Element.new({ width = nil, -- set in `on_display_change` handler based on `state.fullormaxed` height = nil, -- set in `on_display_change` handler based on `state.fullormaxed` margin = nil, -- set in `on_display_change` handler based on `state.fullormaxed` get_effective_proximity = function(this) if is_element_persistent('volume') or elements.volume_slider.pressed then return 1 end if this.forced_proximity then return this.forced_proximity end return elements.timeline.proximity_raw == 0 and 0 or this.proximity end, update_dimensions = function(this) this.width = state.fullormaxed and options.volume_size_fullscreen or options.volume_size this.height = round(math.min(this.width * 8, (elements.timeline.ay - elements.top_bar.size) * 0.8)) -- Don't bother rendering this if too small if this.height < (this.width * 2) then this.height = 0 end this.margin = (this.width / 2) + elements.window_border.size this.ax = round(options.volume == 'left' and this.margin or display.width - this.margin - this.width) this.ay = round((display.height - this.height) / 2) this.bx = round(this.ax + this.width) this.by = round(this.ay + this.height) end, on_display_change = function(this) this:update_dimensions() end, on_prop_border = function(this) this:update_dimensions() end, render = render_volume, })) elements:add('volume_mute', Element.new({ width = 0, height = 0, on_display_change = function(this) this.width = elements.volume.width this.height = this.width this.ax = elements.volume.ax this.ay = elements.volume.by - this.height this.bx = elements.volume.bx this.by = elements.volume.by end, on_mbtn_left_down = function(this) mp.commandv('cycle', 'mute') end })) elements:add('volume_slider', Element.new({ pressed = false, width = 0, height = 0, nudge_y = 0, -- vertical position where volume overflows 100 nudge_size = nil, -- set on resize font_size = nil, spacing = nil, on_display_change = function(this) if state.volume_max == nil or state.volume_max == 0 then return end this.ax = elements.volume.ax this.ay = elements.volume.ay this.bx = elements.volume.bx this.by = elements.volume_mute.ay this.width = this.bx - this.ax this.height = this.by - this.ay this.nudge_y = this.by - round(this.height * (100 / state.volume_max)) this.nudge_size = round(elements.volume.width * 0.18) this.draw_nudge = this.ay < this.nudge_y this.spacing = round(this.width * 0.2) end, set_from_cursor = function(this) local volume_fraction = (this.by - cursor.y - options.volume_border) / (this.height - options.volume_border) local new_volume = math.min(math.max(volume_fraction, 0), 1) * state.volume_max new_volume = round(new_volume / options.volume_step) * options.volume_step if state.volume ~= new_volume then mp.commandv('set', 'volume', math.min(new_volume, state.volume_max)) end end, on_mbtn_left_down = function(this) this.pressed = true this:set_from_cursor() end, on_global_mbtn_left_up = function(this) this.pressed = false end, on_global_mouse_leave = function(this) this.pressed = false end, on_global_mouse_move = function(this) if this.pressed then this:set_from_cursor() end end, on_wheel_up = function(this) local current_rounded_volume = round(state.volume / options.volume_step) * options.volume_step mp.commandv('set', 'volume', math.min(current_rounded_volume + options.volume_step, state.volume_max)) end, on_wheel_down = function(this) local current_rounded_volume = round(state.volume / options.volume_step) * options.volume_step mp.commandv('set', 'volume', math.min(current_rounded_volume - options.volume_step, state.volume_max)) end, })) end if itable_find({'center', 'bottom-bar'}, options.menu_button) then elements:add('menu_button', Element.new({ width = 0, height = 0, get_effective_proximity = function(this) if menu:is_open() then return 0 end if is_element_persistent('menu_button') then return 1 end if elements.timeline.proximity_raw == 0 then return 0 end if this.forced_proximity then return this.forced_proximity end if options.menu_button == 'bottom-bar' then local timeline_proximity = elements.timeline.forced_proximity or elements.timeline.proximity return this.forced_proximity or math[cursor.hidden and 'min' or 'max'](this.proximity, timeline_proximity) end return this.proximity end, update_dimensions = function(this) this.width = state.fullormaxed and options.menu_button_size_fullscreen or options.menu_button_size this.height = this.width if options.menu_button == 'bottom-bar' then this.ax = 15 this.bx = this.ax + this.width this.by = display.height - 10 - elements.window_border.size - elements.timeline.size_max - elements.timeline.top_border this.ay = this.by - this.height else this.ax = round((display.width - this.width) / 2) this.ay = round((display.height - this.height) / 2) this.bx = this.ax + this.width this.by = this.ay + this.height end end, on_display_change = function(this) this:update_dimensions() end, on_prop_border = function(this) this:update_dimensions() end, on_mbtn_left_down = function(this) if this.proximity_raw == 0 then menu_key_binding() end end, render = render_menu_button, })) end if options.speed then elements:add('speed', Element.new({ dragging = nil, width = 0, height = 0, notches = 10, notch_every = 0.1, step_distance = nil, font_size = nil, get_effective_proximity = function(this) if elements.timeline.proximity_raw == 0 then return 0 end if is_element_persistent('speed') then return 1 end if this.forced_proximity then return this.forced_proximity end local timeline_proximity = elements.timeline.forced_proximity or elements.timeline.proximity return this.forced_proximity or math[cursor.hidden and 'min' or 'max'](this.proximity, timeline_proximity) end, update_dimensions = function(this) this.height = state.fullormaxed and options.speed_size_fullscreen or options.speed_size this.width = round(this.height * 3.6) this.notch_spacing = this.width / this.notches this.step_distance = this.notch_spacing * (options.speed_step / this.notch_every) this.ax = (display.width - this.width) / 2 this.by = display.height - elements.window_border.size - elements.timeline.size_max - elements.timeline.top_border this.ay = this.by - this.height this.bx = this.ax + this.width this.font_size = round(this.height * 0.48 * options.speed_font_scale) end, set_from_cursor = function(this) local volume_fraction = (this.by - cursor.y - options.volume_border) / (this.height - options.volume_border) local new_volume = math.min(math.max(volume_fraction, 0), 1) * state.volume_max new_volume = round(new_volume / options.volume_step) * options.volume_step if state.volume ~= new_volume then mp.commandv('set', 'volume', new_volume) end end, on_prop_border = function(this) this:update_dimensions() end, on_display_change = function(this) this:update_dimensions() end, on_mbtn_left_down = function(this) this:tween_stop() -- Stop and cleanup possible ongoing animations this.dragging = { start_time = mp.get_time(), start_x = cursor.x, distance = 0, start_speed = state.speed } end, on_global_mouse_move = function(this) if not this.dragging then return end this.dragging.distance = cursor.x - this.dragging.start_x local steps_dragged = round(-this.dragging.distance / this.step_distance) local new_speed = this.dragging.start_speed + (steps_dragged * options.speed_step) mp.set_property_native('speed', round(new_speed * 100) / 100) end, on_mbtn_left_up = function(this) -- Reset speed on short clicks if this.dragging and math.abs(this.dragging.distance) < 6 and mp.get_time() - this.dragging.start_time < 0.15 then mp.set_property_native('speed', 1) end end, on_global_mbtn_left_up = function(this) if this.dragging and elements.timeline.proximity_raw == 0 then this:fadeout() end this.dragging = nil request_render() end, on_global_mouse_leave = function(this) this.dragging = nil request_render() end, on_wheel_up = function(this) mp.set_property_native('speed', state.speed - options.speed_step) end, on_wheel_down = function(this) mp.set_property_native('speed', state.speed + options.speed_step) end, render = render_speed, })) end elements:add('curtain', Element.new({ opacity = 0, fadeout = function(this) this:tween_property('opacity', this.opacity, 0); end, fadein = function(this) this:tween_property('opacity', this.opacity, 1); end, render = function(this) if this.opacity > 0 and options.curtain_opacity > 0 then local ass = assdraw.ass_new() ass:new_event() ass:append('{\\blur0\\bord0\\1c&H'..options.color_background..'}') ass:append(ass_opacity(options.curtain_opacity, this.opacity)) ass:pos(0, 0) ass:draw_start() ass:rect_cw(0, 0, display.width, display.height) ass:draw_stop() return ass end end })) -- CHAPTERS SERIALIZATION -- Parse `chapter_ranges` option into workable data structure for _, definition in ipairs(split(options.chapter_ranges, ' *,+ *')) do local start_patterns, color, opacity, end_patterns = string.match(definition, '([^<]+)<(%x%x%x%x%x%x):(%d?%.?%d*)>([^>]+)') -- Invalid definition if start_patterns == nil then goto continue end start_patterns = start_patterns:lower() end_patterns = end_patterns:lower() local uses_bof = start_patterns:find('{bof}') ~= nil local uses_eof = end_patterns:find('{eof}') ~= nil local chapter_range = { start_patterns = split(start_patterns, '|'), end_patterns = split(end_patterns, '|'), color = color, opacity = tonumber(opacity), ranges = {} } -- Filter out special keywords so we don't use them when matching titles if uses_bof then chapter_range.start_patterns = itable_remove(chapter_range.start_patterns, '{bof}') end if uses_eof and chapter_range.end_patterns then chapter_range.end_patterns = itable_remove(chapter_range.end_patterns, '{eof}') end chapter_range['serialize'] = function (chapters) chapter_range.ranges = {} local current_range = nil -- bof and eof should be used only once per timeline -- eof is only used when last range is missing end local bof_used = false function start_range(chapter) -- If there is already a range started, should we append or overwrite? -- I chose overwrite here. current_range = {['start'] = chapter} end function end_range(chapter) current_range['end'] = chapter chapter_range.ranges[#chapter_range.ranges + 1] = current_range -- Mark both chapter objects current_range['start']._uosc_used_as_range_point = true current_range['end']._uosc_used_as_range_point = true -- Clear for next range current_range = nil end for _, chapter in ipairs(chapters) do if type(chapter.title) == 'string' then local lowercase_title = chapter.title:lower() local is_end = false local is_start = false -- Is ending check and handling if chapter_range.end_patterns then for _, end_pattern in ipairs(chapter_range.end_patterns) do is_end = is_end or lowercase_title:find(end_pattern) ~= nil end if is_end then if current_range == nil and uses_bof and not bof_used then bof_used = true start_range({time = 0}) end if current_range ~= nil then end_range(chapter) else is_end = false end end end -- Is start check and handling for _, start_pattern in ipairs(chapter_range.start_patterns) do is_start = is_start or lowercase_title:find(start_pattern) ~= nil end if is_start then start_range(chapter) end end end -- If there is an unfinished range and range type accepts eof, use it if current_range ~= nil and uses_eof then end_range({time = state.duration or infinity}) end end state.chapter_ranges = state.chapter_ranges or {} state.chapter_ranges[#state.chapter_ranges + 1] = chapter_range ::continue:: end function parse_chapters() -- Sometimes state.duration is not initialized yet for some reason state.duration = mp.get_property_native('duration') local chapters = get_normalized_chapters() if not chapters or not state.duration then return end -- Reset custom ranges for _, chapter_range in ipairs(state.chapter_ranges or {}) do chapter_range.serialize(chapters) end -- Filter out chapters that were used as ranges state.chapters = itable_remove(chapters, function(chapter) return chapter._uosc_used_as_range_point == true end) request_render() end -- CONTEXT MENU SERIALIZATION state.context_menu_items = (function() local input_conf_path = mp.command_native({'expand-path', '~~/input.conf'}) local input_conf_meta, meta_error = utils.file_info(input_conf_path) -- File doesn't exist if not input_conf_meta or not input_conf_meta.is_file then return end local main_menu = {items = {}, items_by_command = {}} local submenus_by_id = {} for line in io.lines(input_conf_path) do local key, command, title = string.match(line, '%s*([%S]+)%s+(.*)%s#!%s*(.*)') if not key then key, command, title = string.match(line, '%s*([%S]+)%s+(.*)%s#menu:%s*(.*)') end if key then local is_dummy = key:sub(1, 1) == '#' local submenu_id = '' local target_menu = main_menu local title_parts = split(title or '', ' *> *') for index, title_part in ipairs(#title_parts > 0 and title_parts or {''}) do if index < #title_parts then submenu_id = submenu_id .. title_part if not submenus_by_id[submenu_id] then local items = {} submenus_by_id[submenu_id] = {items = items, items_by_command = {}} target_menu.items[#target_menu.items + 1] = {title = title_part, items = items} end target_menu = submenus_by_id[submenu_id] else -- If command is already in menu, just append the key to it if target_menu.items_by_command[command] then local hint = target_menu.items_by_command[command].hint target_menu.items_by_command[command].hint = hint and hint..', '..key or key else local item = { title = title_part, hint = not is_dummy and key or nil, value = command } target_menu.items_by_command[command] = item target_menu.items[#target_menu.items + 1] = item end end end end end if #main_menu.items > 0 then return main_menu.items end end)() -- EVENT HANDLERS function create_state_setter(name) return function(_, value) state[name] = value elements:trigger('prop_'..name, value) request_render() end end function update_cursor_position() cursor.x, cursor.y = mp.get_mouse_pos() -- mpv reports initial mouse position on linux as (0, 0), which always -- displays the top bar, so we just swap this one coordinate to infinity if cursor.x == 0 and cursor.y == 0 then cursor.x = infinity cursor.y = infinity end update_proximities() request_render() end function handle_mouse_leave() -- Slowly fadeout elements that are currently visible for _, element_name in ipairs({'timeline', 'volume', 'top_bar'}) do local element = elements[element_name] if element and element.proximity > 0 then element:tween_property('forced_proximity', element:get_effective_proximity(), 0, function() element.forced_proximity = nil end) end end cursor.hidden = true update_proximities() elements:trigger('global_mouse_leave') end function handle_mouse_enter() cursor.hidden = false update_cursor_position() tween_element_stop(state) elements:trigger('global_mouse_enter') end function handle_mouse_move() -- Handle case when we are in cursor hidden state but not left the actual -- window (i.e. when autohide simulates mouse_leave). if cursor.hidden then handle_mouse_enter() return end update_cursor_position() elements:trigger('global_mouse_move') request_render() -- Restart timer that hides UI when mouse is autohidden if options.autohide then state.cursor_autohide_timer:kill() state.cursor_autohide_timer:resume() end end function navigate_directory(direction) local path = mp.get_property_native("path") if not path or is_protocol(path) then return end local next_file = get_adjacent_file(path, direction, options.media_types) if next_file then mp.commandv("loadfile", utils.join_path(serialize_path(path).dirname, next_file)) end end function load_file_in_current_directory(index) local path = mp.get_property_native("path") if not path or is_protocol(path) then return end local dirname = serialize_path(path).dirname local files = get_files_in_directory(dirname, options.media_types) if not files then return end if index < 0 then index = #files + index + 1 end if files[index] then mp.commandv("loadfile", utils.join_path(dirname, files[index])) end end -- MENUS function create_select_tracklist_type_menu_opener(menu_title, track_type, track_prop) return function() if menu:is_open(track_type) then menu:close() return end local items = {} local active_item = nil for index, track in ipairs(mp.get_property_native('track-list')) do if track.type == track_type then if track.selected then active_item = track.id end items[#items + 1] = { title = (track.title and track.title or 'Track '..track.id), hint = track.lang and track.lang:upper() or nil, value = track.id } end end -- Add option to disable a subtitle track. This works for all tracks, -- but why would anyone want to disable audio or video? Better to not -- let people mistakenly select what is unwanted 99.999% of the time. -- If I'm mistaken and there is an active need for this, feel free to -- open an issue. if track_type == 'sub' then active_item = active_item and active_item + 1 or 1 table.insert(items, 1, {hint = 'disabled', value = nil}) end menu:open(items, function(id) mp.commandv('set', track_prop, id and id or 'no') -- If subtitle track was selected, assume user also wants to see it if id and track_type == 'sub' then mp.commandv('set', 'sub-visibility', 'yes') end menu:close() end, {type = track_type, title = menu_title, active_item = active_item}) end end -- `menu_options`: -- **allowed_types** - table with file extensions to display -- **active_path** - full path of a file to preselect -- Rest of the options are passed to `menu:open()` function open_file_navigation_menu(directory, handle_select, menu_options) directory = serialize_path(directory) local directories, error = utils.readdir(directory.path, 'dirs') local files, error = get_files_in_directory(directory.path, menu_options.allowed_types) local is_root = not directory.dirname if not files or not directories then msg.error('Retrieving files from '..directory..' failed: '..(error or '')) return end -- Files are already sorted table.sort(directories, word_order_comparator) -- Pre-populate items with parent directory selector if not at root local items = is_root and {} or { {title = '..', hint = 'parent dir', value = directory.dirname} } for _, dir in ipairs(directories) do local serialized = serialize_path(utils.join_path(directory.path, dir)) items[#items + 1] = {title = serialized.basename, value = serialized.path, hint = '/'} end menu_options.active_item = nil for _, file in ipairs(files) do local serialized = serialize_path(utils.join_path(directory.path, file)) local item_index = #items + 1 items[item_index] = { title = serialized.basename, value = serialized.path, } if menu_options.active_path == serialized.path then menu_options.active_item = item_index end end menu_options.selected_item = menu_options.active_item or ((is_root == false and #files > 1) and 2 or 1) menu_options.title = directory.basename..'/' menu:open(items, function(path) local meta, error = utils.file_info(path) if not meta then msg.error('Retrieving file info for '..path..' failed: '..(error or '')) return end if meta.is_dir then open_file_navigation_menu(path, handle_select, menu_options) else handle_select(path) menu:close() end end, menu_options) end -- VALUE SERIALIZATION/NORMALIZATION options.proximity_out = math.max(options.proximity_out, options.proximity_in + 1) options.chapters = itable_find({'dots', 'lines', 'lines-top', 'lines-bottom'}, options.chapters) and options.chapters or 'none' options.media_types = split(options.media_types, ' *, *') options.subtitle_types = split(options.subtitle_types, ' *, *') options.stream_quality_options = split(options.stream_quality_options, ' *, *') options.timeline_cached_ranges = (function() if options.timeline_cached_ranges == '' or options.timeline_cached_ranges == 'no' then return nil end local parts = split(options.timeline_cached_ranges, ':') return parts[1] and {color = parts[1], opacity = tonumber(parts[2])} or nil end)() for _, name in ipairs({'timeline', 'volume', 'top_bar', 'speed'}) do local option_name = name..'_persistency' local flags = {} for _, state in ipairs(split(options[option_name], ' *, *')) do flags[state] = true end options[option_name] = flags end -- HOOKS mp.register_event('file-loaded', parse_chapters) mp.observe_property('track-list', 'native', function(name, value) -- checks if the file is audio only (mp3, etc) local has_audio = false local has_video = false for _, track in ipairs(value) do if track.type == 'audio' then has_audio = true end if track.type == 'video' and not track.albumart then has_video = true end end state.is_audio = not has_video and has_audio end) mp.observe_property('chapter-list', 'native', parse_chapters) mp.observe_property('border', 'bool', create_state_setter('border')) mp.observe_property('ab-loop-a', 'number', create_state_setter('ab_loop_a')) mp.observe_property('ab-loop-b', 'number', create_state_setter('ab_loop_b')) mp.observe_property('duration', 'number', create_state_setter('duration')) mp.observe_property('media-title', 'string', create_state_setter('media_title')) mp.observe_property('fullscreen', 'bool', function(_, value) state.fullscreen = value state.fullormaxed = state.fullscreen or state.maximized update_display_dimensions() elements:trigger('prop_fullscreen', value) elements:trigger('prop_fullormaxed', state.fullormaxed) end) mp.observe_property('window-maximized', 'bool', function(_, value) state.maximized = value state.fullormaxed = state.fullscreen or state.maximized update_display_dimensions() elements:trigger('prop_maximized', value) elements:trigger('prop_fullormaxed', state.fullormaxed) end) mp.observe_property('idle-active', 'bool', create_state_setter('idle')) mp.observe_property('speed', 'number', create_state_setter('speed')) mp.observe_property('pause', 'bool', create_state_setter('pause')) mp.observe_property('volume', 'number', create_state_setter('volume')) mp.observe_property('volume-max', 'number', create_state_setter('volume_max')) mp.observe_property('mute', 'bool', create_state_setter('mute')) mp.observe_property('playback-time', 'number', function(name, val) -- Ignore the initial call with nil value if val == nil then return end state.position = val state.elapsed_seconds = val state.elapsed_time = state.elapsed_seconds and mp.format_time(state.elapsed_seconds) or nil state.remaining_seconds = mp.get_property_native('playtime-remaining') state.remaining_time = state.remaining_seconds and mp.format_time(state.remaining_seconds) or nil request_render() end) mp.observe_property('osd-dimensions', 'native', function(name, val) update_display_dimensions() request_render() end) mp.observe_property('demuxer-cache-state', 'native', function(prop, cache_state) if cache_state == nil then state.cached_ranges = nil return end local cache_ranges = cache_state['seekable-ranges'] state.cached_ranges = #cache_ranges > 0 and cache_ranges or nil end) -- CONTROLS -- Mouse movement key binds local base_keybinds = { {'mouse_move', handle_mouse_move}, {'mouse_leave', handle_mouse_leave}, {'mouse_enter', handle_mouse_enter}, } if options.pause_on_click_shorter_than > 0 then -- Cycles pause when click is shorter than `options.pause_on_click_shorter_than` -- while filtering out double clicks. local duration_seconds = options.pause_on_click_shorter_than / 1000 local last_down_event; local click_timer = mp.add_timeout(duration_seconds, function() mp.command('cycle pause') end); click_timer:kill() base_keybinds[#base_keybinds + 1] = {'mbtn_left', function() if mp.get_time() - last_down_event < duration_seconds then click_timer:resume() end end, function() if click_timer:is_enabled() then click_timer:kill() last_down_event = 0 else last_down_event = mp.get_time() end end } end mp.set_key_bindings(base_keybinds, 'mouse_movement', 'force') mp.enable_key_bindings('mouse_movement', 'allow-vo-dragging+allow-hide-cursor') -- Context based key bind groups forced_key_bindings = (function() function create_mouse_event_dispatcher(name) return function(...) for _, element in pairs(elements) do if element.proximity_raw == 0 then element:trigger(name, ...) end element:trigger('global_'..name, ...) end end end mp.set_key_bindings({ {'mbtn_left', create_mouse_event_dispatcher('mbtn_left_up'), create_mouse_event_dispatcher('mbtn_left_down')}, {'mbtn_left_dbl', 'ignore'}, }, 'mbtn_left', 'force') mp.set_key_bindings({ {'wheel_up', create_mouse_event_dispatcher('wheel_up')}, {'wheel_down', create_mouse_event_dispatcher('wheel_down')}, }, 'wheel', 'force') local groups = {} for _, group in ipairs({'mbtn_left', 'wheel'}) do groups[group] = { is_enabled = false, enable = function(this) if this.is_enabled then return end this.is_enabled = true mp.enable_key_bindings(group) end, disable = function(this) if not this.is_enabled then return end this.is_enabled = false mp.disable_key_bindings(group) end, } end return groups end)() -- KEY BINDABLE FEATURES mp.add_key_binding(nil, 'peek-timeline', function() if elements.timeline.proximity > 0.5 then elements.timeline:tween_property('proximity', elements.timeline.proximity, 0) else elements.timeline:tween_property('proximity', elements.timeline.proximity, 1) end end) mp.add_key_binding(nil, 'toggle-progress', function() local timeline = elements.timeline if timeline.size_min_override then timeline:tween_property('size_min_override', timeline.size_min_override, timeline.size_min, function() timeline.size_min_override = nil end) else timeline:tween_property('size_min_override', timeline.size_min, 0) end end) mp.add_key_binding(nil, 'flash-timeline', function() elements.timeline:flash() end) mp.add_key_binding(nil, 'flash-top-bar', function() elements.top_bar:flash() end) mp.add_key_binding(nil, 'flash-volume', function() if elements.volume then elements.volume:flash() end end) mp.add_key_binding(nil, 'flash-speed', function() if elements.speed then elements.speed:flash() end end) mp.add_key_binding(nil, 'flash-pause-indicator', function() elements.pause_indicator:flash() end) mp.add_key_binding(nil, 'decide-pause-indicator', function() elements.pause_indicator:decide() end) function menu_key_binding() if menu:is_open('menu') then menu:close() elseif state.context_menu_items then menu:open(state.context_menu_items, function(command) mp.command(command) end, {type = 'menu'}) end end mp.add_key_binding(nil, 'menu', menu_key_binding) mp.add_key_binding(nil, 'load-subtitles', function() if menu:is_open('load-subtitles') then menu:close() return end local path = mp.get_property_native('path') if path and is_protocol(path) then path='$HOME' end open_file_navigation_menu( serialize_path(path).dirname, function(path) mp.commandv('sub-add', path) end, { type = 'load-subtitles', allowed_types = options.subtitle_types } ) end) mp.add_key_binding(nil, 'subtitles', create_select_tracklist_type_menu_opener('Subtitles', 'sub', 'sid')) mp.add_key_binding(nil, 'audio', create_select_tracklist_type_menu_opener('Audio', 'audio', 'aid')) mp.add_key_binding(nil, 'video', create_select_tracklist_type_menu_opener('Video', 'video', 'vid')) mp.add_key_binding(nil, 'playlist', function() if menu:is_open('playlist') then menu:close() return end function serialize_playlist() local pos = mp.get_property_number('playlist-pos-1', 0) local items = {} local active_item for index, item in ipairs(mp.get_property_native('playlist')) do local is_url = item.filename:find('://') items[index] = { title = is_url and item.filename or serialize_path(item.filename).basename, hint = tostring(index), value = index } if index == pos then active_item = index end end return items, active_item end -- Update active index and playlist content on playlist changes function handle_playlist_change() if menu:is_open('playlist') then local items, active_item = serialize_playlist() elements.menu:update({ items = items, active_item = active_item }) end end -- Items and active_item are set in the handle_playlist_change callback, since adding -- a property observer triggers its handler immediately, we just let that initialize the items. menu:open({}, function(index) mp.commandv('set', 'playlist-pos-1', tostring(index)) end, { type = 'playlist', title = 'Playlist', on_open = function() mp.observe_property('playlist', 'native', handle_playlist_change) mp.observe_property('playlist-pos-1', 'native', handle_playlist_change) end, on_close = function() mp.unobserve_property(handle_playlist_change) end, }) end) mp.add_key_binding(nil, 'chapters', function() if menu:is_open('chapters') then menu:close() return end local items = {} local chapters = get_normalized_chapters() for index, chapter in ipairs(chapters) do items[#items + 1] = { title = chapter.title or '', hint = mp.format_time(chapter.time), value = chapter.time } end -- Select first chapter from the end with time lower -- than current playing position (with 100ms leeway). function get_selected_chapter_index() local position = mp.get_property_native('playback-time') if not position then return nil end for index = #items, 1, -1 do if position - 0.1 > items[index].value then return index end end end -- Update selected chapter in chapter navigation menu function seek_handler() if menu:is_open('chapters') then elements.menu:activate_index(get_selected_chapter_index()) end end menu:open(items, function(time) mp.commandv('seek', tostring(time), 'absolute') end, { type = 'chapters', title = 'Chapters', active_item = get_selected_chapter_index(), on_open = function() mp.register_event('seek', seek_handler) end, on_close = function() mp.unregister_event(seek_handler) end }) end) mp.add_key_binding(nil, 'show-in-directory', function() local path = mp.get_property_native('path') -- Ignore URLs if not path or is_protocol(path) then return end path = normalize_path(path) if state.os == 'windows' then utils.subprocess_detached({args = {'explorer', '/select,', path}, cancellable = false}) elseif state.os == 'macos' then utils.subprocess_detached({args = {'open', '-R', path}, cancellable = false}) elseif state.os == 'linux' then local result = utils.subprocess({args = {'nautilus', path}, cancellable = false}) -- Fallback opens the folder with xdg-open instead if result.status ~= 0 then utils.subprocess({args = {'xdg-open', serialize_path(path).dirname}, cancellable = false}) end end end) mp.add_key_binding(nil, 'stream-quality', function() if menu:is_open('stream-quality') then menu:close() return end local ytdl_format = mp.get_property_native('ytdl-format') local active_item = nil local formats = {} for index, height in ipairs(options.stream_quality_options) do local format = 'bestvideo[height<=?'..height..']+bestaudio/best[height<=?'..height..']' formats[#formats + 1] = { title = height..'p', value = format } if format == ytdl_format then active_item = index end end menu:open(formats, function(format) mp.set_property('ytdl-format', format) -- Reload the video to apply new format -- This is taken from https://github.com/jgreco/mpv-youtube-quality -- which is in turn taken from https://github.com/4e6/mpv-reload/ -- Dunno if playlist_pos shenanigans below are necessary. local playlist_pos = mp.get_property_number('playlist-pos') local duration = mp.get_property_native('duration') local time_pos = mp.get_property('time-pos') mp.set_property_number('playlist-pos', playlist_pos) -- Tries to determine live stream vs. pre-recordered VOD. VOD has non-zero -- duration property. When reloading VOD, to keep the current time position -- we should provide offset from the start. Stream doesn't have fixed start. -- Decent choice would be to reload stream from it's current 'live' positon. -- That's the reason we don't pass the offset when reloading streams. if duration and duration > 0 then local function seeker() mp.commandv('seek', time_pos, 'absolute') mp.unregister_event(seeker) end mp.register_event('file-loaded', seeker) end end, { type = 'stream-quality', title = 'Stream quality', active_item = active_item, }) end) mp.add_key_binding(nil, 'open-file', function() if menu:is_open('open-file') then menu:close() return end local path = mp.get_property_native('path') local directory local active_file if path == nil or is_protocol(path) then local path = serialize_path(mp.command_native({'expand-path', '~/'})) directory = path.path active_file = nil else local path = serialize_path(path) directory = path.dirname active_file = path.path end -- Update selected file in directory navigation menu function handle_file_loaded() if menu:is_open('open-file') then local path = normalize_path(mp.get_property_native('path')) elements.menu:activate_value(path) elements.menu:select_value(path) end end open_file_navigation_menu( directory, function(path) mp.commandv('loadfile', path) end, { type = 'open-file', allowed_types = options.media_types, active_path = active_file, on_open = function() mp.register_event('file-loaded', handle_file_loaded) end, on_close = function() mp.unregister_event(handle_file_loaded) end, } ) end) mp.add_key_binding(nil, 'next', function() if mp.get_property_native('playlist-count') > 1 then mp.command('playlist-next') else navigate_directory('forward') end end) mp.add_key_binding(nil, 'prev', function() if mp.get_property_native('playlist-count') > 1 then mp.command('playlist-prev') else navigate_directory('backward') end end) mp.add_key_binding(nil, 'next-file', function() navigate_directory('forward') end) mp.add_key_binding(nil, 'prev-file', function() navigate_directory('backward') end) mp.add_key_binding(nil, 'first', function() if mp.get_property_native('playlist-count') > 1 then mp.commandv('set', 'playlist-pos-1', '1') else load_file_in_current_directory(1) end end) mp.add_key_binding(nil, 'last', function() local playlist_count = mp.get_property_native('playlist-count') if playlist_count > 1 then mp.commandv('set', 'playlist-pos-1', tostring(playlist_count)) else load_file_in_current_directory(-1) end end) mp.add_key_binding(nil, 'first-file', function() load_file_in_current_directory(1) end) mp.add_key_binding(nil, 'last-file', function() load_file_in_current_directory(-1) end) mp.add_key_binding(nil, 'delete-file-next', function() local playlist_count = mp.get_property_native('playlist-count') local next_file = nil local path = mp.get_property_native('path') local is_local_file = path and not is_protocol(path) if is_local_file then path = normalize_path(path) if menu:is_open('open-file') then elements.menu:delete_value(path) end end if playlist_count > 1 then mp.commandv('playlist-remove', 'current') else if is_local_file then next_file = get_adjacent_file(path, 'forward', options.media_types) end if next_file then mp.commandv('loadfile', next_file) else mp.commandv('stop') end end if is_local_file then delete_file(path) end end) mp.add_key_binding(nil, 'delete-file-quit', function() local path = mp.get_property_native('path') mp.command('stop') if path and not is_protocol(path) then delete_file(normalize_path(path)) end mp.command('quit') end) mp.add_key_binding(nil, 'open-config-directory', function() local config = serialize_path(mp.command_native({'expand-path', '~~/mpv.conf'})) local args if state.os == 'windows' then args = {'explorer', '/select,', config.path} elseif state.os == 'macos' then args = {'open', '-R', config.path} elseif state.os == 'linux' then args = {'xdg-open', config.dirname} end utils.subprocess_detached({args = args, cancellable = false}) end) ================================================ FILE: nvim/.config/nvim/colors/idk.vim ================================================ " vi:syntax=vim " " Modified version of Base16 Tomorrow Night to tailored to my liking " Original by Chris Kempson " Modified by Siddharth Dushantha " GUI color definitions let s:gui00 = "101213" let g:base16_gui00 = "101213" let s:gui01 = "101213" let g:base16_gui01 = "282a2e" let s:gui02 = "373b41" let g:base16_gui02 = "373b41" let s:gui03 = "969896" let g:base16_gui03 = "969896" let s:gui04 = "b4b7b4" let g:base16_gui04 = "b4b7b4" let s:gui05 = "c5c8c6" let g:base16_gui05 = "c5c8c6" let s:gui06 = "e0e0e0" let g:base16_gui06 = "e0e0e0" let s:gui07 = "ffffff" let g:base16_gui07 = "ffffff" let s:gui08 = "cc6666" let g:base16_gui08 = "cc6666" let s:gui09 = "de935f" let g:base16_gui09 = "de935f" let s:gui0A = "f0c674" let g:base16_gui0A = "f0c674" let s:gui0B = "b5bd68" let g:base16_gui0B = "b5bd68" let s:gui0C = "8abeb7" let g:base16_gui0C = "8abeb7" let s:gui0D = "81a2be" let g:base16_gui0D = "81a2be" let s:gui0E = "b294bb" let g:base16_gui0E = "b294bb" let s:gui0F = "a3685a" let g:base16_gui0F = "a3685a" " Terminal color definitions let s:cterm00 = "00" let g:base16_cterm00 = "00" let s:cterm03 = "08" let g:base16_cterm03 = "08" let s:cterm05 = "07" let g:base16_cterm05 = "07" let s:cterm07 = "15" let g:base16_cterm07 = "15" let s:cterm08 = "01" let g:base16_cterm08 = "01" let s:cterm0A = "03" let g:base16_cterm0A = "03" let s:cterm0B = "02" let g:base16_cterm0B = "02" let s:cterm0C = "06" let g:base16_cterm0C = "06" let s:cterm0D = "04" let g:base16_cterm0D = "04" let s:cterm0E = "05" let g:base16_cterm0E = "05" if exists("base16colorspace") && base16colorspace == "256" let s:cterm01 = "18" let g:base16_cterm01 = "18" let s:cterm02 = "19" let g:base16_cterm02 = "19" let s:cterm04 = "20" let g:base16_cterm04 = "20" let s:cterm06 = "21" let g:base16_cterm06 = "21" let s:cterm09 = "16" let g:base16_cterm09 = "16" let s:cterm0F = "17" let g:base16_cterm0F = "17" else let s:cterm01 = "10" let g:base16_cterm01 = "10" let s:cterm02 = "11" let g:base16_cterm02 = "11" let s:cterm04 = "12" let g:base16_cterm04 = "12" let s:cterm06 = "13" let g:base16_cterm06 = "13" let s:cterm09 = "09" let g:base16_cterm09 = "09" let s:cterm0F = "14" let g:base16_cterm0F = "14" endif " Neovim terminal colours if has("nvim") let g:terminal_color_0 = "#1d1f21" let g:terminal_color_1 = "#cc6666" let g:terminal_color_2 = "#b5bd68" let g:terminal_color_3 = "#f0c674" let g:terminal_color_4 = "#81a2be" let g:terminal_color_5 = "#b294bb" let g:terminal_color_6 = "#8abeb7" let g:terminal_color_7 = "#c5c8c6" let g:terminal_color_8 = "#969896" let g:terminal_color_9 = "#cc6666" let g:terminal_color_10 = "#b5bd68" let g:terminal_color_11 = "#f0c674" let g:terminal_color_12 = "#81a2be" let g:terminal_color_13 = "#b294bb" let g:terminal_color_14 = "#8abeb7" let g:terminal_color_15 = "#ffffff" let g:terminal_color_background = g:terminal_color_0 let g:terminal_color_foreground = g:terminal_color_5 if &background == "light" let g:terminal_color_background = "#000000" let g:terminal_color_foreground = g:terminal_color_2 endif elseif has("terminal") let g:terminal_ansi_colors = [ \ "#1d1f21", \ "#cc6666", \ "#b5bd68", \ "#f0c674", \ "#81a2be", \ "#b294bb", \ "#8abeb7", \ "#c5c8c6", \ "#969896", \ "#cc6666", \ "#b5bd68", \ "#f0c674", \ "#81a2be", \ "#b294bb", \ "#8abeb7", \ "#ffffff", \ ] endif " Theme setup hi clear syntax reset let g:colors_name = "base16-tomorrow-night" " Highlighting function " Optional variables are attributes and guisp function! g:Base16hi(group, guifg, guibg, ctermfg, ctermbg, ...) let l:attr = get(a:, 1, "") let l:guisp = get(a:, 2, "") if a:guifg != "" exec "hi " . a:group . " guifg=#" . a:guifg endif if a:guibg != "" exec "hi " . a:group . " guibg=#" . a:guibg endif if a:ctermfg != "" exec "hi " . a:group . " ctermfg=" . a:ctermfg endif if a:ctermbg != "" exec "hi " . a:group . " ctermbg=" . a:ctermbg endif if l:attr != "" exec "hi " . a:group . " gui=" . l:attr . " cterm=" . l:attr endif if l:guisp != "" exec "hi " . a:group . " guisp=#" . l:guisp endif endfunction fun hi(group, guifg, guibg, ctermfg, ctermbg, attr, guisp) call g:Base16hi(a:group, a:guifg, a:guibg, a:ctermfg, a:ctermbg, a:attr, a:guisp) endfun " Vim editor colors call hi("Normal", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") call hi("Bold", "", "", "", "", "bold", "") call hi("Debug", s:gui08, "", s:cterm08, "", "", "") call hi("Directory", s:gui0D, "", s:cterm0D, "", "", "") call hi("Error", s:gui00, s:gui08, s:cterm00, s:cterm08, "", "") call hi("ErrorMsg", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") call hi("Exception", s:gui08, "", s:cterm08, "", "", "") call hi("FoldColumn", s:gui0C, s:gui01, s:cterm0C, s:cterm01, "", "") call hi("Folded", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("IncSearch", s:gui01, s:gui09, s:cterm01, s:cterm09, "none", "") call hi("Italic", "", "", "", "", "none", "") call hi("Macro", s:gui08, "", s:cterm08, "", "", "") call hi("MatchParen", "", s:gui03, "", s:cterm03, "", "") call hi("ModeMsg", s:gui0B, "", s:cterm0B, "", "", "") call hi("MoreMsg", s:gui0B, "", s:cterm0B, "", "", "") call hi("Question", s:gui0D, "", s:cterm0D, "", "", "") call hi("Search", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "", "") call hi("Substitute", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "none", "") call hi("SpecialKey", s:gui03, "", s:cterm03, "", "", "") call hi("TooLong", s:gui08, "", s:cterm08, "", "", "") call hi("Underlined", s:gui08, "", s:cterm08, "", "", "") call hi("Visual", "", s:gui02, "", s:cterm02, "", "") call hi("VisualNOS", s:gui08, "", s:cterm08, "", "", "") call hi("WarningMsg", s:gui08, "", s:cterm08, "", "", "") call hi("WildMenu", s:gui08, s:gui0A, s:cterm08, "", "", "") call hi("Title", s:gui0D, "", s:cterm0D, "", "none", "") call hi("Conceal", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") call hi("Cursor", s:gui00, s:gui05, s:cterm00, s:cterm05, "", "") call hi("NonText", s:gui03, "", s:cterm03, "", "", "") call hi("LineNr", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("SignColumn", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("StatusLine", s:gui04, s:gui02, s:cterm04, s:cterm02, "none", "") call hi("StatusLineNC", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("VertSplit", s:gui02, s:gui02, s:cterm02, s:cterm02, "none", "") call hi("ColorColumn", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorColumn", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorLine", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorLineNr", s:gui04, s:gui01, s:cterm04, s:cterm01, "", "") call hi("QuickFixLine", "", s:gui01, "", s:cterm01, "none", "") call hi("PMenu", s:gui05, s:gui01, s:cterm05, s:cterm01, "none", "") call hi("PMenuSel", s:gui01, s:gui05, s:cterm01, s:cterm05, "", "") call hi("TabLine", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("TabLineFill", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("TabLineSel", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "none", "") " Standard syntax highlighting call hi("Boolean", s:gui09, "", s:cterm09, "", "", "") call hi("Character", s:gui08, "", s:cterm08, "", "", "") call hi("Comment", s:gui03, "", s:cterm03, "", "", "") call hi("Conditional", s:gui0E, "", s:cterm0E, "", "", "") call hi("Constant", s:gui09, "", s:cterm09, "", "", "") call hi("Define", s:gui0E, "", s:cterm0E, "", "none", "") call hi("Delimiter", s:gui0F, "", s:cterm0F, "", "", "") call hi("Float", s:gui09, "", s:cterm09, "", "", "") call hi("Function", s:gui0D, "", s:cterm0D, "", "", "") call hi("Identifier", s:gui08, "", s:cterm08, "", "none", "") call hi("Include", s:gui0D, "", s:cterm0D, "", "", "") call hi("Keyword", s:gui0E, "", s:cterm0E, "", "", "") call hi("Label", s:gui0A, "", s:cterm0A, "", "", "") call hi("Number", s:gui09, "", s:cterm09, "", "", "") call hi("Operator", s:gui05, "", s:cterm05, "", "none", "") call hi("PreProc", s:gui0A, "", s:cterm0A, "", "", "") call hi("Repeat", s:gui0A, "", s:cterm0A, "", "", "") call hi("Special", s:gui0C, "", s:cterm0C, "", "", "") call hi("SpecialChar", s:gui0F, "", s:cterm0F, "", "", "") call hi("Statement", s:gui08, "", s:cterm08, "", "", "") call hi("StorageClass", s:gui0A, "", s:cterm0A, "", "", "") call hi("String", s:gui0B, "", s:cterm0B, "", "", "") call hi("Structure", s:gui0E, "", s:cterm0E, "", "", "") call hi("Tag", s:gui0A, "", s:cterm0A, "", "", "") call hi("Todo", s:gui0A, s:gui01, s:cterm0A, s:cterm01, "", "") call hi("Type", s:gui0A, "", s:cterm0A, "", "none", "") call hi("Typedef", s:gui0A, "", s:cterm0A, "", "", "") " C highlighting call hi("cOperator", s:gui0C, "", s:cterm0C, "", "", "") call hi("cPreCondit", s:gui0E, "", s:cterm0E, "", "", "") " C# highlighting call hi("csClass", s:gui0A, "", s:cterm0A, "", "", "") call hi("csAttribute", s:gui0A, "", s:cterm0A, "", "", "") call hi("csModifier", s:gui0E, "", s:cterm0E, "", "", "") call hi("csType", s:gui08, "", s:cterm08, "", "", "") call hi("csUnspecifiedStatement", s:gui0D, "", s:cterm0D, "", "", "") call hi("csContextualStatement", s:gui0E, "", s:cterm0E, "", "", "") call hi("csNewDecleration", s:gui08, "", s:cterm08, "", "", "") " CSS highlighting call hi("cssBraces", s:gui05, "", s:cterm05, "", "", "") call hi("cssClassName", s:gui0E, "", s:cterm0E, "", "", "") call hi("cssColor", s:gui0C, "", s:cterm0C, "", "", "") " Diff highlighting call hi("DiffAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("DiffChange", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("DiffDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") call hi("DiffText", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("DiffAdded", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") call hi("DiffFile", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") call hi("DiffNewFile", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") call hi("DiffLine", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") call hi("DiffRemoved", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") " Git highlighting call hi("gitcommitOverflow", s:gui08, "", s:cterm08, "", "", "") call hi("gitcommitSummary", s:gui0B, "", s:cterm0B, "", "", "") call hi("gitcommitComment", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitUntracked", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitDiscarded", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitSelected", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitHeader", s:gui0E, "", s:cterm0E, "", "", "") call hi("gitcommitSelectedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitUnmergedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitDiscardedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitBranch", s:gui09, "", s:cterm09, "", "bold", "") call hi("gitcommitUntrackedFile", s:gui0A, "", s:cterm0A, "", "", "") call hi("gitcommitUnmergedFile", s:gui08, "", s:cterm08, "", "bold", "") call hi("gitcommitDiscardedFile", s:gui08, "", s:cterm08, "", "bold", "") call hi("gitcommitSelectedFile", s:gui0B, "", s:cterm0B, "", "bold", "") " GitGutter highlighting call hi("GitGutterAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("GitGutterChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("GitGutterDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") call hi("GitGutterChangeDelete", s:gui0E, s:gui01, s:cterm0E, s:cterm01, "", "") " HTML highlighting call hi("htmlBold", s:gui0A, "", s:cterm0A, "", "", "") call hi("htmlItalic", s:gui0E, "", s:cterm0E, "", "", "") call hi("htmlEndTag", s:gui05, "", s:cterm05, "", "", "") call hi("htmlTag", s:gui05, "", s:cterm05, "", "", "") " JavaScript highlighting call hi("javaScript", s:gui05, "", s:cterm05, "", "", "") call hi("javaScriptBraces", s:gui05, "", s:cterm05, "", "", "") call hi("javaScriptNumber", s:gui09, "", s:cterm09, "", "", "") " pangloss/vim-javascript highlighting call hi("jsOperator", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsStatement", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsReturn", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsThis", s:gui08, "", s:cterm08, "", "", "") call hi("jsClassDefinition", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsFunction", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsFuncName", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsFuncCall", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsClassFuncName", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsClassMethodType", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsRegexpString", s:gui0C, "", s:cterm0C, "", "", "") call hi("jsGlobalObjects", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsGlobalNodeObjects", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsExceptions", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsBuiltins", s:gui0A, "", s:cterm0A, "", "", "") " Mail highlighting call hi("mailQuoted1", s:gui0A, "", s:cterm0A, "", "", "") call hi("mailQuoted2", s:gui0B, "", s:cterm0B, "", "", "") call hi("mailQuoted3", s:gui0E, "", s:cterm0E, "", "", "") call hi("mailQuoted4", s:gui0C, "", s:cterm0C, "", "", "") call hi("mailQuoted5", s:gui0D, "", s:cterm0D, "", "", "") call hi("mailQuoted6", s:gui0A, "", s:cterm0A, "", "", "") call hi("mailURL", s:gui0D, "", s:cterm0D, "", "", "") call hi("mailEmail", s:gui0D, "", s:cterm0D, "", "", "") " Markdown highlighting call hi("markdownCode", s:gui0B, "", s:cterm0B, "", "", "") call hi("markdownError", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") call hi("markdownCodeBlock", s:gui0B, "", s:cterm0B, "", "", "") call hi("markdownHeadingDelimiter", s:gui0D, "", s:cterm0D, "", "", "") " NERDTree highlighting call hi("NERDTreeDirSlash", s:gui0D, "", s:cterm0D, "", "", "") call hi("NERDTreeExecFile", s:gui05, "", s:cterm05, "", "", "") " PHP highlighting call hi("phpMemberSelector", s:gui05, "", s:cterm05, "", "", "") call hi("phpComparison", s:gui05, "", s:cterm05, "", "", "") call hi("phpParent", s:gui05, "", s:cterm05, "", "", "") call hi("phpMethodsVar", s:gui0C, "", s:cterm0C, "", "", "") " Python highlighting call hi("pythonOperator", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonRepeat", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonInclude", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonStatement", s:gui0E, "", s:cterm0E, "", "", "") " Ruby highlighting call hi("rubyAttribute", s:gui0D, "", s:cterm0D, "", "", "") call hi("rubyConstant", s:gui0A, "", s:cterm0A, "", "", "") call hi("rubyInterpolationDelimiter", s:gui0F, "", s:cterm0F, "", "", "") call hi("rubyRegexp", s:gui0C, "", s:cterm0C, "", "", "") call hi("rubySymbol", s:gui0B, "", s:cterm0B, "", "", "") call hi("rubyStringDelimiter", s:gui0B, "", s:cterm0B, "", "", "") " SASS highlighting call hi("sassidChar", s:gui08, "", s:cterm08, "", "", "") call hi("sassClassChar", s:gui09, "", s:cterm09, "", "", "") call hi("sassInclude", s:gui0E, "", s:cterm0E, "", "", "") call hi("sassMixing", s:gui0E, "", s:cterm0E, "", "", "") call hi("sassMixinName", s:gui0D, "", s:cterm0D, "", "", "") " Signify highlighting call hi("SignifySignAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("SignifySignChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("SignifySignDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") " Spelling highlighting call hi("SpellBad", "", "", "", "", "undercurl", s:gui08) call hi("SpellLocal", "", "", "", "", "undercurl", s:gui0C) call hi("SpellCap", "", "", "", "", "undercurl", s:gui0D) call hi("SpellRare", "", "", "", "", "undercurl", s:gui0E) " Startify highlighting call hi("StartifyBracket", s:gui03, "", s:cterm03, "", "", "") call hi("StartifyFile", s:gui07, "", s:cterm07, "", "", "") call hi("StartifyFooter", s:gui03, "", s:cterm03, "", "", "") call hi("StartifyHeader", s:gui0B, "", s:cterm0B, "", "", "") call hi("StartifyNumber", s:gui09, "", s:cterm09, "", "", "") call hi("StartifyPath", s:gui03, "", s:cterm03, "", "", "") call hi("StartifySection", s:gui0E, "", s:cterm0E, "", "", "") call hi("StartifySelect", s:gui0C, "", s:cterm0C, "", "", "") call hi("StartifySlash", s:gui03, "", s:cterm03, "", "", "") call hi("StartifySpecial", s:gui03, "", s:cterm03, "", "", "") " Java highlighting call hi("javaOperator", s:gui0D, "", s:cterm0D, "", "", "") " Remove functions delf hi " Remove color variables unlet s:gui00 s:gui01 s:gui02 s:gui03 s:gui04 s:gui05 s:gui06 s:gui07 s:gui08 s:gui09 s:gui0A s:gui0B s:gui0C s:gui0D s:gui0E s:gui0F unlet s:cterm00 s:cterm01 s:cterm02 s:cterm03 s:cterm04 s:cterm05 s:cterm06 s:cterm07 s:cterm08 s:cterm09 s:cterm0A s:cterm0B s:cterm0C s:cterm0D s:cterm0E s:cterm0F ================================================ FILE: nvim/.config/nvim/colors/test.vim ================================================ " vi:syntax=vim " base16-vim (https://github.com/chriskempson/base16-vim) " by Chris Kempson (http://chriskempson.com) " Tomorrow Night scheme by Chris Kempson (http://chriskempson.com) " This enables the coresponding base16-shell script to run so that " :colorscheme works in terminals supported by base16-shell scripts " User must set this variable in .vimrc " let g:base16_shell_path=base16-builder/output/shell/ if !has("gui_running") if exists("g:base16_shell_path") execute "silent !/bin/sh ".g:base16_shell_path."/base16-tomorrow-night.sh" endif endif " GUI color definitions let s:gui00 = "1d1f21" let g:base16_gui00 = "1d1f21" let s:gui01 = "282a2e" let g:base16_gui01 = "282a2e" let s:gui02 = "373b41" let g:base16_gui02 = "373b41" let s:gui03 = "969896" let g:base16_gui03 = "969896" let s:gui04 = "b4b7b4" let g:base16_gui04 = "b4b7b4" let s:gui05 = "c5c8c6" let g:base16_gui05 = "c5c8c6" let s:gui06 = "e0e0e0" let g:base16_gui06 = "e0e0e0" let s:gui07 = "ffffff" let g:base16_gui07 = "ffffff" let s:gui08 = "cc6666" let g:base16_gui08 = "cc6666" let s:gui09 = "de935f" let g:base16_gui09 = "de935f" let s:gui0A = "f0c674" let g:base16_gui0A = "f0c674" let s:gui0B = "b5bd68" let g:base16_gui0B = "b5bd68" let s:gui0C = "8abeb7" let g:base16_gui0C = "8abeb7" let s:gui0D = "81a2be" let g:base16_gui0D = "81a2be" let s:gui0E = "b294bb" let g:base16_gui0E = "b294bb" let s:gui0F = "a3685a" let g:base16_gui0F = "a3685a" " Terminal color definitions let s:cterm00 = "00" let g:base16_cterm00 = "00" let s:cterm03 = "08" let g:base16_cterm03 = "08" let s:cterm05 = "07" let g:base16_cterm05 = "07" let s:cterm07 = "15" let g:base16_cterm07 = "15" let s:cterm08 = "01" let g:base16_cterm08 = "01" let s:cterm0A = "03" let g:base16_cterm0A = "03" let s:cterm0B = "02" let g:base16_cterm0B = "02" let s:cterm0C = "06" let g:base16_cterm0C = "06" let s:cterm0D = "04" let g:base16_cterm0D = "04" let s:cterm0E = "05" let g:base16_cterm0E = "05" if exists("base16colorspace") && base16colorspace == "256" let s:cterm01 = "18" let g:base16_cterm01 = "18" let s:cterm02 = "19" let g:base16_cterm02 = "19" let s:cterm04 = "20" let g:base16_cterm04 = "20" let s:cterm06 = "21" let g:base16_cterm06 = "21" let s:cterm09 = "16" let g:base16_cterm09 = "16" let s:cterm0F = "17" let g:base16_cterm0F = "17" else let s:cterm01 = "10" let g:base16_cterm01 = "10" let s:cterm02 = "11" let g:base16_cterm02 = "11" let s:cterm04 = "12" let g:base16_cterm04 = "12" let s:cterm06 = "13" let g:base16_cterm06 = "13" let s:cterm09 = "09" let g:base16_cterm09 = "09" let s:cterm0F = "14" let g:base16_cterm0F = "14" endif " Neovim terminal colours if has("nvim") let g:terminal_color_0 = "#1d1f21" let g:terminal_color_1 = "#cc6666" let g:terminal_color_2 = "#b5bd68" let g:terminal_color_3 = "#f0c674" let g:terminal_color_4 = "#81a2be" let g:terminal_color_5 = "#b294bb" let g:terminal_color_6 = "#8abeb7" let g:terminal_color_7 = "#c5c8c6" let g:terminal_color_8 = "#969896" let g:terminal_color_9 = "#cc6666" let g:terminal_color_10 = "#b5bd68" let g:terminal_color_11 = "#f0c674" let g:terminal_color_12 = "#81a2be" let g:terminal_color_13 = "#b294bb" let g:terminal_color_14 = "#8abeb7" let g:terminal_color_15 = "#ffffff" let g:terminal_color_background = g:terminal_color_0 let g:terminal_color_foreground = g:terminal_color_5 if &background == "light" let g:terminal_color_background = g:terminal_color_7 let g:terminal_color_foreground = g:terminal_color_2 endif elseif has("terminal") let g:terminal_ansi_colors = [ \ "#1d1f21", \ "#cc6666", \ "#b5bd68", \ "#f0c674", \ "#81a2be", \ "#b294bb", \ "#8abeb7", \ "#c5c8c6", \ "#969896", \ "#cc6666", \ "#b5bd68", \ "#f0c674", \ "#81a2be", \ "#b294bb", \ "#8abeb7", \ "#ffffff", \ ] endif " Theme setup hi clear syntax reset let g:colors_name = "base16-tomorrow-night" " Highlighting function " Optional variables are attributes and guisp function! g:Base16hi(group, guifg, guibg, ctermfg, ctermbg, ...) let l:attr = get(a:, 1, "") let l:guisp = get(a:, 2, "") if a:guifg != "" exec "hi " . a:group . " guifg=#" . a:guifg endif if a:guibg != "" exec "hi " . a:group . " guibg=#" . a:guibg endif if a:ctermfg != "" exec "hi " . a:group . " ctermfg=" . a:ctermfg endif if a:ctermbg != "" exec "hi " . a:group . " ctermbg=" . a:ctermbg endif if l:attr != "" exec "hi " . a:group . " gui=" . l:attr . " cterm=" . l:attr endif if l:guisp != "" exec "hi " . a:group . " guisp=#" . l:guisp endif endfunction fun hi(group, guifg, guibg, ctermfg, ctermbg, attr, guisp) call g:Base16hi(a:group, a:guifg, a:guibg, a:ctermfg, a:ctermbg, a:attr, a:guisp) endfun " Vim editor colors call hi("Normal", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") call hi("Bold", "", "", "", "", "bold", "") call hi("Debug", s:gui08, "", s:cterm08, "", "", "") call hi("Directory", s:gui0D, "", s:cterm0D, "", "", "") call hi("Error", s:gui00, s:gui08, s:cterm00, s:cterm08, "", "") call hi("ErrorMsg", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") call hi("Exception", s:gui08, "", s:cterm08, "", "", "") call hi("FoldColumn", s:gui0C, s:gui01, s:cterm0C, s:cterm01, "", "") call hi("Folded", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("IncSearch", s:gui01, s:gui09, s:cterm01, s:cterm09, "none", "") call hi("Italic", "", "", "", "", "none", "") call hi("Macro", s:gui08, "", s:cterm08, "", "", "") call hi("MatchParen", "", s:gui03, "", s:cterm03, "", "") call hi("ModeMsg", s:gui0B, "", s:cterm0B, "", "", "") call hi("MoreMsg", s:gui0B, "", s:cterm0B, "", "", "") call hi("Question", s:gui0D, "", s:cterm0D, "", "", "") call hi("Search", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "", "") call hi("Substitute", s:gui01, s:gui0A, s:cterm01, s:cterm0A, "none", "") call hi("SpecialKey", s:gui03, "", s:cterm03, "", "", "") call hi("TooLong", s:gui08, "", s:cterm08, "", "", "") call hi("Underlined", s:gui08, "", s:cterm08, "", "", "") call hi("Visual", "", s:gui02, "", s:cterm02, "", "") call hi("VisualNOS", s:gui08, "", s:cterm08, "", "", "") call hi("WarningMsg", s:gui08, "", s:cterm08, "", "", "") call hi("WildMenu", s:gui08, s:gui0A, s:cterm08, "", "", "") call hi("Title", s:gui0D, "", s:cterm0D, "", "none", "") call hi("Conceal", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") call hi("Cursor", s:gui00, s:gui05, s:cterm00, s:cterm05, "", "") call hi("NonText", s:gui03, "", s:cterm03, "", "", "") call hi("LineNr", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("SignColumn", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("StatusLine", s:gui04, s:gui02, s:cterm04, s:cterm02, "none", "") call hi("StatusLineNC", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("VertSplit", s:gui02, s:gui02, s:cterm02, s:cterm02, "none", "") call hi("ColorColumn", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorColumn", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorLine", "", s:gui01, "", s:cterm01, "none", "") call hi("CursorLineNr", s:gui04, s:gui01, s:cterm04, s:cterm01, "", "") call hi("QuickFixLine", "", s:gui01, "", s:cterm01, "none", "") call hi("PMenu", s:gui05, s:gui01, s:cterm05, s:cterm01, "none", "") call hi("PMenuSel", s:gui01, s:gui05, s:cterm01, s:cterm05, "", "") call hi("TabLine", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("TabLineFill", s:gui03, s:gui01, s:cterm03, s:cterm01, "none", "") call hi("TabLineSel", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "none", "") " Standard syntax highlighting call hi("Boolean", s:gui09, "", s:cterm09, "", "", "") call hi("Character", s:gui08, "", s:cterm08, "", "", "") call hi("Comment", s:gui03, "", s:cterm03, "", "", "") call hi("Conditional", s:gui0E, "", s:cterm0E, "", "", "") call hi("Constant", s:gui09, "", s:cterm09, "", "", "") call hi("Define", s:gui0E, "", s:cterm0E, "", "none", "") call hi("Delimiter", s:gui0F, "", s:cterm0F, "", "", "") call hi("Float", s:gui09, "", s:cterm09, "", "", "") call hi("Function", s:gui0D, "", s:cterm0D, "", "", "") call hi("Identifier", s:gui08, "", s:cterm08, "", "none", "") call hi("Include", s:gui0D, "", s:cterm0D, "", "", "") call hi("Keyword", s:gui0E, "", s:cterm0E, "", "", "") call hi("Label", s:gui0A, "", s:cterm0A, "", "", "") call hi("Number", s:gui09, "", s:cterm09, "", "", "") call hi("Operator", s:gui05, "", s:cterm05, "", "none", "") call hi("PreProc", s:gui0A, "", s:cterm0A, "", "", "") call hi("Repeat", s:gui0A, "", s:cterm0A, "", "", "") call hi("Special", s:gui0C, "", s:cterm0C, "", "", "") call hi("SpecialChar", s:gui0F, "", s:cterm0F, "", "", "") call hi("Statement", s:gui08, "", s:cterm08, "", "", "") call hi("StorageClass", s:gui0A, "", s:cterm0A, "", "", "") call hi("String", s:gui0B, "", s:cterm0B, "", "", "") call hi("Structure", s:gui0E, "", s:cterm0E, "", "", "") call hi("Tag", s:gui0A, "", s:cterm0A, "", "", "") call hi("Todo", s:gui0A, s:gui01, s:cterm0A, s:cterm01, "", "") call hi("Type", s:gui0A, "", s:cterm0A, "", "none", "") call hi("Typedef", s:gui0A, "", s:cterm0A, "", "", "") " C highlighting call hi("cOperator", s:gui0C, "", s:cterm0C, "", "", "") call hi("cPreCondit", s:gui0E, "", s:cterm0E, "", "", "") " C# highlighting call hi("csClass", s:gui0A, "", s:cterm0A, "", "", "") call hi("csAttribute", s:gui0A, "", s:cterm0A, "", "", "") call hi("csModifier", s:gui0E, "", s:cterm0E, "", "", "") call hi("csType", s:gui08, "", s:cterm08, "", "", "") call hi("csUnspecifiedStatement", s:gui0D, "", s:cterm0D, "", "", "") call hi("csContextualStatement", s:gui0E, "", s:cterm0E, "", "", "") call hi("csNewDecleration", s:gui08, "", s:cterm08, "", "", "") " CSS highlighting call hi("cssBraces", s:gui05, "", s:cterm05, "", "", "") call hi("cssClassName", s:gui0E, "", s:cterm0E, "", "", "") call hi("cssColor", s:gui0C, "", s:cterm0C, "", "", "") " Diff highlighting call hi("DiffAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("DiffChange", s:gui03, s:gui01, s:cterm03, s:cterm01, "", "") call hi("DiffDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") call hi("DiffText", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("DiffAdded", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") call hi("DiffFile", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") call hi("DiffNewFile", s:gui0B, s:gui00, s:cterm0B, s:cterm00, "", "") call hi("DiffLine", s:gui0D, s:gui00, s:cterm0D, s:cterm00, "", "") call hi("DiffRemoved", s:gui08, s:gui00, s:cterm08, s:cterm00, "", "") " Git highlighting call hi("gitcommitOverflow", s:gui08, "", s:cterm08, "", "", "") call hi("gitcommitSummary", s:gui0B, "", s:cterm0B, "", "", "") call hi("gitcommitComment", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitUntracked", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitDiscarded", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitSelected", s:gui03, "", s:cterm03, "", "", "") call hi("gitcommitHeader", s:gui0E, "", s:cterm0E, "", "", "") call hi("gitcommitSelectedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitUnmergedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitDiscardedType", s:gui0D, "", s:cterm0D, "", "", "") call hi("gitcommitBranch", s:gui09, "", s:cterm09, "", "bold", "") call hi("gitcommitUntrackedFile", s:gui0A, "", s:cterm0A, "", "", "") call hi("gitcommitUnmergedFile", s:gui08, "", s:cterm08, "", "bold", "") call hi("gitcommitDiscardedFile", s:gui08, "", s:cterm08, "", "bold", "") call hi("gitcommitSelectedFile", s:gui0B, "", s:cterm0B, "", "bold", "") " GitGutter highlighting call hi("GitGutterAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("GitGutterChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("GitGutterDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") call hi("GitGutterChangeDelete", s:gui0E, s:gui01, s:cterm0E, s:cterm01, "", "") " HTML highlighting call hi("htmlBold", s:gui0A, "", s:cterm0A, "", "", "") call hi("htmlItalic", s:gui0E, "", s:cterm0E, "", "", "") call hi("htmlEndTag", s:gui05, "", s:cterm05, "", "", "") call hi("htmlTag", s:gui05, "", s:cterm05, "", "", "") " JavaScript highlighting call hi("javaScript", s:gui05, "", s:cterm05, "", "", "") call hi("javaScriptBraces", s:gui05, "", s:cterm05, "", "", "") call hi("javaScriptNumber", s:gui09, "", s:cterm09, "", "", "") " pangloss/vim-javascript highlighting call hi("jsOperator", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsStatement", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsReturn", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsThis", s:gui08, "", s:cterm08, "", "", "") call hi("jsClassDefinition", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsFunction", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsFuncName", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsFuncCall", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsClassFuncName", s:gui0D, "", s:cterm0D, "", "", "") call hi("jsClassMethodType", s:gui0E, "", s:cterm0E, "", "", "") call hi("jsRegexpString", s:gui0C, "", s:cterm0C, "", "", "") call hi("jsGlobalObjects", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsGlobalNodeObjects", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsExceptions", s:gui0A, "", s:cterm0A, "", "", "") call hi("jsBuiltins", s:gui0A, "", s:cterm0A, "", "", "") " Mail highlighting call hi("mailQuoted1", s:gui0A, "", s:cterm0A, "", "", "") call hi("mailQuoted2", s:gui0B, "", s:cterm0B, "", "", "") call hi("mailQuoted3", s:gui0E, "", s:cterm0E, "", "", "") call hi("mailQuoted4", s:gui0C, "", s:cterm0C, "", "", "") call hi("mailQuoted5", s:gui0D, "", s:cterm0D, "", "", "") call hi("mailQuoted6", s:gui0A, "", s:cterm0A, "", "", "") call hi("mailURL", s:gui0D, "", s:cterm0D, "", "", "") call hi("mailEmail", s:gui0D, "", s:cterm0D, "", "", "") " Markdown highlighting call hi("markdownCode", s:gui0B, "", s:cterm0B, "", "", "") call hi("markdownError", s:gui05, s:gui00, s:cterm05, s:cterm00, "", "") call hi("markdownCodeBlock", s:gui0B, "", s:cterm0B, "", "", "") call hi("markdownHeadingDelimiter", s:gui0D, "", s:cterm0D, "", "", "") " NERDTree highlighting call hi("NERDTreeDirSlash", s:gui0D, "", s:cterm0D, "", "", "") call hi("NERDTreeExecFile", s:gui05, "", s:cterm05, "", "", "") " PHP highlighting call hi("phpMemberSelector", s:gui05, "", s:cterm05, "", "", "") call hi("phpComparison", s:gui05, "", s:cterm05, "", "", "") call hi("phpParent", s:gui05, "", s:cterm05, "", "", "") call hi("phpMethodsVar", s:gui0C, "", s:cterm0C, "", "", "") " Python highlighting call hi("pythonOperator", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonRepeat", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonInclude", s:gui0E, "", s:cterm0E, "", "", "") call hi("pythonStatement", s:gui0E, "", s:cterm0E, "", "", "") " Ruby highlighting call hi("rubyAttribute", s:gui0D, "", s:cterm0D, "", "", "") call hi("rubyConstant", s:gui0A, "", s:cterm0A, "", "", "") call hi("rubyInterpolationDelimiter", s:gui0F, "", s:cterm0F, "", "", "") call hi("rubyRegexp", s:gui0C, "", s:cterm0C, "", "", "") call hi("rubySymbol", s:gui0B, "", s:cterm0B, "", "", "") call hi("rubyStringDelimiter", s:gui0B, "", s:cterm0B, "", "", "") " SASS highlighting call hi("sassidChar", s:gui08, "", s:cterm08, "", "", "") call hi("sassClassChar", s:gui09, "", s:cterm09, "", "", "") call hi("sassInclude", s:gui0E, "", s:cterm0E, "", "", "") call hi("sassMixing", s:gui0E, "", s:cterm0E, "", "", "") call hi("sassMixinName", s:gui0D, "", s:cterm0D, "", "", "") " Signify highlighting call hi("SignifySignAdd", s:gui0B, s:gui01, s:cterm0B, s:cterm01, "", "") call hi("SignifySignChange", s:gui0D, s:gui01, s:cterm0D, s:cterm01, "", "") call hi("SignifySignDelete", s:gui08, s:gui01, s:cterm08, s:cterm01, "", "") " Spelling highlighting call hi("SpellBad", "", "", "", "", "undercurl", s:gui08) call hi("SpellLocal", "", "", "", "", "undercurl", s:gui0C) call hi("SpellCap", "", "", "", "", "undercurl", s:gui0D) call hi("SpellRare", "", "", "", "", "undercurl", s:gui0E) " Startify highlighting call hi("StartifyBracket", s:gui03, "", s:cterm03, "", "", "") call hi("StartifyFile", s:gui07, "", s:cterm07, "", "", "") call hi("StartifyFooter", s:gui03, "", s:cterm03, "", "", "") call hi("StartifyHeader", s:gui0B, "", s:cterm0B, "", "", "") call hi("StartifyNumber", s:gui09, "", s:cterm09, "", "", "") call hi("StartifyPath", s:gui03, "", s:cterm03, "", "", "") call hi("StartifySection", s:gui0E, "", s:cterm0E, "", "", "") call hi("StartifySelect", s:gui0C, "", s:cterm0C, "", "", "") call hi("StartifySlash", s:gui03, "", s:cterm03, "", "", "") call hi("StartifySpecial", s:gui03, "", s:cterm03, "", "", "") " Java highlighting call hi("javaOperator", s:gui0D, "", s:cterm0D, "", "", "") " Remove functions delf hi " Remove color variables unlet s:gui00 s:gui01 s:gui02 s:gui03 s:gui04 s:gui05 s:gui06 s:gui07 s:gui08 s:gui09 s:gui0A s:gui0B s:gui0C s:gui0D s:gui0E s:gui0F unlet s:cterm00 s:cterm01 s:cterm02 s:cterm03 s:cterm04 s:cterm05 s:cterm06 s:cterm07 s:cterm08 s:cterm09 s:cterm0A s:cterm0B s:cterm0C s:cterm0D s:cterm0E s:cterm0F ================================================ FILE: nvim/.config/nvim/init.lua ================================================ local core_modules = { "options", "plugins", "mappings", } for _, module in ipairs(core_modules) do local ok, err = pcall(require, module) if not ok then vim.notify("Failed to load " .. module .. "\n\n" .. err) end end ================================================ FILE: nvim/.config/nvim/lua/mappings.lua ================================================ local function map(mode, lhs, rhs, opts) local options = {noremap = true} if opts then options = vim.tbl_extend("force", options, opts) end vim.api.nvim_set_keymap(mode, lhs, rhs, options) end -- Scroll up/down map("n", "J", "") map("n", "K", "") -- Since I have mapped Shift-J or uppercase J to scrolling down, -- we have to map ctrl-j to join so that we can join two lines map("n", "", ":join") -- More intuitive way of... map("n", "H", "0") -- going home in normal mode map("v", "H", "0") -- going home in visual mode map("n", "L", "A") -- going to end of line and appending in normal mode map("v", "L", "$") -- going to end of line in visual mode -- Move up and down visual lines map("n", "j", "v:count == 0 ? 'gj' : 'j'", {expr = true}) map("n", "k", "v:count == 0 ? 'gk' : 'k'", {expr = true}) -- Quickly access the vim command line map("n", ",", ":") -- Move between splits map("n", "", "") map("n", "", "") map("n", "", "") map("n", "", "") -- Top/bottom of fold map("n", "fj", "zo]zk") map("n", "fk", "zo[zj") -- Create new file or edit an existing file map("n", "", ":e " .. vim.fn.expand('%:p:h') .. "/") -- Close current buffer map("n", "", ":bp:bdelete #", {silent = true}) -- Go to Nth buffer map("", "", "lua require'bufferline'.go_to_buffer(1)") map("", "", "lua require'bufferline'.go_to_buffer(2)") map("", "", "lua require'bufferline'.go_to_buffer(3)") map("", "", "lua require'bufferline'.go_to_buffer(4)") map("", "", "lua require'bufferline'.go_to_buffer(5)") map("", "", "lua require'bufferline'.go_to_buffer(6)") map("", "", "lua require'bufferline'.go_to_buffer(7)") map("", "", "lua require'bufferline'.go_to_buffer(8)") map("", "", "lua require'bufferline'.go_to_buffer(9)") map("", "", "lua require'bufferline'.go_to_buffer(10)") -- Move buffer tabs (like moving tabs in web browser) map("n", "", ":BufferLineMoveNext", {silent = true}) map("n", "", ":BufferLineMovePrev", {silent = true}) -- Toggle the NvimTree map("n", "", ":NvimTreeToggle", {silent = true}) -- Turn off highlighting map("n", "", ":noh", {silent = true}) -- Open a file through Telescope map("n", "", ":Telescope find_files hidden=true", {silent = true}) -- Rename a variable throughout the file map('i', '', 'lua require("renamer").rename()', { noremap = true, silent = true }) map('n', 'rn', 'lua require("renamer").rename()', { noremap = true, silent = true }) map('v', 'rn', 'lua require("renamer").rename()', { noremap = true, silent = true }) -- Presistant indent mode map("v", "<", "", ">gv") -- Reload current file map("n", "", ":luafile %", {silent = true}) -- More sensible undo -- https://stackoverflow.com/a/4360415/9215267 map("i", "", "u") -- Paste without losing text -- https://andrewcourter.substack.com/i/137693539/paste-without-losing-text map("v", "p", '"_dP') ================================================ FILE: nvim/.config/nvim/lua/options.lua ================================================ local opt = vim.opt local g = vim.g local cmd = vim.cmd opt.relativenumber = true opt.lazyredraw = true opt.termguicolors = true opt.clipboard = "unnamedplus" opt.cursorline = true opt.ignorecase = true opt.undofile = true opt.foldmethod="marker" opt.mouse="a" g.mapleader = " " -- Autowrite, this is very useful because when you have edited a file -- and want to edit another one using :e or move to another buffer, -- you dont have to write the current one manually every time you switch -- buffers. opt.autowriteall = true -- -- Show quotes in JSON files because they are usually hidden and -- it honestly messes up what you are typing/seeing opt.conceallevel = 0 -- Dont show welcome menu opt.shortmess:append("sI") -- Disable tilde on end of buffer opt.fillchars = {eob = " "} -- Indenting opt.tabstop = 4 opt.shiftwidth = 4 opt.expandtab = true -- Dont show "INSERT", "VISUAL BLOCK", etc cmd("set noshowmode") -- Colorscheme opt.background = "dark" cmd("colorscheme idk") -- Don't wrap lines -- vim.wo.wrap = false g.python3_host_prog = "python3" -- Telescope colors (TODO: need organise this) fg_bg = function(group, fgcol, bgcol) cmd("hi " .. group .. " guifg=" .. fgcol .. " guibg=" .. bgcol) end bg = function(group, col) cmd("hi " .. group .. " guibg=" .. col) end ================================================ FILE: nvim/.config/nvim/lua/plugins/configs/bufferline.lua ================================================ local present, telescope = pcall(require, "bufferline") if not present then return end require("bufferline").setup { options = { offsets = { {filetype = "NvimTree", text = "Explorer", adding = 1}} } } ================================================ FILE: nvim/.config/nvim/lua/plugins/configs/lualine.lua ================================================ local present, telescope = pcall(require, "lualine") if not present then return end require("lualine").setup{ options = { theme = 'onedark', section_separators = {"", ""}, component_separators = {"", ""}, } } ================================================ FILE: nvim/.config/nvim/lua/plugins/init.lua ================================================ local g = vim.g local fn = vim.fn local cmd = vim.cmd local packer_status_ok, packer = pcall(require, "packer") if not packer_status_ok then return end packer.startup { function(use) -- Package mananger use {"wbthomason/packer.nvim"} -- Statusline use {"nvim-lualine/lualine.nvim", requires = {"kyazdani42/nvim-web-devicons", opt = true}} require("plugins.configs.lualine") -- Bufferline (emulates tabs in GUI IDEs) use {"akinsho/bufferline.nvim", requires = "kyazdani42/nvim-web-devicons"} require("plugins.configs.bufferline") -- Syntax highlighting for i3 config use {"mboughaba/i3config.vim"} cmd("au BufNewFile,BufRead ~/.config/i3/config set filetype=i3config") -- Highlight/colorize hexcolors use { "norcalli/nvim-colorizer.lua", config = function() require "colorizer".setup() end } end } ================================================ FILE: other/.config/user-dirs.dirs ================================================ # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line you're # interested in. All local changes will be retained on the next run. # Format is XDG_xxx_DIR="$HOME/yyy", where yyy is a shell-escaped # homedir-relative path, or XDG_xxx_DIR="/yyy", where /yyy is an # absolute path. No other format is supported. # XDG_DESKTOP_DIR="$HOME/" XDG_DOWNLOAD_DIR="$HOME/downloads" XDG_TEMPLATES_DIR="$HOME/" XDG_PUBLICSHARE_DIR="$HOME/" XDG_DOCUMENTS_DIR="$HOME/documents" XDG_MUSIC_DIR="$HOME/music" XDG_PICTURES_DIR="$HOME/pictures" XDG_VIDEOS_DIR="$HOME/videos" ================================================ FILE: picom/.config/picom/picom.conf ================================================ # Prevent screen tearing backend = "glx"; vsync = true; glx-swap-method = 2; xrender-sync-fence = true; # Fade windows in/out when opening/closing and when opacity changes, # unless no-fading-openclose is used. #fading = true; # The time between steps in fade step, in milliseconds. (> 0, defaults to 10) fade-delta = 0.01; # Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028) fade-in-step = 0.01; # Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03) fade-out-step = 0.01; corner-radius = 0 ================================================ FILE: polybar/.config/polybar/config.ini ================================================ [bar/bar1] ;------------; ; DIMENSIONS ; ;------------; width = 100% height = 30 offset-y = 0 offset-x = 0 border-top-size = 0 border-bottom-size = 0 border-right-size = 0 border-left-size = 0 ;----------; ; LOCATION ; ;----------; bottom = false monitor = ${env:MONITOR:} override-redirect = false ;-------; ; FONTS ; ;-------; font-0 = JetBrains Mono Nerd Font:Semibold:size=11;3 ;--------; ; COLORS ; ;--------; background = #101010 foreground = #e9e4e4 ;---------------; ; MISCELLANEOUS ; ;---------------; fixed-center = true padding-left = 2 padding-right = 2 module-margin = 1.5 modules-left = i3 modules-center = modules-right = openvpn micstatus volume battery wlan today tray-position = right tray-detached = false ;---------; ; MODULES ; ;---------; [module/openvpn] type = custom/script exec = $HOME/.config/polybar/scripts/vpn-ip.sh interval = 2 click-left = $HOME/.config/polybar/scripts/vpn-ip.sh --copy & [module/today] type = custom/script exec = $HOME/.config/polybar/scripts/today.sh interval = 5 click-left = $HOME/.config/polybar/scripts/today.sh --calendar & [module/battery] type = internal/battery battery = BAT0 adapter = ADP1 poll-interval = 1 full-at = 100 label-discharging = %percentage%% label-charging = %percentage%% label-full = %percentage%% format-discharging = format-full = format-charging =  ramp-capacity-0 =  ramp-capacity-1 =  ramp-capacity-2 =  ramp-capacity-3 =  ramp-capacity-4 =  [module/volume] type = internal/alsa format-volume = format-muted =  mute ramp-volume-0 =  ramp-volume-1 =  ramp-volume-2 =  [module/micstatus] type = custom/script exec = $HOME/.config/polybar/scripts/mic_status.sh interval = 1 click-left = pactl set-source-mute 0 toggle [module/i3] type = internal/i3 format = index-sort = true wrapping-scroll = false enable-scroll = false enable-click = true reverse-scroll = false label-mode-padding = 2 label-mode-foreground = #000 label-mode-background = #ffb52a ; focused = Active workspace on focused monitor label-focused = %index% label-focused-background = #444 label-focused-padding = 1 ; unfocused = Inactive workspace on any monitor label-unfocused = %index% label-unfocused-padding = 1 ; visible = Active workspace on unfocused monitor label-visible = %index% label-visible-background = #ffb52a label-visible-padding = 1 ; urgent = Workspace with urgency hint set label-urgent = %index% label-urgent-background = #bd2c40 label-urgent-padding = 1 ; vim:ft=dosini ================================================ FILE: polybar/.config/polybar/launch.sh ================================================ #!/bin/bash # Terminate already runnning bar instances killall -q polybar # Wait until the processes have been shut down #while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done # Launch bar #polybar bar1 & if type "xrandr"; then for m in $(xrandr --query | grep " connected" | cut -d" " -f1); do MONITOR=$m polybar --reload bar1 & done else polybar --reload bar1 & fi ================================================ FILE: polybar/.config/polybar/scripts/battery_widget.sh ================================================ #!/usr/bin/env bash TIME_TO_EMPTY=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "time" | xargs | sed -z "s/time to empty: //g") PERCENTAGE=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "percent" | xargs | sed -z "s/percentage: //g") STATE=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "state" | xargs | sed -z "s/state: //g") # This line is very messy. That is why the I have left the # above lines so that I can refer back to them in the future #kitty --hold --title="batterywidget" -e sh -c 'printf "\\e]11;#0d0b0a\\e\\\\" && echo "" && tput civis && PS1="" && stty -echo && printf "\033[1mpercentage: \033[0m" && upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "percent" | xargs | sed -z "s/percentage: //g" && printf "\033[1mstate: \033[0m" && upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep -E "state" | xargs | sed -z "s/state: //g"' & #sleep 0.25 #i3-msg [title="batterywidget"] focus, floating enable, resize set 160 110, move position 1230 23 dunstify "percent: $PERCENTAGE" ================================================ FILE: polybar/.config/polybar/scripts/bluetooth.sh ================================================ #!/usr/bin/env bash bt_connected_icon="" bt_disconnected_icon="" device_name=$(bluetoothctl info | sed -n "s/Name: //p" | awk '{$1=$1};1') if bluetoothctl show | grep -q "Powered: no"; then echo -n "$bt_disconnected_icon" exit fi if bluetoothctl info | grep -q "Missing device address argument"; then echo -n "$bt_disconnected_icon" exit fi if [ ! -z "$device_name" ]; then echo -n "$bt_connected_icon $device_name" exit fi ================================================ FILE: polybar/.config/polybar/scripts/mic_status.sh ================================================ #!/usr/bin/env bash current_source=$(pactl info | grep "Default Source" | cut -f3 -d" ") mic_is_on=$(pactl list sources | grep -A 10 $current_source | grep "Mute: no" ) if [ $? -eq 0 ]; then printf %s " " else printf %s " " fi ================================================ FILE: polybar/.config/polybar/scripts/today.sh ================================================ #!/bin/sh DATE="$(date +"%a %d %H:%M")" case "$1" in --calendar) gnome-calendar ;; *) echo "$DATE" ;; esac ================================================ FILE: polybar/.config/polybar/scripts/vpn-ip.sh ================================================ # TODO: add xclip checker and ability to copy the IP # send notification upon copying interface="$(ip tuntap show | cut -d : -f1 | head -n 1)" ip="$(ip a s "${interface}" 2>/dev/null | grep -o -P '(?<=inet )[0-9]{1,3}(\.[0-9]{1,3}){3}')" case "$1" in --copy) if [ -n "$ip" ]; then echo -n "$ip" | xclip -sel c notify-send "OpenVPN" "IP copied to clipboard" fi ;; *) if [ -n "$ip" ]; then echo "󰒄 $ip" else echo "" fi ;; esac ================================================ FILE: polybar/.config/polybar/scripts/wifi_widget.sh ================================================ #!/usr/bin/env bash dunstify "wifi" "IP: $(hostname --ip-address)\nRouter: $(ip route show | awk '/default/ {print $3}')" ================================================ FILE: rofi/.config/rofi/config.rasi ================================================ configuration { show-icons: false; drun-display-format: "{name}"; cycle: false; sidebar-mode: false; m: "-1"; click-to-exit: true; modi: "drun"; } @theme "~/.config/rofi/themes/default.rasi" ================================================ FILE: rofi/.config/rofi/scripts/chars.txt ================================================ 😀 Grinning Face 😁 Beaming Face With Smiling Eyes 😂 Face With Tears of Joy 🤣 Rolling on the Floor Laughing 😃 Grinning Face With Big Eyes 😄 Grinning Face With Smiling Eyes 😅 Grinning Face With Sweat 😆 Grinning Squinting Face 😉 Winking Face 😊 Smiling Face With Smiling Eyes 😋 Face Savoring Food 😎 Smiling Face With Sunglasses 😍 Smiling Face With Heart-Eyes 😘 Face Blowing a Kiss 🥰 Smiling Face With 3 Hearts 😗 Kissing Face 😙 Kissing Face With Smiling Eyes 😚 Kissing Face With Closed Eyes ☺ Smiling Face 🙂 Slightly Smiling Face 🤗 Hugging Face ¯\_(ツ)_/¯ idk (╯°□°)╯︵ ┻━┻ table flip ^ caret ε epsilon Σ sigma δ del 🤩 Star-Struck 🤔 Thinking Face 🤨 Face With Raised Eyebrow 😐 Neutral Face 😑 Expressionless Face 😶 Face Without Mouth 🙄 Face With Rolling Eyes 😏 Smirking Face 😣 Persevering Face 😥 Sad but Relieved Face 😮 Face With Open Mouth 🤐 Zipper-Mouth Face 😯 Hushed Face 😪 Sleepy Face 😫 Tired Face 😴 Sleeping Face 😌 Relieved Face 😛 Face With Tongue 😜 Winking Face With Tongue \ back slash 😝 Squinting Face With Tongue 🤤 Drooling Face 😒 Unamused Face 😓 Downcast Face With Sweat 😔 Pensive Face 😕 Confused Face 🙃 Upside-Down Face 🤑 Money-Mouth Face 😲 Astonished Face ☹ Frowning Face 🙁 Slightly Frowning Face 😖 Confounded Face 😞 Disappointed Face 😟 Worried Face 😤 Face With Steam From Nose 😢 Crying Face 😭 Loudly Crying Face 😦 Frowning Face With Open Mouth 😧 Anguished Face 😨 Fearful Face 😩 Weary Face 🤯 Exploding Head 😬 Grimacing Face 😰 Anxious Face With Sweat 😱 Face Screaming in Fear 🥵 Hot Face 🥶 Cold Face 😳 Flushed Face 🤪 Zany Face 😵 Dizzy Face 😡 Pouting Face 😠 Angry Face 🤬 Face With Symbols on Mouth 😷 Face With Medical Mask 🤒 Face With Thermometer 🤕 Face With Head-Bandage 🤢 Nauseated Face 🤮 Face Vomiting 🤧 Sneezing Face 😇 Smiling Face With Halo 🤠 Cowboy Hat Face 🤡 Clown Face 🥳 Partying Face 🥴 Woozy Face 🥺 Pleading Face 🤥 Lying Face 🤫 Shushing Face 🤭 Face With Hand Over Mouth 🧐 Face With Monocle 🤓 Nerd Face 😈 Smiling Face With Horns 👿 Angry Face With Horns 👹 Ogre 👺 Goblin 💀 Skull 👻 Ghost 👽 Alien 👾 Alien Monster 🤖 Robot Face 💩 Pile of Poo 😺 Grinning Cat Face 😸 Grinning Cat Face With Smiling Eyes 😹 Cat Face With Tears of Joy 😻 Smiling Cat Face With Heart-Eyes 😼 Cat Face With Wry Smile 😽 Kissing Cat Face 🙀 Weary Cat Face 😿 Crying Cat Face 😾 Pouting Cat Face 👶 Baby 👦 Boy 👧 Girl 👨 Man 👩 Woman 👴 Old Man 👵 Old Woman $ dollar sign [] brackets square {} curly brackets 👨‍⚕️ Man Health Worker 👩‍⚕️ Woman Health Worker 👨‍🎓 Man Student 👩‍🎓 Woman Student 👨‍⚖️ Man Judge 👩‍⚖️ Woman Judge 👨‍🌾 Man Farmer 👩‍🌾 Woman Farmer 👨‍🍳 Man Cook 👩‍🍳 Woman Cook 👨‍🔧 Man Mechanic 👩‍🔧 Woman Mechanic 👨‍🏭 Man Factory Worker 👩‍🏭 Woman Factory Worker 👨‍💼 Man Office Worker 👩‍💼 Woman Office Worker 👨‍🔬 Man Scientist 👩‍🔬 Woman Scientist 👨‍💻 Man Technologist 👩‍💻 Woman Technologist 👨‍🎤 Man Singer 👩‍🎤 Woman Singer 👨‍🎨 Man Artist 👩‍🎨 Woman Artist 👨‍✈️ Man Pilot 👩‍✈️ Woman Pilot 👨‍🚀 Man Astronaut 👩‍🚀 Woman Astronaut 👨‍🚒 Man Firefighter 👩‍🚒 Woman Firefighter 👮 Police Officer 👮‍♂️ Man Police Officer 👮‍♀️ Woman Police Officer 🕵 Detective 🕵️‍♂️ Man Detective 🕵️‍♀️ Woman Detective 💂 Guard 💂‍♂️ Man Guard 💂‍♀️ Woman Guard 👷 Construction Worker 👷‍♂️ Man Construction Worker 👷‍♀️ Woman Construction Worker 🤴 Prince 👸 Princess 👳 Person Wearing Turban 👳‍♂️ Man Wearing Turban 👳‍♀️ Woman Wearing Turban 👲 Man With Chinese Cap 🧕 Woman With Headscarf 🧔 Man: Beard 👱 Person: Blond Hair 👱‍♂️ Man: Blond Hair 👱‍♀️ Woman: Blond Hair 👨‍🦰 Man: Red Hair 👩‍🦰 Woman: Red Hair 👨‍🦱 Man: Curly Hair 👩‍🦱 Woman: Curly Hair 👨‍🦲 Man: Bald 👩‍🦲 Woman: Bald 👨‍🦳 Man: White Hair 👩‍🦳 Woman: White Hair 🤵 Man in Tuxedo 👰 Bride With Veil 🤰 Pregnant Woman 🤱 Breast-Feeding 👼 Baby Angel 🎅 Santa Claus 🤶 Mrs. Claus 🦸 Superhero 🦸‍♀️ Woman Superhero 🦸‍♂️ Man Superhero 🦹 Supervillain 🦹‍♀️ Woman Supervillain 🦹‍♂️ Man Supervillain 🧙 Mage 🧙‍♀️ Woman Mage 🧙‍♂️ Man Mage 🧚‍♀️ Woman Fairy 🧚‍♂️ Man Fairy 🧛 Vampire 🧛‍♀️ Woman Vampire 🧛‍♂️ Man Vampire 🧜 Merperson 🧜‍♀️ Mermaid 🧜‍♂️ Merman 🧝 Elf 🧝‍♀️ Woman Elf 🧝‍♂️ Man Elf 🧞 Genie 🧞‍♀️ Woman Genie 🧞‍♂️ Man Genie 🧟 Zombie 🧟‍♀️ Woman Zombie 🧟‍♂️ Man Zombie 🙍 Person Frowning 🙍‍♂️ Man Frowning 🙍‍♀️ Woman Frowning 🙎 Person Pouting 🙎‍♂️ Man Pouting 🙎‍♀️ Woman Pouting 🙅 Person Gesturing No 🙅‍♂️ Man Gesturing No 🙅‍♀️ Woman Gesturing No 🙆 Person Gesturing OK 🙆‍♂️ Man Gesturing OK 🙆‍♀️ Woman Gesturing OK 💁 Person Tipping Hand 💁‍♂️ Man Tipping Hand 💁‍♀️ Woman Tipping Hand 🙋 Person Raising Hand 🙋‍♂️ Man Raising Hand 🙋‍♀️ Woman Raising Hand 🙇 Person Bowing 🙇‍♂️ Man Bowing 🙇‍♀️ Woman Bowing 🤦 Person Facepalming 🤦‍♂️ Man Facepalming 🤦‍♀️ Woman Facepalming 🤷 Person Shrugging 🤷‍♂️ Man Shrugging 🤷‍♀️ Woman Shrugging 💆 Person Getting Massage 💆‍♂️ Man Getting Massage 💆‍♀️ Woman Getting Massage 💇 Person Getting Haircut 💇‍♂️ Man Getting Haircut 💇‍♀️ Woman Getting Haircut 🚶 Person Walking 🚶‍♂️ Man Walking 🚶‍♀️ Woman Walking 🏃 Person Running 🏃‍♂️ Man Running 🏃‍♀️ Woman Running 💃 Woman Dancing 🕺 Man Dancing 👯 People With Bunny Ears 👯‍♂️ Men With Bunny Ears 👯‍♀️ Women With Bunny Ears 🧖 Person in Steamy Room 🧖‍♀️ Woman in Steamy Room 🧖‍♂️ Man in Steamy Room 🧘 Person in Lotus Position 🕴 Man in Suit Levitating 🗣 Speaking Head 👤 Bust in Silhouette 👥 Busts in Silhouette 👫 Man and Woman Holding Hands 👬 Two Men Holding Hands 👭 Two Women Holding Hands 💏 Kiss 👨‍❤️‍💋‍👨 Kiss: Man, Man 👩‍❤️‍💋‍👩 Kiss: Woman, Woman 💑 Couple With Heart 👨‍❤️‍👨 Couple With Heart: Man, Man 👩‍❤️‍👩 Couple With Heart: Woman, Woman 👪 Family 👨‍👩‍👦 Family: Man, Woman, Boy 👨‍👩‍👧 Family: Man, Woman, Girl 👨‍👩‍👧‍👦 Family: Man, Woman, Girl, Boy 👨‍👩‍👦‍👦 Family: Man, Woman, Boy, Boy 👨‍👩‍👧‍👧 Family: Man, Woman, Girl, Girl 👨‍👨‍👦 Family: Man, Man, Boy 👨‍👨‍👧 Family: Man, Man, Girl 👨‍👨‍👧‍👦 Family: Man, Man, Girl, Boy 👨‍👨‍👦‍👦 Family: Man, Man, Boy, Boy 👨‍👨‍👧‍👧 Family: Man, Man, Girl, Girl 👩‍👩‍👦 Family: Woman, Woman, Boy 👩‍👩‍👧 Family: Woman, Woman, Girl 👩‍👩‍👧‍👦 Family: Woman, Woman, Girl, Boy 👩‍👩‍👦‍👦 Family: Woman, Woman, Boy, Boy 👩‍👩‍👧‍👧 Family: Woman, Woman, Girl, Girl 👨‍👦 Family: Man, Boy 👨‍👦‍👦 Family: Man, Boy, Boy 👨‍👧 Family: Man, Girl 👨‍👧‍👦 Family: Man, Girl, Boy 👨‍👧‍👧 Family: Man, Girl, Girl 👩‍👦 Family: Woman, Boy 👩‍👦‍👦 Family: Woman, Boy, Boy 👩‍👧 Family: Woman, Girl 👩‍👧‍👦 Family: Woman, Girl, Boy 👩‍👧‍👧 Family: Woman, Girl, Girl 🤳 Selfie 💪 Flexed Biceps 🦵 Leg 🦶 Foot 👈 Backhand Index Pointing Left 👉 Backhand Index Pointing Right ☝ Index Pointing Up 👆 Backhand Index Pointing Up 🖕 Middle Finger 👇 Backhand Index Pointing Down ✌ Victory Hand 🤞 Crossed Fingers 🖖 Vulcan Salute 🤘 Sign of the Horns 🤙 Call Me Hand 🖐 Hand With Fingers Splayed ✋ Raised Hand 👌 OK Hand 👍 Thumbs Up 👎 Thumbs Down ✊ Raised Fist 👊 Oncoming Fist 🤛 Left-Facing Fist 🤜 Right-Facing Fist 🤚 Raised Back of Hand 👋 Waving Hand 🤟 Love-You Gesture ✍ Writing Hand 👏 Clapping Hands 👐 Open Hands 🙌 Raising Hands 🤲 Palms Up Together 🙏 Folded Hands 🤝 Handshake 💅 Nail Polish 👂 Ear 👃 Nose 👣 Footprints 👀 Eyes 👁 Eye 🧠 Brain 🦴 Bone 🦷 Tooth 👅 Tongue 👄 Mouth 💋 Kiss Mark 👓 Glasses 🕶 Sunglasses 🥽 Goggles 🥼 Lab Coat 👔 Necktie 👕 T-Shirt 👖 Jeans 🧣 Scarf 🧤 Gloves 🧥 Coat 🧦 Socks 👗 Dress 👘 Kimono 👙 Bikini 👚 Woman’S Clothes 👛 Purse 👜 Handbag 👝 Clutch Bag 🎒 Backpack 👞 Man’S Shoe 👟 Running Shoe 🥾 Hiking Boot 🥿 Flat Shoe 👠 High-Heeled Shoe 👡 Woman’S Sandal 👢 Woman’S Boot 👑 Crown 👒 Woman’S Hat 🎩 Top Hat 🎓 Graduation Cap 🧢 Billed Cap ⛑ Rescue Worker’S Helmet 💄 Lipstick 💍 Ring 🧳 Luggage 🌂 Closed Umbrella ☂ Umbrella 💼 Briefcase 🧵 Thread 🧶 Yarn 🙈 See-No-Evil Monkey 🙉 Hear-No-Evil Monkey 🙊 Speak-No-Evil Monkey 💥 Collision 💦 Sweat Droplets 💨 Dashing Away 💫 Dizzy 🐵 Monkey Face 🐒 Monkey 🦍 Gorilla 🐶 Dog Face 🐕 Dog 🐩 Poodle 🐺 Wolf Face 🦊 Fox Face 🦝 Raccoon 🐱 Cat Face 🐈 Cat 🦁 Lion Face 🐯 Tiger Face 🐅 Tiger 🐆 Leopard 🐴 Horse Face 🐎 Horse 🦄 Unicorn Face 🦓 Zebra 🐮 Cow Face 🐂 Ox 🐃 Water Buffalo 🐄 Cow 🐷 Pig Face 🐖 Pig 🐗 Boar 🐽 Pig Nose 🐏 Ram 🐑 Ewe 🐐 Goat 🐪 Camel 🐫 Two-Hump Camel 🦙 Llama 🦒 Giraffe 🐘 Elephant 🦏 Rhinoceros 🦛 Hippopotamus 🐭 Mouse Face 🐁 Mouse 🐀 Rat 🐹 Hamster Face 🐰 Rabbit Face 🐇 Rabbit 🐿 Chipmunk 🦔 Hedgehog 🦇 Bat 🐻 Bear Face 🐨 Koala 🐼 Panda Face 🦘 Kangaroo 🦡 Badger 🐾 Paw Prints 🦃 Turkey 🐔 Chicken 🐓 Rooster 🐣 Hatching Chick 🐤 Baby Chick 🐥 Front-Facing Baby Chick 🐦 Bird 🐧 Penguin 🕊 Dove 🦅 Eagle 🦆 Duck 🦢 Swan 🦉 Owl 🦚 Peacock 🦜 Parrot 🐸 Frog Face 🐊 Crocodile 🐢 Turtle 🦎 Lizard 🐍 Snake 🐲 Dragon Face 🐉 Dragon 🦕 Sauropod 🦖 T-Rex 🐳 Spouting Whale 🐋 Whale 🐬 Dolphin 🐟 Fish 🐠 Tropical Fish 🐡 Blowfish 🦈 Shark 🐙 Octopus 🐚 Spiral Shell 🦀 Crab 🦞 Lobster 🦐 Shrimp 🦑 Squid 🐌 Snail 🦋 Butterfly 🐛 Bug 🐜 Ant 🐝 Honeybee 🐞 Lady Beetle 🦗 Cricket 🕷 Spider 🕸 Spider Web 🦂 Scorpion 🦟 Mosquito 🦠 Microbe 💐 Bouquet 🌸 Cherry Blossom 💮 White Flower 🏵 Rosette 🌹 Rose 🥀 Wilted Flower 🌺 Hibiscus 🌻 Sunflower 🌼 Blossom 🌷 Tulip 🌱 Seedling 🌲 Evergreen Tree 🌳 Deciduous Tree 🌴 Palm Tree 🌵 Cactus 🌾 Sheaf of Rice 🌿 Herb ☘ Shamrock 🍀 Four Leaf Clover 🍁 Maple Leaf 🍂 Fallen Leaf 🍃 Leaf Fluttering in Wind 🍄 Mushroom 🌰 Chestnut 🌍 Globe Showing Europe-Africa 🌎 Globe Showing Americas 🌏 Globe Showing Asia-Australia 🌐 Globe With Meridians 🌑 New Moon 🌒 Waxing Crescent Moon 🌓 First Quarter Moon 🌔 Waxing Gibbous Moon 🌕 Full Moon 🌖 Waning Gibbous Moon 🌗 Last Quarter Moon 🌘 Waning Crescent Moon 🌙 Crescent Moon 🌚 New Moon Face 🌛 First Quarter Moon Face 🌜 Last Quarter Moon Face ☀ Sun 🌝 Full Moon Face 🌞 Sun With Face ⭐ Star 🌟 Glowing Star 🌠 Shooting Star ☁ Cloud ⛅ Sun Behind Cloud ⛈ Cloud With Lightning and Rain 🌤 Sun Behind Small Cloud 🌥 Sun Behind Large Cloud 🌦 Sun Behind Rain Cloud 🌧 Cloud With Rain 🌨 Cloud With Snow 🌩 Cloud With Lightning 🌪 Tornado 🌫 Fog 🌬 Wind Face 🌈 Rainbow ☂ Umbrella ☔ Umbrella With Rain Drops ⚡ High Voltage ❄ Snowflake ☃ Snowman ⛄ Snowman Without Snow ☄ Comet 🔥 Fire 💧 Droplet 🌊 Water Wave 🎄 Christmas Tree ✨ Sparkles 🎋 Tanabata Tree 🎍 Pine Decoration 🍇 Grapes 🍈 Melon 🍉 Watermelon 🍊 Tangerine 🍋 Lemon 🍌 Banana 🍍 Pineapple 🥭 Mango 🍎 Red Apple 🍏 Green Apple 🍐 Pear 🍑 Peach 🍒 Cherries 🍓 Strawberry 🥝 Kiwi Fruit 🍅 Tomato 🥥 Coconut 🥑 Avocado 🍆 Eggplant 🥔 Potato 🥕 Carrot 🌽 Ear of Corn 🌶 Hot Pepper 🥒 Cucumber 🥬 Leafy Green 🥦 Broccoli 🍄 Mushroom 🥜 Peanuts 🌰 Chestnut 🍞 Bread 🥐 Croissant 🥖 Baguette Bread 🥨 Pretzel 🥯 Bagel 🥞 Pancakes 🧀 Cheese Wedge 🍖 Meat on Bone 🍗 Poultry Leg 🥩 Cut of Meat 🥓 Bacon 🍔 Hamburger 🍟 French Fries 🍕 Pizza 🌭 Hot Dog 🥪 Sandwich 🌮 Taco 🌯 Burrito 🥙 Stuffed Flatbread 🍳 Cooking 🥘 Shallow Pan of Food 🍲 Pot of Food 🥣 Bowl With Spoon 🥗 Green Salad 🍿 Popcorn 🧂 Salt 🥫 Canned Food 🍱 Bento Box 🍘 Rice Cracker 🍙 Rice Ball 🍚 Cooked Rice 🍛 Curry Rice 🍜 Steaming Bowl 🍝 Spaghetti 🍠 Roasted Sweet Potato 🍢 Oden 🍣 Sushi 🍤 Fried Shrimp 🍥 Fish Cake With Swirl 🥮 Moon Cake 🍡 Dango 🥟 Dumpling 🥠 Fortune Cookie 🥡 Takeout Box 🍦 Soft Ice Cream 🍧 Shaved Ice 🍨 Ice Cream 🍩 Doughnut 🍪 Cookie 🎂 Birthday Cake 🍰 Shortcake 🧁 Cupcake 🥧 Pie 🍫 Chocolate Bar 🍬 Candy 🍭 Lollipop 🍮 Custard 🍯 Honey Pot 🍼 Baby Bottle 🥛 Glass of Milk ☕ Hot Beverage 🍵 Teacup Without Handle 🍶 Sake 🍾 Bottle With Popping Cork 🍷 Wine Glass 🍸 Cocktail Glass 🍹 Tropical Drink 🍺 Beer Mug 🍻 Clinking Beer Mugs 🥂 Clinking Glasses 🥃 Tumbler Glass 🥤 Cup With Straw 🥢 Chopsticks 🍽 Fork and Knife With Plate 🍴 Fork and Knife 🥄 Spoon 🧗 Person Climbing 🧗‍♀️ Woman Climbing 🧗‍♂️ Man Climbing 🧘 Person in Lotus Position 🧘‍♀️ Woman in Lotus Position 🧘‍♂️ Man in Lotus Position 🕴 Man in Suit Levitating 🏇 Horse Racing ⛷ Skier 🏂 Snowboarder 🏌 Person Golfing 🏌️‍♂️ Man Golfing 🏌️‍♀️ Woman Golfing 🏄 Person Surfing 🏄‍♂️ Man Surfing 🏄‍♀️ Woman Surfing 🚣 Person Rowing Boat 🚣‍♂️ Man Rowing Boat 🚣‍♀️ Woman Rowing Boat 🏊 Person Swimming 🏊‍♂️ Man Swimming 🏊‍♀️ Woman Swimming ⛹ Person Bouncing Ball ⛹️‍♂️ Man Bouncing Ball ⛹️‍♀️ Woman Bouncing Ball 🏋 Person Lifting Weights 🏋️‍♂️ Man Lifting Weights 🏋️‍♀️ Woman Lifting Weights 🚴 Person Biking 🚴‍♂️ Man Biking 🚴‍♀️ Woman Biking 🚵 Person Mountain Biking 🚵‍♂️ Man Mountain Biking 🚵‍♀️ Woman Mountain Biking 🤸 Person Cartwheeling 🤸‍♂️ Man Cartwheeling 🤸‍♀️ Woman Cartwheeling 🤼 People Wrestling 🤼‍♂️ Men Wrestling 🤼‍♀️ Women Wrestling 🤽 Person Playing Water Polo 🤽‍♂️ Man Playing Water Polo 🤽‍♀️ Woman Playing Water Polo 🤾 Person Playing Handball 🤾‍♂️ Man Playing Handball 🤾‍♀️ Woman Playing Handball 🤹 Person Juggling 🤹‍♂️ Man Juggling 🤹‍♀️ Woman Juggling 🎪 Circus Tent 🛹 Skateboard 🎗 Reminder Ribbon 🎟 Admission Tickets 🎫 Ticket 🎖 Military Medal 🏆 Trophy 🏅 Sports Medal 🥇 1st Place Medal 🥈 2nd Place Medal 🥉 3rd Place Medal ⚽ Soccer Ball ⚾ Baseball 🥎 Softball 🏀 Basketball 🏐 Volleyball 🏈 American Football 🏉 Rugby Football 🎾 Tennis 🥏 Flying Disc 🎳 Bowling 🏏 Cricket Game 🏑 Field Hockey 🏒 Ice Hockey 🥍 Lacrosse 🏓 Ping Pong 🏸 Badminton 🥊 Boxing Glove 🥋 Martial Arts Uniform ⛳ Flag in Hole ⛸ Ice Skate 🎣 Fishing Pole 🎽 Running Shirt 🎿 Skis 🛷 Sled 🥌 Curling Stone 🎯 Direct Hit 🎱 Pool 8 Ball 🎮 Video Game 🎰 Slot Machine 🎲 Game Die 🧩 Jigsaw ♟ Chess Pawn 🎭 Performing Arts 🎨 Artist Palette 🎼 Musical Score 🎤 Microphone 🎧 Headphone 🎷 Saxophone 🎸 Guitar 🎹 Musical Keyboard 🎺 Trumpet 🎻 Violin 🥁 Drum 🎬 Clapper Board 🏹 Bow and Arrow 🧵 Thread 🧶 Yarn 🚣 Person Rowing Boat 🏎 Racing Car 🏍 Motorcycle 🗾 Map of Japan 🏔 Snow-Capped Mountain ⛰ Mountain 🌋 Volcano 🗻 Mount Fuji 🏕 Camping 🏖 Beach With Umbrella 🏜 Desert 🏝 Desert Island 🏞 National Park 🏟 Stadium 🏛 Classical Building 🏗 Building Construction 🏘 Houses 🏚 Derelict House 🏠 House 🏡 House With Garden 🏢 Office Building 🏣 Japanese Post Office 🏤 Post Office 🏥 Hospital 🏦 Bank 🏨 Hotel 🏩 Love Hotel 🏪 Convenience Store 🏫 School 🏬 Department Store 🏭 Factory 🏯 Japanese Castle 🏰 Castle 💒 Wedding 🗼 Tokyo Tower 🗽 Statue of Liberty ⛪ Church 🕌 Mosque 🕍 Synagogue ⛩ Shinto Shrine 🕋 Kaaba ⛲ Fountain ⛺ Tent 🌁 Foggy 🌃 Night With Stars 🏙 Cityscape 🌄 Sunrise Over Mountains 🌅 Sunrise 🌆 Cityscape at Dusk 🌇 Sunset 🌉 Bridge at Night 🌌 Milky Way 🎠 Carousel Horse 🎡 Ferris Wheel 🎢 Roller Coaster 🚂 Locomotive 🚃 Railway Car 🚄 High-Speed Train 🚅 Bullet Train 🚆 Train 🚇 Metro 🚈 Light Rail 🚉 Station 🚊 Tram 🚝 Monorail 🚞 Mountain Railway 🚋 Tram Car 🚌 Bus 🚍 Oncoming Bus 🚎 Trolleybus 🚐 Minibus 🚑 Ambulance 🚒 Fire Engine 🚓 Police Car 🚔 Oncoming Police Car 🚕 Taxi 🚖 Oncoming Taxi 🚗 Automobile 🚘 Oncoming Automobile 🚚 Delivery Truck 🚛 Articulated Lorry 🚜 Tractor 🚲 Bicycle 🛴 Kick Scooter 🛵 Motor Scooter 🚏 Bus Stop 🛤 Railway Track ⛽ Fuel Pump 🚨 Police Car Light 🚥 Horizontal Traffic Light 🚦 Vertical Traffic Light 🚧 Construction ⚓ Anchor ⛵ Sailboat 🚤 Speedboat 🛳 Passenger Ship ⛴ Ferry 🛥 Motor Boat 🚢 Ship ✈ Airplane 🛩 Small Airplane 🛫 Airplane Departure 🛬 Airplane Arrival 💺 Seat 🚁 Helicopter 🚟 Suspension Railway 🚠 Mountain Cableway 🚡 Aerial Tramway 🛰 Satellite 🚀 Rocket 🛸 Flying Saucer 🌠 Shooting Star ⛱ Umbrella on Ground 🎆 Fireworks 🎇 Sparkler 🎑 Moon Viewing Ceremony 💴 Yen Banknote 💵 Dollar Banknote 💶 Euro Banknote 💷 Pound Banknote 🗿 Moai 🛂 Passport Control 🛃 Customs 🛄 Baggage Claim 🛅 Left Luggage ☠ Skull and Crossbones 🛀 Person Taking Bath 🛌 Person in Bed 💌 Love Letter 💣 Bomb 🕳 Hole 🛍 Shopping Bags 📿 Prayer Beads 💎 Gem Stone 🔪 Kitchen Knife 🏺 Amphora 🗺 World Map 🧭 Compass 🧱 Brick 💈 Barber Pole 🛢 Oil Drum 🛎 Bellhop Bell 🧳 Luggage ⌛ Hourglass Done ⏳ Hourglass Not Done ⌚ Watch ⏰ Alarm Clock ⏱ Stopwatch ⏲ Timer Clock 🕰 Mantelpiece Clock 🌡 Thermometer ⛱ Umbrella on Ground 🧨 Firecracker 🎈 Balloon 🎉 Party Popper 🎊 Confetti Ball 🎎 Japanese Dolls 🎏 Carp Streamer 🎐 Wind Chime 🧧 Red Envelope 🎀 Ribbon 🎁 Wrapped Gift 🔮 Crystal Ball 🧿 Nazar Amulet 🕹 Joystick 🧸 Teddy Bear 🖼 Framed Picture 📯 Postal Horn 🎙 Studio Microphone 🎚 Level Slider 🎛 Control Knobs 📻 Radio 📱 Mobile Phone 📲 Mobile Phone With Arrow ☎ Telephone 📞 Telephone Receiver 📟 Pager 📠 Fax Machine 🔋 Battery 🔌 Electric Plug 💻 Laptop Computer 🖥 Desktop Computer 🖨 Printer ⌨ Keyboard 🖱 Computer Mouse 🖲 Trackball 💽 Computer Disk 💾 Floppy Disk 💿 Optical Disk 📀 DVD 🧮 Abacus 🎥 Movie Camera 🎞 Film Frames 📽 Film Projector 📺 Television 📷 Camera 📸 Camera With Flash 📹 Video Camera 📼 Videocassette 🔍 Magnifying Glass Tilted Left 🔎 Magnifying Glass Tilted Right 🕯 Candle 💡 Light Bulb 🔦 Flashlight 🏮 Red Paper Lantern 📔 Notebook With Decorative Cover 📕 Closed Book 📖 Open Book 📗 Green Book 📘 Blue Book 📙 Orange Book 📚 Books 📓 Notebook 📃 Page With Curl 📜 Scroll 📄 Page Facing Up 📰 Newspaper 🗞 Rolled-Up Newspaper 📑 Bookmark Tabs 🔖 Bookmark 🏷 Label 💰 Money Bag 💴 Yen Banknote 💵 Dollar Banknote 💶 Euro Banknote 💷 Pound Banknote 💸 Money With Wings 💳 Credit Card 🧾 Receipt ✉ Envelope 📧 E-Mail 📨 Incoming Envelope 📩 Envelope With Arrow 📤 Outbox Tray 📥 Inbox Tray 📦 Package 📫 Closed Mailbox With Raised Flag 📪 Closed Mailbox With Lowered Flag 📬 Open Mailbox With Raised Flag 📭 Open Mailbox With Lowered Flag 📮 Postbox 🗳 Ballot Box With Ballot ✏ Pencil ✒ Black Nib 🖋 Fountain Pen 🖊 Pen 🖌 Paintbrush 🖍 Crayon 📝 Memo 📁 File Folder 📂 Open File Folder 🗂 Card Index Dividers 📅 Calendar 📆 Tear-Off Calendar 🗒 Spiral Notepad 🗓 Spiral Calendar 📇 Card Index 📈 Chart Increasing 📉 Chart Decreasing 📊 Bar Chart 📋 Clipboard 📌 Pushpin 📍 Round Pushpin 📎 Paperclip 🖇 Linked Paperclips 📏 Straight Ruler 📐 Triangular Ruler ✂ Scissors 🗃 Card File Box 🗄 File Cabinet 🗑 Wastebasket 🔒 Locked 🔓 Unlocked 🔏 Locked With Pen 🔐 Locked With Key 🔑 Key 🗝 Old Key 🔨 Hammer ⛏ Pick ⚒ Hammer and Pick 🛠 Hammer and Wrench 🗡 Dagger ⚔ Crossed Swords 🔫 Pistol 🛡 Shield 🔧 Wrench 🔩 Nut and Bolt ⚙ Gear 🗜 Clamp ⚖ Balance Scale 🔗 Link ⛓ Chains 🧰 Toolbox 🧲 Magnet ⚗ Alembic 🧪 Test Tube 🧫 Petri Dish 🧬 DNA 🧯 Fire Extinguisher 🔬 Microscope 🔭 Telescope 📡 Satellite Antenna 💉 Syringe 💊 Pill 🚪 Door 🛏 Bed 🛋 Couch and Lamp 🚽 Toilet 🚿 Shower 🛁 Bathtub 🧴 Lotion Bottle 🧵 Thread 🧶 Yarn 🧷 Safety Pin 🧹 Broom 🧺 Basket 🧻 Roll of Paper 🧼 Soap 🧽 Sponge 🚬 Cigarette ⚰ Coffin ⚱ Funeral Urn 🗿 Moai 🚰 Potable Water 👁‍🗨 Eye in Speech Bubble 💘 Heart With Arrow ❤ Red Heart 💓 Beating Heart 💔 Broken Heart 💕 Two Hearts 💖 Sparkling Heart 💗 Growing Heart 💙 Blue Heart 💚 Green Heart 💛 Yellow Heart 🧡 Orange Heart 💜 Purple Heart 🖤 Black Heart 💝 Heart With Ribbon 💞 Revolving Hearts 💟 Heart Decoration ❣ Heavy Heart Exclamation 💤 Zzz 💢 Anger Symbol 💬 Speech Balloon 🗯 Right Anger Bubble 💭 Thought Balloon 💮 White Flower ♨ Hot Springs 💈 Barber Pole 🛑 Stop Sign 🕛 Twelve O’Clock 🕧 Twelve-Thirty 🕐 One O’Clock 🕜 One-Thirty 🕑 Two O’Clock 🕝 Two-Thirty 🕒 Three O’Clock 🕞 Three-Thirty 🕓 Four O’Clock 🕟 Four-Thirty 🕔 Five O’Clock 🕠 Five-Thirty 🕕 Six O’Clock 🕡 Six-Thirty 🕖 Seven O’Clock 🕢 Seven-Thirty 🕗 Eight O’Clock 🕣 Eight-Thirty 🕘 Nine O’Clock 🕤 Nine-Thirty 🕙 Ten O’Clock 🕥 Ten-Thirty 🕚 Eleven O’Clock 🕦 Eleven-Thirty 🌀 Cyclone ♠ Spade Suit ♥ Heart Suit ♦ Diamond Suit ♣ Club Suit 🃏 Joker 🀄 Mahjong Red Dragon 🎴 Flower Playing Cards 🔇 Muted Speaker 🔈 Speaker Low Volume 🔉 Speaker Medium Volume 🔊 Speaker High Volume 📢 Loudspeaker 📣 Megaphone 📯 Postal Horn 🔔 Bell 🔕 Bell With Slash 🎵 Musical Note 🎶 Musical Notes 🏧 ATM Sign 🚮 Litter in Bin Sign 🚰 Potable Water ♿ Wheelchair Symbol 🚹 Men’S Room 🚺 Women’S Room 🚻 Restroom 🚼 Baby Symbol 🚾 Water Closet ⚠ Warning 🚸 Children Crossing ⛔ No Entry 🚫 Prohibited 🚳 No Bicycles 🚭 No Smoking 🚯 No Littering 🚱 Non-Potable Water 🚷 No Pedestrians 🔞 No One Under Eighteen ☢ Radioactive ☣ Biohazard ⬆ Up Arrow ↗ Up-Right Arrow ➡ Right Arrow ↘ Down-Right Arrow ⬇ Down Arrow ↙ Down-Left Arrow ⬅ Left Arrow ↖ Up-Left Arrow ↕ Up-Down Arrow ↔ Left-Right Arrow ↩ Right Arrow Curving Left ↪ Left Arrow Curving Right ⤴ Right Arrow Curving Up ⤵ Right Arrow Curving Down 🔃 Clockwise Vertical Arrows 🔄 Counterclockwise Arrows Button 🔙 Back Arrow 🔚 End Arrow 🔛 On! Arrow 🔜 Soon Arrow 🔝 Top Arrow 🛐 Place of Worship ⚛ Atom Symbol ♾ Infinity 🕉 Om ✡ Star of David ☸ Wheel of Dharma ☯ Yin Yang ✝ Latin Cross ☦ Orthodox Cross ☪ Star and Crescent ☮ Peace Symbol 🕎 Menorah 🔯 Dotted Six-Pointed Star ♈ Aries ♉ Taurus ♊ Gemini ♋ Cancer ♌ Leo ♍ Virgo ♎ Libra ♏ Scorpio ♐ Sagittarius ♑ Capricorn ♒ Aquarius ♓ Pisces ⛎ Ophiuchus 🔀 Shuffle Tracks Button 🔁 Repeat Button 🔂 Repeat Single Button ▶ Play Button ⏩ Fast-Forward Button ◀ Reverse Button ⏪ Fast Reverse Button 🔼 Upwards Button ⏫ Fast Up Button 🔽 Downwards Button ⏬ Fast Down Button ⏹ Stop Button ⏏ Eject Button 🎦 Cinema 🔅 Dim Button 🔆 Bright Button 📶 Antenna Bars 📳 Vibration Mode 📴 Mobile Phone Off ♻ Recycling Symbol 🔱 Trident Emblem 📛 Name Badge 🔰 Japanese Symbol for Beginner ⭕ Heavy Large Circle ✅ White Heavy Check Mark ☑ Ballot Box With Check ✔ Heavy Check Mark ✖ Heavy Multiplication X ❌ Cross Mark ❎ Cross Mark Button ➕ Heavy Plus Sign ➖ Heavy Minus Sign ➗ Heavy Division Sign ➰ Curly Loop ➿ Double Curly Loop 〽 Part Alternation Mark ✳ Eight-Spoked Asterisk ✴ Eight-Pointed Star ❇ Sparkle ‼ Double Exclamation Mark ⁉ Exclamation Question Mark ❓ Question Mark ❔ White Question Mark ❕ White Exclamation Mark ❗ Exclamation Mark © Copyright ® Registered ™ Trade Mark 0️⃣ Keycap Digit Zero 1️⃣ Keycap Digit One 2️⃣ Keycap Digit Two 3️⃣ Keycap Digit Three 4️⃣ Keycap Digit Four 5️⃣ Keycap Digit Five 6️⃣ Keycap Digit Six 7️⃣ Keycap Digit Seven 8️⃣ Keycap Digit Eight 9️⃣ Keycap Digit Nine 🔟 Keycap: 10 💯 Hundred Points 🔠 Input Latin Uppercase 🔡 Input Latin Lowercase 🔢 Input Numbers 🔣 Input Symbols 🔤 Input Latin Letters 🅰 A Button (Blood Type) 🆎 Ab Button (Blood Type) 🅱 B Button (Blood Type) 🆑 CL Button 🆒 Cool Button 🆓 Free Button ℹ Information 🆔 ID Button Ⓜ Circled M 🆕 New Button 🆖 NG Button 🅾 O Button (Blood Type) 🆗 OK Button 🅿 P Button 🆘 SOS Button 🆙 Up! Button 🆚 Vs Button 🈁 Japanese “Here” Button 🈂 Japanese “Service Charge” Button 🈷 Japanese “Monthly Amount” Button 🈶 Japanese “Not Free of Charge” Button 🈯 Japanese “Reserved” Button 🉐 Japanese “Bargain” Button 🈹 Japanese “Discount” Button 🈚 Japanese “Free of Charge” Button 🈲 Japanese “Prohibited” Button 🉑 Japanese “Acceptable” Button 🈸 Japanese “Application” Button 🈴 Japanese “Passing Grade” Button 🈳 Japanese “Vacancy” Button ㊗ Japanese “Congratulations” Button ㊙ Japanese “Secret” Button 🈺 Japanese “Open for Business” Button 🈵 Japanese “No Vacancy” Button ▪ Black Small Square ▫ White Small Square ◻ White Medium Square ◼ Black Medium Square ◽ White Medium-Small Square ◾ Black Medium-Small Square ⬛ Black Large Square ⬜ White Large Square 🔶 Large Orange Diamond 🔷 Large Blue Diamond 🔸 Small Orange Diamond 🔹 Small Blue Diamond 🔺 Red Triangle Pointed Up 🔻 Red Triangle Pointed Down 💠 Diamond With a Dot 🔲 Black Square Button 🔳 White Square Button ⚪ White Circle ⚫ Black Circle 🔴 Red Circle 🔵 Blue Circle 🏁 Chequered Flag 🚩 Triangular Flag 🎌 Crossed Flags 🏴 Black Flag 🏳 White Flag 🏳️‍🌈 Rainbow Flag 🏴‍☠️ Pirate Flag 🇦🇨 Flag: Ascension Island 🇦🇩 Flag: Andorra 🇦🇪 Flag: United Arab Emirates 🇦🇫 Flag: Afghanistan 🇦🇬 Flag: Antigua & Barbuda 🇦🇮 Flag: Anguilla 🇦🇱 Flag: Albania 🇦🇲 Flag: Armenia 🇦🇴 Flag: Angola 🇦🇶 Flag: Antarctica 🇦🇷 Flag: Argentina 🇦🇸 Flag: American Samoa 🇦🇹 Flag: Austria 🇦🇺 Flag: Australia 🇦🇼 Flag: Aruba 🇦🇽 Flag: Åland Islands 🇦🇿 Flag: Azerbaijan 🇧🇦 Flag: Bosnia & Herzegovina 🇧🇧 Flag: Barbados 🇧🇩 Flag: Bangladesh 🇧🇪 Flag: Belgium 🇧🇫 Flag: Burkina Faso 🇧🇬 Flag: Bulgaria 🇧🇭 Flag: Bahrain 🇧🇮 Flag: Burundi 🇧🇯 Flag: Benin 🇧🇱 Flag: St. Barthélemy 🇧🇲 Flag: Bermuda 🇧🇳 Flag: Brunei 🇧🇴 Flag: Bolivia 🇧🇶 Flag: Caribbean Netherlands 🇧🇷 Flag: Brazil 🇧🇸 Flag: Bahamas 🇧🇹 Flag: Bhutan 🇧🇻 Flag: Bouvet Island 🇧🇼 Flag: Botswana 🇧🇾 Flag: Belarus 🇧🇿 Flag: Belize 🇨🇦 Flag: Canada 🇨🇨 Flag: Cocos (Keeling) Islands 🇨🇩 Flag: Congo - Kinshasa 🇨🇫 Flag: Central African Republic 🇨🇬 Flag: Congo - Brazzaville 🇨🇭 Flag: Switzerland 🇨🇮 Flag: Côte D’Ivoire 🇨🇰 Flag: Cook Islands 🇨🇱 Flag: Chile 🇨🇲 Flag: Cameroon 🇨🇳 Flag: China 🇨🇴 Flag: Colombia 🇨🇵 Flag: Clipperton Island 🇨🇷 Flag: Costa Rica 🇨🇺 Flag: Cuba 🇨🇻 Flag: Cape Verde 🇨🇼 Flag: Curaçao 🇨🇽 Flag: Christmas Island 🇨🇾 Flag: Cyprus 🇨🇿 Flag: Czechia 🇩🇪 Flag: Germany 🇩🇬 Flag: Diego Garcia 🇩🇯 Flag: Djibouti 🇩🇰 Flag: Denmark 🇩🇲 Flag: Dominica 🇩🇴 Flag: Dominican Republic 🇩🇿 Flag: Algeria 🇪🇦 Flag: Ceuta & Melilla 🇪🇨 Flag: Ecuador 🇪🇪 Flag: Estonia 🇪🇬 Flag: Egypt 🇪🇭 Flag: Western Sahara 🇪🇷 Flag: Eritrea 🇪🇸 Flag: Spain 🇪🇹 Flag: Ethiopia 🇪🇺 Flag: European Union 🇫🇮 Flag: Finland 🇫🇯 Flag: Fiji 🇫🇰 Flag: Falkland Islands 🇫🇲 Flag: Micronesia 🇫🇴 Flag: Faroe Islands 🇫🇷 Flag: France 🇬🇦 Flag: Gabon 🇬🇧 Flag: United Kingdom 🇬🇩 Flag: Grenada 🇬🇪 Flag: Georgia 🇬🇫 Flag: French Guiana 🇬🇬 Flag: Guernsey 🇬🇭 Flag: Ghana 🇬🇮 Flag: Gibraltar 🇬🇱 Flag: Greenland 🇬🇲 Flag: Gambia 🇬🇳 Flag: Guinea 🇬🇵 Flag: Guadeloupe 🇬🇶 Flag: Equatorial Guinea 🇬🇷 Flag: Greece 🇬🇸 Flag: South Georgia & South Sandwich Islands 🇬🇹 Flag: Guatemala 🇬🇺 Flag: Guam 🇬🇼 Flag: Guinea-Bissau 🇬🇾 Flag: Guyana 🇭🇰 Flag: Hong Kong SAR China 🇭🇲 Flag: Heard & McDonald Islands 🇭🇳 Flag: Honduras 🇭🇷 Flag: Croatia 🇭🇹 Flag: Haiti 🇭🇺 Flag: Hungary 🇮🇨 Flag: Canary Islands 🇮🇩 Flag: Indonesia 🇮🇪 Flag: Ireland 🇮🇱 Flag: Israel 🇮🇲 Flag: Isle of Man 🇮🇳 Flag: India 🇮🇴 Flag: British Indian Ocean Territory 🇮🇶 Flag: Iraq 🇮🇷 Flag: Iran 🇮🇸 Flag: Iceland 🇮🇹 Flag: Italy 🇯🇪 Flag: Jersey 🇯🇲 Flag: Jamaica 🇯🇴 Flag: Jordan 🇯🇵 Flag: Japan 🇰🇪 Flag: Kenya 🇰🇬 Flag: Kyrgyzstan 🇰🇭 Flag: Cambodia 🇰🇮 Flag: Kiribati 🇰🇲 Flag: Comoros 🇰🇳 Flag: St. Kitts & Nevis 🇰🇵 Flag: North Korea 🇰🇷 Flag: South Korea 🇰🇼 Flag: Kuwait 🇰🇾 Flag: Cayman Islands 🇰🇿 Flag: Kazakhstan 🇱🇦 Flag: Laos 🇱🇧 Flag: Lebanon 🇱🇨 Flag: St. Lucia 🇱🇮 Flag: Liechtenstein 🇱🇰 Flag: Sri Lanka 🇱🇷 Flag: Liberia 🇱🇸 Flag: Lesotho 🇱🇹 Flag: Lithuania 🇱🇺 Flag: Luxembourg 🇱🇻 Flag: Latvia 🇱🇾 Flag: Libya 🇲🇦 Flag: Morocco 🇲🇨 Flag: Monaco 🇲🇩 Flag: Moldova 🇲🇪 Flag: Montenegro 🇲🇫 Flag: St. Martin 🇲🇬 Flag: Madagascar 🇲🇭 Flag: Marshall Islands 🇲🇰 Flag: Macedonia 🇲🇱 Flag: Mali 🇲🇲 Flag: Myanmar (Burma) 🇲🇳 Flag: Mongolia 🇲🇴 Flag: Macau Sar China 🇲🇵 Flag: Northern Mariana Islands 🇲🇶 Flag: Martinique 🇲🇷 Flag: Mauritania 🇲🇸 Flag: Montserrat 🇲🇹 Flag: Malta 🇲🇺 Flag: Mauritius 🇲🇻 Flag: Maldives 🇲🇼 Flag: Malawi 🇲🇽 Flag: Mexico 🇲🇾 Flag: Malaysia 🇲🇿 Flag: Mozambique 🇳🇦 Flag: Namibia 🇳🇨 Flag: New Caledonia 🇳🇪 Flag: Niger 🇳🇫 Flag: Norfolk Island 🇳🇬 Flag: Nigeria 🇳🇮 Flag: Nicaragua 🇳🇱 Flag: Netherlands 🇳🇴 Flag: Norway 🇳🇵 Flag: Nepal 🇳🇷 Flag: Nauru 🇳🇺 Flag: Niue 🇳🇿 Flag: New Zealand 🇴🇲 Flag: Oman 🇵🇦 Flag: Panama 🇵🇪 Flag: Peru 🇵🇫 Flag: French Polynesia 🇵🇬 Flag: Papua New Guinea 🇵🇭 Flag: Philippines 🇵🇰 Flag: Pakistan 🇵🇱 Flag: Poland 🇵🇲 Flag: St. Pierre & Miquelon 🇵🇳 Flag: Pitcairn Islands 🇵🇷 Flag: Puerto Rico 🇵🇸 Flag: Palestinian Territories 🇵🇹 Flag: Portugal 🇵🇼 Flag: Palau 🇵🇾 Flag: Paraguay 🇶🇦 Flag: Qatar 🇷🇪 Flag: Réunion 🇷🇴 Flag: Romania 🇷🇸 Flag: Serbia 🇷🇺 Flag: Russia 🇷🇼 Flag: Rwanda 🇸🇦 Flag: Saudi Arabia 🇸🇧 Flag: Solomon Islands 🇸🇨 Flag: Seychelles 🇸🇩 Flag: Sudan 🇸🇪 Flag: Sweden 🇸🇬 Flag: Singapore 🇸🇭 Flag: St. Helena 🇸🇮 Flag: Slovenia 🇸🇯 Flag: Svalbard & Jan Mayen 🇸🇰 Flag: Slovakia 🇸🇱 Flag: Sierra Leone 🇸🇲 Flag: San Marino 🇸🇳 Flag: Senegal 🇸🇴 Flag: Somalia 🇸🇷 Flag: Suriname 🇸🇸 Flag: South Sudan 🇸🇹 Flag: São Tomé & Príncipe 🇸🇻 Flag: El Salvador 🇸🇽 Flag: Sint Maarten 🇸🇾 Flag: Syria 🇸🇿 Flag: Swaziland 🇹🇦 Flag: Tristan Da Cunha 🇹🇨 Flag: Turks & Caicos Islands 🇹🇩 Flag: Chad 🇹🇫 Flag: French Southern Territories 🇹🇬 Flag: Togo 🇹🇭 Flag: Thailand 🇹🇯 Flag: Tajikistan 🇹🇰 Flag: Tokelau 🇹🇱 Flag: Timor-Leste 🇹🇲 Flag: Turkmenistan 🇹🇳 Flag: Tunisia 🇹🇴 Flag: Tonga 🇹🇷 Flag: Turkey 🇹🇹 Flag: Trinidad & Tobago 🇹🇻 Flag: Tuvalu 🇹🇼 Flag: Taiwan 🇹🇿 Flag: Tanzania 🇺🇦 Flag: Ukraine 🇺🇬 Flag: Uganda 🇺🇲 Flag: U.S. Outlying Islands 🇺🇳 Flag: United Nations 🇺🇸 Flag: United States 🇺🇾 Flag: Uruguay 🇺🇿 Flag: Uzbekistan 🇻🇦 Flag: Vatican City 🇻🇨 Flag: St. Vincent & Grenadines 🇻🇪 Flag: Venezuela 🇻🇬 Flag: British Virgin Islands 🇻🇮 Flag: U.S. Virgin Islands 🇻🇳 Flag: Vietnam 🇻🇺 Flag: Vanuatu 🇼🇫 Flag: Wallis & Futuna 🇼🇸 Flag: Samoa 🇽🇰 Flag: Kosovo 🇾🇪 Flag: Yemen 🇾🇹 Flag: Mayotte 🇿🇦 Flag: South Africa 🇿🇲 Flag: Zambia 🇿🇼 Flag: Zimbabwe 🏴󠁧󠁢󠁥󠁮󠁧󠁿 Flag: England 🏴󠁧󠁢󠁳󠁣󠁴󠁿 Flag: Scotland 🏴󠁧󠁢󠁷󠁬󠁳󠁿 Flag: Wales space ! exclamation mark " quotation mark $ dollar sign % percent sign & ampersand ' apostrophe ( left parenthesis ) right parenthesis * asterisk + plus sign , comma - hyphen-minus . full stop / solidus 0 digit zero 1 digit one 2 digit two 3 digit three 4 digit four 5 digit five 6 digit six 7 digit seven 8 digit eight 9 digit nine : colon ; semicolon < less-than sign = equals sign > greater-than sign ? question mark @ commercial at A latin capital letter a B latin capital letter b C latin capital letter c D latin capital letter d E latin capital letter e F latin capital letter f G latin capital letter g H latin capital letter h I latin capital letter i J latin capital letter j K latin capital letter k L latin capital letter l M latin capital letter m N latin capital letter n O latin capital letter o P latin capital letter p Q latin capital letter q R latin capital letter r S latin capital letter s T latin capital letter t U latin capital letter u V latin capital letter v W latin capital letter w X latin capital letter x Y latin capital letter y Z latin capital letter z [ left square bracket \ reverse solidus ] right square bracket ^ circumflex accent _ low line ` grave accent a latin small letter a b latin small letter b c latin small letter c d latin small letter d e latin small letter e f latin small letter f g latin small letter g h latin small letter h i latin small letter i j latin small letter j k latin small letter k l latin small letter l m latin small letter m n latin small letter n o latin small letter o p latin small letter p q latin small letter q r latin small letter r s latin small letter s t latin small letter t u latin small letter u v latin small letter v w latin small letter w x latin small letter x y latin small letter y z latin small letter z { left curly bracket | vertical line } right curly bracket ~ tilde   no-break space ¡ inverted exclamation mark ¢ cent sign £ pound sign ¤ currency sign ¥ yen sign ¦ broken bar § section sign ¨ diaeresis © copyright sign ª feminine ordinal indicator « left-pointing double angle quotation mark ¬ not sign ® registered sign ¯ macron ° degree sign ± plus-minus sign ² superscript two ³ superscript three ´ acute accent µ micro sign ¶ pilcrow sign · middle dot ¸ cedilla ¹ superscript one º masculine ordinal indicator » right-pointing double angle quotation mark ¼ vulgar fraction one quarter ½ vulgar fraction one half ¾ vulgar fraction three quarters ¿ inverted question mark À latin capital letter a with grave Á latin capital letter a with acute  latin capital letter a with circumflex à latin capital letter a with tilde Ä latin capital letter a with diaeresis Å latin capital letter a with ring above Æ latin capital letter ae Ç latin capital letter c with cedilla È latin capital letter e with grave É latin capital letter e with acute Ê latin capital letter e with circumflex Ë latin capital letter e with diaeresis Ì latin capital letter i with grave Í latin capital letter i with acute Î latin capital letter i with circumflex Ï latin capital letter i with diaeresis Ð latin capital letter eth Ñ latin capital letter n with tilde Ò latin capital letter o with grave Ó latin capital letter o with acute Ô latin capital letter o with circumflex Õ latin capital letter o with tilde Ö latin capital letter o with diaeresis × multiplication sign Ø latin capital letter o with stroke Ù latin capital letter u with grave Ú latin capital letter u with acute Û latin capital letter u with circumflex Ü latin capital letter u with diaeresis Ý latin capital letter y with acute Þ latin capital letter thorn ß latin small letter sharp s à latin small letter a with grave á latin small letter a with acute â latin small letter a with circumflex ã latin small letter a with tilde ä latin small letter a with diaeresis å latin small letter a with ring above æ latin small letter ae ç latin small letter c with cedilla è latin small letter e with grave é latin small letter e with acute ê latin small letter e with circumflex ë latin small letter e with diaeresis ì latin small letter i with grave í latin small letter i with acute î latin small letter i with circumflex ï latin small letter i with diaeresis ð latin small letter eth ñ latin small letter n with tilde ò latin small letter o with grave ó latin small letter o with acute ô latin small letter o with circumflex õ latin small letter o with tilde ö latin small letter o with diaeresis ÷ division sign ø latin small letter o with stroke ù latin small letter u with grave ú latin small letter u with acute û latin small letter u with circumflex ü latin small letter u with diaeresis ý latin small letter y with acute þ latin small letter thorn ÿ latin small letter y with diaeresis Ā latin capital letter a with macron ā latin small letter a with macron Ă latin capital letter a with breve ă latin small letter a with breve Ą latin capital letter a with ogonek ą latin small letter a with ogonek Ć latin capital letter c with acute ć latin small letter c with acute Ĉ latin capital letter c with circumflex ĉ latin small letter c with circumflex Ċ latin capital letter c with dot above ċ latin small letter c with dot above Č latin capital letter c with caron č latin small letter c with caron Ď latin capital letter d with caron ď latin small letter d with caron Đ latin capital letter d with stroke đ latin small letter d with stroke Ē latin capital letter e with macron ē latin small letter e with macron Ĕ latin capital letter e with breve ĕ latin small letter e with breve Ė latin capital letter e with dot above ė latin small letter e with dot above Ę latin capital letter e with ogonek ę latin small letter e with ogonek Ě latin capital letter e with caron ě latin small letter e with caron Ĝ latin capital letter g with circumflex ĝ latin small letter g with circumflex Ğ latin capital letter g with breve ğ latin small letter g with breve Ġ latin capital letter g with dot above ġ latin small letter g with dot above Ģ latin capital letter g with cedilla ģ latin small letter g with cedilla Ĥ latin capital letter h with circumflex ĥ latin small letter h with circumflex Ħ latin capital letter h with stroke ħ latin small letter h with stroke Ĩ latin capital letter i with tilde ĩ latin small letter i with tilde Ī latin capital letter i with macron ī latin small letter i with macron Ĭ latin capital letter i with breve ĭ latin small letter i with breve Į latin capital letter i with ogonek į latin small letter i with ogonek İ latin capital letter i with dot above ı latin small letter dotless i IJ latin capital ligature ij ij latin small ligature ij Ĵ latin capital letter j with circumflex ĵ latin small letter j with circumflex Ķ latin capital letter k with cedilla ķ latin small letter k with cedilla ĸ latin small letter kra Ĺ latin capital letter l with acute ĺ latin small letter l with acute Ļ latin capital letter l with cedilla ļ latin small letter l with cedilla Ľ latin capital letter l with caron ľ latin small letter l with caron Ŀ latin capital letter l with middle dot ŀ latin small letter l with middle dot Ł latin capital letter l with stroke ł latin small letter l with stroke Ń latin capital letter n with acute ń latin small letter n with acute Ņ latin capital letter n with cedilla ņ latin small letter n with cedilla Ň latin capital letter n with caron ň latin small letter n with caron ʼn latin small letter n preceded by apostrophe Ŋ latin capital letter eng ŋ latin small letter eng Ō latin capital letter o with macron ō latin small letter o with macron Ŏ latin capital letter o with breve ŏ latin small letter o with breve Ő latin capital letter o with double acute ő latin small letter o with double acute Œ latin capital ligature oe œ latin small ligature oe Ŕ latin capital letter r with acute ŕ latin small letter r with acute Ŗ latin capital letter r with cedilla ŗ latin small letter r with cedilla Ř latin capital letter r with caron ř latin small letter r with caron Ś latin capital letter s with acute ś latin small letter s with acute Ŝ latin capital letter s with circumflex ŝ latin small letter s with circumflex Ş latin capital letter s with cedilla ş latin small letter s with cedilla Š latin capital letter s with caron š latin small letter s with caron Ţ latin capital letter t with cedilla ţ latin small letter t with cedilla Ť latin capital letter t with caron ť latin small letter t with caron Ŧ latin capital letter t with stroke ŧ latin small letter t with stroke Ũ latin capital letter u with tilde ũ latin small letter u with tilde Ū latin capital letter u with macron ū latin small letter u with macron Ŭ latin capital letter u with breve ŭ latin small letter u with breve Ů latin capital letter u with ring above ů latin small letter u with ring above Ű latin capital letter u with double acute ű latin small letter u with double acute Ų latin capital letter u with ogonek ų latin small letter u with ogonek Ŵ latin capital letter w with circumflex ŵ latin small letter w with circumflex Ŷ latin capital letter y with circumflex ŷ latin small letter y with circumflex Ÿ latin capital letter y with diaeresis Ź latin capital letter z with acute ź latin small letter z with acute Ż latin capital letter z with dot above ż latin small letter z with dot above Ž latin capital letter z with caron ž latin small letter z with caron ſ latin small letter long s ƀ latin small letter b with stroke Ɓ latin capital letter b with hook Ƃ latin capital letter b with topbar ƃ latin small letter b with topbar Ƅ latin capital letter tone six ƅ latin small letter tone six Ɔ latin capital letter open o Ƈ latin capital letter c with hook ƈ latin small letter c with hook Ɖ latin capital letter african d Ɗ latin capital letter d with hook Ƌ latin capital letter d with topbar ƌ latin small letter d with topbar ƍ latin small letter turned delta Ǝ latin capital letter reversed e Ə latin capital letter schwa Ɛ latin capital letter open e Ƒ latin capital letter f with hook ƒ latin small letter f with hook Ɠ latin capital letter g with hook Ɣ latin capital letter gamma ƕ latin small letter hv Ɩ latin capital letter iota Ɨ latin capital letter i with stroke Ƙ latin capital letter k with hook ƙ latin small letter k with hook ƚ latin small letter l with bar ƛ latin small letter lambda with stroke Ɯ latin capital letter turned m Ɲ latin capital letter n with left hook ƞ latin small letter n with long right leg Ɵ latin capital letter o with middle tilde Ơ latin capital letter o with horn ơ latin small letter o with horn Ƣ latin capital letter oi ƣ latin small letter oi Ƥ latin capital letter p with hook ƥ latin small letter p with hook Ʀ latin letter yr Ƨ latin capital letter tone two ƨ latin small letter tone two Ʃ latin capital letter esh ƪ latin letter reversed esh loop ƫ latin small letter t with palatal hook Ƭ latin capital letter t with hook ƭ latin small letter t with hook Ʈ latin capital letter t with retroflex hook Ư latin capital letter u with horn ư latin small letter u with horn Ʊ latin capital letter upsilon Ʋ latin capital letter v with hook Ƴ latin capital letter y with hook ƴ latin small letter y with hook Ƶ latin capital letter z with stroke ƶ latin small letter z with stroke Ʒ latin capital letter ezh Ƹ latin capital letter ezh reversed ƹ latin small letter ezh reversed ƺ latin small letter ezh with tail ƻ latin letter two with stroke Ƽ latin capital letter tone five ƽ latin small letter tone five ƾ latin letter inverted glottal stop with stroke ƿ latin letter wynn ǀ latin letter dental click ǁ latin letter lateral click ǂ latin letter alveolar click ǃ latin letter retroflex click DŽ latin capital letter dz with caron Dž latin capital letter d with small letter z with caron dž latin small letter dz with caron LJ latin capital letter lj Lj latin capital letter l with small letter j lj latin small letter lj NJ latin capital letter nj Nj latin capital letter n with small letter j nj latin small letter nj Ǎ latin capital letter a with caron ǎ latin small letter a with caron Ǐ latin capital letter i with caron ǐ latin small letter i with caron Ǒ latin capital letter o with caron ǒ latin small letter o with caron Ǔ latin capital letter u with caron ǔ latin small letter u with caron Ǖ latin capital letter u with diaeresis and macron ǖ latin small letter u with diaeresis and macron Ǘ latin capital letter u with diaeresis and acute ǘ latin small letter u with diaeresis and acute Ǚ latin capital letter u with diaeresis and caron ǚ latin small letter u with diaeresis and caron Ǜ latin capital letter u with diaeresis and grave ǜ latin small letter u with diaeresis and grave ǝ latin small letter turned e Ǟ latin capital letter a with diaeresis and macron ǟ latin small letter a with diaeresis and macron Ǡ latin capital letter a with dot above and macron ǡ latin small letter a with dot above and macron Ǣ latin capital letter ae with macron ǣ latin small letter ae with macron Ǥ latin capital letter g with stroke ǥ latin small letter g with stroke Ǧ latin capital letter g with caron ǧ latin small letter g with caron Ǩ latin capital letter k with caron ǩ latin small letter k with caron Ǫ latin capital letter o with ogonek ǫ latin small letter o with ogonek Ǭ latin capital letter o with ogonek and macron ǭ latin small letter o with ogonek and macron Ǯ latin capital letter ezh with caron ǯ latin small letter ezh with caron ǰ latin small letter j with caron DZ latin capital letter dz Dz latin capital letter d with small letter z dz latin small letter dz Ǵ latin capital letter g with acute ǵ latin small letter g with acute Ƕ latin capital letter hwair Ƿ latin capital letter wynn Ǹ latin capital letter n with grave ǹ latin small letter n with grave Ǻ latin capital letter a with ring above and acute ǻ latin small letter a with ring above and acute Ǽ latin capital letter ae with acute ǽ latin small letter ae with acute Ǿ latin capital letter o with stroke and acute ǿ latin small letter o with stroke and acute Ȁ latin capital letter a with double grave ȁ latin small letter a with double grave Ȃ latin capital letter a with inverted breve ȃ latin small letter a with inverted breve Ȅ latin capital letter e with double grave ȅ latin small letter e with double grave Ȇ latin capital letter e with inverted breve ȇ latin small letter e with inverted breve Ȉ latin capital letter i with double grave ȉ latin small letter i with double grave Ȋ latin capital letter i with inverted breve ȋ latin small letter i with inverted breve Ȍ latin capital letter o with double grave ȍ latin small letter o with double grave Ȏ latin capital letter o with inverted breve ȏ latin small letter o with inverted breve Ȑ latin capital letter r with double grave ȑ latin small letter r with double grave Ȓ latin capital letter r with inverted breve ȓ latin small letter r with inverted breve Ȕ latin capital letter u with double grave ȕ latin small letter u with double grave Ȗ latin capital letter u with inverted breve ȗ latin small letter u with inverted breve Ș latin capital letter s with comma below ș latin small letter s with comma below Ț latin capital letter t with comma below ț latin small letter t with comma below Ȝ latin capital letter yogh ȝ latin small letter yogh Ȟ latin capital letter h with caron ȟ latin small letter h with caron Ƞ latin capital letter n with long right leg ȡ latin small letter d with curl Ȣ latin capital letter ou ȣ latin small letter ou Ȥ latin capital letter z with hook ȥ latin small letter z with hook Ȧ latin capital letter a with dot above ȧ latin small letter a with dot above Ȩ latin capital letter e with cedilla ȩ latin small letter e with cedilla Ȫ latin capital letter o with diaeresis and macron ȫ latin small letter o with diaeresis and macron Ȭ latin capital letter o with tilde and macron ȭ latin small letter o with tilde and macron Ȯ latin capital letter o with dot above ȯ latin small letter o with dot above Ȱ latin capital letter o with dot above and macron ȱ latin small letter o with dot above and macron Ȳ latin capital letter y with macron ȳ latin small letter y with macron ȴ latin small letter l with curl ȵ latin small letter n with curl ȶ latin small letter t with curl ȷ latin small letter dotless j ȸ latin small letter db digraph ȹ latin small letter qp digraph Ⱥ latin capital letter a with stroke Ȼ latin capital letter c with stroke ȼ latin small letter c with stroke Ƚ latin capital letter l with bar Ⱦ latin capital letter t with diagonal stroke ȿ latin small letter s with swash tail ɀ latin small letter z with swash tail Ɂ latin capital letter glottal stop ɂ latin small letter glottal stop Ƀ latin capital letter b with stroke Ʉ latin capital letter u bar Ʌ latin capital letter turned v Ɇ latin capital letter e with stroke ɇ latin small letter e with stroke Ɉ latin capital letter j with stroke ɉ latin small letter j with stroke Ɋ latin capital letter small q with hook tail ɋ latin small letter q with hook tail Ɍ latin capital letter r with stroke ɍ latin small letter r with stroke Ɏ latin capital letter y with stroke ɏ latin small letter y with stroke ɐ latin small letter turned a ɑ latin small letter alpha ɒ latin small letter turned alpha ɓ latin small letter b with hook ɔ latin small letter open o ɕ latin small letter c with curl ɖ latin small letter d with tail ɗ latin small letter d with hook ɘ latin small letter reversed e ə latin small letter schwa ɚ latin small letter schwa with hook ɛ latin small letter open e ɜ latin small letter reversed open e ɝ latin small letter reversed open e with hook ɞ latin small letter closed reversed open e ɟ latin small letter dotless j with stroke ɠ latin small letter g with hook ɡ latin small letter script g ɢ latin letter small capital g ɣ latin small letter gamma ɤ latin small letter rams horn ɥ latin small letter turned h ɦ latin small letter h with hook ɧ latin small letter heng with hook ɨ latin small letter i with stroke ɩ latin small letter iota ɪ latin letter small capital i ɫ latin small letter l with middle tilde ɬ latin small letter l with belt ɭ latin small letter l with retroflex hook ɮ latin small letter lezh ɯ latin small letter turned m ɰ latin small letter turned m with long leg ɱ latin small letter m with hook ɲ latin small letter n with left hook ɳ latin small letter n with retroflex hook ɴ latin letter small capital n ɵ latin small letter barred o ɶ latin letter small capital oe ɷ latin small letter closed omega ɸ latin small letter phi ɹ latin small letter turned r ɺ latin small letter turned r with long leg ɻ latin small letter turned r with hook ɼ latin small letter r with long leg ɽ latin small letter r with tail ɾ latin small letter r with fishhook ɿ latin small letter reversed r with fishhook ʀ latin letter small capital r ʁ latin letter small capital inverted r ʂ latin small letter s with hook ʃ latin small letter esh ʄ latin small letter dotless j with stroke and hook ʅ latin small letter squat reversed esh ʆ latin small letter esh with curl ʇ latin small letter turned t ʈ latin small letter t with retroflex hook ʉ latin small letter u bar ʊ latin small letter upsilon ʋ latin small letter v with hook ʌ latin small letter turned v ʍ latin small letter turned w ʎ latin small letter turned y ʏ latin letter small capital y ʐ latin small letter z with retroflex hook ʑ latin small letter z with curl ʒ latin small letter ezh ʓ latin small letter ezh with curl ʔ latin letter glottal stop ʕ latin letter pharyngeal voiced fricative ʖ latin letter inverted glottal stop ʗ latin letter stretched c ʘ latin letter bilabial click ʙ latin letter small capital b ʚ latin small letter closed open e ʛ latin letter small capital g with hook ʜ latin letter small capital h ʝ latin small letter j with crossed-tail ʞ latin small letter turned k ʟ latin letter small capital l ʠ latin small letter q with hook ʡ latin letter glottal stop with stroke ʢ latin letter reversed glottal stop with stroke ʣ latin small letter dz digraph ʤ latin small letter dezh digraph ʥ latin small letter dz digraph with curl ʦ latin small letter ts digraph ʧ latin small letter tesh digraph ʨ latin small letter tc digraph with curl ʩ latin small letter feng digraph ʪ latin small letter ls digraph ʫ latin small letter lz digraph ʬ latin letter bilabial percussive ʭ latin letter bidental percussive ʮ latin small letter turned h with fishhook ʯ latin small letter turned h with fishhook and tail ʰ modifier letter small h ʱ modifier letter small h with hook ʲ modifier letter small j ʳ modifier letter small r ʴ modifier letter small turned r ʵ modifier letter small turned r with hook ʶ modifier letter small capital inverted r ʷ modifier letter small w ʸ modifier letter small y ʹ modifier letter prime ʺ modifier letter double prime ʻ modifier letter turned comma ʼ modifier letter apostrophe ʽ modifier letter reversed comma ʾ modifier letter right half ring ʿ modifier letter left half ring ˀ modifier letter glottal stop ˁ modifier letter reversed glottal stop ˂ modifier letter left arrowhead ˃ modifier letter right arrowhead ˄ modifier letter up arrowhead ˅ modifier letter down arrowhead ˆ modifier letter circumflex accent ˇ caron ˈ modifier letter vertical line ˉ modifier letter macron ˊ modifier letter acute accent ˋ modifier letter grave accent ˌ modifier letter low vertical line ˍ modifier letter low macron ˎ modifier letter low grave accent ˏ modifier letter low acute accent ː modifier letter triangular colon ˑ modifier letter half triangular colon ˒ modifier letter centred right half ring ˓ modifier letter centred left half ring ˔ modifier letter up tack ˕ modifier letter down tack ˖ modifier letter plus sign ˗ modifier letter minus sign ˘ breve ˙ dot above ˚ ring above ˛ ogonek ˜ small tilde ˝ double acute accent ˞ modifier letter rhotic hook ˟ modifier letter cross accent ˠ modifier letter small gamma ˡ modifier letter small l ˢ modifier letter small s ˣ modifier letter small x ˤ modifier letter small reversed glottal stop ˥ modifier letter extra-high tone bar ˦ modifier letter high tone bar ˧ modifier letter mid tone bar ˨ modifier letter low tone bar ˩ modifier letter extra-low tone bar ˪ modifier letter yin departing tone mark ˫ modifier letter yang departing tone mark ˬ modifier letter voicing ˭ modifier letter unaspirated ˮ modifier letter double apostrophe ˯ modifier letter low down arrowhead ˰ modifier letter low up arrowhead ˱ modifier letter low left arrowhead ˲ modifier letter low right arrowhead ˳ modifier letter low ring ˴ modifier letter middle grave accent ˵ modifier letter middle double grave accent ˶ modifier letter middle double acute accent ˷ modifier letter low tilde ˸ modifier letter raised colon ˹ modifier letter begin high tone ˺ modifier letter end high tone ˻ modifier letter begin low tone ˼ modifier letter end low tone ˽ modifier letter shelf ˾ modifier letter open shelf ˿ modifier letter low left arrow Ͱ greek capital letter heta ͱ greek small letter heta Ͳ greek capital letter archaic sampi ͳ greek small letter archaic sampi ʹ greek numeral sign ͵ greek lower numeral sign Ͷ greek capital letter pamphylian digamma ͷ greek small letter pamphylian digamma ͺ greek ypogegrammeni ͻ greek small reversed lunate sigma symbol ͼ greek small dotted lunate sigma symbol ͽ greek small reversed dotted lunate sigma symbol ; greek question mark Ϳ greek capital letter yot ΄ greek tonos ΅ greek dialytika tonos Ά greek capital letter alpha with tonos · greek ano teleia Έ greek capital letter epsilon with tonos Ή greek capital letter eta with tonos Ί greek capital letter iota with tonos Ό greek capital letter omicron with tonos Ύ greek capital letter upsilon with tonos Ώ greek capital letter omega with tonos ΐ greek small letter iota with dialytika and tonos Α greek capital letter alpha Β greek capital letter beta Γ greek capital letter gamma Δ greek capital letter delta Ε greek capital letter epsilon Ζ greek capital letter zeta Η greek capital letter eta Θ greek capital letter theta Ι greek capital letter iota Κ greek capital letter kappa Λ greek capital letter lambda Μ greek capital letter mu Ν greek capital letter nu Ξ greek capital letter xi Ο greek capital letter omicron Π greek capital letter pi Ρ greek capital letter rho Σ greek capital letter sigma Τ greek capital letter tau Υ greek capital letter upsilon Φ greek capital letter phi Χ greek capital letter chi Ψ greek capital letter psi Ω greek capital letter omega Ϊ greek capital letter iota with dialytika Ϋ greek capital letter upsilon with dialytika ά greek small letter alpha with tonos έ greek small letter epsilon with tonos ή greek small letter eta with tonos ί greek small letter iota with tonos ΰ greek small letter upsilon with dialytika and tonos α greek small letter alpha β greek small letter beta γ greek small letter gamma δ greek small letter delta ε greek small letter epsilon ζ greek small letter zeta η greek small letter eta θ greek small letter theta ι greek small letter iota κ greek small letter kappa λ greek small letter lambda μ greek small letter mu ν greek small letter nu ξ greek small letter xi ο greek small letter omicron π greek small letter pi ρ greek small letter rho ς greek small letter final sigma σ greek small letter sigma τ greek small letter tau υ greek small letter upsilon φ greek small letter phi χ greek small letter chi ψ greek small letter psi ω greek small letter omega ϊ greek small letter iota with dialytika ϋ greek small letter upsilon with dialytika ό greek small letter omicron with tonos ύ greek small letter upsilon with tonos ώ greek small letter omega with tonos Ϗ greek capital kai symbol ϐ greek beta symbol ϑ greek theta symbol ϒ greek upsilon with hook symbol ϓ greek upsilon with acute and hook symbol ϔ greek upsilon with diaeresis and hook symbol ϕ greek phi symbol ϖ greek pi symbol ϗ greek kai symbol Ϙ greek letter archaic koppa ϙ greek small letter archaic koppa Ϛ greek letter stigma ϛ greek small letter stigma Ϝ greek letter digamma ϝ greek small letter digamma Ϟ greek letter koppa ϟ greek small letter koppa Ϡ greek letter sampi ϡ greek small letter sampi Ϣ coptic capital letter shei ϣ coptic small letter shei Ϥ coptic capital letter fei ϥ coptic small letter fei Ϧ coptic capital letter khei ϧ coptic small letter khei Ϩ coptic capital letter hori ϩ coptic small letter hori Ϫ coptic capital letter gangia ϫ coptic small letter gangia Ϭ coptic capital letter shima ϭ coptic small letter shima Ϯ coptic capital letter dei ϯ coptic small letter dei ϰ greek kappa symbol ϱ greek rho symbol ϲ greek lunate sigma symbol ϳ greek letter yot ϴ greek capital theta symbol ϵ greek lunate epsilon symbol ϶ greek reversed lunate epsilon symbol Ϸ greek capital letter sho ϸ greek small letter sho Ϲ greek capital lunate sigma symbol Ϻ greek capital letter san ϻ greek small letter san ϼ greek rho with stroke symbol Ͻ greek capital reversed lunate sigma symbol Ͼ greek capital dotted lunate sigma symbol Ͽ greek capital reversed dotted lunate sigma symbol Ѐ cyrillic capital letter ie with grave Ё cyrillic capital letter io Ђ cyrillic capital letter dje Ѓ cyrillic capital letter gje Є cyrillic capital letter ukrainian ie Ѕ cyrillic capital letter dze І cyrillic capital letter byelorussian-ukrainian i Ї cyrillic capital letter yi Ј cyrillic capital letter je Љ cyrillic capital letter lje Њ cyrillic capital letter nje Ћ cyrillic capital letter tshe Ќ cyrillic capital letter kje Ѝ cyrillic capital letter i with grave Ў cyrillic capital letter short u Џ cyrillic capital letter dzhe А cyrillic capital letter a Б cyrillic capital letter be В cyrillic capital letter ve Г cyrillic capital letter ghe Д cyrillic capital letter de Е cyrillic capital letter ie Ж cyrillic capital letter zhe З cyrillic capital letter ze И cyrillic capital letter i Й cyrillic capital letter short i К cyrillic capital letter ka Л cyrillic capital letter el М cyrillic capital letter em Н cyrillic capital letter en О cyrillic capital letter o П cyrillic capital letter pe Р cyrillic capital letter er С cyrillic capital letter es Т cyrillic capital letter te У cyrillic capital letter u Ф cyrillic capital letter ef Х cyrillic capital letter ha Ц cyrillic capital letter tse Ч cyrillic capital letter che Ш cyrillic capital letter sha Щ cyrillic capital letter shcha Ъ cyrillic capital letter hard sign Ы cyrillic capital letter yeru Ь cyrillic capital letter soft sign Э cyrillic capital letter e Ю cyrillic capital letter yu Я cyrillic capital letter ya а cyrillic small letter a б cyrillic small letter be в cyrillic small letter ve г cyrillic small letter ghe д cyrillic small letter de е cyrillic small letter ie ж cyrillic small letter zhe з cyrillic small letter ze и cyrillic small letter i й cyrillic small letter short i к cyrillic small letter ka л cyrillic small letter el м cyrillic small letter em н cyrillic small letter en о cyrillic small letter o п cyrillic small letter pe р cyrillic small letter er с cyrillic small letter es т cyrillic small letter te у cyrillic small letter u ф cyrillic small letter ef х cyrillic small letter ha ц cyrillic small letter tse ч cyrillic small letter che ш cyrillic small letter sha щ cyrillic small letter shcha ъ cyrillic small letter hard sign ы cyrillic small letter yeru ь cyrillic small letter soft sign э cyrillic small letter e ю cyrillic small letter yu я cyrillic small letter ya ѐ cyrillic small letter ie with grave ё cyrillic small letter io ђ cyrillic small letter dje ѓ cyrillic small letter gje є cyrillic small letter ukrainian ie ѕ cyrillic small letter dze і cyrillic small letter byelorussian-ukrainian i ї cyrillic small letter yi ј cyrillic small letter je љ cyrillic small letter lje њ cyrillic small letter nje ћ cyrillic small letter tshe ќ cyrillic small letter kje ѝ cyrillic small letter i with grave ў cyrillic small letter short u џ cyrillic small letter dzhe Ѡ cyrillic capital letter omega ѡ cyrillic small letter omega Ѣ cyrillic capital letter yat ѣ cyrillic small letter yat Ѥ cyrillic capital letter iotified e ѥ cyrillic small letter iotified e Ѧ cyrillic capital letter little yus ѧ cyrillic small letter little yus Ѩ cyrillic capital letter iotified little yus ѩ cyrillic small letter iotified little yus Ѫ cyrillic capital letter big yus ѫ cyrillic small letter big yus Ѭ cyrillic capital letter iotified big yus ѭ cyrillic small letter iotified big yus Ѯ cyrillic capital letter ksi ѯ cyrillic small letter ksi Ѱ cyrillic capital letter psi ѱ cyrillic small letter psi Ѳ cyrillic capital letter fita ѳ cyrillic small letter fita Ѵ cyrillic capital letter izhitsa ѵ cyrillic small letter izhitsa Ѷ cyrillic capital letter izhitsa with double grave accent ѷ cyrillic small letter izhitsa with double grave accent Ѹ cyrillic capital letter uk ѹ cyrillic small letter uk Ѻ cyrillic capital letter round omega ѻ cyrillic small letter round omega Ѽ cyrillic capital letter omega with titlo ѽ cyrillic small letter omega with titlo Ѿ cyrillic capital letter ot ѿ cyrillic small letter ot Ҁ cyrillic capital letter koppa ҁ cyrillic small letter koppa ҂ cyrillic thousands sign Ҋ cyrillic capital letter short i with tail ҋ cyrillic small letter short i with tail Ҍ cyrillic capital letter semisoft sign ҍ cyrillic small letter semisoft sign Ҏ cyrillic capital letter er with tick ҏ cyrillic small letter er with tick Ґ cyrillic capital letter ghe with upturn ґ cyrillic small letter ghe with upturn Ғ cyrillic capital letter ghe with stroke ғ cyrillic small letter ghe with stroke Ҕ cyrillic capital letter ghe with middle hook ҕ cyrillic small letter ghe with middle hook Җ cyrillic capital letter zhe with descender җ cyrillic small letter zhe with descender Ҙ cyrillic capital letter ze with descender ҙ cyrillic small letter ze with descender Қ cyrillic capital letter ka with descender қ cyrillic small letter ka with descender Ҝ cyrillic capital letter ka with vertical stroke ҝ cyrillic small letter ka with vertical stroke Ҟ cyrillic capital letter ka with stroke ҟ cyrillic small letter ka with stroke Ҡ cyrillic capital letter bashkir ka ҡ cyrillic small letter bashkir ka Ң cyrillic capital letter en with descender ң cyrillic small letter en with descender Ҥ cyrillic capital ligature en ghe ҥ cyrillic small ligature en ghe Ҧ cyrillic capital letter pe with middle hook ҧ cyrillic small letter pe with middle hook Ҩ cyrillic capital letter abkhasian ha ҩ cyrillic small letter abkhasian ha Ҫ cyrillic capital letter es with descender ҫ cyrillic small letter es with descender Ҭ cyrillic capital letter te with descender ҭ cyrillic small letter te with descender Ү cyrillic capital letter straight u ү cyrillic small letter straight u Ұ cyrillic capital letter straight u with stroke ұ cyrillic small letter straight u with stroke Ҳ cyrillic capital letter ha with descender ҳ cyrillic small letter ha with descender Ҵ cyrillic capital ligature te tse ҵ cyrillic small ligature te tse Ҷ cyrillic capital letter che with descender ҷ cyrillic small letter che with descender Ҹ cyrillic capital letter che with vertical stroke ҹ cyrillic small letter che with vertical stroke Һ cyrillic capital letter shha һ cyrillic small letter shha Ҽ cyrillic capital letter abkhasian che ҽ cyrillic small letter abkhasian che Ҿ cyrillic capital letter abkhasian che with descender ҿ cyrillic small letter abkhasian che with descender Ӏ cyrillic letter palochka Ӂ cyrillic capital letter zhe with breve ӂ cyrillic small letter zhe with breve Ӄ cyrillic capital letter ka with hook ӄ cyrillic small letter ka with hook Ӆ cyrillic capital letter el with tail ӆ cyrillic small letter el with tail Ӈ cyrillic capital letter en with hook ӈ cyrillic small letter en with hook Ӊ cyrillic capital letter en with tail ӊ cyrillic small letter en with tail Ӌ cyrillic capital letter khakassian che ӌ cyrillic small letter khakassian che Ӎ cyrillic capital letter em with tail ӎ cyrillic small letter em with tail ӏ cyrillic small letter palochka Ӑ cyrillic capital letter a with breve ӑ cyrillic small letter a with breve Ӓ cyrillic capital letter a with diaeresis ӓ cyrillic small letter a with diaeresis Ӕ cyrillic capital ligature a ie ӕ cyrillic small ligature a ie Ӗ cyrillic capital letter ie with breve ӗ cyrillic small letter ie with breve Ә cyrillic capital letter schwa ә cyrillic small letter schwa Ӛ cyrillic capital letter schwa with diaeresis ӛ cyrillic small letter schwa with diaeresis Ӝ cyrillic capital letter zhe with diaeresis ӝ cyrillic small letter zhe with diaeresis Ӟ cyrillic capital letter ze with diaeresis ӟ cyrillic small letter ze with diaeresis Ӡ cyrillic capital letter abkhasian dze ӡ cyrillic small letter abkhasian dze Ӣ cyrillic capital letter i with macron ӣ cyrillic small letter i with macron Ӥ cyrillic capital letter i with diaeresis ӥ cyrillic small letter i with diaeresis Ӧ cyrillic capital letter o with diaeresis ӧ cyrillic small letter o with diaeresis Ө cyrillic capital letter barred o ө cyrillic small letter barred o Ӫ cyrillic capital letter barred o with diaeresis ӫ cyrillic small letter barred o with diaeresis Ӭ cyrillic capital letter e with diaeresis ӭ cyrillic small letter e with diaeresis Ӯ cyrillic capital letter u with macron ӯ cyrillic small letter u with macron Ӱ cyrillic capital letter u with diaeresis ӱ cyrillic small letter u with diaeresis Ӳ cyrillic capital letter u with double acute ӳ cyrillic small letter u with double acute Ӵ cyrillic capital letter che with diaeresis ӵ cyrillic small letter che with diaeresis Ӷ cyrillic capital letter ghe with descender ӷ cyrillic small letter ghe with descender Ӹ cyrillic capital letter yeru with diaeresis ӹ cyrillic small letter yeru with diaeresis Ӻ cyrillic capital letter ghe with stroke and hook ӻ cyrillic small letter ghe with stroke and hook Ӽ cyrillic capital letter ha with hook ӽ cyrillic small letter ha with hook Ӿ cyrillic capital letter ha with stroke ӿ cyrillic small letter ha with stroke Ԁ cyrillic capital letter komi de ԁ cyrillic small letter komi de Ԃ cyrillic capital letter komi dje ԃ cyrillic small letter komi dje Ԅ cyrillic capital letter komi zje ԅ cyrillic small letter komi zje Ԇ cyrillic capital letter komi dzje ԇ cyrillic small letter komi dzje Ԉ cyrillic capital letter komi lje ԉ cyrillic small letter komi lje Ԋ cyrillic capital letter komi nje ԋ cyrillic small letter komi nje Ԍ cyrillic capital letter komi sje ԍ cyrillic small letter komi sje Ԏ cyrillic capital letter komi tje ԏ cyrillic small letter komi tje Ԑ cyrillic capital letter reversed ze ԑ cyrillic small letter reversed ze Ԓ cyrillic capital letter el with hook ԓ cyrillic small letter el with hook Ԕ cyrillic capital letter lha ԕ cyrillic small letter lha Ԗ cyrillic capital letter rha ԗ cyrillic small letter rha Ԙ cyrillic capital letter yae ԙ cyrillic small letter yae Ԛ cyrillic capital letter qa ԛ cyrillic small letter qa Ԝ cyrillic capital letter we ԝ cyrillic small letter we Ԟ cyrillic capital letter aleut ka ԟ cyrillic small letter aleut ka Ԡ cyrillic capital letter el with middle hook ԡ cyrillic small letter el with middle hook Ԣ cyrillic capital letter en with middle hook ԣ cyrillic small letter en with middle hook Ԥ cyrillic capital letter pe with descender ԥ cyrillic small letter pe with descender Ԧ cyrillic capital letter shha with descender ԧ cyrillic small letter shha with descender Ԩ cyrillic capital letter en with left hook ԩ cyrillic small letter en with left hook Ԫ cyrillic capital letter dzzhe ԫ cyrillic small letter dzzhe Ԭ cyrillic capital letter dche ԭ cyrillic small letter dche Ԯ cyrillic capital letter el with descender ԯ cyrillic small letter el with descender Ա armenian capital letter ayb Բ armenian capital letter ben Գ armenian capital letter gim Դ armenian capital letter da Ե armenian capital letter ech Զ armenian capital letter za Է armenian capital letter eh Ը armenian capital letter et Թ armenian capital letter to Ժ armenian capital letter zhe Ի armenian capital letter ini Լ armenian capital letter liwn Խ armenian capital letter xeh Ծ armenian capital letter ca Կ armenian capital letter ken Հ armenian capital letter ho Ձ armenian capital letter ja Ղ armenian capital letter ghad Ճ armenian capital letter cheh Մ armenian capital letter men Յ armenian capital letter yi Ն armenian capital letter now Շ armenian capital letter sha Ո armenian capital letter vo Չ armenian capital letter cha Պ armenian capital letter peh Ջ armenian capital letter jheh Ռ armenian capital letter ra Ս armenian capital letter seh Վ armenian capital letter vew Տ armenian capital letter tiwn Ր armenian capital letter reh Ց armenian capital letter co Ւ armenian capital letter yiwn Փ armenian capital letter piwr Ք armenian capital letter keh Օ armenian capital letter oh Ֆ armenian capital letter feh ՙ armenian modifier letter left half ring ՚ armenian apostrophe ՛ armenian emphasis mark ՜ armenian exclamation mark ՝ armenian comma ՞ armenian question mark ՟ armenian abbreviation mark ա armenian small letter ayb բ armenian small letter ben գ armenian small letter gim դ armenian small letter da ե armenian small letter ech զ armenian small letter za է armenian small letter eh ը armenian small letter et թ armenian small letter to ժ armenian small letter zhe ի armenian small letter ini լ armenian small letter liwn խ armenian small letter xeh ծ armenian small letter ca կ armenian small letter ken հ armenian small letter ho ձ armenian small letter ja ղ armenian small letter ghad ճ armenian small letter cheh մ armenian small letter men յ armenian small letter yi ն armenian small letter now շ armenian small letter sha ո armenian small letter vo չ armenian small letter cha պ armenian small letter peh ջ armenian small letter jheh ռ armenian small letter ra ս armenian small letter seh վ armenian small letter vew տ armenian small letter tiwn ր armenian small letter reh ց armenian small letter co ւ armenian small letter yiwn փ armenian small letter piwr ք armenian small letter keh օ armenian small letter oh ֆ armenian small letter feh և armenian small ligature ech yiwn ։ armenian full stop ֊ armenian hyphen ֍ right-facing armenian eternity sign ֎ left-facing armenian eternity sign ֏ armenian dram sign ־ hebrew punctuation maqaf ׀ hebrew punctuation paseq ׃ hebrew punctuation sof pasuq ׆ hebrew punctuation nun hafukha א hebrew letter alef ב hebrew letter bet ג hebrew letter gimel ד hebrew letter dalet ה hebrew letter he ו hebrew letter vav ז hebrew letter zayin ח hebrew letter het ט hebrew letter tet י hebrew letter yod ך hebrew letter final kaf כ hebrew letter kaf ל hebrew letter lamed ם hebrew letter final mem מ hebrew letter mem ן hebrew letter final nun נ hebrew letter nun ס hebrew letter samekh ע hebrew letter ayin ף hebrew letter final pe פ hebrew letter pe ץ hebrew letter final tsadi צ hebrew letter tsadi ק hebrew letter qof ר hebrew letter resh ש hebrew letter shin ת hebrew letter tav װ hebrew ligature yiddish double vav ױ hebrew ligature yiddish vav yod ײ hebrew ligature yiddish double yod ׳ hebrew punctuation geresh ״ hebrew punctuation gershayim ؆ arabic-indic cube root ؇ arabic-indic fourth root ؈ arabic ray ؉ arabic-indic per mille sign ؊ arabic-indic per ten thousand sign ؋ afghani sign ، arabic comma ؍ arabic date separator ؎ arabic poetic verse sign ؏ arabic sign misra ؛ arabic semicolon ؞ arabic triple dot punctuation mark ؟ arabic question mark ؠ arabic letter kashmiri yeh ء arabic letter hamza آ arabic letter alef with madda above أ arabic letter alef with hamza above ؤ arabic letter waw with hamza above إ arabic letter alef with hamza below ئ arabic letter yeh with hamza above ا arabic letter alef ب arabic letter beh ة arabic letter teh marbuta ت arabic letter teh ث arabic letter theh ج arabic letter jeem ح arabic letter hah خ arabic letter khah د arabic letter dal ذ arabic letter thal ر arabic letter reh ز arabic letter zain س arabic letter seen ش arabic letter sheen ص arabic letter sad ض arabic letter dad ط arabic letter tah ظ arabic letter zah ع arabic letter ain غ arabic letter ghain ػ arabic letter keheh with two dots above ؼ arabic letter keheh with three dots below ؽ arabic letter farsi yeh with inverted v ؾ arabic letter farsi yeh with two dots above ؿ arabic letter farsi yeh with three dots above ـ arabic tatweel ف arabic letter feh ق arabic letter qaf ك arabic letter kaf ل arabic letter lam م arabic letter meem ن arabic letter noon ه arabic letter heh و arabic letter waw ى arabic letter alef maksura ي arabic letter yeh ٠ arabic-indic digit zero ١ arabic-indic digit one ٢ arabic-indic digit two ٣ arabic-indic digit three ٤ arabic-indic digit four ٥ arabic-indic digit five ٦ arabic-indic digit six ٧ arabic-indic digit seven ٨ arabic-indic digit eight ٩ arabic-indic digit nine ٪ arabic percent sign ٫ arabic decimal separator ٬ arabic thousands separator ٭ arabic five pointed star ٮ arabic letter dotless beh ٯ arabic letter dotless qaf ٱ arabic letter alef wasla ٲ arabic letter alef with wavy hamza above ٳ arabic letter alef with wavy hamza below ٴ arabic letter high hamza ٵ arabic letter high hamza alef ٶ arabic letter high hamza waw ٷ arabic letter u with hamza above ٸ arabic letter high hamza yeh ٹ arabic letter tteh ٺ arabic letter tteheh ٻ arabic letter beeh ټ arabic letter teh with ring ٽ arabic letter teh with three dots above downwards پ arabic letter peh ٿ arabic letter teheh ڀ arabic letter beheh ځ arabic letter hah with hamza above ڂ arabic letter hah with two dots vertical above ڃ arabic letter nyeh ڄ arabic letter dyeh څ arabic letter hah with three dots above چ arabic letter tcheh ڇ arabic letter tcheheh ڈ arabic letter ddal ډ arabic letter dal with ring ڊ arabic letter dal with dot below ڋ arabic letter dal with dot below and small tah ڌ arabic letter dahal ڍ arabic letter ddahal ڎ arabic letter dul ڏ arabic letter dal with three dots above downwards ڐ arabic letter dal with four dots above ڑ arabic letter rreh ڒ arabic letter reh with small v ړ arabic letter reh with ring ڔ arabic letter reh with dot below ڕ arabic letter reh with small v below ږ arabic letter reh with dot below and dot above ڗ arabic letter reh with two dots above ژ arabic letter jeh ڙ arabic letter reh with four dots above ښ arabic letter seen with dot below and dot above ڛ arabic letter seen with three dots below ڜ arabic letter seen with three dots below and three dots above ڝ arabic letter sad with two dots below ڞ arabic letter sad with three dots above ڟ arabic letter tah with three dots above ڠ arabic letter ain with three dots above ڡ arabic letter dotless feh ڢ arabic letter feh with dot moved below ڣ arabic letter feh with dot below ڤ arabic letter veh ڥ arabic letter feh with three dots below ڦ arabic letter peheh ڧ arabic letter qaf with dot above ڨ arabic letter qaf with three dots above ک arabic letter keheh ڪ arabic letter swash kaf ګ arabic letter kaf with ring ڬ arabic letter kaf with dot above ڭ arabic letter ng ڮ arabic letter kaf with three dots below گ arabic letter gaf ڰ arabic letter gaf with ring ڱ arabic letter ngoeh ڲ arabic letter gaf with two dots below ڳ arabic letter gueh ڴ arabic letter gaf with three dots above ڵ arabic letter lam with small v ڶ arabic letter lam with dot above ڷ arabic letter lam with three dots above ڸ arabic letter lam with three dots below ڹ arabic letter noon with dot below ں arabic letter noon ghunna ڻ arabic letter rnoon ڼ arabic letter noon with ring ڽ arabic letter noon with three dots above ھ arabic letter heh doachashmee ڿ arabic letter tcheh with dot above ۀ arabic letter heh with yeh above ہ arabic letter heh goal ۂ arabic letter heh goal with hamza above ۃ arabic letter teh marbuta goal ۄ arabic letter waw with ring ۅ arabic letter kirghiz oe ۆ arabic letter oe ۇ arabic letter u ۈ arabic letter yu ۉ arabic letter kirghiz yu ۊ arabic letter waw with two dots above ۋ arabic letter ve ی arabic letter farsi yeh ۍ arabic letter yeh with tail ێ arabic letter yeh with small v ۏ arabic letter waw with dot above ې arabic letter e ۑ arabic letter yeh with three dots below ے arabic letter yeh barree ۓ arabic letter yeh barree with hamza above ۔ arabic full stop ە arabic letter ae ۞ arabic start of rub el hizb ۥ arabic small waw ۦ arabic small yeh ۩ arabic place of sajdah ۮ arabic letter dal with inverted v ۯ arabic letter reh with inverted v ۰ extended arabic-indic digit zero ۱ extended arabic-indic digit one ۲ extended arabic-indic digit two ۳ extended arabic-indic digit three ۴ extended arabic-indic digit four ۵ extended arabic-indic digit five ۶ extended arabic-indic digit six ۷ extended arabic-indic digit seven ۸ extended arabic-indic digit eight ۹ extended arabic-indic digit nine ۺ arabic letter sheen with dot below ۻ arabic letter dad with dot below ۼ arabic letter ghain with dot below ۽ arabic sign sindhi ampersand ۾ arabic sign sindhi postposition men ۿ arabic letter heh with inverted v ܀ syriac end of paragraph ܁ syriac supralinear full stop ܂ syriac sublinear full stop ܃ syriac supralinear colon ܄ syriac sublinear colon ܅ syriac horizontal colon ܆ syriac colon skewed left ܇ syriac colon skewed right ܈ syriac supralinear colon skewed left ܉ syriac sublinear colon skewed right ܊ syriac contraction ܋ syriac harklean obelus ܌ syriac harklean metobelus ܍ syriac harklean asteriscus ܐ syriac letter alaph ܒ syriac letter beth ܓ syriac letter gamal ܔ syriac letter gamal garshuni ܕ syriac letter dalath ܖ syriac letter dotless dalath rish ܗ syriac letter he ܘ syriac letter waw ܙ syriac letter zain ܚ syriac letter heth ܛ syriac letter teth ܜ syriac letter teth garshuni ܝ syriac letter yudh ܞ syriac letter yudh he ܟ syriac letter kaph ܠ syriac letter lamadh ܡ syriac letter mim ܢ syriac letter nun ܣ syriac letter semkath ܤ syriac letter final semkath ܥ syriac letter e ܦ syriac letter pe ܧ syriac letter reversed pe ܨ syriac letter sadhe ܩ syriac letter qaph ܪ syriac letter rish ܫ syriac letter shin ܬ syriac letter taw ܭ syriac letter persian bheth ܮ syriac letter persian ghamal ܯ syriac letter persian dhalath ݍ syriac letter sogdian zhain ݎ syriac letter sogdian khaph ݏ syriac letter sogdian fe ݐ arabic letter beh with three dots horizontally below ݑ arabic letter beh with dot below and three dots above ݒ arabic letter beh with three dots pointing upwards below ݓ arabic letter beh with three dots pointing upwards below and two dots above ݔ arabic letter beh with two dots below and dot above ݕ arabic letter beh with inverted small v below ݖ arabic letter beh with small v ݗ arabic letter hah with two dots above ݘ arabic letter hah with three dots pointing upwards below ݙ arabic letter dal with two dots vertically below and small tah ݚ arabic letter dal with inverted small v below ݛ arabic letter reh with stroke ݜ arabic letter seen with four dots above ݝ arabic letter ain with two dots above ݞ arabic letter ain with three dots pointing downwards above ݟ arabic letter ain with two dots vertically above ݠ arabic letter feh with two dots below ݡ arabic letter feh with three dots pointing upwards below ݢ arabic letter keheh with dot above ݣ arabic letter keheh with three dots above ݤ arabic letter keheh with three dots pointing upwards below ݥ arabic letter meem with dot above ݦ arabic letter meem with dot below ݧ arabic letter noon with two dots below ݨ arabic letter noon with small tah ݩ arabic letter noon with small v ݪ arabic letter lam with bar ݫ arabic letter reh with two dots vertically above ݬ arabic letter reh with hamza above ݭ arabic letter seen with two dots vertically above ݮ arabic letter hah with small arabic letter tah below ݯ arabic letter hah with small arabic letter tah and two dots ݰ arabic letter seen with small arabic letter tah and two dots ݱ arabic letter reh with small arabic letter tah and two dots ݲ arabic letter hah with small arabic letter tah above ݳ arabic letter alef with extended arabic-indic digit two above ݴ arabic letter alef with extended arabic-indic digit three above ݵ arabic letter farsi yeh with extended arabic-indic digit two above ݶ arabic letter farsi yeh with extended arabic-indic digit three above ݷ arabic letter farsi yeh with extended arabic-indic digit four below ݸ arabic letter waw with extended arabic-indic digit two above ݹ arabic letter waw with extended arabic-indic digit three above ݺ arabic letter yeh barree with extended arabic-indic digit two above ݻ arabic letter yeh barree with extended arabic-indic digit three above ݼ arabic letter hah with extended arabic-indic digit four below ݽ arabic letter seen with extended arabic-indic digit four above ݾ arabic letter seen with inverted v ݿ arabic letter kaf with two dots above ހ thaana letter haa ށ thaana letter shaviyani ނ thaana letter noonu ރ thaana letter raa ބ thaana letter baa ޅ thaana letter lhaviyani ކ thaana letter kaafu އ thaana letter alifu ވ thaana letter vaavu މ thaana letter meemu ފ thaana letter faafu ދ thaana letter dhaalu ތ thaana letter thaa ލ thaana letter laamu ގ thaana letter gaafu ޏ thaana letter gnaviyani ސ thaana letter seenu ޑ thaana letter daviyani ޒ thaana letter zaviyani ޓ thaana letter taviyani ޔ thaana letter yaa ޕ thaana letter paviyani ޖ thaana letter javiyani ޗ thaana letter chaviyani ޘ thaana letter ttaa ޙ thaana letter hhaa ޚ thaana letter khaa ޛ thaana letter thaalu ޜ thaana letter zaa ޝ thaana letter sheenu ޞ thaana letter saadhu ޟ thaana letter daadhu ޠ thaana letter to ޡ thaana letter zo ޢ thaana letter ainu ޣ thaana letter ghainu ޤ thaana letter qaafu ޥ thaana letter waavu ޱ thaana letter naa ߀ nko digit zero ߁ nko digit one ߂ nko digit two ߃ nko digit three ߄ nko digit four ߅ nko digit five ߆ nko digit six ߇ nko digit seven ߈ nko digit eight ߉ nko digit nine ߊ nko letter a ߋ nko letter ee ߌ nko letter i ߍ nko letter e ߎ nko letter u ߏ nko letter oo ߐ nko letter o ߑ nko letter dagbasinna ߒ nko letter n ߓ nko letter ba ߔ nko letter pa ߕ nko letter ta ߖ nko letter ja ߗ nko letter cha ߘ nko letter da ߙ nko letter ra ߚ nko letter rra ߛ nko letter sa ߜ nko letter gba ߝ nko letter fa ߞ nko letter ka ߟ nko letter la ߠ nko letter na woloso ߡ nko letter ma ߢ nko letter nya ߣ nko letter na ߤ nko letter ha ߥ nko letter wa ߦ nko letter ya ߧ nko letter nya woloso ߨ nko letter jona ja ߩ nko letter jona cha ߪ nko letter jona ra ߴ nko high tone apostrophe ߵ nko low tone apostrophe ߶ nko symbol oo dennen ߷ nko symbol gbakurunen ߸ nko comma ߹ nko exclamation mark ߺ nko lajanyalan ࠀ samaritan letter alaf ࠁ samaritan letter bit ࠂ samaritan letter gaman ࠃ samaritan letter dalat ࠄ samaritan letter iy ࠅ samaritan letter baa ࠆ samaritan letter zen ࠇ samaritan letter it ࠈ samaritan letter tit ࠉ samaritan letter yut ࠊ samaritan letter kaaf ࠋ samaritan letter labat ࠌ samaritan letter mim ࠍ samaritan letter nun ࠎ samaritan letter singaat ࠏ samaritan letter in ࠐ samaritan letter fi ࠑ samaritan letter tsaadiy ࠒ samaritan letter quf ࠓ samaritan letter rish ࠔ samaritan letter shan ࠕ samaritan letter taaf ࠚ samaritan modifier letter epenthetic yut ࠤ samaritan modifier letter short a ࠨ samaritan modifier letter i ࠰ samaritan punctuation nequdaa ࠱ samaritan punctuation afsaaq ࠲ samaritan punctuation anged ࠳ samaritan punctuation bau ࠴ samaritan punctuation atmaau ࠵ samaritan punctuation shiyyaalaa ࠶ samaritan abbreviation mark ࠷ samaritan punctuation melodic qitsa ࠸ samaritan punctuation ziqaa ࠹ samaritan punctuation qitsa ࠺ samaritan punctuation zaef ࠻ samaritan punctuation turu ࠼ samaritan punctuation arkaanu ࠽ samaritan punctuation sof mashfaat ࠾ samaritan punctuation annaau ࡀ mandaic letter halqa ࡁ mandaic letter ab ࡂ mandaic letter ag ࡃ mandaic letter ad ࡄ mandaic letter ah ࡅ mandaic letter ushenna ࡆ mandaic letter az ࡇ mandaic letter it ࡈ mandaic letter att ࡉ mandaic letter aksa ࡊ mandaic letter ak ࡋ mandaic letter al ࡌ mandaic letter am ࡍ mandaic letter an ࡎ mandaic letter as ࡏ mandaic letter in ࡐ mandaic letter ap ࡑ mandaic letter asz ࡒ mandaic letter aq ࡓ mandaic letter ar ࡔ mandaic letter ash ࡕ mandaic letter at ࡖ mandaic letter dushenna ࡗ mandaic letter kad ࡘ mandaic letter ain ࡞ mandaic punctuation ࢠ arabic letter beh with small v below ࢡ arabic letter beh with hamza above ࢢ arabic letter jeem with two dots above ࢣ arabic letter tah with two dots above ࢤ arabic letter feh with dot below and three dots above ࢥ arabic letter qaf with dot below ࢦ arabic letter lam with double bar ࢧ arabic letter meem with three dots above ࢨ arabic letter yeh with two dots below and hamza above ࢩ arabic letter yeh with two dots below and dot above ࢪ arabic letter reh with loop ࢫ arabic letter waw with dot within ࢬ arabic letter rohingya yeh ࢭ arabic letter low alef ࢮ arabic letter dal with three dots below ࢯ arabic letter sad with three dots below ࢰ arabic letter gaf with inverted stroke ࢱ arabic letter straight waw ࢲ arabic letter zain with inverted v above ࢳ arabic letter ain with three dots below ࢴ arabic letter kaf with dot below ࢶ arabic letter beh with small meem above ࢷ arabic letter peh with small meem above ࢸ arabic letter teh with small teh above ࢹ arabic letter reh with small noon above ࢺ arabic letter yeh with two dots below and small noon above ࢻ arabic letter african feh ࢼ arabic letter african qaf ࢽ arabic letter african noon ऄ devanagari letter short a अ devanagari letter a आ devanagari letter aa इ devanagari letter i ई devanagari letter ii उ devanagari letter u ऊ devanagari letter uu ऋ devanagari letter vocalic r ऌ devanagari letter vocalic l ऍ devanagari letter candra e ऎ devanagari letter short e ए devanagari letter e ऐ devanagari letter ai ऑ devanagari letter candra o ऒ devanagari letter short o ओ devanagari letter o औ devanagari letter au क devanagari letter ka ख devanagari letter kha ग devanagari letter ga घ devanagari letter gha ङ devanagari letter nga च devanagari letter ca छ devanagari letter cha ज devanagari letter ja झ devanagari letter jha ञ devanagari letter nya ट devanagari letter tta ठ devanagari letter ttha ड devanagari letter dda ढ devanagari letter ddha ण devanagari letter nna त devanagari letter ta थ devanagari letter tha द devanagari letter da ध devanagari letter dha न devanagari letter na ऩ devanagari letter nnna प devanagari letter pa फ devanagari letter pha ब devanagari letter ba भ devanagari letter bha म devanagari letter ma य devanagari letter ya र devanagari letter ra ऱ devanagari letter rra ल devanagari letter la ळ devanagari letter lla ऴ devanagari letter llla व devanagari letter va श devanagari letter sha ष devanagari letter ssa स devanagari letter sa ह devanagari letter ha ऽ devanagari sign avagraha ॐ devanagari om क़ devanagari letter qa ख़ devanagari letter khha ग़ devanagari letter ghha ज़ devanagari letter za ड़ devanagari letter dddha ढ़ devanagari letter rha फ़ devanagari letter fa य़ devanagari letter yya ॠ devanagari letter vocalic rr ॡ devanagari letter vocalic ll । devanagari danda ॥ devanagari double danda ० devanagari digit zero १ devanagari digit one २ devanagari digit two ३ devanagari digit three ४ devanagari digit four ५ devanagari digit five ६ devanagari digit six ७ devanagari digit seven ८ devanagari digit eight ९ devanagari digit nine ॰ devanagari abbreviation sign ॱ devanagari sign high spacing dot ॲ devanagari letter candra a ॳ devanagari letter oe ॴ devanagari letter ooe ॵ devanagari letter aw ॶ devanagari letter ue ॷ devanagari letter uue ॸ devanagari letter marwari dda ॹ devanagari letter zha ॺ devanagari letter heavy ya ॻ devanagari letter gga ॼ devanagari letter jja ॽ devanagari letter glottal stop ॾ devanagari letter ddda ॿ devanagari letter bba ঀ bengali anji অ bengali letter a আ bengali letter aa ই bengali letter i ঈ bengali letter ii উ bengali letter u ঊ bengali letter uu ঋ bengali letter vocalic r ঌ bengali letter vocalic l এ bengali letter e ঐ bengali letter ai ও bengali letter o ঔ bengali letter au ক bengali letter ka খ bengali letter kha গ bengali letter ga ঘ bengali letter gha ঙ bengali letter nga চ bengali letter ca ছ bengali letter cha জ bengali letter ja ঝ bengali letter jha ঞ bengali letter nya ট bengali letter tta ঠ bengali letter ttha ড bengali letter dda ঢ bengali letter ddha ণ bengali letter nna ত bengali letter ta থ bengali letter tha দ bengali letter da ধ bengali letter dha ন bengali letter na প bengali letter pa ফ bengali letter pha ব bengali letter ba ভ bengali letter bha ম bengali letter ma য bengali letter ya র bengali letter ra ল bengali letter la শ bengali letter sha ষ bengali letter ssa স bengali letter sa হ bengali letter ha ঽ bengali sign avagraha ৎ bengali letter khanda ta ড় bengali letter rra ঢ় bengali letter rha য় bengali letter yya ৠ bengali letter vocalic rr ৡ bengali letter vocalic ll ০ bengali digit zero ১ bengali digit one ২ bengali digit two ৩ bengali digit three ৪ bengali digit four ৫ bengali digit five ৬ bengali digit six ৭ bengali digit seven ৮ bengali digit eight ৯ bengali digit nine ৰ bengali letter ra with middle diagonal ৱ bengali letter ra with lower diagonal ৲ bengali rupee mark ৳ bengali rupee sign ৴ bengali currency numerator one ৵ bengali currency numerator two ৶ bengali currency numerator three ৷ bengali currency numerator four ৸ bengali currency numerator one less than the denominator ৹ bengali currency denominator sixteen ৺ bengali isshar ৻ bengali ganda mark ਅ gurmukhi letter a ਆ gurmukhi letter aa ਇ gurmukhi letter i ਈ gurmukhi letter ii ਉ gurmukhi letter u ਊ gurmukhi letter uu ਏ gurmukhi letter ee ਐ gurmukhi letter ai ਓ gurmukhi letter oo ਔ gurmukhi letter au ਕ gurmukhi letter ka ਖ gurmukhi letter kha ਗ gurmukhi letter ga ਘ gurmukhi letter gha ਙ gurmukhi letter nga ਚ gurmukhi letter ca ਛ gurmukhi letter cha ਜ gurmukhi letter ja ਝ gurmukhi letter jha ਞ gurmukhi letter nya ਟ gurmukhi letter tta ਠ gurmukhi letter ttha ਡ gurmukhi letter dda ਢ gurmukhi letter ddha ਣ gurmukhi letter nna ਤ gurmukhi letter ta ਥ gurmukhi letter tha ਦ gurmukhi letter da ਧ gurmukhi letter dha ਨ gurmukhi letter na ਪ gurmukhi letter pa ਫ gurmukhi letter pha ਬ gurmukhi letter ba ਭ gurmukhi letter bha ਮ gurmukhi letter ma ਯ gurmukhi letter ya ਰ gurmukhi letter ra ਲ gurmukhi letter la ਲ਼ gurmukhi letter lla ਵ gurmukhi letter va ਸ਼ gurmukhi letter sha ਸ gurmukhi letter sa ਹ gurmukhi letter ha ਖ਼ gurmukhi letter khha ਗ਼ gurmukhi letter ghha ਜ਼ gurmukhi letter za ੜ gurmukhi letter rra ਫ਼ gurmukhi letter fa ੦ gurmukhi digit zero ੧ gurmukhi digit one ੨ gurmukhi digit two ੩ gurmukhi digit three ੪ gurmukhi digit four ੫ gurmukhi digit five ੬ gurmukhi digit six ੭ gurmukhi digit seven ੮ gurmukhi digit eight ੯ gurmukhi digit nine ੲ gurmukhi iri ੳ gurmukhi ura ੴ gurmukhi ek onkar અ gujarati letter a આ gujarati letter aa ઇ gujarati letter i ઈ gujarati letter ii ઉ gujarati letter u ઊ gujarati letter uu ઋ gujarati letter vocalic r ઌ gujarati letter vocalic l ઍ gujarati vowel candra e એ gujarati letter e ઐ gujarati letter ai ઑ gujarati vowel candra o ઓ gujarati letter o ઔ gujarati letter au ક gujarati letter ka ખ gujarati letter kha ગ gujarati letter ga ઘ gujarati letter gha ઙ gujarati letter nga ચ gujarati letter ca છ gujarati letter cha જ gujarati letter ja ઝ gujarati letter jha ઞ gujarati letter nya ટ gujarati letter tta ઠ gujarati letter ttha ડ gujarati letter dda ઢ gujarati letter ddha ણ gujarati letter nna ત gujarati letter ta થ gujarati letter tha દ gujarati letter da ધ gujarati letter dha ન gujarati letter na પ gujarati letter pa ફ gujarati letter pha બ gujarati letter ba ભ gujarati letter bha મ gujarati letter ma ય gujarati letter ya ર gujarati letter ra લ gujarati letter la ળ gujarati letter lla વ gujarati letter va શ gujarati letter sha ષ gujarati letter ssa સ gujarati letter sa હ gujarati letter ha ઽ gujarati sign avagraha ૐ gujarati om ૠ gujarati letter vocalic rr ૡ gujarati letter vocalic ll ૦ gujarati digit zero ૧ gujarati digit one ૨ gujarati digit two ૩ gujarati digit three ૪ gujarati digit four ૫ gujarati digit five ૬ gujarati digit six ૭ gujarati digit seven ૮ gujarati digit eight ૯ gujarati digit nine ૰ gujarati abbreviation sign ૱ gujarati rupee sign ૹ gujarati letter zha ଅ oriya letter a ଆ oriya letter aa ଇ oriya letter i ଈ oriya letter ii ଉ oriya letter u ଊ oriya letter uu ଋ oriya letter vocalic r ଌ oriya letter vocalic l ଏ oriya letter e ଐ oriya letter ai ଓ oriya letter o ଔ oriya letter au କ oriya letter ka ଖ oriya letter kha ଗ oriya letter ga ଘ oriya letter gha ଙ oriya letter nga ଚ oriya letter ca ଛ oriya letter cha ଜ oriya letter ja ଝ oriya letter jha ଞ oriya letter nya ଟ oriya letter tta ଠ oriya letter ttha ଡ oriya letter dda ଢ oriya letter ddha ଣ oriya letter nna ତ oriya letter ta ଥ oriya letter tha ଦ oriya letter da ଧ oriya letter dha ନ oriya letter na ପ oriya letter pa ଫ oriya letter pha ବ oriya letter ba ଭ oriya letter bha ମ oriya letter ma ଯ oriya letter ya ର oriya letter ra ଲ oriya letter la ଳ oriya letter lla ଵ oriya letter va ଶ oriya letter sha ଷ oriya letter ssa ସ oriya letter sa ହ oriya letter ha ଽ oriya sign avagraha ଡ଼ oriya letter rra ଢ଼ oriya letter rha ୟ oriya letter yya ୠ oriya letter vocalic rr ୡ oriya letter vocalic ll ୦ oriya digit zero ୧ oriya digit one ୨ oriya digit two ୩ oriya digit three ୪ oriya digit four ୫ oriya digit five ୬ oriya digit six ୭ oriya digit seven ୮ oriya digit eight ୯ oriya digit nine ୰ oriya isshar ୱ oriya letter wa ୲ oriya fraction one quarter ୳ oriya fraction one half ୴ oriya fraction three quarters ୵ oriya fraction one sixteenth ୶ oriya fraction one eighth ୷ oriya fraction three sixteenths ஃ tamil sign visarga அ tamil letter a ஆ tamil letter aa இ tamil letter i ஈ tamil letter ii உ tamil letter u ஊ tamil letter uu எ tamil letter e ஏ tamil letter ee ஐ tamil letter ai ஒ tamil letter o ஓ tamil letter oo ஔ tamil letter au க tamil letter ka ங tamil letter nga ச tamil letter ca ஜ tamil letter ja ஞ tamil letter nya ட tamil letter tta ண tamil letter nna த tamil letter ta ந tamil letter na ன tamil letter nnna ப tamil letter pa ம tamil letter ma ய tamil letter ya ர tamil letter ra ற tamil letter rra ல tamil letter la ள tamil letter lla ழ tamil letter llla வ tamil letter va ஶ tamil letter sha ஷ tamil letter ssa ஸ tamil letter sa ஹ tamil letter ha ௐ tamil om ௦ tamil digit zero ௧ tamil digit one ௨ tamil digit two ௩ tamil digit three ௪ tamil digit four ௫ tamil digit five ௬ tamil digit six ௭ tamil digit seven ௮ tamil digit eight ௯ tamil digit nine ௰ tamil number ten ௱ tamil number one hundred ௲ tamil number one thousand ௳ tamil day sign ௴ tamil month sign ௵ tamil year sign ௶ tamil debit sign ௷ tamil credit sign ௸ tamil as above sign ௹ tamil rupee sign ௺ tamil number sign అ telugu letter a ఆ telugu letter aa ఇ telugu letter i ఈ telugu letter ii ఉ telugu letter u ఊ telugu letter uu ఋ telugu letter vocalic r ఌ telugu letter vocalic l ఎ telugu letter e ఏ telugu letter ee ఐ telugu letter ai ఒ telugu letter o ఓ telugu letter oo ఔ telugu letter au క telugu letter ka ఖ telugu letter kha గ telugu letter ga ఘ telugu letter gha ఙ telugu letter nga చ telugu letter ca ఛ telugu letter cha జ telugu letter ja ఝ telugu letter jha ఞ telugu letter nya ట telugu letter tta ఠ telugu letter ttha డ telugu letter dda ఢ telugu letter ddha ణ telugu letter nna త telugu letter ta థ telugu letter tha ద telugu letter da ధ telugu letter dha న telugu letter na ప telugu letter pa ఫ telugu letter pha బ telugu letter ba భ telugu letter bha మ telugu letter ma య telugu letter ya ర telugu letter ra ఱ telugu letter rra ల telugu letter la ళ telugu letter lla ఴ telugu letter llla వ telugu letter va శ telugu letter sha ష telugu letter ssa స telugu letter sa హ telugu letter ha ఽ telugu sign avagraha ౘ telugu letter tsa ౙ telugu letter dza ౚ telugu letter rrra ౠ telugu letter vocalic rr ౡ telugu letter vocalic ll ౦ telugu digit zero ౧ telugu digit one ౨ telugu digit two ౩ telugu digit three ౪ telugu digit four ౫ telugu digit five ౬ telugu digit six ౭ telugu digit seven ౮ telugu digit eight ౯ telugu digit nine ౸ telugu fraction digit zero for odd powers of four ౹ telugu fraction digit one for odd powers of four ౺ telugu fraction digit two for odd powers of four ౻ telugu fraction digit three for odd powers of four ౼ telugu fraction digit one for even powers of four ౽ telugu fraction digit two for even powers of four ౾ telugu fraction digit three for even powers of four ౿ telugu sign tuumu ಀ kannada sign spacing candrabindu ಅ kannada letter a ಆ kannada letter aa ಇ kannada letter i ಈ kannada letter ii ಉ kannada letter u ಊ kannada letter uu ಋ kannada letter vocalic r ಌ kannada letter vocalic l ಎ kannada letter e ಏ kannada letter ee ಐ kannada letter ai ಒ kannada letter o ಓ kannada letter oo ಔ kannada letter au ಕ kannada letter ka ಖ kannada letter kha ಗ kannada letter ga ಘ kannada letter gha ಙ kannada letter nga ಚ kannada letter ca ಛ kannada letter cha ಜ kannada letter ja ಝ kannada letter jha ಞ kannada letter nya ಟ kannada letter tta ಠ kannada letter ttha ಡ kannada letter dda ಢ kannada letter ddha ಣ kannada letter nna ತ kannada letter ta ಥ kannada letter tha ದ kannada letter da ಧ kannada letter dha ನ kannada letter na ಪ kannada letter pa ಫ kannada letter pha ಬ kannada letter ba ಭ kannada letter bha ಮ kannada letter ma ಯ kannada letter ya ರ kannada letter ra ಱ kannada letter rra ಲ kannada letter la ಳ kannada letter lla ವ kannada letter va ಶ kannada letter sha ಷ kannada letter ssa ಸ kannada letter sa ಹ kannada letter ha ಽ kannada sign avagraha ೞ kannada letter fa ೠ kannada letter vocalic rr ೡ kannada letter vocalic ll ೦ kannada digit zero ೧ kannada digit one ೨ kannada digit two ೩ kannada digit three ೪ kannada digit four ೫ kannada digit five ೬ kannada digit six ೭ kannada digit seven ೮ kannada digit eight ೯ kannada digit nine ೱ kannada sign jihvamuliya ೲ kannada sign upadhmaniya അ malayalam letter a ആ malayalam letter aa ഇ malayalam letter i ഈ malayalam letter ii ഉ malayalam letter u ഊ malayalam letter uu ഋ malayalam letter vocalic r ഌ malayalam letter vocalic l എ malayalam letter e ഏ malayalam letter ee ഐ malayalam letter ai ഒ malayalam letter o ഓ malayalam letter oo ഔ malayalam letter au ക malayalam letter ka ഖ malayalam letter kha ഗ malayalam letter ga ഘ malayalam letter gha ങ malayalam letter nga ച malayalam letter ca ഛ malayalam letter cha ജ malayalam letter ja ഝ malayalam letter jha ഞ malayalam letter nya ട malayalam letter tta ഠ malayalam letter ttha ഡ malayalam letter dda ഢ malayalam letter ddha ണ malayalam letter nna ത malayalam letter ta ഥ malayalam letter tha ദ malayalam letter da ധ malayalam letter dha ന malayalam letter na ഩ malayalam letter nnna പ malayalam letter pa ഫ malayalam letter pha ബ malayalam letter ba ഭ malayalam letter bha മ malayalam letter ma യ malayalam letter ya ര malayalam letter ra റ malayalam letter rra ല malayalam letter la ള malayalam letter lla ഴ malayalam letter llla വ malayalam letter va ശ malayalam letter sha ഷ malayalam letter ssa സ malayalam letter sa ഹ malayalam letter ha ഺ malayalam letter ttta ഽ malayalam sign avagraha ൎ malayalam letter dot reph ൏ malayalam sign para ൔ malayalam letter chillu m ൕ malayalam letter chillu y ൖ malayalam letter chillu lll ൘ malayalam fraction one one-hundred-and-sixtieth ൙ malayalam fraction one fortieth ൚ malayalam fraction three eightieths ൛ malayalam fraction one twentieth ൜ malayalam fraction one tenth ൝ malayalam fraction three twentieths ൞ malayalam fraction one fifth ൟ malayalam letter archaic ii ൠ malayalam letter vocalic rr ൡ malayalam letter vocalic ll ൦ malayalam digit zero ൧ malayalam digit one ൨ malayalam digit two ൩ malayalam digit three ൪ malayalam digit four ൫ malayalam digit five ൬ malayalam digit six ൭ malayalam digit seven ൮ malayalam digit eight ൯ malayalam digit nine ൰ malayalam number ten ൱ malayalam number one hundred ൲ malayalam number one thousand ൳ malayalam fraction one quarter ൴ malayalam fraction one half ൵ malayalam fraction three quarters ൶ malayalam fraction one sixteenth ൷ malayalam fraction one eighth ൸ malayalam fraction three sixteenths ൹ malayalam date mark ൺ malayalam letter chillu nn ൻ malayalam letter chillu n ർ malayalam letter chillu rr ൽ malayalam letter chillu l ൾ malayalam letter chillu ll ൿ malayalam letter chillu k අ sinhala letter ayanna ආ sinhala letter aayanna ඇ sinhala letter aeyanna ඈ sinhala letter aeeyanna ඉ sinhala letter iyanna ඊ sinhala letter iiyanna උ sinhala letter uyanna ඌ sinhala letter uuyanna ඍ sinhala letter iruyanna ඎ sinhala letter iruuyanna ඏ sinhala letter iluyanna ඐ sinhala letter iluuyanna එ sinhala letter eyanna ඒ sinhala letter eeyanna ඓ sinhala letter aiyanna ඔ sinhala letter oyanna ඕ sinhala letter ooyanna ඖ sinhala letter auyanna ක sinhala letter alpapraana kayanna ඛ sinhala letter mahaapraana kayanna ග sinhala letter alpapraana gayanna ඝ sinhala letter mahaapraana gayanna ඞ sinhala letter kantaja naasikyaya ඟ sinhala letter sanyaka gayanna ච sinhala letter alpapraana cayanna ඡ sinhala letter mahaapraana cayanna ජ sinhala letter alpapraana jayanna ඣ sinhala letter mahaapraana jayanna ඤ sinhala letter taaluja naasikyaya ඥ sinhala letter taaluja sanyooga naaksikyaya ඦ sinhala letter sanyaka jayanna ට sinhala letter alpapraana ttayanna ඨ sinhala letter mahaapraana ttayanna ඩ sinhala letter alpapraana ddayanna ඪ sinhala letter mahaapraana ddayanna ණ sinhala letter muurdhaja nayanna ඬ sinhala letter sanyaka ddayanna ත sinhala letter alpapraana tayanna ථ sinhala letter mahaapraana tayanna ද sinhala letter alpapraana dayanna ධ sinhala letter mahaapraana dayanna න sinhala letter dantaja nayanna ඳ sinhala letter sanyaka dayanna ප sinhala letter alpapraana payanna ඵ sinhala letter mahaapraana payanna බ sinhala letter alpapraana bayanna භ sinhala letter mahaapraana bayanna ම sinhala letter mayanna ඹ sinhala letter amba bayanna ය sinhala letter yayanna ර sinhala letter rayanna ල sinhala letter dantaja layanna ව sinhala letter vayanna ශ sinhala letter taaluja sayanna ෂ sinhala letter muurdhaja sayanna ස sinhala letter dantaja sayanna හ sinhala letter hayanna ළ sinhala letter muurdhaja layanna ෆ sinhala letter fayanna ෦ sinhala lith digit zero ෧ sinhala lith digit one ෨ sinhala lith digit two ෩ sinhala lith digit three ෪ sinhala lith digit four ෫ sinhala lith digit five ෬ sinhala lith digit six ෭ sinhala lith digit seven ෮ sinhala lith digit eight ෯ sinhala lith digit nine ෴ sinhala punctuation kunddaliya ก thai character ko kai ข thai character kho khai ฃ thai character kho khuat ค thai character kho khwai ฅ thai character kho khon ฆ thai character kho rakhang ง thai character ngo ngu จ thai character cho chan ฉ thai character cho ching ช thai character cho chang ซ thai character so so ฌ thai character cho choe ญ thai character yo ying ฎ thai character do chada ฏ thai character to patak ฐ thai character tho than ฑ thai character tho nangmontho ฒ thai character tho phuthao ณ thai character no nen ด thai character do dek ต thai character to tao ถ thai character tho thung ท thai character tho thahan ธ thai character tho thong น thai character no nu บ thai character bo baimai ป thai character po pla ผ thai character pho phung ฝ thai character fo fa พ thai character pho phan ฟ thai character fo fan ภ thai character pho samphao ม thai character mo ma ย thai character yo yak ร thai character ro rua ฤ thai character ru ล thai character lo ling ฦ thai character lu ว thai character wo waen ศ thai character so sala ษ thai character so rusi ส thai character so sua ห thai character ho hip ฬ thai character lo chula อ thai character o ang ฮ thai character ho nokhuk ฯ thai character paiyannoi ะ thai character sara a า thai character sara aa ำ thai character sara am ฿ thai currency symbol baht เ thai character sara e แ thai character sara ae โ thai character sara o ใ thai character sara ai maimuan ไ thai character sara ai maimalai ๅ thai character lakkhangyao ๆ thai character maiyamok ๏ thai character fongman ๐ thai digit zero ๑ thai digit one ๒ thai digit two ๓ thai digit three ๔ thai digit four ๕ thai digit five ๖ thai digit six ๗ thai digit seven ๘ thai digit eight ๙ thai digit nine ๚ thai character angkhankhu ๛ thai character khomut ກ lao letter ko ຂ lao letter kho sung ຄ lao letter kho tam ງ lao letter ngo ຈ lao letter co ຊ lao letter so tam ຍ lao letter nyo ດ lao letter do ຕ lao letter to ຖ lao letter tho sung ທ lao letter tho tam ນ lao letter no ບ lao letter bo ປ lao letter po ຜ lao letter pho sung ຝ lao letter fo tam ພ lao letter pho tam ຟ lao letter fo sung ມ lao letter mo ຢ lao letter yo ຣ lao letter lo ling ລ lao letter lo loot ວ lao letter wo ສ lao letter so sung ຫ lao letter ho sung ອ lao letter o ຮ lao letter ho tam ຯ lao ellipsis ະ lao vowel sign a າ lao vowel sign aa ຳ lao vowel sign am ຽ lao semivowel sign nyo ເ lao vowel sign e ແ lao vowel sign ei ໂ lao vowel sign o ໃ lao vowel sign ay ໄ lao vowel sign ai ໆ lao ko la ໐ lao digit zero ໑ lao digit one ໒ lao digit two ໓ lao digit three ໔ lao digit four ໕ lao digit five ໖ lao digit six ໗ lao digit seven ໘ lao digit eight ໙ lao digit nine ໜ lao ho no ໝ lao ho mo ໞ lao letter khmu go ໟ lao letter khmu nyo ༀ tibetan syllable om ༁ tibetan mark gter yig mgo truncated a ༂ tibetan mark gter yig mgo -um rnam bcad ma ༃ tibetan mark gter yig mgo -um gter tsheg ma ༄ tibetan mark initial yig mgo mdun ma ༅ tibetan mark closing yig mgo sgab ma ༆ tibetan mark caret yig mgo phur shad ma ༇ tibetan mark yig mgo tsheg shad ma ༈ tibetan mark sbrul shad ༉ tibetan mark bskur yig mgo ༊ tibetan mark bka- shog yig mgo ་ tibetan mark intersyllabic tsheg ༌ tibetan mark delimiter tsheg bstar ། tibetan mark shad ༎ tibetan mark nyis shad ༏ tibetan mark tsheg shad ༐ tibetan mark nyis tsheg shad ༑ tibetan mark rin chen spungs shad ༒ tibetan mark rgya gram shad ༓ tibetan mark caret -dzud rtags me long can ༔ tibetan mark gter tsheg ༕ tibetan logotype sign chad rtags ༖ tibetan logotype sign lhag rtags ༗ tibetan astrological sign sgra gcan -char rtags ༚ tibetan sign rdel dkar gcig ༛ tibetan sign rdel dkar gnyis ༜ tibetan sign rdel dkar gsum ༝ tibetan sign rdel nag gcig ༞ tibetan sign rdel nag gnyis ༟ tibetan sign rdel dkar rdel nag ༠ tibetan digit zero ༡ tibetan digit one ༢ tibetan digit two ༣ tibetan digit three ༤ tibetan digit four ༥ tibetan digit five ༦ tibetan digit six ༧ tibetan digit seven ༨ tibetan digit eight ༩ tibetan digit nine ༪ tibetan digit half one ༫ tibetan digit half two ༬ tibetan digit half three ༭ tibetan digit half four ༮ tibetan digit half five ༯ tibetan digit half six ༰ tibetan digit half seven ༱ tibetan digit half eight ༲ tibetan digit half nine ༳ tibetan digit half zero ༴ tibetan mark bsdus rtags ༶ tibetan mark caret -dzud rtags bzhi mig can ༸ tibetan mark che mgo ༺ tibetan mark gug rtags gyon ༻ tibetan mark gug rtags gyas ༼ tibetan mark ang khang gyon ༽ tibetan mark ang khang gyas ཀ tibetan letter ka ཁ tibetan letter kha ག tibetan letter ga གྷ tibetan letter gha ང tibetan letter nga ཅ tibetan letter ca ཆ tibetan letter cha ཇ tibetan letter ja ཉ tibetan letter nya ཊ tibetan letter tta ཋ tibetan letter ttha ཌ tibetan letter dda ཌྷ tibetan letter ddha ཎ tibetan letter nna ཏ tibetan letter ta ཐ tibetan letter tha ད tibetan letter da དྷ tibetan letter dha ན tibetan letter na པ tibetan letter pa ཕ tibetan letter pha བ tibetan letter ba བྷ tibetan letter bha མ tibetan letter ma ཙ tibetan letter tsa ཚ tibetan letter tsha ཛ tibetan letter dza ཛྷ tibetan letter dzha ཝ tibetan letter wa ཞ tibetan letter zha ཟ tibetan letter za འ tibetan letter -a ཡ tibetan letter ya ར tibetan letter ra ལ tibetan letter la ཤ tibetan letter sha ཥ tibetan letter ssa ས tibetan letter sa ཧ tibetan letter ha ཨ tibetan letter a ཀྵ tibetan letter kssa ཪ tibetan letter fixed-form ra ཫ tibetan letter kka ཬ tibetan letter rra ྅ tibetan mark paluta ྈ tibetan sign lce tsa can ྉ tibetan sign mchu can ྊ tibetan sign gru can rgyings ྋ tibetan sign gru med rgyings ྌ tibetan sign inverted mchu can ྾ tibetan ku ru kha ྿ tibetan ku ru kha bzhi mig can ࿀ tibetan cantillation sign heavy beat ࿁ tibetan cantillation sign light beat ࿂ tibetan cantillation sign cang te-u ࿃ tibetan cantillation sign sbub -chal ࿄ tibetan symbol dril bu ࿅ tibetan symbol rdo rje ࿇ tibetan symbol rdo rje rgya gram ࿈ tibetan symbol phur pa ࿉ tibetan symbol nor bu ࿊ tibetan symbol nor bu nyis -khyil ࿋ tibetan symbol nor bu gsum -khyil ࿌ tibetan symbol nor bu bzhi -khyil ࿎ tibetan sign rdel nag rdel dkar ࿏ tibetan sign rdel nag gsum ࿐ tibetan mark bska- shog gi mgo rgyan ࿑ tibetan mark mnyam yig gi mgo rgyan ࿒ tibetan mark nyis tsheg ࿓ tibetan mark initial brda rnying yig mgo mdun ma ࿔ tibetan mark closing brda rnying yig mgo sgab ma ࿕ right-facing svasti sign ࿖ left-facing svasti sign ࿗ right-facing svasti sign with dots ࿘ left-facing svasti sign with dots ࿙ tibetan mark leading mchan rtags ࿚ tibetan mark trailing mchan rtags က myanmar letter ka ခ myanmar letter kha ဂ myanmar letter ga ဃ myanmar letter gha င myanmar letter nga စ myanmar letter ca ဆ myanmar letter cha ဇ myanmar letter ja ဈ myanmar letter jha ဉ myanmar letter nya ည myanmar letter nnya ဋ myanmar letter tta ဌ myanmar letter ttha ဍ myanmar letter dda ဎ myanmar letter ddha ဏ myanmar letter nna တ myanmar letter ta ထ myanmar letter tha ဒ myanmar letter da ဓ myanmar letter dha န myanmar letter na ပ myanmar letter pa ဖ myanmar letter pha ဗ myanmar letter ba ဘ myanmar letter bha မ myanmar letter ma ယ myanmar letter ya ရ myanmar letter ra လ myanmar letter la ဝ myanmar letter wa သ myanmar letter sa ဟ myanmar letter ha ဠ myanmar letter lla အ myanmar letter a ဢ myanmar letter shan a ဣ myanmar letter i ဤ myanmar letter ii ဥ myanmar letter u ဦ myanmar letter uu ဧ myanmar letter e ဨ myanmar letter mon e ဩ myanmar letter o ဪ myanmar letter au ဿ myanmar letter great sa ၀ myanmar digit zero ၁ myanmar digit one ၂ myanmar digit two ၃ myanmar digit three ၄ myanmar digit four ၅ myanmar digit five ၆ myanmar digit six ၇ myanmar digit seven ၈ myanmar digit eight ၉ myanmar digit nine ၊ myanmar sign little section ။ myanmar sign section ၌ myanmar symbol locative ၍ myanmar symbol completed ၎ myanmar symbol aforementioned ၏ myanmar symbol genitive ၐ myanmar letter sha ၑ myanmar letter ssa ၒ myanmar letter vocalic r ၓ myanmar letter vocalic rr ၔ myanmar letter vocalic l ၕ myanmar letter vocalic ll ၚ myanmar letter mon nga ၛ myanmar letter mon jha ၜ myanmar letter mon bba ၝ myanmar letter mon bbe ၡ myanmar letter sgaw karen sha ၥ myanmar letter western pwo karen tha ၦ myanmar letter western pwo karen pwa ၮ myanmar letter eastern pwo karen nna ၯ myanmar letter eastern pwo karen ywa ၰ myanmar letter eastern pwo karen ghwa ၵ myanmar letter shan ka ၶ myanmar letter shan kha ၷ myanmar letter shan ga ၸ myanmar letter shan ca ၹ myanmar letter shan za ၺ myanmar letter shan nya ၻ myanmar letter shan da ၼ myanmar letter shan na ၽ myanmar letter shan pha ၾ myanmar letter shan fa ၿ myanmar letter shan ba ႀ myanmar letter shan tha ႁ myanmar letter shan ha ႎ myanmar letter rumai palaung fa ႐ myanmar shan digit zero ႑ myanmar shan digit one ႒ myanmar shan digit two ႓ myanmar shan digit three ႔ myanmar shan digit four ႕ myanmar shan digit five ႖ myanmar shan digit six ႗ myanmar shan digit seven ႘ myanmar shan digit eight ႙ myanmar shan digit nine ႞ myanmar symbol shan one ႟ myanmar symbol shan exclamation Ⴀ georgian capital letter an Ⴁ georgian capital letter ban Ⴂ georgian capital letter gan Ⴃ georgian capital letter don Ⴄ georgian capital letter en Ⴅ georgian capital letter vin Ⴆ georgian capital letter zen Ⴇ georgian capital letter tan Ⴈ georgian capital letter in Ⴉ georgian capital letter kan Ⴊ georgian capital letter las Ⴋ georgian capital letter man Ⴌ georgian capital letter nar Ⴍ georgian capital letter on Ⴎ georgian capital letter par Ⴏ georgian capital letter zhar Ⴐ georgian capital letter rae Ⴑ georgian capital letter san Ⴒ georgian capital letter tar Ⴓ georgian capital letter un Ⴔ georgian capital letter phar Ⴕ georgian capital letter khar Ⴖ georgian capital letter ghan Ⴗ georgian capital letter qar Ⴘ georgian capital letter shin Ⴙ georgian capital letter chin Ⴚ georgian capital letter can Ⴛ georgian capital letter jil Ⴜ georgian capital letter cil Ⴝ georgian capital letter char Ⴞ georgian capital letter xan Ⴟ georgian capital letter jhan Ⴠ georgian capital letter hae Ⴡ georgian capital letter he Ⴢ georgian capital letter hie Ⴣ georgian capital letter we Ⴤ georgian capital letter har Ⴥ georgian capital letter hoe Ⴧ georgian capital letter yn Ⴭ georgian capital letter aen ა georgian letter an ბ georgian letter ban გ georgian letter gan დ georgian letter don ე georgian letter en ვ georgian letter vin ზ georgian letter zen თ georgian letter tan ი georgian letter in კ georgian letter kan ლ georgian letter las მ georgian letter man ნ georgian letter nar ო georgian letter on პ georgian letter par ჟ georgian letter zhar რ georgian letter rae ს georgian letter san ტ georgian letter tar უ georgian letter un ფ georgian letter phar ქ georgian letter khar ღ georgian letter ghan ყ georgian letter qar შ georgian letter shin ჩ georgian letter chin ც georgian letter can ძ georgian letter jil წ georgian letter cil ჭ georgian letter char ხ georgian letter xan ჯ georgian letter jhan ჰ georgian letter hae ჱ georgian letter he ჲ georgian letter hie ჳ georgian letter we ჴ georgian letter har ჵ georgian letter hoe ჶ georgian letter fi ჷ georgian letter yn ჸ georgian letter elifi ჹ georgian letter turned gan ჺ georgian letter ain ჻ georgian paragraph separator ჼ modifier letter georgian nar ჽ georgian letter aen ჾ georgian letter hard sign ჿ georgian letter labial sign ᄀ hangul choseong kiyeok ᄁ hangul choseong ssangkiyeok ᄂ hangul choseong nieun ᄃ hangul choseong tikeut ᄄ hangul choseong ssangtikeut ᄅ hangul choseong rieul ᄆ hangul choseong mieum ᄇ hangul choseong pieup ᄈ hangul choseong ssangpieup ᄉ hangul choseong sios ᄊ hangul choseong ssangsios ᄋ hangul choseong ieung ᄌ hangul choseong cieuc ᄍ hangul choseong ssangcieuc ᄎ hangul choseong chieuch ᄏ hangul choseong khieukh ᄐ hangul choseong thieuth ᄑ hangul choseong phieuph ᄒ hangul choseong hieuh ᄓ hangul choseong nieun-kiyeok ᄔ hangul choseong ssangnieun ᄕ hangul choseong nieun-tikeut ᄖ hangul choseong nieun-pieup ᄗ hangul choseong tikeut-kiyeok ᄘ hangul choseong rieul-nieun ᄙ hangul choseong ssangrieul ᄚ hangul choseong rieul-hieuh ᄛ hangul choseong kapyeounrieul ᄜ hangul choseong mieum-pieup ᄝ hangul choseong kapyeounmieum ᄞ hangul choseong pieup-kiyeok ᄟ hangul choseong pieup-nieun ᄠ hangul choseong pieup-tikeut ᄡ hangul choseong pieup-sios ᄢ hangul choseong pieup-sios-kiyeok ᄣ hangul choseong pieup-sios-tikeut ᄤ hangul choseong pieup-sios-pieup ᄥ hangul choseong pieup-ssangsios ᄦ hangul choseong pieup-sios-cieuc ᄧ hangul choseong pieup-cieuc ᄨ hangul choseong pieup-chieuch ᄩ hangul choseong pieup-thieuth ᄪ hangul choseong pieup-phieuph ᄫ hangul choseong kapyeounpieup ᄬ hangul choseong kapyeounssangpieup ᄭ hangul choseong sios-kiyeok ᄮ hangul choseong sios-nieun ᄯ hangul choseong sios-tikeut ᄰ hangul choseong sios-rieul ᄱ hangul choseong sios-mieum ᄲ hangul choseong sios-pieup ᄳ hangul choseong sios-pieup-kiyeok ᄴ hangul choseong sios-ssangsios ᄵ hangul choseong sios-ieung ᄶ hangul choseong sios-cieuc ᄷ hangul choseong sios-chieuch ᄸ hangul choseong sios-khieukh ᄹ hangul choseong sios-thieuth ᄺ hangul choseong sios-phieuph ᄻ hangul choseong sios-hieuh ᄼ hangul choseong chitueumsios ᄽ hangul choseong chitueumssangsios ᄾ hangul choseong ceongchieumsios ᄿ hangul choseong ceongchieumssangsios ᅀ hangul choseong pansios ᅁ hangul choseong ieung-kiyeok ᅂ hangul choseong ieung-tikeut ᅃ hangul choseong ieung-mieum ᅄ hangul choseong ieung-pieup ᅅ hangul choseong ieung-sios ᅆ hangul choseong ieung-pansios ᅇ hangul choseong ssangieung ᅈ hangul choseong ieung-cieuc ᅉ hangul choseong ieung-chieuch ᅊ hangul choseong ieung-thieuth ᅋ hangul choseong ieung-phieuph ᅌ hangul choseong yesieung ᅍ hangul choseong cieuc-ieung ᅎ hangul choseong chitueumcieuc ᅏ hangul choseong chitueumssangcieuc ᅐ hangul choseong ceongchieumcieuc ᅑ hangul choseong ceongchieumssangcieuc ᅒ hangul choseong chieuch-khieukh ᅓ hangul choseong chieuch-hieuh ᅔ hangul choseong chitueumchieuch ᅕ hangul choseong ceongchieumchieuch ᅖ hangul choseong phieuph-pieup ᅗ hangul choseong kapyeounphieuph ᅘ hangul choseong ssanghieuh ᅙ hangul choseong yeorinhieuh ᅚ hangul choseong kiyeok-tikeut ᅛ hangul choseong nieun-sios ᅜ hangul choseong nieun-cieuc ᅝ hangul choseong nieun-hieuh ᅞ hangul choseong tikeut-rieul ᅟ hangul choseong filler ᅠ hangul jungseong filler ᅡ hangul jungseong a ᅢ hangul jungseong ae ᅣ hangul jungseong ya ᅤ hangul jungseong yae ᅥ hangul jungseong eo ᅦ hangul jungseong e ᅧ hangul jungseong yeo ᅨ hangul jungseong ye ᅩ hangul jungseong o ᅪ hangul jungseong wa ᅫ hangul jungseong wae ᅬ hangul jungseong oe ᅭ hangul jungseong yo ᅮ hangul jungseong u ᅯ hangul jungseong weo ᅰ hangul jungseong we ᅱ hangul jungseong wi ᅲ hangul jungseong yu ᅳ hangul jungseong eu ᅴ hangul jungseong yi ᅵ hangul jungseong i ᅶ hangul jungseong a-o ᅷ hangul jungseong a-u ᅸ hangul jungseong ya-o ᅹ hangul jungseong ya-yo ᅺ hangul jungseong eo-o ᅻ hangul jungseong eo-u ᅼ hangul jungseong eo-eu ᅽ hangul jungseong yeo-o ᅾ hangul jungseong yeo-u ᅿ hangul jungseong o-eo ᆀ hangul jungseong o-e ᆁ hangul jungseong o-ye ᆂ hangul jungseong o-o ᆃ hangul jungseong o-u ᆄ hangul jungseong yo-ya ᆅ hangul jungseong yo-yae ᆆ hangul jungseong yo-yeo ᆇ hangul jungseong yo-o ᆈ hangul jungseong yo-i ᆉ hangul jungseong u-a ᆊ hangul jungseong u-ae ᆋ hangul jungseong u-eo-eu ᆌ hangul jungseong u-ye ᆍ hangul jungseong u-u ᆎ hangul jungseong yu-a ᆏ hangul jungseong yu-eo ᆐ hangul jungseong yu-e ᆑ hangul jungseong yu-yeo ᆒ hangul jungseong yu-ye ᆓ hangul jungseong yu-u ᆔ hangul jungseong yu-i ᆕ hangul jungseong eu-u ᆖ hangul jungseong eu-eu ᆗ hangul jungseong yi-u ᆘ hangul jungseong i-a ᆙ hangul jungseong i-ya ᆚ hangul jungseong i-o ᆛ hangul jungseong i-u ᆜ hangul jungseong i-eu ᆝ hangul jungseong i-araea ᆞ hangul jungseong araea ᆟ hangul jungseong araea-eo ᆠ hangul jungseong araea-u ᆡ hangul jungseong araea-i ᆢ hangul jungseong ssangaraea ᆣ hangul jungseong a-eu ᆤ hangul jungseong ya-u ᆥ hangul jungseong yeo-ya ᆦ hangul jungseong o-ya ᆧ hangul jungseong o-yae ᆨ hangul jongseong kiyeok ᆩ hangul jongseong ssangkiyeok ᆪ hangul jongseong kiyeok-sios ᆫ hangul jongseong nieun ᆬ hangul jongseong nieun-cieuc ᆭ hangul jongseong nieun-hieuh ᆮ hangul jongseong tikeut ᆯ hangul jongseong rieul ᆰ hangul jongseong rieul-kiyeok ᆱ hangul jongseong rieul-mieum ᆲ hangul jongseong rieul-pieup ᆳ hangul jongseong rieul-sios ᆴ hangul jongseong rieul-thieuth ᆵ hangul jongseong rieul-phieuph ᆶ hangul jongseong rieul-hieuh ᆷ hangul jongseong mieum ᆸ hangul jongseong pieup ᆹ hangul jongseong pieup-sios ᆺ hangul jongseong sios ᆻ hangul jongseong ssangsios ᆼ hangul jongseong ieung ᆽ hangul jongseong cieuc ᆾ hangul jongseong chieuch ᆿ hangul jongseong khieukh ᇀ hangul jongseong thieuth ᇁ hangul jongseong phieuph ᇂ hangul jongseong hieuh ᇃ hangul jongseong kiyeok-rieul ᇄ hangul jongseong kiyeok-sios-kiyeok ᇅ hangul jongseong nieun-kiyeok ᇆ hangul jongseong nieun-tikeut ᇇ hangul jongseong nieun-sios ᇈ hangul jongseong nieun-pansios ᇉ hangul jongseong nieun-thieuth ᇊ hangul jongseong tikeut-kiyeok ᇋ hangul jongseong tikeut-rieul ᇌ hangul jongseong rieul-kiyeok-sios ᇍ hangul jongseong rieul-nieun ᇎ hangul jongseong rieul-tikeut ᇏ hangul jongseong rieul-tikeut-hieuh ᇐ hangul jongseong ssangrieul ᇑ hangul jongseong rieul-mieum-kiyeok ᇒ hangul jongseong rieul-mieum-sios ᇓ hangul jongseong rieul-pieup-sios ᇔ hangul jongseong rieul-pieup-hieuh ᇕ hangul jongseong rieul-kapyeounpieup ᇖ hangul jongseong rieul-ssangsios ᇗ hangul jongseong rieul-pansios ᇘ hangul jongseong rieul-khieukh ᇙ hangul jongseong rieul-yeorinhieuh ᇚ hangul jongseong mieum-kiyeok ᇛ hangul jongseong mieum-rieul ᇜ hangul jongseong mieum-pieup ᇝ hangul jongseong mieum-sios ᇞ hangul jongseong mieum-ssangsios ᇟ hangul jongseong mieum-pansios ᇠ hangul jongseong mieum-chieuch ᇡ hangul jongseong mieum-hieuh ᇢ hangul jongseong kapyeounmieum ᇣ hangul jongseong pieup-rieul ᇤ hangul jongseong pieup-phieuph ᇥ hangul jongseong pieup-hieuh ᇦ hangul jongseong kapyeounpieup ᇧ hangul jongseong sios-kiyeok ᇨ hangul jongseong sios-tikeut ᇩ hangul jongseong sios-rieul ᇪ hangul jongseong sios-pieup ᇫ hangul jongseong pansios ᇬ hangul jongseong ieung-kiyeok ᇭ hangul jongseong ieung-ssangkiyeok ᇮ hangul jongseong ssangieung ᇯ hangul jongseong ieung-khieukh ᇰ hangul jongseong yesieung ᇱ hangul jongseong yesieung-sios ᇲ hangul jongseong yesieung-pansios ᇳ hangul jongseong phieuph-pieup ᇴ hangul jongseong kapyeounphieuph ᇵ hangul jongseong hieuh-nieun ᇶ hangul jongseong hieuh-rieul ᇷ hangul jongseong hieuh-mieum ᇸ hangul jongseong hieuh-pieup ᇹ hangul jongseong yeorinhieuh ᇺ hangul jongseong kiyeok-nieun ᇻ hangul jongseong kiyeok-pieup ᇼ hangul jongseong kiyeok-chieuch ᇽ hangul jongseong kiyeok-khieukh ᇾ hangul jongseong kiyeok-hieuh ᇿ hangul jongseong ssangnieun ሀ ethiopic syllable ha ሁ ethiopic syllable hu ሂ ethiopic syllable hi ሃ ethiopic syllable haa ሄ ethiopic syllable hee ህ ethiopic syllable he ሆ ethiopic syllable ho ሇ ethiopic syllable hoa ለ ethiopic syllable la ሉ ethiopic syllable lu ሊ ethiopic syllable li ላ ethiopic syllable laa ሌ ethiopic syllable lee ል ethiopic syllable le ሎ ethiopic syllable lo ሏ ethiopic syllable lwa ሐ ethiopic syllable hha ሑ ethiopic syllable hhu ሒ ethiopic syllable hhi ሓ ethiopic syllable hhaa ሔ ethiopic syllable hhee ሕ ethiopic syllable hhe ሖ ethiopic syllable hho ሗ ethiopic syllable hhwa መ ethiopic syllable ma ሙ ethiopic syllable mu ሚ ethiopic syllable mi ማ ethiopic syllable maa ሜ ethiopic syllable mee ም ethiopic syllable me ሞ ethiopic syllable mo ሟ ethiopic syllable mwa ሠ ethiopic syllable sza ሡ ethiopic syllable szu ሢ ethiopic syllable szi ሣ ethiopic syllable szaa ሤ ethiopic syllable szee ሥ ethiopic syllable sze ሦ ethiopic syllable szo ሧ ethiopic syllable szwa ረ ethiopic syllable ra ሩ ethiopic syllable ru ሪ ethiopic syllable ri ራ ethiopic syllable raa ሬ ethiopic syllable ree ር ethiopic syllable re ሮ ethiopic syllable ro ሯ ethiopic syllable rwa ሰ ethiopic syllable sa ሱ ethiopic syllable su ሲ ethiopic syllable si ሳ ethiopic syllable saa ሴ ethiopic syllable see ስ ethiopic syllable se ሶ ethiopic syllable so ሷ ethiopic syllable swa ሸ ethiopic syllable sha ሹ ethiopic syllable shu ሺ ethiopic syllable shi ሻ ethiopic syllable shaa ሼ ethiopic syllable shee ሽ ethiopic syllable she ሾ ethiopic syllable sho ሿ ethiopic syllable shwa ቀ ethiopic syllable qa ቁ ethiopic syllable qu ቂ ethiopic syllable qi ቃ ethiopic syllable qaa ቄ ethiopic syllable qee ቅ ethiopic syllable qe ቆ ethiopic syllable qo ቇ ethiopic syllable qoa ቈ ethiopic syllable qwa ቊ ethiopic syllable qwi ቋ ethiopic syllable qwaa ቌ ethiopic syllable qwee ቍ ethiopic syllable qwe ቐ ethiopic syllable qha ቑ ethiopic syllable qhu ቒ ethiopic syllable qhi ቓ ethiopic syllable qhaa ቔ ethiopic syllable qhee ቕ ethiopic syllable qhe ቖ ethiopic syllable qho ቘ ethiopic syllable qhwa ቚ ethiopic syllable qhwi ቛ ethiopic syllable qhwaa ቜ ethiopic syllable qhwee ቝ ethiopic syllable qhwe በ ethiopic syllable ba ቡ ethiopic syllable bu ቢ ethiopic syllable bi ባ ethiopic syllable baa ቤ ethiopic syllable bee ብ ethiopic syllable be ቦ ethiopic syllable bo ቧ ethiopic syllable bwa ቨ ethiopic syllable va ቩ ethiopic syllable vu ቪ ethiopic syllable vi ቫ ethiopic syllable vaa ቬ ethiopic syllable vee ቭ ethiopic syllable ve ቮ ethiopic syllable vo ቯ ethiopic syllable vwa ተ ethiopic syllable ta ቱ ethiopic syllable tu ቲ ethiopic syllable ti ታ ethiopic syllable taa ቴ ethiopic syllable tee ት ethiopic syllable te ቶ ethiopic syllable to ቷ ethiopic syllable twa ቸ ethiopic syllable ca ቹ ethiopic syllable cu ቺ ethiopic syllable ci ቻ ethiopic syllable caa ቼ ethiopic syllable cee ች ethiopic syllable ce ቾ ethiopic syllable co ቿ ethiopic syllable cwa ኀ ethiopic syllable xa ኁ ethiopic syllable xu ኂ ethiopic syllable xi ኃ ethiopic syllable xaa ኄ ethiopic syllable xee ኅ ethiopic syllable xe ኆ ethiopic syllable xo ኇ ethiopic syllable xoa ኈ ethiopic syllable xwa ኊ ethiopic syllable xwi ኋ ethiopic syllable xwaa ኌ ethiopic syllable xwee ኍ ethiopic syllable xwe ነ ethiopic syllable na ኑ ethiopic syllable nu ኒ ethiopic syllable ni ና ethiopic syllable naa ኔ ethiopic syllable nee ን ethiopic syllable ne ኖ ethiopic syllable no ኗ ethiopic syllable nwa ኘ ethiopic syllable nya ኙ ethiopic syllable nyu ኚ ethiopic syllable nyi ኛ ethiopic syllable nyaa ኜ ethiopic syllable nyee ኝ ethiopic syllable nye ኞ ethiopic syllable nyo ኟ ethiopic syllable nywa አ ethiopic syllable glottal a ኡ ethiopic syllable glottal u ኢ ethiopic syllable glottal i ኣ ethiopic syllable glottal aa ኤ ethiopic syllable glottal ee እ ethiopic syllable glottal e ኦ ethiopic syllable glottal o ኧ ethiopic syllable glottal wa ከ ethiopic syllable ka ኩ ethiopic syllable ku ኪ ethiopic syllable ki ካ ethiopic syllable kaa ኬ ethiopic syllable kee ክ ethiopic syllable ke ኮ ethiopic syllable ko ኯ ethiopic syllable koa ኰ ethiopic syllable kwa ኲ ethiopic syllable kwi ኳ ethiopic syllable kwaa ኴ ethiopic syllable kwee ኵ ethiopic syllable kwe ኸ ethiopic syllable kxa ኹ ethiopic syllable kxu ኺ ethiopic syllable kxi ኻ ethiopic syllable kxaa ኼ ethiopic syllable kxee ኽ ethiopic syllable kxe ኾ ethiopic syllable kxo ዀ ethiopic syllable kxwa ዂ ethiopic syllable kxwi ዃ ethiopic syllable kxwaa ዄ ethiopic syllable kxwee ዅ ethiopic syllable kxwe ወ ethiopic syllable wa ዉ ethiopic syllable wu ዊ ethiopic syllable wi ዋ ethiopic syllable waa ዌ ethiopic syllable wee ው ethiopic syllable we ዎ ethiopic syllable wo ዏ ethiopic syllable woa ዐ ethiopic syllable pharyngeal a ዑ ethiopic syllable pharyngeal u ዒ ethiopic syllable pharyngeal i ዓ ethiopic syllable pharyngeal aa ዔ ethiopic syllable pharyngeal ee ዕ ethiopic syllable pharyngeal e ዖ ethiopic syllable pharyngeal o ዘ ethiopic syllable za ዙ ethiopic syllable zu ዚ ethiopic syllable zi ዛ ethiopic syllable zaa ዜ ethiopic syllable zee ዝ ethiopic syllable ze ዞ ethiopic syllable zo ዟ ethiopic syllable zwa ዠ ethiopic syllable zha ዡ ethiopic syllable zhu ዢ ethiopic syllable zhi ዣ ethiopic syllable zhaa ዤ ethiopic syllable zhee ዥ ethiopic syllable zhe ዦ ethiopic syllable zho ዧ ethiopic syllable zhwa የ ethiopic syllable ya ዩ ethiopic syllable yu ዪ ethiopic syllable yi ያ ethiopic syllable yaa ዬ ethiopic syllable yee ይ ethiopic syllable ye ዮ ethiopic syllable yo ዯ ethiopic syllable yoa ደ ethiopic syllable da ዱ ethiopic syllable du ዲ ethiopic syllable di ዳ ethiopic syllable daa ዴ ethiopic syllable dee ድ ethiopic syllable de ዶ ethiopic syllable do ዷ ethiopic syllable dwa ዸ ethiopic syllable dda ዹ ethiopic syllable ddu ዺ ethiopic syllable ddi ዻ ethiopic syllable ddaa ዼ ethiopic syllable ddee ዽ ethiopic syllable dde ዾ ethiopic syllable ddo ዿ ethiopic syllable ddwa ጀ ethiopic syllable ja ጁ ethiopic syllable ju ጂ ethiopic syllable ji ጃ ethiopic syllable jaa ጄ ethiopic syllable jee ጅ ethiopic syllable je ጆ ethiopic syllable jo ጇ ethiopic syllable jwa ገ ethiopic syllable ga ጉ ethiopic syllable gu ጊ ethiopic syllable gi ጋ ethiopic syllable gaa ጌ ethiopic syllable gee ግ ethiopic syllable ge ጎ ethiopic syllable go ጏ ethiopic syllable goa ጐ ethiopic syllable gwa ጒ ethiopic syllable gwi ጓ ethiopic syllable gwaa ጔ ethiopic syllable gwee ጕ ethiopic syllable gwe ጘ ethiopic syllable gga ጙ ethiopic syllable ggu ጚ ethiopic syllable ggi ጛ ethiopic syllable ggaa ጜ ethiopic syllable ggee ጝ ethiopic syllable gge ጞ ethiopic syllable ggo ጟ ethiopic syllable ggwaa ጠ ethiopic syllable tha ጡ ethiopic syllable thu ጢ ethiopic syllable thi ጣ ethiopic syllable thaa ጤ ethiopic syllable thee ጥ ethiopic syllable the ጦ ethiopic syllable tho ጧ ethiopic syllable thwa ጨ ethiopic syllable cha ጩ ethiopic syllable chu ጪ ethiopic syllable chi ጫ ethiopic syllable chaa ጬ ethiopic syllable chee ጭ ethiopic syllable che ጮ ethiopic syllable cho ጯ ethiopic syllable chwa ጰ ethiopic syllable pha ጱ ethiopic syllable phu ጲ ethiopic syllable phi ጳ ethiopic syllable phaa ጴ ethiopic syllable phee ጵ ethiopic syllable phe ጶ ethiopic syllable pho ጷ ethiopic syllable phwa ጸ ethiopic syllable tsa ጹ ethiopic syllable tsu ጺ ethiopic syllable tsi ጻ ethiopic syllable tsaa ጼ ethiopic syllable tsee ጽ ethiopic syllable tse ጾ ethiopic syllable tso ጿ ethiopic syllable tswa ፀ ethiopic syllable tza ፁ ethiopic syllable tzu ፂ ethiopic syllable tzi ፃ ethiopic syllable tzaa ፄ ethiopic syllable tzee ፅ ethiopic syllable tze ፆ ethiopic syllable tzo ፇ ethiopic syllable tzoa ፈ ethiopic syllable fa ፉ ethiopic syllable fu ፊ ethiopic syllable fi ፋ ethiopic syllable faa ፌ ethiopic syllable fee ፍ ethiopic syllable fe ፎ ethiopic syllable fo ፏ ethiopic syllable fwa ፐ ethiopic syllable pa ፑ ethiopic syllable pu ፒ ethiopic syllable pi ፓ ethiopic syllable paa ፔ ethiopic syllable pee ፕ ethiopic syllable pe ፖ ethiopic syllable po ፗ ethiopic syllable pwa ፘ ethiopic syllable rya ፙ ethiopic syllable mya ፚ ethiopic syllable fya ፠ ethiopic section mark ፡ ethiopic wordspace ። ethiopic full stop ፣ ethiopic comma ፤ ethiopic semicolon ፥ ethiopic colon ፦ ethiopic preface colon ፧ ethiopic question mark ፨ ethiopic paragraph separator ፩ ethiopic digit one ፪ ethiopic digit two ፫ ethiopic digit three ፬ ethiopic digit four ፭ ethiopic digit five ፮ ethiopic digit six ፯ ethiopic digit seven ፰ ethiopic digit eight ፱ ethiopic digit nine ፲ ethiopic number ten ፳ ethiopic number twenty ፴ ethiopic number thirty ፵ ethiopic number forty ፶ ethiopic number fifty ፷ ethiopic number sixty ፸ ethiopic number seventy ፹ ethiopic number eighty ፺ ethiopic number ninety ፻ ethiopic number hundred ፼ ethiopic number ten thousand ᎀ ethiopic syllable sebatbeit mwa ᎁ ethiopic syllable mwi ᎂ ethiopic syllable mwee ᎃ ethiopic syllable mwe ᎄ ethiopic syllable sebatbeit bwa ᎅ ethiopic syllable bwi ᎆ ethiopic syllable bwee ᎇ ethiopic syllable bwe ᎈ ethiopic syllable sebatbeit fwa ᎉ ethiopic syllable fwi ᎊ ethiopic syllable fwee ᎋ ethiopic syllable fwe ᎌ ethiopic syllable sebatbeit pwa ᎍ ethiopic syllable pwi ᎎ ethiopic syllable pwee ᎏ ethiopic syllable pwe ᎐ ethiopic tonal mark yizet ᎑ ethiopic tonal mark deret ᎒ ethiopic tonal mark rikrik ᎓ ethiopic tonal mark short rikrik ᎔ ethiopic tonal mark difat ᎕ ethiopic tonal mark kenat ᎖ ethiopic tonal mark chiret ᎗ ethiopic tonal mark hidet ᎘ ethiopic tonal mark deret-hidet ᎙ ethiopic tonal mark kurt Ꭰ cherokee letter a Ꭱ cherokee letter e Ꭲ cherokee letter i Ꭳ cherokee letter o Ꭴ cherokee letter u Ꭵ cherokee letter v Ꭶ cherokee letter ga Ꭷ cherokee letter ka Ꭸ cherokee letter ge Ꭹ cherokee letter gi Ꭺ cherokee letter go Ꭻ cherokee letter gu Ꭼ cherokee letter gv Ꭽ cherokee letter ha Ꭾ cherokee letter he Ꭿ cherokee letter hi Ꮀ cherokee letter ho Ꮁ cherokee letter hu Ꮂ cherokee letter hv Ꮃ cherokee letter la Ꮄ cherokee letter le Ꮅ cherokee letter li Ꮆ cherokee letter lo Ꮇ cherokee letter lu Ꮈ cherokee letter lv Ꮉ cherokee letter ma Ꮊ cherokee letter me Ꮋ cherokee letter mi Ꮌ cherokee letter mo Ꮍ cherokee letter mu Ꮎ cherokee letter na Ꮏ cherokee letter hna Ꮐ cherokee letter nah Ꮑ cherokee letter ne Ꮒ cherokee letter ni Ꮓ cherokee letter no Ꮔ cherokee letter nu Ꮕ cherokee letter nv Ꮖ cherokee letter qua Ꮗ cherokee letter que Ꮘ cherokee letter qui Ꮙ cherokee letter quo Ꮚ cherokee letter quu Ꮛ cherokee letter quv Ꮜ cherokee letter sa Ꮝ cherokee letter s Ꮞ cherokee letter se Ꮟ cherokee letter si Ꮠ cherokee letter so Ꮡ cherokee letter su Ꮢ cherokee letter sv Ꮣ cherokee letter da Ꮤ cherokee letter ta Ꮥ cherokee letter de Ꮦ cherokee letter te Ꮧ cherokee letter di Ꮨ cherokee letter ti Ꮩ cherokee letter do Ꮪ cherokee letter du Ꮫ cherokee letter dv Ꮬ cherokee letter dla Ꮭ cherokee letter tla Ꮮ cherokee letter tle Ꮯ cherokee letter tli Ꮰ cherokee letter tlo Ꮱ cherokee letter tlu Ꮲ cherokee letter tlv Ꮳ cherokee letter tsa Ꮴ cherokee letter tse Ꮵ cherokee letter tsi Ꮶ cherokee letter tso Ꮷ cherokee letter tsu Ꮸ cherokee letter tsv Ꮹ cherokee letter wa Ꮺ cherokee letter we Ꮻ cherokee letter wi Ꮼ cherokee letter wo Ꮽ cherokee letter wu Ꮾ cherokee letter wv Ꮿ cherokee letter ya Ᏸ cherokee letter ye Ᏹ cherokee letter yi Ᏺ cherokee letter yo Ᏻ cherokee letter yu Ᏼ cherokee letter yv Ᏽ cherokee letter mv ᏸ cherokee small letter ye ᏹ cherokee small letter yi ᏺ cherokee small letter yo ᏻ cherokee small letter yu ᏼ cherokee small letter yv ᏽ cherokee small letter mv ᐀ canadian syllabics hyphen ᐁ canadian syllabics e ᐂ canadian syllabics aai ᐃ canadian syllabics i ᐄ canadian syllabics ii ᐅ canadian syllabics o ᐆ canadian syllabics oo ᐇ canadian syllabics y-cree oo ᐈ canadian syllabics carrier ee ᐉ canadian syllabics carrier i ᐊ canadian syllabics a ᐋ canadian syllabics aa ᐌ canadian syllabics we ᐍ canadian syllabics west-cree we ᐎ canadian syllabics wi ᐏ canadian syllabics west-cree wi ᐐ canadian syllabics wii ᐑ canadian syllabics west-cree wii ᐒ canadian syllabics wo ᐓ canadian syllabics west-cree wo ᐔ canadian syllabics woo ᐕ canadian syllabics west-cree woo ᐖ canadian syllabics naskapi woo ᐗ canadian syllabics wa ᐘ canadian syllabics west-cree wa ᐙ canadian syllabics waa ᐚ canadian syllabics west-cree waa ᐛ canadian syllabics naskapi waa ᐜ canadian syllabics ai ᐝ canadian syllabics y-cree w ᐞ canadian syllabics glottal stop ᐟ canadian syllabics final acute ᐠ canadian syllabics final grave ᐡ canadian syllabics final bottom half ring ᐢ canadian syllabics final top half ring ᐣ canadian syllabics final right half ring ᐤ canadian syllabics final ring ᐥ canadian syllabics final double acute ᐦ canadian syllabics final double short vertical strokes ᐧ canadian syllabics final middle dot ᐨ canadian syllabics final short horizontal stroke ᐩ canadian syllabics final plus ᐪ canadian syllabics final down tack ᐫ canadian syllabics en ᐬ canadian syllabics in ᐭ canadian syllabics on ᐮ canadian syllabics an ᐯ canadian syllabics pe ᐰ canadian syllabics paai ᐱ canadian syllabics pi ᐲ canadian syllabics pii ᐳ canadian syllabics po ᐴ canadian syllabics poo ᐵ canadian syllabics y-cree poo ᐶ canadian syllabics carrier hee ᐷ canadian syllabics carrier hi ᐸ canadian syllabics pa ᐹ canadian syllabics paa ᐺ canadian syllabics pwe ᐻ canadian syllabics west-cree pwe ᐼ canadian syllabics pwi ᐽ canadian syllabics west-cree pwi ᐾ canadian syllabics pwii ᐿ canadian syllabics west-cree pwii ᑀ canadian syllabics pwo ᑁ canadian syllabics west-cree pwo ᑂ canadian syllabics pwoo ᑃ canadian syllabics west-cree pwoo ᑄ canadian syllabics pwa ᑅ canadian syllabics west-cree pwa ᑆ canadian syllabics pwaa ᑇ canadian syllabics west-cree pwaa ᑈ canadian syllabics y-cree pwaa ᑉ canadian syllabics p ᑊ canadian syllabics west-cree p ᑋ canadian syllabics carrier h ᑌ canadian syllabics te ᑍ canadian syllabics taai ᑎ canadian syllabics ti ᑏ canadian syllabics tii ᑐ canadian syllabics to ᑑ canadian syllabics too ᑒ canadian syllabics y-cree too ᑓ canadian syllabics carrier dee ᑔ canadian syllabics carrier di ᑕ canadian syllabics ta ᑖ canadian syllabics taa ᑗ canadian syllabics twe ᑘ canadian syllabics west-cree twe ᑙ canadian syllabics twi ᑚ canadian syllabics west-cree twi ᑛ canadian syllabics twii ᑜ canadian syllabics west-cree twii ᑝ canadian syllabics two ᑞ canadian syllabics west-cree two ᑟ canadian syllabics twoo ᑠ canadian syllabics west-cree twoo ᑡ canadian syllabics twa ᑢ canadian syllabics west-cree twa ᑣ canadian syllabics twaa ᑤ canadian syllabics west-cree twaa ᑥ canadian syllabics naskapi twaa ᑦ canadian syllabics t ᑧ canadian syllabics tte ᑨ canadian syllabics tti ᑩ canadian syllabics tto ᑪ canadian syllabics tta ᑫ canadian syllabics ke ᑬ canadian syllabics kaai ᑭ canadian syllabics ki ᑮ canadian syllabics kii ᑯ canadian syllabics ko ᑰ canadian syllabics koo ᑱ canadian syllabics y-cree koo ᑲ canadian syllabics ka ᑳ canadian syllabics kaa ᑴ canadian syllabics kwe ᑵ canadian syllabics west-cree kwe ᑶ canadian syllabics kwi ᑷ canadian syllabics west-cree kwi ᑸ canadian syllabics kwii ᑹ canadian syllabics west-cree kwii ᑺ canadian syllabics kwo ᑻ canadian syllabics west-cree kwo ᑼ canadian syllabics kwoo ᑽ canadian syllabics west-cree kwoo ᑾ canadian syllabics kwa ᑿ canadian syllabics west-cree kwa ᒀ canadian syllabics kwaa ᒁ canadian syllabics west-cree kwaa ᒂ canadian syllabics naskapi kwaa ᒃ canadian syllabics k ᒄ canadian syllabics kw ᒅ canadian syllabics south-slavey keh ᒆ canadian syllabics south-slavey kih ᒇ canadian syllabics south-slavey koh ᒈ canadian syllabics south-slavey kah ᒉ canadian syllabics ce ᒊ canadian syllabics caai ᒋ canadian syllabics ci ᒌ canadian syllabics cii ᒍ canadian syllabics co ᒎ canadian syllabics coo ᒏ canadian syllabics y-cree coo ᒐ canadian syllabics ca ᒑ canadian syllabics caa ᒒ canadian syllabics cwe ᒓ canadian syllabics west-cree cwe ᒔ canadian syllabics cwi ᒕ canadian syllabics west-cree cwi ᒖ canadian syllabics cwii ᒗ canadian syllabics west-cree cwii ᒘ canadian syllabics cwo ᒙ canadian syllabics west-cree cwo ᒚ canadian syllabics cwoo ᒛ canadian syllabics west-cree cwoo ᒜ canadian syllabics cwa ᒝ canadian syllabics west-cree cwa ᒞ canadian syllabics cwaa ᒟ canadian syllabics west-cree cwaa ᒠ canadian syllabics naskapi cwaa ᒡ canadian syllabics c ᒢ canadian syllabics sayisi th ᒣ canadian syllabics me ᒤ canadian syllabics maai ᒥ canadian syllabics mi ᒦ canadian syllabics mii ᒧ canadian syllabics mo ᒨ canadian syllabics moo ᒩ canadian syllabics y-cree moo ᒪ canadian syllabics ma ᒫ canadian syllabics maa ᒬ canadian syllabics mwe ᒭ canadian syllabics west-cree mwe ᒮ canadian syllabics mwi ᒯ canadian syllabics west-cree mwi ᒰ canadian syllabics mwii ᒱ canadian syllabics west-cree mwii ᒲ canadian syllabics mwo ᒳ canadian syllabics west-cree mwo ᒴ canadian syllabics mwoo ᒵ canadian syllabics west-cree mwoo ᒶ canadian syllabics mwa ᒷ canadian syllabics west-cree mwa ᒸ canadian syllabics mwaa ᒹ canadian syllabics west-cree mwaa ᒺ canadian syllabics naskapi mwaa ᒻ canadian syllabics m ᒼ canadian syllabics west-cree m ᒽ canadian syllabics mh ᒾ canadian syllabics athapascan m ᒿ canadian syllabics sayisi m ᓀ canadian syllabics ne ᓁ canadian syllabics naai ᓂ canadian syllabics ni ᓃ canadian syllabics nii ᓄ canadian syllabics no ᓅ canadian syllabics noo ᓆ canadian syllabics y-cree noo ᓇ canadian syllabics na ᓈ canadian syllabics naa ᓉ canadian syllabics nwe ᓊ canadian syllabics west-cree nwe ᓋ canadian syllabics nwa ᓌ canadian syllabics west-cree nwa ᓍ canadian syllabics nwaa ᓎ canadian syllabics west-cree nwaa ᓏ canadian syllabics naskapi nwaa ᓐ canadian syllabics n ᓑ canadian syllabics carrier ng ᓒ canadian syllabics nh ᓓ canadian syllabics le ᓔ canadian syllabics laai ᓕ canadian syllabics li ᓖ canadian syllabics lii ᓗ canadian syllabics lo ᓘ canadian syllabics loo ᓙ canadian syllabics y-cree loo ᓚ canadian syllabics la ᓛ canadian syllabics laa ᓜ canadian syllabics lwe ᓝ canadian syllabics west-cree lwe ᓞ canadian syllabics lwi ᓟ canadian syllabics west-cree lwi ᓠ canadian syllabics lwii ᓡ canadian syllabics west-cree lwii ᓢ canadian syllabics lwo ᓣ canadian syllabics west-cree lwo ᓤ canadian syllabics lwoo ᓥ canadian syllabics west-cree lwoo ᓦ canadian syllabics lwa ᓧ canadian syllabics west-cree lwa ᓨ canadian syllabics lwaa ᓩ canadian syllabics west-cree lwaa ᓪ canadian syllabics l ᓫ canadian syllabics west-cree l ᓬ canadian syllabics medial l ᓭ canadian syllabics se ᓮ canadian syllabics saai ᓯ canadian syllabics si ᓰ canadian syllabics sii ᓱ canadian syllabics so ᓲ canadian syllabics soo ᓳ canadian syllabics y-cree soo ᓴ canadian syllabics sa ᓵ canadian syllabics saa ᓶ canadian syllabics swe ᓷ canadian syllabics west-cree swe ᓸ canadian syllabics swi ᓹ canadian syllabics west-cree swi ᓺ canadian syllabics swii ᓻ canadian syllabics west-cree swii ᓼ canadian syllabics swo ᓽ canadian syllabics west-cree swo ᓾ canadian syllabics swoo ᓿ canadian syllabics west-cree swoo ᔀ canadian syllabics swa ᔁ canadian syllabics west-cree swa ᔂ canadian syllabics swaa ᔃ canadian syllabics west-cree swaa ᔄ canadian syllabics naskapi swaa ᔅ canadian syllabics s ᔆ canadian syllabics athapascan s ᔇ canadian syllabics sw ᔈ canadian syllabics blackfoot s ᔉ canadian syllabics moose-cree sk ᔊ canadian syllabics naskapi skw ᔋ canadian syllabics naskapi s-w ᔌ canadian syllabics naskapi spwa ᔍ canadian syllabics naskapi stwa ᔎ canadian syllabics naskapi skwa ᔏ canadian syllabics naskapi scwa ᔐ canadian syllabics she ᔑ canadian syllabics shi ᔒ canadian syllabics shii ᔓ canadian syllabics sho ᔔ canadian syllabics shoo ᔕ canadian syllabics sha ᔖ canadian syllabics shaa ᔗ canadian syllabics shwe ᔘ canadian syllabics west-cree shwe ᔙ canadian syllabics shwi ᔚ canadian syllabics west-cree shwi ᔛ canadian syllabics shwii ᔜ canadian syllabics west-cree shwii ᔝ canadian syllabics shwo ᔞ canadian syllabics west-cree shwo ᔟ canadian syllabics shwoo ᔠ canadian syllabics west-cree shwoo ᔡ canadian syllabics shwa ᔢ canadian syllabics west-cree shwa ᔣ canadian syllabics shwaa ᔤ canadian syllabics west-cree shwaa ᔥ canadian syllabics sh ᔦ canadian syllabics ye ᔧ canadian syllabics yaai ᔨ canadian syllabics yi ᔩ canadian syllabics yii ᔪ canadian syllabics yo ᔫ canadian syllabics yoo ᔬ canadian syllabics y-cree yoo ᔭ canadian syllabics ya ᔮ canadian syllabics yaa ᔯ canadian syllabics ywe ᔰ canadian syllabics west-cree ywe ᔱ canadian syllabics ywi ᔲ canadian syllabics west-cree ywi ᔳ canadian syllabics ywii ᔴ canadian syllabics west-cree ywii ᔵ canadian syllabics ywo ᔶ canadian syllabics west-cree ywo ᔷ canadian syllabics ywoo ᔸ canadian syllabics west-cree ywoo ᔹ canadian syllabics ywa ᔺ canadian syllabics west-cree ywa ᔻ canadian syllabics ywaa ᔼ canadian syllabics west-cree ywaa ᔽ canadian syllabics naskapi ywaa ᔾ canadian syllabics y ᔿ canadian syllabics bible-cree y ᕀ canadian syllabics west-cree y ᕁ canadian syllabics sayisi yi ᕂ canadian syllabics re ᕃ canadian syllabics r-cree re ᕄ canadian syllabics west-cree le ᕅ canadian syllabics raai ᕆ canadian syllabics ri ᕇ canadian syllabics rii ᕈ canadian syllabics ro ᕉ canadian syllabics roo ᕊ canadian syllabics west-cree lo ᕋ canadian syllabics ra ᕌ canadian syllabics raa ᕍ canadian syllabics west-cree la ᕎ canadian syllabics rwaa ᕏ canadian syllabics west-cree rwaa ᕐ canadian syllabics r ᕑ canadian syllabics west-cree r ᕒ canadian syllabics medial r ᕓ canadian syllabics fe ᕔ canadian syllabics faai ᕕ canadian syllabics fi ᕖ canadian syllabics fii ᕗ canadian syllabics fo ᕘ canadian syllabics foo ᕙ canadian syllabics fa ᕚ canadian syllabics faa ᕛ canadian syllabics fwaa ᕜ canadian syllabics west-cree fwaa ᕝ canadian syllabics f ᕞ canadian syllabics the ᕟ canadian syllabics n-cree the ᕠ canadian syllabics thi ᕡ canadian syllabics n-cree thi ᕢ canadian syllabics thii ᕣ canadian syllabics n-cree thii ᕤ canadian syllabics tho ᕥ canadian syllabics thoo ᕦ canadian syllabics tha ᕧ canadian syllabics thaa ᕨ canadian syllabics thwaa ᕩ canadian syllabics west-cree thwaa ᕪ canadian syllabics th ᕫ canadian syllabics tthe ᕬ canadian syllabics tthi ᕭ canadian syllabics ttho ᕮ canadian syllabics ttha ᕯ canadian syllabics tth ᕰ canadian syllabics tye ᕱ canadian syllabics tyi ᕲ canadian syllabics tyo ᕳ canadian syllabics tya ᕴ canadian syllabics nunavik he ᕵ canadian syllabics nunavik hi ᕶ canadian syllabics nunavik hii ᕷ canadian syllabics nunavik ho ᕸ canadian syllabics nunavik hoo ᕹ canadian syllabics nunavik ha ᕺ canadian syllabics nunavik haa ᕻ canadian syllabics nunavik h ᕼ canadian syllabics nunavut h ᕽ canadian syllabics hk ᕾ canadian syllabics qaai ᕿ canadian syllabics qi ᖀ canadian syllabics qii ᖁ canadian syllabics qo ᖂ canadian syllabics qoo ᖃ canadian syllabics qa ᖄ canadian syllabics qaa ᖅ canadian syllabics q ᖆ canadian syllabics tlhe ᖇ canadian syllabics tlhi ᖈ canadian syllabics tlho ᖉ canadian syllabics tlha ᖊ canadian syllabics west-cree re ᖋ canadian syllabics west-cree ri ᖌ canadian syllabics west-cree ro ᖍ canadian syllabics west-cree ra ᖎ canadian syllabics ngaai ᖏ canadian syllabics ngi ᖐ canadian syllabics ngii ᖑ canadian syllabics ngo ᖒ canadian syllabics ngoo ᖓ canadian syllabics nga ᖔ canadian syllabics ngaa ᖕ canadian syllabics ng ᖖ canadian syllabics nng ᖗ canadian syllabics sayisi she ᖘ canadian syllabics sayisi shi ᖙ canadian syllabics sayisi sho ᖚ canadian syllabics sayisi sha ᖛ canadian syllabics woods-cree the ᖜ canadian syllabics woods-cree thi ᖝ canadian syllabics woods-cree tho ᖞ canadian syllabics woods-cree tha ᖟ canadian syllabics woods-cree th ᖠ canadian syllabics lhi ᖡ canadian syllabics lhii ᖢ canadian syllabics lho ᖣ canadian syllabics lhoo ᖤ canadian syllabics lha ᖥ canadian syllabics lhaa ᖦ canadian syllabics lh ᖧ canadian syllabics th-cree the ᖨ canadian syllabics th-cree thi ᖩ canadian syllabics th-cree thii ᖪ canadian syllabics th-cree tho ᖫ canadian syllabics th-cree thoo ᖬ canadian syllabics th-cree tha ᖭ canadian syllabics th-cree thaa ᖮ canadian syllabics th-cree th ᖯ canadian syllabics aivilik b ᖰ canadian syllabics blackfoot e ᖱ canadian syllabics blackfoot i ᖲ canadian syllabics blackfoot o ᖳ canadian syllabics blackfoot a ᖴ canadian syllabics blackfoot we ᖵ canadian syllabics blackfoot wi ᖶ canadian syllabics blackfoot wo ᖷ canadian syllabics blackfoot wa ᖸ canadian syllabics blackfoot ne ᖹ canadian syllabics blackfoot ni ᖺ canadian syllabics blackfoot no ᖻ canadian syllabics blackfoot na ᖼ canadian syllabics blackfoot ke ᖽ canadian syllabics blackfoot ki ᖾ canadian syllabics blackfoot ko ᖿ canadian syllabics blackfoot ka ᗀ canadian syllabics sayisi he ᗁ canadian syllabics sayisi hi ᗂ canadian syllabics sayisi ho ᗃ canadian syllabics sayisi ha ᗄ canadian syllabics carrier ghu ᗅ canadian syllabics carrier gho ᗆ canadian syllabics carrier ghe ᗇ canadian syllabics carrier ghee ᗈ canadian syllabics carrier ghi ᗉ canadian syllabics carrier gha ᗊ canadian syllabics carrier ru ᗋ canadian syllabics carrier ro ᗌ canadian syllabics carrier re ᗍ canadian syllabics carrier ree ᗎ canadian syllabics carrier ri ᗏ canadian syllabics carrier ra ᗐ canadian syllabics carrier wu ᗑ canadian syllabics carrier wo ᗒ canadian syllabics carrier we ᗓ canadian syllabics carrier wee ᗔ canadian syllabics carrier wi ᗕ canadian syllabics carrier wa ᗖ canadian syllabics carrier hwu ᗗ canadian syllabics carrier hwo ᗘ canadian syllabics carrier hwe ᗙ canadian syllabics carrier hwee ᗚ canadian syllabics carrier hwi ᗛ canadian syllabics carrier hwa ᗜ canadian syllabics carrier thu ᗝ canadian syllabics carrier tho ᗞ canadian syllabics carrier the ᗟ canadian syllabics carrier thee ᗠ canadian syllabics carrier thi ᗡ canadian syllabics carrier tha ᗢ canadian syllabics carrier ttu ᗣ canadian syllabics carrier tto ᗤ canadian syllabics carrier tte ᗥ canadian syllabics carrier ttee ᗦ canadian syllabics carrier tti ᗧ canadian syllabics carrier tta ᗨ canadian syllabics carrier pu ᗩ canadian syllabics carrier po ᗪ canadian syllabics carrier pe ᗫ canadian syllabics carrier pee ᗬ canadian syllabics carrier pi ᗭ canadian syllabics carrier pa ᗮ canadian syllabics carrier p ᗯ canadian syllabics carrier gu ᗰ canadian syllabics carrier go ᗱ canadian syllabics carrier ge ᗲ canadian syllabics carrier gee ᗳ canadian syllabics carrier gi ᗴ canadian syllabics carrier ga ᗵ canadian syllabics carrier khu ᗶ canadian syllabics carrier kho ᗷ canadian syllabics carrier khe ᗸ canadian syllabics carrier khee ᗹ canadian syllabics carrier khi ᗺ canadian syllabics carrier kha ᗻ canadian syllabics carrier kku ᗼ canadian syllabics carrier kko ᗽ canadian syllabics carrier kke ᗾ canadian syllabics carrier kkee ᗿ canadian syllabics carrier kki ᘀ canadian syllabics carrier kka ᘁ canadian syllabics carrier kk ᘂ canadian syllabics carrier nu ᘃ canadian syllabics carrier no ᘄ canadian syllabics carrier ne ᘅ canadian syllabics carrier nee ᘆ canadian syllabics carrier ni ᘇ canadian syllabics carrier na ᘈ canadian syllabics carrier mu ᘉ canadian syllabics carrier mo ᘊ canadian syllabics carrier me ᘋ canadian syllabics carrier mee ᘌ canadian syllabics carrier mi ᘍ canadian syllabics carrier ma ᘎ canadian syllabics carrier yu ᘏ canadian syllabics carrier yo ᘐ canadian syllabics carrier ye ᘑ canadian syllabics carrier yee ᘒ canadian syllabics carrier yi ᘓ canadian syllabics carrier ya ᘔ canadian syllabics carrier ju ᘕ canadian syllabics sayisi ju ᘖ canadian syllabics carrier jo ᘗ canadian syllabics carrier je ᘘ canadian syllabics carrier jee ᘙ canadian syllabics carrier ji ᘚ canadian syllabics sayisi ji ᘛ canadian syllabics carrier ja ᘜ canadian syllabics carrier jju ᘝ canadian syllabics carrier jjo ᘞ canadian syllabics carrier jje ᘟ canadian syllabics carrier jjee ᘠ canadian syllabics carrier jji ᘡ canadian syllabics carrier jja ᘢ canadian syllabics carrier lu ᘣ canadian syllabics carrier lo ᘤ canadian syllabics carrier le ᘥ canadian syllabics carrier lee ᘦ canadian syllabics carrier li ᘧ canadian syllabics carrier la ᘨ canadian syllabics carrier dlu ᘩ canadian syllabics carrier dlo ᘪ canadian syllabics carrier dle ᘫ canadian syllabics carrier dlee ᘬ canadian syllabics carrier dli ᘭ canadian syllabics carrier dla ᘮ canadian syllabics carrier lhu ᘯ canadian syllabics carrier lho ᘰ canadian syllabics carrier lhe ᘱ canadian syllabics carrier lhee ᘲ canadian syllabics carrier lhi ᘳ canadian syllabics carrier lha ᘴ canadian syllabics carrier tlhu ᘵ canadian syllabics carrier tlho ᘶ canadian syllabics carrier tlhe ᘷ canadian syllabics carrier tlhee ᘸ canadian syllabics carrier tlhi ᘹ canadian syllabics carrier tlha ᘺ canadian syllabics carrier tlu ᘻ canadian syllabics carrier tlo ᘼ canadian syllabics carrier tle ᘽ canadian syllabics carrier tlee ᘾ canadian syllabics carrier tli ᘿ canadian syllabics carrier tla ᙀ canadian syllabics carrier zu ᙁ canadian syllabics carrier zo ᙂ canadian syllabics carrier ze ᙃ canadian syllabics carrier zee ᙄ canadian syllabics carrier zi ᙅ canadian syllabics carrier za ᙆ canadian syllabics carrier z ᙇ canadian syllabics carrier initial z ᙈ canadian syllabics carrier dzu ᙉ canadian syllabics carrier dzo ᙊ canadian syllabics carrier dze ᙋ canadian syllabics carrier dzee ᙌ canadian syllabics carrier dzi ᙍ canadian syllabics carrier dza ᙎ canadian syllabics carrier su ᙏ canadian syllabics carrier so ᙐ canadian syllabics carrier se ᙑ canadian syllabics carrier see ᙒ canadian syllabics carrier si ᙓ canadian syllabics carrier sa ᙔ canadian syllabics carrier shu ᙕ canadian syllabics carrier sho ᙖ canadian syllabics carrier she ᙗ canadian syllabics carrier shee ᙘ canadian syllabics carrier shi ᙙ canadian syllabics carrier sha ᙚ canadian syllabics carrier sh ᙛ canadian syllabics carrier tsu ᙜ canadian syllabics carrier tso ᙝ canadian syllabics carrier tse ᙞ canadian syllabics carrier tsee ᙟ canadian syllabics carrier tsi ᙠ canadian syllabics carrier tsa ᙡ canadian syllabics carrier chu ᙢ canadian syllabics carrier cho ᙣ canadian syllabics carrier che ᙤ canadian syllabics carrier chee ᙥ canadian syllabics carrier chi ᙦ canadian syllabics carrier cha ᙧ canadian syllabics carrier ttsu ᙨ canadian syllabics carrier ttso ᙩ canadian syllabics carrier ttse ᙪ canadian syllabics carrier ttsee ᙫ canadian syllabics carrier ttsi ᙬ canadian syllabics carrier ttsa ᙭ canadian syllabics chi sign ᙮ canadian syllabics full stop ᙯ canadian syllabics qai ᙰ canadian syllabics ngai ᙱ canadian syllabics nngi ᙲ canadian syllabics nngii ᙳ canadian syllabics nngo ᙴ canadian syllabics nngoo ᙵ canadian syllabics nnga ᙶ canadian syllabics nngaa ᙷ canadian syllabics woods-cree thwee ᙸ canadian syllabics woods-cree thwi ᙹ canadian syllabics woods-cree thwii ᙺ canadian syllabics woods-cree thwo ᙻ canadian syllabics woods-cree thwoo ᙼ canadian syllabics woods-cree thwa ᙽ canadian syllabics woods-cree thwaa ᙾ canadian syllabics woods-cree final th ᙿ canadian syllabics blackfoot w   ogham space mark ᚁ ogham letter beith ᚂ ogham letter luis ᚃ ogham letter fearn ᚄ ogham letter sail ᚅ ogham letter nion ᚆ ogham letter uath ᚇ ogham letter dair ᚈ ogham letter tinne ᚉ ogham letter coll ᚊ ogham letter ceirt ᚋ ogham letter muin ᚌ ogham letter gort ᚍ ogham letter ngeadal ᚎ ogham letter straif ᚏ ogham letter ruis ᚐ ogham letter ailm ᚑ ogham letter onn ᚒ ogham letter ur ᚓ ogham letter eadhadh ᚔ ogham letter iodhadh ᚕ ogham letter eabhadh ᚖ ogham letter or ᚗ ogham letter uilleann ᚘ ogham letter ifin ᚙ ogham letter eamhancholl ᚚ ogham letter peith ᚛ ogham feather mark ᚜ ogham reversed feather mark ᚠ runic letter fehu feoh fe f ᚡ runic letter v ᚢ runic letter uruz ur u ᚣ runic letter yr ᚤ runic letter y ᚥ runic letter w ᚦ runic letter thurisaz thurs thorn ᚧ runic letter eth ᚨ runic letter ansuz a ᚩ runic letter os o ᚪ runic letter ac a ᚫ runic letter aesc ᚬ runic letter long-branch-oss o ᚭ runic letter short-twig-oss o ᚮ runic letter o ᚯ runic letter oe ᚰ runic letter on ᚱ runic letter raido rad reid r ᚲ runic letter kauna ᚳ runic letter cen ᚴ runic letter kaun k ᚵ runic letter g ᚶ runic letter eng ᚷ runic letter gebo gyfu g ᚸ runic letter gar ᚹ runic letter wunjo wynn w ᚺ runic letter haglaz h ᚻ runic letter haegl h ᚼ runic letter long-branch-hagall h ᚽ runic letter short-twig-hagall h ᚾ runic letter naudiz nyd naud n ᚿ runic letter short-twig-naud n ᛀ runic letter dotted-n ᛁ runic letter isaz is iss i ᛂ runic letter e ᛃ runic letter jeran j ᛄ runic letter ger ᛅ runic letter long-branch-ar ae ᛆ runic letter short-twig-ar a ᛇ runic letter iwaz eoh ᛈ runic letter pertho peorth p ᛉ runic letter algiz eolhx ᛊ runic letter sowilo s ᛋ runic letter sigel long-branch-sol s ᛌ runic letter short-twig-sol s ᛍ runic letter c ᛎ runic letter z ᛏ runic letter tiwaz tir tyr t ᛐ runic letter short-twig-tyr t ᛑ runic letter d ᛒ runic letter berkanan beorc bjarkan b ᛓ runic letter short-twig-bjarkan b ᛔ runic letter dotted-p ᛕ runic letter open-p ᛖ runic letter ehwaz eh e ᛗ runic letter mannaz man m ᛘ runic letter long-branch-madr m ᛙ runic letter short-twig-madr m ᛚ runic letter laukaz lagu logr l ᛛ runic letter dotted-l ᛜ runic letter ingwaz ᛝ runic letter ing ᛞ runic letter dagaz daeg d ᛟ runic letter othalan ethel o ᛠ runic letter ear ᛡ runic letter ior ᛢ runic letter cweorth ᛣ runic letter calc ᛤ runic letter cealc ᛥ runic letter stan ᛦ runic letter long-branch-yr ᛧ runic letter short-twig-yr ᛨ runic letter icelandic-yr ᛩ runic letter q ᛪ runic letter x ᛫ runic single punctuation ᛬ runic multiple punctuation ᛭ runic cross punctuation ᛮ runic arlaug symbol ᛯ runic tvimadur symbol ᛰ runic belgthor symbol ᛱ runic letter k ᛲ runic letter sh ᛳ runic letter oo ᛴ runic letter franks casket os ᛵ runic letter franks casket is ᛶ runic letter franks casket eh ᛷ runic letter franks casket ac ᛸ runic letter franks casket aesc ᜀ tagalog letter a ᜁ tagalog letter i ᜂ tagalog letter u ᜃ tagalog letter ka ᜄ tagalog letter ga ᜅ tagalog letter nga ᜆ tagalog letter ta ᜇ tagalog letter da ᜈ tagalog letter na ᜉ tagalog letter pa ᜊ tagalog letter ba ᜋ tagalog letter ma ᜌ tagalog letter ya ᜎ tagalog letter la ᜏ tagalog letter wa ᜐ tagalog letter sa ᜑ tagalog letter ha ᜠ hanunoo letter a ᜡ hanunoo letter i ᜢ hanunoo letter u ᜣ hanunoo letter ka ᜤ hanunoo letter ga ᜥ hanunoo letter nga ᜦ hanunoo letter ta ᜧ hanunoo letter da ᜨ hanunoo letter na ᜩ hanunoo letter pa ᜪ hanunoo letter ba ᜫ hanunoo letter ma ᜬ hanunoo letter ya ᜭ hanunoo letter ra ᜮ hanunoo letter la ᜯ hanunoo letter wa ᜰ hanunoo letter sa ᜱ hanunoo letter ha ᜵ philippine single punctuation ᜶ philippine double punctuation ᝀ buhid letter a ᝁ buhid letter i ᝂ buhid letter u ᝃ buhid letter ka ᝄ buhid letter ga ᝅ buhid letter nga ᝆ buhid letter ta ᝇ buhid letter da ᝈ buhid letter na ᝉ buhid letter pa ᝊ buhid letter ba ᝋ buhid letter ma ᝌ buhid letter ya ᝍ buhid letter ra ᝎ buhid letter la ᝏ buhid letter wa ᝐ buhid letter sa ᝑ buhid letter ha ᝠ tagbanwa letter a ᝡ tagbanwa letter i ᝢ tagbanwa letter u ᝣ tagbanwa letter ka ᝤ tagbanwa letter ga ᝥ tagbanwa letter nga ᝦ tagbanwa letter ta ᝧ tagbanwa letter da ᝨ tagbanwa letter na ᝩ tagbanwa letter pa ᝪ tagbanwa letter ba ᝫ tagbanwa letter ma ᝬ tagbanwa letter ya ᝮ tagbanwa letter la ᝯ tagbanwa letter wa ᝰ tagbanwa letter sa ក khmer letter ka ខ khmer letter kha គ khmer letter ko ឃ khmer letter kho ង khmer letter ngo ច khmer letter ca ឆ khmer letter cha ជ khmer letter co ឈ khmer letter cho ញ khmer letter nyo ដ khmer letter da ឋ khmer letter ttha ឌ khmer letter do ឍ khmer letter ttho ណ khmer letter nno ត khmer letter ta ថ khmer letter tha ទ khmer letter to ធ khmer letter tho ន khmer letter no ប khmer letter ba ផ khmer letter pha ព khmer letter po ភ khmer letter pho ម khmer letter mo យ khmer letter yo រ khmer letter ro ល khmer letter lo វ khmer letter vo ឝ khmer letter sha ឞ khmer letter sso ស khmer letter sa ហ khmer letter ha ឡ khmer letter la អ khmer letter qa ឣ khmer independent vowel qaq ឤ khmer independent vowel qaa ឥ khmer independent vowel qi ឦ khmer independent vowel qii ឧ khmer independent vowel qu ឨ khmer independent vowel quk ឩ khmer independent vowel quu ឪ khmer independent vowel quuv ឫ khmer independent vowel ry ឬ khmer independent vowel ryy ឭ khmer independent vowel ly ឮ khmer independent vowel lyy ឯ khmer independent vowel qe ឰ khmer independent vowel qai ឱ khmer independent vowel qoo type one ឲ khmer independent vowel qoo type two ឳ khmer independent vowel qau ។ khmer sign khan ៕ khmer sign bariyoosan ៖ khmer sign camnuc pii kuuh ៗ khmer sign lek too ៘ khmer sign beyyal ៙ khmer sign phnaek muan ៚ khmer sign koomuut ៛ khmer currency symbol riel ៜ khmer sign avakrahasanya ០ khmer digit zero ១ khmer digit one ២ khmer digit two ៣ khmer digit three ៤ khmer digit four ៥ khmer digit five ៦ khmer digit six ៧ khmer digit seven ៨ khmer digit eight ៩ khmer digit nine ៰ khmer symbol lek attak son ៱ khmer symbol lek attak muoy ៲ khmer symbol lek attak pii ៳ khmer symbol lek attak bei ៴ khmer symbol lek attak buon ៵ khmer symbol lek attak pram ៶ khmer symbol lek attak pram-muoy ៷ khmer symbol lek attak pram-pii ៸ khmer symbol lek attak pram-bei ៹ khmer symbol lek attak pram-buon ᠀ mongolian birga ᠁ mongolian ellipsis ᠂ mongolian comma ᠃ mongolian full stop ᠄ mongolian colon ᠅ mongolian four dots ᠆ mongolian todo soft hyphen ᠇ mongolian sibe syllable boundary marker ᠈ mongolian manchu comma ᠉ mongolian manchu full stop ᠊ mongolian nirugu ᠐ mongolian digit zero ᠑ mongolian digit one ᠒ mongolian digit two ᠓ mongolian digit three ᠔ mongolian digit four ᠕ mongolian digit five ᠖ mongolian digit six ᠗ mongolian digit seven ᠘ mongolian digit eight ᠙ mongolian digit nine ᠠ mongolian letter a ᠡ mongolian letter e ᠢ mongolian letter i ᠣ mongolian letter o ᠤ mongolian letter u ᠥ mongolian letter oe ᠦ mongolian letter ue ᠧ mongolian letter ee ᠨ mongolian letter na ᠩ mongolian letter ang ᠪ mongolian letter ba ᠫ mongolian letter pa ᠬ mongolian letter qa ᠭ mongolian letter ga ᠮ mongolian letter ma ᠯ mongolian letter la ᠰ mongolian letter sa ᠱ mongolian letter sha ᠲ mongolian letter ta ᠳ mongolian letter da ᠴ mongolian letter cha ᠵ mongolian letter ja ᠶ mongolian letter ya ᠷ mongolian letter ra ᠸ mongolian letter wa ᠹ mongolian letter fa ᠺ mongolian letter ka ᠻ mongolian letter kha ᠼ mongolian letter tsa ᠽ mongolian letter za ᠾ mongolian letter haa ᠿ mongolian letter zra ᡀ mongolian letter lha ᡁ mongolian letter zhi ᡂ mongolian letter chi ᡃ mongolian letter todo long vowel sign ᡄ mongolian letter todo e ᡅ mongolian letter todo i ᡆ mongolian letter todo o ᡇ mongolian letter todo u ᡈ mongolian letter todo oe ᡉ mongolian letter todo ue ᡊ mongolian letter todo ang ᡋ mongolian letter todo ba ᡌ mongolian letter todo pa ᡍ mongolian letter todo qa ᡎ mongolian letter todo ga ᡏ mongolian letter todo ma ᡐ mongolian letter todo ta ᡑ mongolian letter todo da ᡒ mongolian letter todo cha ᡓ mongolian letter todo ja ᡔ mongolian letter todo tsa ᡕ mongolian letter todo ya ᡖ mongolian letter todo wa ᡗ mongolian letter todo ka ᡘ mongolian letter todo gaa ᡙ mongolian letter todo haa ᡚ mongolian letter todo jia ᡛ mongolian letter todo nia ᡜ mongolian letter todo dza ᡝ mongolian letter sibe e ᡞ mongolian letter sibe i ᡟ mongolian letter sibe iy ᡠ mongolian letter sibe ue ᡡ mongolian letter sibe u ᡢ mongolian letter sibe ang ᡣ mongolian letter sibe ka ᡤ mongolian letter sibe ga ᡥ mongolian letter sibe ha ᡦ mongolian letter sibe pa ᡧ mongolian letter sibe sha ᡨ mongolian letter sibe ta ᡩ mongolian letter sibe da ᡪ mongolian letter sibe ja ᡫ mongolian letter sibe fa ᡬ mongolian letter sibe gaa ᡭ mongolian letter sibe haa ᡮ mongolian letter sibe tsa ᡯ mongolian letter sibe za ᡰ mongolian letter sibe raa ᡱ mongolian letter sibe cha ᡲ mongolian letter sibe zha ᡳ mongolian letter manchu i ᡴ mongolian letter manchu ka ᡵ mongolian letter manchu ra ᡶ mongolian letter manchu fa ᡷ mongolian letter manchu zha ᢀ mongolian letter ali gali anusvara one ᢁ mongolian letter ali gali visarga one ᢂ mongolian letter ali gali damaru ᢃ mongolian letter ali gali ubadama ᢄ mongolian letter ali gali inverted ubadama ᢇ mongolian letter ali gali a ᢈ mongolian letter ali gali i ᢉ mongolian letter ali gali ka ᢊ mongolian letter ali gali nga ᢋ mongolian letter ali gali ca ᢌ mongolian letter ali gali tta ᢍ mongolian letter ali gali ttha ᢎ mongolian letter ali gali dda ᢏ mongolian letter ali gali nna ᢐ mongolian letter ali gali ta ᢑ mongolian letter ali gali da ᢒ mongolian letter ali gali pa ᢓ mongolian letter ali gali pha ᢔ mongolian letter ali gali ssa ᢕ mongolian letter ali gali zha ᢖ mongolian letter ali gali za ᢗ mongolian letter ali gali ah ᢘ mongolian letter todo ali gali ta ᢙ mongolian letter todo ali gali zha ᢚ mongolian letter manchu ali gali gha ᢛ mongolian letter manchu ali gali nga ᢜ mongolian letter manchu ali gali ca ᢝ mongolian letter manchu ali gali jha ᢞ mongolian letter manchu ali gali tta ᢟ mongolian letter manchu ali gali ddha ᢠ mongolian letter manchu ali gali ta ᢡ mongolian letter manchu ali gali dha ᢢ mongolian letter manchu ali gali ssa ᢣ mongolian letter manchu ali gali cya ᢤ mongolian letter manchu ali gali zha ᢥ mongolian letter manchu ali gali za ᢦ mongolian letter ali gali half u ᢧ mongolian letter ali gali half ya ᢨ mongolian letter manchu ali gali bha ᢪ mongolian letter manchu ali gali lha ᢰ canadian syllabics oy ᢱ canadian syllabics ay ᢲ canadian syllabics aay ᢳ canadian syllabics way ᢴ canadian syllabics poy ᢵ canadian syllabics pay ᢶ canadian syllabics pwoy ᢷ canadian syllabics tay ᢸ canadian syllabics kay ᢹ canadian syllabics kway ᢺ canadian syllabics may ᢻ canadian syllabics noy ᢼ canadian syllabics nay ᢽ canadian syllabics lay ᢾ canadian syllabics soy ᢿ canadian syllabics say ᣀ canadian syllabics shoy ᣁ canadian syllabics shay ᣂ canadian syllabics shwoy ᣃ canadian syllabics yoy ᣄ canadian syllabics yay ᣅ canadian syllabics ray ᣆ canadian syllabics nwi ᣇ canadian syllabics ojibway nwi ᣈ canadian syllabics nwii ᣉ canadian syllabics ojibway nwii ᣊ canadian syllabics nwo ᣋ canadian syllabics ojibway nwo ᣌ canadian syllabics nwoo ᣍ canadian syllabics ojibway nwoo ᣎ canadian syllabics rwee ᣏ canadian syllabics rwi ᣐ canadian syllabics rwii ᣑ canadian syllabics rwo ᣒ canadian syllabics rwoo ᣓ canadian syllabics rwa ᣔ canadian syllabics ojibway p ᣕ canadian syllabics ojibway t ᣖ canadian syllabics ojibway k ᣗ canadian syllabics ojibway c ᣘ canadian syllabics ojibway m ᣙ canadian syllabics ojibway n ᣚ canadian syllabics ojibway s ᣛ canadian syllabics ojibway sh ᣜ canadian syllabics eastern w ᣝ canadian syllabics western w ᣞ canadian syllabics final small ring ᣟ canadian syllabics final raised dot ᣠ canadian syllabics r-cree rwe ᣡ canadian syllabics west-cree loo ᣢ canadian syllabics west-cree laa ᣣ canadian syllabics thwe ᣤ canadian syllabics thwa ᣥ canadian syllabics tthwe ᣦ canadian syllabics tthoo ᣧ canadian syllabics tthaa ᣨ canadian syllabics tlhwe ᣩ canadian syllabics tlhoo ᣪ canadian syllabics sayisi shwe ᣫ canadian syllabics sayisi shoo ᣬ canadian syllabics sayisi hoo ᣭ canadian syllabics carrier gwu ᣮ canadian syllabics carrier dene gee ᣯ canadian syllabics carrier gaa ᣰ canadian syllabics carrier gwa ᣱ canadian syllabics sayisi juu ᣲ canadian syllabics carrier jwa ᣳ canadian syllabics beaver dene l ᣴ canadian syllabics beaver dene r ᣵ canadian syllabics carrier dental s ᤀ limbu vowel-carrier letter ᤁ limbu letter ka ᤂ limbu letter kha ᤃ limbu letter ga ᤄ limbu letter gha ᤅ limbu letter nga ᤆ limbu letter ca ᤇ limbu letter cha ᤈ limbu letter ja ᤉ limbu letter jha ᤊ limbu letter yan ᤋ limbu letter ta ᤌ limbu letter tha ᤍ limbu letter da ᤎ limbu letter dha ᤏ limbu letter na ᤐ limbu letter pa ᤑ limbu letter pha ᤒ limbu letter ba ᤓ limbu letter bha ᤔ limbu letter ma ᤕ limbu letter ya ᤖ limbu letter ra ᤗ limbu letter la ᤘ limbu letter wa ᤙ limbu letter sha ᤚ limbu letter ssa ᤛ limbu letter sa ᤜ limbu letter ha ᤝ limbu letter gyan ᤞ limbu letter tra ᥀ limbu sign loo ᥄ limbu exclamation mark ᥅ limbu question mark ᥆ limbu digit zero ᥇ limbu digit one ᥈ limbu digit two ᥉ limbu digit three ᥊ limbu digit four ᥋ limbu digit five ᥌ limbu digit six ᥍ limbu digit seven ᥎ limbu digit eight ᥏ limbu digit nine ᥐ tai le letter ka ᥑ tai le letter xa ᥒ tai le letter nga ᥓ tai le letter tsa ᥔ tai le letter sa ᥕ tai le letter ya ᥖ tai le letter ta ᥗ tai le letter tha ᥘ tai le letter la ᥙ tai le letter pa ᥚ tai le letter pha ᥛ tai le letter ma ᥜ tai le letter fa ᥝ tai le letter va ᥞ tai le letter ha ᥟ tai le letter qa ᥠ tai le letter kha ᥡ tai le letter tsha ᥢ tai le letter na ᥣ tai le letter a ᥤ tai le letter i ᥥ tai le letter ee ᥦ tai le letter eh ᥧ tai le letter u ᥨ tai le letter oo ᥩ tai le letter o ᥪ tai le letter ue ᥫ tai le letter e ᥬ tai le letter aue ᥭ tai le letter ai ᥰ tai le letter tone-2 ᥱ tai le letter tone-3 ᥲ tai le letter tone-4 ᥳ tai le letter tone-5 ᥴ tai le letter tone-6 ᦀ new tai lue letter high qa ᦁ new tai lue letter low qa ᦂ new tai lue letter high ka ᦃ new tai lue letter high xa ᦄ new tai lue letter high nga ᦅ new tai lue letter low ka ᦆ new tai lue letter low xa ᦇ new tai lue letter low nga ᦈ new tai lue letter high tsa ᦉ new tai lue letter high sa ᦊ new tai lue letter high ya ᦋ new tai lue letter low tsa ᦌ new tai lue letter low sa ᦍ new tai lue letter low ya ᦎ new tai lue letter high ta ᦏ new tai lue letter high tha ᦐ new tai lue letter high na ᦑ new tai lue letter low ta ᦒ new tai lue letter low tha ᦓ new tai lue letter low na ᦔ new tai lue letter high pa ᦕ new tai lue letter high pha ᦖ new tai lue letter high ma ᦗ new tai lue letter low pa ᦘ new tai lue letter low pha ᦙ new tai lue letter low ma ᦚ new tai lue letter high fa ᦛ new tai lue letter high va ᦜ new tai lue letter high la ᦝ new tai lue letter low fa ᦞ new tai lue letter low va ᦟ new tai lue letter low la ᦠ new tai lue letter high ha ᦡ new tai lue letter high da ᦢ new tai lue letter high ba ᦣ new tai lue letter low ha ᦤ new tai lue letter low da ᦥ new tai lue letter low ba ᦦ new tai lue letter high kva ᦧ new tai lue letter high xva ᦨ new tai lue letter low kva ᦩ new tai lue letter low xva ᦪ new tai lue letter high sua ᦫ new tai lue letter low sua ᦰ new tai lue vowel sign vowel shortener ᦱ new tai lue vowel sign aa ᦲ new tai lue vowel sign ii ᦳ new tai lue vowel sign u ᦴ new tai lue vowel sign uu ᦵ new tai lue vowel sign e ᦶ new tai lue vowel sign ae ᦷ new tai lue vowel sign o ᦸ new tai lue vowel sign oa ᦹ new tai lue vowel sign ue ᦺ new tai lue vowel sign ay ᦻ new tai lue vowel sign aay ᦼ new tai lue vowel sign uy ᦽ new tai lue vowel sign oy ᦾ new tai lue vowel sign oay ᦿ new tai lue vowel sign uey ᧀ new tai lue vowel sign iy ᧁ new tai lue letter final v ᧂ new tai lue letter final ng ᧃ new tai lue letter final n ᧄ new tai lue letter final m ᧅ new tai lue letter final k ᧆ new tai lue letter final d ᧇ new tai lue letter final b ᧈ new tai lue tone mark-1 ᧉ new tai lue tone mark-2 ᧐ new tai lue digit zero ᧑ new tai lue digit one ᧒ new tai lue digit two ᧓ new tai lue digit three ᧔ new tai lue digit four ᧕ new tai lue digit five ᧖ new tai lue digit six ᧗ new tai lue digit seven ᧘ new tai lue digit eight ᧙ new tai lue digit nine ᧚ new tai lue tham digit one ᧞ new tai lue sign lae ᧟ new tai lue sign laev ᧠ khmer symbol pathamasat ᧡ khmer symbol muoy koet ᧢ khmer symbol pii koet ᧣ khmer symbol bei koet ᧤ khmer symbol buon koet ᧥ khmer symbol pram koet ᧦ khmer symbol pram-muoy koet ᧧ khmer symbol pram-pii koet ᧨ khmer symbol pram-bei koet ᧩ khmer symbol pram-buon koet ᧪ khmer symbol dap koet ᧫ khmer symbol dap-muoy koet ᧬ khmer symbol dap-pii koet ᧭ khmer symbol dap-bei koet ᧮ khmer symbol dap-buon koet ᧯ khmer symbol dap-pram koet ᧰ khmer symbol tuteyasat ᧱ khmer symbol muoy roc ᧲ khmer symbol pii roc ᧳ khmer symbol bei roc ᧴ khmer symbol buon roc ᧵ khmer symbol pram roc ᧶ khmer symbol pram-muoy roc ᧷ khmer symbol pram-pii roc ᧸ khmer symbol pram-bei roc ᧹ khmer symbol pram-buon roc ᧺ khmer symbol dap roc ᧻ khmer symbol dap-muoy roc ᧼ khmer symbol dap-pii roc ᧽ khmer symbol dap-bei roc ᧾ khmer symbol dap-buon roc ᧿ khmer symbol dap-pram roc ᨀ buginese letter ka ᨁ buginese letter ga ᨂ buginese letter nga ᨃ buginese letter ngka ᨄ buginese letter pa ᨅ buginese letter ba ᨆ buginese letter ma ᨇ buginese letter mpa ᨈ buginese letter ta ᨉ buginese letter da ᨊ buginese letter na ᨋ buginese letter nra ᨌ buginese letter ca ᨍ buginese letter ja ᨎ buginese letter nya ᨏ buginese letter nyca ᨐ buginese letter ya ᨑ buginese letter ra ᨒ buginese letter la ᨓ buginese letter va ᨔ buginese letter sa ᨕ buginese letter a ᨖ buginese letter ha ᨞ buginese pallawa ᨟ buginese end of section ᨠ tai tham letter high ka ᨡ tai tham letter high kha ᨢ tai tham letter high kxa ᨣ tai tham letter low ka ᨤ tai tham letter low kxa ᨥ tai tham letter low kha ᨦ tai tham letter nga ᨧ tai tham letter high ca ᨨ tai tham letter high cha ᨩ tai tham letter low ca ᨪ tai tham letter low sa ᨫ tai tham letter low cha ᨬ tai tham letter nya ᨭ tai tham letter rata ᨮ tai tham letter high ratha ᨯ tai tham letter da ᨰ tai tham letter low ratha ᨱ tai tham letter rana ᨲ tai tham letter high ta ᨳ tai tham letter high tha ᨴ tai tham letter low ta ᨵ tai tham letter low tha ᨶ tai tham letter na ᨷ tai tham letter ba ᨸ tai tham letter high pa ᨹ tai tham letter high pha ᨺ tai tham letter high fa ᨻ tai tham letter low pa ᨼ tai tham letter low fa ᨽ tai tham letter low pha ᨾ tai tham letter ma ᨿ tai tham letter low ya ᩀ tai tham letter high ya ᩁ tai tham letter ra ᩂ tai tham letter rue ᩃ tai tham letter la ᩄ tai tham letter lue ᩅ tai tham letter wa ᩆ tai tham letter high sha ᩇ tai tham letter high ssa ᩈ tai tham letter high sa ᩉ tai tham letter high ha ᩊ tai tham letter lla ᩋ tai tham letter a ᩌ tai tham letter low ha ᩍ tai tham letter i ᩎ tai tham letter ii ᩏ tai tham letter u ᩐ tai tham letter uu ᩑ tai tham letter ee ᩒ tai tham letter oo ᩓ tai tham letter lae ᩔ tai tham letter great sa ᪀ tai tham hora digit zero ᪁ tai tham hora digit one ᪂ tai tham hora digit two ᪃ tai tham hora digit three ᪄ tai tham hora digit four ᪅ tai tham hora digit five ᪆ tai tham hora digit six ᪇ tai tham hora digit seven ᪈ tai tham hora digit eight ᪉ tai tham hora digit nine ᪐ tai tham tham digit zero ᪑ tai tham tham digit one ᪒ tai tham tham digit two ᪓ tai tham tham digit three ᪔ tai tham tham digit four ᪕ tai tham tham digit five ᪖ tai tham tham digit six ᪗ tai tham tham digit seven ᪘ tai tham tham digit eight ᪙ tai tham tham digit nine ᪠ tai tham sign wiang ᪡ tai tham sign wiangwaak ᪢ tai tham sign sawan ᪣ tai tham sign keow ᪤ tai tham sign hoy ᪥ tai tham sign dokmai ᪦ tai tham sign reversed rotated rana ᪧ tai tham sign mai yamok ᪨ tai tham sign kaan ᪩ tai tham sign kaankuu ᪪ tai tham sign satkaan ᪫ tai tham sign satkaankuu ᪬ tai tham sign hang ᪭ tai tham sign caang ᬅ balinese letter akara ᬆ balinese letter akara tedung ᬇ balinese letter ikara ᬈ balinese letter ikara tedung ᬉ balinese letter ukara ᬊ balinese letter ukara tedung ᬋ balinese letter ra repa ᬌ balinese letter ra repa tedung ᬍ balinese letter la lenga ᬎ balinese letter la lenga tedung ᬏ balinese letter ekara ᬐ balinese letter aikara ᬑ balinese letter okara ᬒ balinese letter okara tedung ᬓ balinese letter ka ᬔ balinese letter ka mahaprana ᬕ balinese letter ga ᬖ balinese letter ga gora ᬗ balinese letter nga ᬘ balinese letter ca ᬙ balinese letter ca laca ᬚ balinese letter ja ᬛ balinese letter ja jera ᬜ balinese letter nya ᬝ balinese letter ta latik ᬞ balinese letter ta murda mahaprana ᬟ balinese letter da murda alpaprana ᬠ balinese letter da murda mahaprana ᬡ balinese letter na rambat ᬢ balinese letter ta ᬣ balinese letter ta tawa ᬤ balinese letter da ᬥ balinese letter da madu ᬦ balinese letter na ᬧ balinese letter pa ᬨ balinese letter pa kapal ᬩ balinese letter ba ᬪ balinese letter ba kembang ᬫ balinese letter ma ᬬ balinese letter ya ᬭ balinese letter ra ᬮ balinese letter la ᬯ balinese letter wa ᬰ balinese letter sa saga ᬱ balinese letter sa sapa ᬲ balinese letter sa ᬳ balinese letter ha ᭅ balinese letter kaf sasak ᭆ balinese letter khot sasak ᭇ balinese letter tzir sasak ᭈ balinese letter ef sasak ᭉ balinese letter ve sasak ᭊ balinese letter zal sasak ᭋ balinese letter asyura sasak ᭐ balinese digit zero ᭑ balinese digit one ᭒ balinese digit two ᭓ balinese digit three ᭔ balinese digit four ᭕ balinese digit five ᭖ balinese digit six ᭗ balinese digit seven ᭘ balinese digit eight ᭙ balinese digit nine ᭚ balinese panti ᭛ balinese pamada ᭜ balinese windu ᭝ balinese carik pamungkah ᭞ balinese carik siki ᭟ balinese carik pareren ᭠ balinese pameneng ᭡ balinese musical symbol dong ᭢ balinese musical symbol deng ᭣ balinese musical symbol dung ᭤ balinese musical symbol dang ᭥ balinese musical symbol dang surang ᭦ balinese musical symbol ding ᭧ balinese musical symbol daeng ᭨ balinese musical symbol deung ᭩ balinese musical symbol daing ᭪ balinese musical symbol dang gede ᭴ balinese musical symbol right-hand open dug ᭵ balinese musical symbol right-hand open dag ᭶ balinese musical symbol right-hand closed tuk ᭷ balinese musical symbol right-hand closed tak ᭸ balinese musical symbol left-hand open pang ᭹ balinese musical symbol left-hand open pung ᭺ balinese musical symbol left-hand closed plak ᭻ balinese musical symbol left-hand closed pluk ᭼ balinese musical symbol left-hand open ping ᮃ sundanese letter a ᮄ sundanese letter i ᮅ sundanese letter u ᮆ sundanese letter ae ᮇ sundanese letter o ᮈ sundanese letter e ᮉ sundanese letter eu ᮊ sundanese letter ka ᮋ sundanese letter qa ᮌ sundanese letter ga ᮍ sundanese letter nga ᮎ sundanese letter ca ᮏ sundanese letter ja ᮐ sundanese letter za ᮑ sundanese letter nya ᮒ sundanese letter ta ᮓ sundanese letter da ᮔ sundanese letter na ᮕ sundanese letter pa ᮖ sundanese letter fa ᮗ sundanese letter va ᮘ sundanese letter ba ᮙ sundanese letter ma ᮚ sundanese letter ya ᮛ sundanese letter ra ᮜ sundanese letter la ᮝ sundanese letter wa ᮞ sundanese letter sa ᮟ sundanese letter xa ᮠ sundanese letter ha ᮮ sundanese letter kha ᮯ sundanese letter sya ᮰ sundanese digit zero ᮱ sundanese digit one ᮲ sundanese digit two ᮳ sundanese digit three ᮴ sundanese digit four ᮵ sundanese digit five ᮶ sundanese digit six ᮷ sundanese digit seven ᮸ sundanese digit eight ᮹ sundanese digit nine ᮺ sundanese avagraha ᮻ sundanese letter reu ᮼ sundanese letter leu ᮽ sundanese letter bha ᮾ sundanese letter final k ᮿ sundanese letter final m ᯀ batak letter a ᯁ batak letter simalungun a ᯂ batak letter ha ᯃ batak letter simalungun ha ᯄ batak letter mandailing ha ᯅ batak letter ba ᯆ batak letter karo ba ᯇ batak letter pa ᯈ batak letter simalungun pa ᯉ batak letter na ᯊ batak letter mandailing na ᯋ batak letter wa ᯌ batak letter simalungun wa ᯍ batak letter pakpak wa ᯎ batak letter ga ᯏ batak letter simalungun ga ᯐ batak letter ja ᯑ batak letter da ᯒ batak letter ra ᯓ batak letter simalungun ra ᯔ batak letter ma ᯕ batak letter simalungun ma ᯖ batak letter southern ta ᯗ batak letter northern ta ᯘ batak letter sa ᯙ batak letter simalungun sa ᯚ batak letter mandailing sa ᯛ batak letter ya ᯜ batak letter simalungun ya ᯝ batak letter nga ᯞ batak letter la ᯟ batak letter simalungun la ᯠ batak letter nya ᯡ batak letter ca ᯢ batak letter nda ᯣ batak letter mba ᯤ batak letter i ᯥ batak letter u ᯼ batak symbol bindu na metek ᯽ batak symbol bindu pinarboras ᯾ batak symbol bindu judul ᯿ batak symbol bindu pangolat ᰀ lepcha letter ka ᰁ lepcha letter kla ᰂ lepcha letter kha ᰃ lepcha letter ga ᰄ lepcha letter gla ᰅ lepcha letter nga ᰆ lepcha letter ca ᰇ lepcha letter cha ᰈ lepcha letter ja ᰉ lepcha letter nya ᰊ lepcha letter ta ᰋ lepcha letter tha ᰌ lepcha letter da ᰍ lepcha letter na ᰎ lepcha letter pa ᰏ lepcha letter pla ᰐ lepcha letter pha ᰑ lepcha letter fa ᰒ lepcha letter fla ᰓ lepcha letter ba ᰔ lepcha letter bla ᰕ lepcha letter ma ᰖ lepcha letter mla ᰗ lepcha letter tsa ᰘ lepcha letter tsha ᰙ lepcha letter dza ᰚ lepcha letter ya ᰛ lepcha letter ra ᰜ lepcha letter la ᰝ lepcha letter ha ᰞ lepcha letter hla ᰟ lepcha letter va ᰠ lepcha letter sa ᰡ lepcha letter sha ᰢ lepcha letter wa ᰣ lepcha letter a ᰻ lepcha punctuation ta-rol ᰼ lepcha punctuation nyet thyoom ta-rol ᰽ lepcha punctuation cer-wa ᰾ lepcha punctuation tshook cer-wa ᰿ lepcha punctuation tshook ᱀ lepcha digit zero ᱁ lepcha digit one ᱂ lepcha digit two ᱃ lepcha digit three ᱄ lepcha digit four ᱅ lepcha digit five ᱆ lepcha digit six ᱇ lepcha digit seven ᱈ lepcha digit eight ᱉ lepcha digit nine ᱍ lepcha letter tta ᱎ lepcha letter ttha ᱏ lepcha letter dda ᱐ ol chiki digit zero ᱑ ol chiki digit one ᱒ ol chiki digit two ᱓ ol chiki digit three ᱔ ol chiki digit four ᱕ ol chiki digit five ᱖ ol chiki digit six ᱗ ol chiki digit seven ᱘ ol chiki digit eight ᱙ ol chiki digit nine ᱚ ol chiki letter la ᱛ ol chiki letter at ᱜ ol chiki letter ag ᱝ ol chiki letter ang ᱞ ol chiki letter al ᱟ ol chiki letter laa ᱠ ol chiki letter aak ᱡ ol chiki letter aaj ᱢ ol chiki letter aam ᱣ ol chiki letter aaw ᱤ ol chiki letter li ᱥ ol chiki letter is ᱦ ol chiki letter ih ᱧ ol chiki letter iny ᱨ ol chiki letter ir ᱩ ol chiki letter lu ᱪ ol chiki letter uc ᱫ ol chiki letter ud ᱬ ol chiki letter unn ᱭ ol chiki letter uy ᱮ ol chiki letter le ᱯ ol chiki letter ep ᱰ ol chiki letter edd ᱱ ol chiki letter en ᱲ ol chiki letter err ᱳ ol chiki letter lo ᱴ ol chiki letter ott ᱵ ol chiki letter ob ᱶ ol chiki letter ov ᱷ ol chiki letter oh ᱸ ol chiki mu ttuddag ᱹ ol chiki gaahlaa ttuddaag ᱺ ol chiki mu-gaahlaa ttuddaag ᱻ ol chiki relaa ᱼ ol chiki phaarkaa ᱽ ol chiki ahad ᱾ ol chiki punctuation mucaad ᱿ ol chiki punctuation double mucaad ᲀ cyrillic small letter rounded ve ᲁ cyrillic small letter long-legged de ᲂ cyrillic small letter narrow o ᲃ cyrillic small letter wide es ᲄ cyrillic small letter tall te ᲅ cyrillic small letter three-legged te ᲆ cyrillic small letter tall hard sign ᲇ cyrillic small letter tall yat ᲈ cyrillic small letter unblended uk ᳀ sundanese punctuation bindu surya ᳁ sundanese punctuation bindu panglong ᳂ sundanese punctuation bindu purnama ᳃ sundanese punctuation bindu cakra ᳄ sundanese punctuation bindu leu satanga ᳅ sundanese punctuation bindu ka satanga ᳆ sundanese punctuation bindu da satanga ᳇ sundanese punctuation bindu ba satanga ᳓ vedic sign nihshvasa ᳩ vedic sign anusvara antargomukha ᳪ vedic sign anusvara bahirgomukha ᳫ vedic sign anusvara vamagomukha ᳬ vedic sign anusvara vamagomukha with tail ᳮ vedic sign hexiform long anusvara ᳯ vedic sign long anusvara ᳰ vedic sign rthang long anusvara ᳱ vedic sign anusvara ubhayato mukha ᳵ vedic sign jihvamuliya ᳶ vedic sign upadhmaniya ᴀ latin letter small capital a ᴁ latin letter small capital ae ᴂ latin small letter turned ae ᴃ latin letter small capital barred b ᴄ latin letter small capital c ᴅ latin letter small capital d ᴆ latin letter small capital eth ᴇ latin letter small capital e ᴈ latin small letter turned open e ᴉ latin small letter turned i ᴊ latin letter small capital j ᴋ latin letter small capital k ᴌ latin letter small capital l with stroke ᴍ latin letter small capital m ᴎ latin letter small capital reversed n ᴏ latin letter small capital o ᴐ latin letter small capital open o ᴑ latin small letter sideways o ᴒ latin small letter sideways open o ᴓ latin small letter sideways o with stroke ᴔ latin small letter turned oe ᴕ latin letter small capital ou ᴖ latin small letter top half o ᴗ latin small letter bottom half o ᴘ latin letter small capital p ᴙ latin letter small capital reversed r ᴚ latin letter small capital turned r ᴛ latin letter small capital t ᴜ latin letter small capital u ᴝ latin small letter sideways u ᴞ latin small letter sideways diaeresized u ᴟ latin small letter sideways turned m ᴠ latin letter small capital v ᴡ latin letter small capital w ᴢ latin letter small capital z ᴣ latin letter small capital ezh ᴤ latin letter voiced laryngeal spirant ᴥ latin letter ain ᴦ greek letter small capital gamma ᴧ greek letter small capital lambda ᴨ greek letter small capital pi ᴩ greek letter small capital rho ᴪ greek letter small capital psi ᴫ cyrillic letter small capital el ᴬ modifier letter capital a ᴭ modifier letter capital ae ᴮ modifier letter capital b ᴯ modifier letter capital barred b ᴰ modifier letter capital d ᴱ modifier letter capital e ᴲ modifier letter capital reversed e ᴳ modifier letter capital g ᴴ modifier letter capital h ᴵ modifier letter capital i ᴶ modifier letter capital j ᴷ modifier letter capital k ᴸ modifier letter capital l ᴹ modifier letter capital m ᴺ modifier letter capital n ᴻ modifier letter capital reversed n ᴼ modifier letter capital o ᴽ modifier letter capital ou ᴾ modifier letter capital p ᴿ modifier letter capital r ᵀ modifier letter capital t ᵁ modifier letter capital u ᵂ modifier letter capital w ᵃ modifier letter small a ᵄ modifier letter small turned a ᵅ modifier letter small alpha ᵆ modifier letter small turned ae ᵇ modifier letter small b ᵈ modifier letter small d ᵉ modifier letter small e ᵊ modifier letter small schwa ᵋ modifier letter small open e ᵌ modifier letter small turned open e ᵍ modifier letter small g ᵎ modifier letter small turned i ᵏ modifier letter small k ᵐ modifier letter small m ᵑ modifier letter small eng ᵒ modifier letter small o ᵓ modifier letter small open o ᵔ modifier letter small top half o ᵕ modifier letter small bottom half o ᵖ modifier letter small p ᵗ modifier letter small t ᵘ modifier letter small u ᵙ modifier letter small sideways u ᵚ modifier letter small turned m ᵛ modifier letter small v ᵜ modifier letter small ain ᵝ modifier letter small beta ᵞ modifier letter small greek gamma ᵟ modifier letter small delta ᵠ modifier letter small greek phi ᵡ modifier letter small chi ᵢ latin subscript small letter i ᵣ latin subscript small letter r ᵤ latin subscript small letter u ᵥ latin subscript small letter v ᵦ greek subscript small letter beta ᵧ greek subscript small letter gamma ᵨ greek subscript small letter rho ᵩ greek subscript small letter phi ᵪ greek subscript small letter chi ᵫ latin small letter ue ᵬ latin small letter b with middle tilde ᵭ latin small letter d with middle tilde ᵮ latin small letter f with middle tilde ᵯ latin small letter m with middle tilde ᵰ latin small letter n with middle tilde ᵱ latin small letter p with middle tilde ᵲ latin small letter r with middle tilde ᵳ latin small letter r with fishhook and middle tilde ᵴ latin small letter s with middle tilde ᵵ latin small letter t with middle tilde ᵶ latin small letter z with middle tilde ᵷ latin small letter turned g ᵸ modifier letter cyrillic en ᵹ latin small letter insular g ᵺ latin small letter th with strikethrough ᵻ latin small capital letter i with stroke ᵼ latin small letter iota with stroke ᵽ latin small letter p with stroke ᵾ latin small capital letter u with stroke ᵿ latin small letter upsilon with stroke ᶀ latin small letter b with palatal hook ᶁ latin small letter d with palatal hook ᶂ latin small letter f with palatal hook ᶃ latin small letter g with palatal hook ᶄ latin small letter k with palatal hook ᶅ latin small letter l with palatal hook ᶆ latin small letter m with palatal hook ᶇ latin small letter n with palatal hook ᶈ latin small letter p with palatal hook ᶉ latin small letter r with palatal hook ᶊ latin small letter s with palatal hook ᶋ latin small letter esh with palatal hook ᶌ latin small letter v with palatal hook ᶍ latin small letter x with palatal hook ᶎ latin small letter z with palatal hook ᶏ latin small letter a with retroflex hook ᶐ latin small letter alpha with retroflex hook ᶑ latin small letter d with hook and tail ᶒ latin small letter e with retroflex hook ᶓ latin small letter open e with retroflex hook ᶔ latin small letter reversed open e with retroflex hook ᶕ latin small letter schwa with retroflex hook ᶖ latin small letter i with retroflex hook ᶗ latin small letter open o with retroflex hook ᶘ latin small letter esh with retroflex hook ᶙ latin small letter u with retroflex hook ᶚ latin small letter ezh with retroflex hook ᶛ modifier letter small turned alpha ᶜ modifier letter small c ᶝ modifier letter small c with curl ᶞ modifier letter small eth ᶟ modifier letter small reversed open e ᶠ modifier letter small f ᶡ modifier letter small dotless j with stroke ᶢ modifier letter small script g ᶣ modifier letter small turned h ᶤ modifier letter small i with stroke ᶥ modifier letter small iota ᶦ modifier letter small capital i ᶧ modifier letter small capital i with stroke ᶨ modifier letter small j with crossed-tail ᶩ modifier letter small l with retroflex hook ᶪ modifier letter small l with palatal hook ᶫ modifier letter small capital l ᶬ modifier letter small m with hook ᶭ modifier letter small turned m with long leg ᶮ modifier letter small n with left hook ᶯ modifier letter small n with retroflex hook ᶰ modifier letter small capital n ᶱ modifier letter small barred o ᶲ modifier letter small phi ᶳ modifier letter small s with hook ᶴ modifier letter small esh ᶵ modifier letter small t with palatal hook ᶶ modifier letter small u bar ᶷ modifier letter small upsilon ᶸ modifier letter small capital u ᶹ modifier letter small v with hook ᶺ modifier letter small turned v ᶻ modifier letter small z ᶼ modifier letter small z with retroflex hook ᶽ modifier letter small z with curl ᶾ modifier letter small ezh ᶿ modifier letter small theta Ḁ latin capital letter a with ring below ḁ latin small letter a with ring below Ḃ latin capital letter b with dot above ḃ latin small letter b with dot above Ḅ latin capital letter b with dot below ḅ latin small letter b with dot below Ḇ latin capital letter b with line below ḇ latin small letter b with line below Ḉ latin capital letter c with cedilla and acute ḉ latin small letter c with cedilla and acute Ḋ latin capital letter d with dot above ḋ latin small letter d with dot above Ḍ latin capital letter d with dot below ḍ latin small letter d with dot below Ḏ latin capital letter d with line below ḏ latin small letter d with line below Ḑ latin capital letter d with cedilla ḑ latin small letter d with cedilla Ḓ latin capital letter d with circumflex below ḓ latin small letter d with circumflex below Ḕ latin capital letter e with macron and grave ḕ latin small letter e with macron and grave Ḗ latin capital letter e with macron and acute ḗ latin small letter e with macron and acute Ḙ latin capital letter e with circumflex below ḙ latin small letter e with circumflex below Ḛ latin capital letter e with tilde below ḛ latin small letter e with tilde below Ḝ latin capital letter e with cedilla and breve ḝ latin small letter e with cedilla and breve Ḟ latin capital letter f with dot above ḟ latin small letter f with dot above Ḡ latin capital letter g with macron ḡ latin small letter g with macron Ḣ latin capital letter h with dot above ḣ latin small letter h with dot above Ḥ latin capital letter h with dot below ḥ latin small letter h with dot below Ḧ latin capital letter h with diaeresis ḧ latin small letter h with diaeresis Ḩ latin capital letter h with cedilla ḩ latin small letter h with cedilla Ḫ latin capital letter h with breve below ḫ latin small letter h with breve below Ḭ latin capital letter i with tilde below ḭ latin small letter i with tilde below Ḯ latin capital letter i with diaeresis and acute ḯ latin small letter i with diaeresis and acute Ḱ latin capital letter k with acute ḱ latin small letter k with acute Ḳ latin capital letter k with dot below ḳ latin small letter k with dot below Ḵ latin capital letter k with line below ḵ latin small letter k with line below Ḷ latin capital letter l with dot below ḷ latin small letter l with dot below Ḹ latin capital letter l with dot below and macron ḹ latin small letter l with dot below and macron Ḻ latin capital letter l with line below ḻ latin small letter l with line below Ḽ latin capital letter l with circumflex below ḽ latin small letter l with circumflex below Ḿ latin capital letter m with acute ḿ latin small letter m with acute Ṁ latin capital letter m with dot above ṁ latin small letter m with dot above Ṃ latin capital letter m with dot below ṃ latin small letter m with dot below Ṅ latin capital letter n with dot above ṅ latin small letter n with dot above Ṇ latin capital letter n with dot below ṇ latin small letter n with dot below Ṉ latin capital letter n with line below ṉ latin small letter n with line below Ṋ latin capital letter n with circumflex below ṋ latin small letter n with circumflex below Ṍ latin capital letter o with tilde and acute ṍ latin small letter o with tilde and acute Ṏ latin capital letter o with tilde and diaeresis ṏ latin small letter o with tilde and diaeresis Ṑ latin capital letter o with macron and grave ṑ latin small letter o with macron and grave Ṓ latin capital letter o with macron and acute ṓ latin small letter o with macron and acute Ṕ latin capital letter p with acute ṕ latin small letter p with acute Ṗ latin capital letter p with dot above ṗ latin small letter p with dot above Ṙ latin capital letter r with dot above ṙ latin small letter r with dot above Ṛ latin capital letter r with dot below ṛ latin small letter r with dot below Ṝ latin capital letter r with dot below and macron ṝ latin small letter r with dot below and macron Ṟ latin capital letter r with line below ṟ latin small letter r with line below Ṡ latin capital letter s with dot above ṡ latin small letter s with dot above Ṣ latin capital letter s with dot below ṣ latin small letter s with dot below Ṥ latin capital letter s with acute and dot above ṥ latin small letter s with acute and dot above Ṧ latin capital letter s with caron and dot above ṧ latin small letter s with caron and dot above Ṩ latin capital letter s with dot below and dot above ṩ latin small letter s with dot below and dot above Ṫ latin capital letter t with dot above ṫ latin small letter t with dot above Ṭ latin capital letter t with dot below ṭ latin small letter t with dot below Ṯ latin capital letter t with line below ṯ latin small letter t with line below Ṱ latin capital letter t with circumflex below ṱ latin small letter t with circumflex below Ṳ latin capital letter u with diaeresis below ṳ latin small letter u with diaeresis below Ṵ latin capital letter u with tilde below ṵ latin small letter u with tilde below Ṷ latin capital letter u with circumflex below ṷ latin small letter u with circumflex below Ṹ latin capital letter u with tilde and acute ṹ latin small letter u with tilde and acute Ṻ latin capital letter u with macron and diaeresis ṻ latin small letter u with macron and diaeresis Ṽ latin capital letter v with tilde ṽ latin small letter v with tilde Ṿ latin capital letter v with dot below ṿ latin small letter v with dot below Ẁ latin capital letter w with grave ẁ latin small letter w with grave Ẃ latin capital letter w with acute ẃ latin small letter w with acute Ẅ latin capital letter w with diaeresis ẅ latin small letter w with diaeresis Ẇ latin capital letter w with dot above ẇ latin small letter w with dot above Ẉ latin capital letter w with dot below ẉ latin small letter w with dot below Ẋ latin capital letter x with dot above ẋ latin small letter x with dot above Ẍ latin capital letter x with diaeresis ẍ latin small letter x with diaeresis Ẏ latin capital letter y with dot above ẏ latin small letter y with dot above Ẑ latin capital letter z with circumflex ẑ latin small letter z with circumflex Ẓ latin capital letter z with dot below ẓ latin small letter z with dot below Ẕ latin capital letter z with line below ẕ latin small letter z with line below ẖ latin small letter h with line below ẗ latin small letter t with diaeresis ẘ latin small letter w with ring above ẙ latin small letter y with ring above ẚ latin small letter a with right half ring ẛ latin small letter long s with dot above ẜ latin small letter long s with diagonal stroke ẝ latin small letter long s with high stroke ẞ latin capital letter sharp s ẟ latin small letter delta Ạ latin capital letter a with dot below ạ latin small letter a with dot below Ả latin capital letter a with hook above ả latin small letter a with hook above Ấ latin capital letter a with circumflex and acute ấ latin small letter a with circumflex and acute Ầ latin capital letter a with circumflex and grave ầ latin small letter a with circumflex and grave Ẩ latin capital letter a with circumflex and hook above ẩ latin small letter a with circumflex and hook above Ẫ latin capital letter a with circumflex and tilde ẫ latin small letter a with circumflex and tilde Ậ latin capital letter a with circumflex and dot below ậ latin small letter a with circumflex and dot below Ắ latin capital letter a with breve and acute ắ latin small letter a with breve and acute Ằ latin capital letter a with breve and grave ằ latin small letter a with breve and grave Ẳ latin capital letter a with breve and hook above ẳ latin small letter a with breve and hook above Ẵ latin capital letter a with breve and tilde ẵ latin small letter a with breve and tilde Ặ latin capital letter a with breve and dot below ặ latin small letter a with breve and dot below Ẹ latin capital letter e with dot below ẹ latin small letter e with dot below Ẻ latin capital letter e with hook above ẻ latin small letter e with hook above Ẽ latin capital letter e with tilde ẽ latin small letter e with tilde Ế latin capital letter e with circumflex and acute ế latin small letter e with circumflex and acute Ề latin capital letter e with circumflex and grave ề latin small letter e with circumflex and grave Ể latin capital letter e with circumflex and hook above ể latin small letter e with circumflex and hook above Ễ latin capital letter e with circumflex and tilde ễ latin small letter e with circumflex and tilde Ệ latin capital letter e with circumflex and dot below ệ latin small letter e with circumflex and dot below Ỉ latin capital letter i with hook above ỉ latin small letter i with hook above Ị latin capital letter i with dot below ị latin small letter i with dot below Ọ latin capital letter o with dot below ọ latin small letter o with dot below Ỏ latin capital letter o with hook above ỏ latin small letter o with hook above Ố latin capital letter o with circumflex and acute ố latin small letter o with circumflex and acute Ồ latin capital letter o with circumflex and grave ồ latin small letter o with circumflex and grave Ổ latin capital letter o with circumflex and hook above ổ latin small letter o with circumflex and hook above Ỗ latin capital letter o with circumflex and tilde ỗ latin small letter o with circumflex and tilde Ộ latin capital letter o with circumflex and dot below ộ latin small letter o with circumflex and dot below Ớ latin capital letter o with horn and acute ớ latin small letter o with horn and acute Ờ latin capital letter o with horn and grave ờ latin small letter o with horn and grave Ở latin capital letter o with horn and hook above ở latin small letter o with horn and hook above Ỡ latin capital letter o with horn and tilde ỡ latin small letter o with horn and tilde Ợ latin capital letter o with horn and dot below ợ latin small letter o with horn and dot below Ụ latin capital letter u with dot below ụ latin small letter u with dot below Ủ latin capital letter u with hook above ủ latin small letter u with hook above Ứ latin capital letter u with horn and acute ứ latin small letter u with horn and acute Ừ latin capital letter u with horn and grave ừ latin small letter u with horn and grave Ử latin capital letter u with horn and hook above ử latin small letter u with horn and hook above Ữ latin capital letter u with horn and tilde ữ latin small letter u with horn and tilde Ự latin capital letter u with horn and dot below ự latin small letter u with horn and dot below Ỳ latin capital letter y with grave ỳ latin small letter y with grave Ỵ latin capital letter y with dot below ỵ latin small letter y with dot below Ỷ latin capital letter y with hook above ỷ latin small letter y with hook above Ỹ latin capital letter y with tilde ỹ latin small letter y with tilde Ỻ latin capital letter middle-welsh ll ỻ latin small letter middle-welsh ll Ỽ latin capital letter middle-welsh v ỽ latin small letter middle-welsh v Ỿ latin capital letter y with loop ỿ latin small letter y with loop ἀ greek small letter alpha with psili ἁ greek small letter alpha with dasia ἂ greek small letter alpha with psili and varia ἃ greek small letter alpha with dasia and varia ἄ greek small letter alpha with psili and oxia ἅ greek small letter alpha with dasia and oxia ἆ greek small letter alpha with psili and perispomeni ἇ greek small letter alpha with dasia and perispomeni Ἀ greek capital letter alpha with psili Ἁ greek capital letter alpha with dasia Ἂ greek capital letter alpha with psili and varia Ἃ greek capital letter alpha with dasia and varia Ἄ greek capital letter alpha with psili and oxia Ἅ greek capital letter alpha with dasia and oxia Ἆ greek capital letter alpha with psili and perispomeni Ἇ greek capital letter alpha with dasia and perispomeni ἐ greek small letter epsilon with psili ἑ greek small letter epsilon with dasia ἒ greek small letter epsilon with psili and varia ἓ greek small letter epsilon with dasia and varia ἔ greek small letter epsilon with psili and oxia ἕ greek small letter epsilon with dasia and oxia Ἐ greek capital letter epsilon with psili Ἑ greek capital letter epsilon with dasia Ἒ greek capital letter epsilon with psili and varia Ἓ greek capital letter epsilon with dasia and varia Ἔ greek capital letter epsilon with psili and oxia Ἕ greek capital letter epsilon with dasia and oxia ἠ greek small letter eta with psili ἡ greek small letter eta with dasia ἢ greek small letter eta with psili and varia ἣ greek small letter eta with dasia and varia ἤ greek small letter eta with psili and oxia ἥ greek small letter eta with dasia and oxia ἦ greek small letter eta with psili and perispomeni ἧ greek small letter eta with dasia and perispomeni Ἠ greek capital letter eta with psili Ἡ greek capital letter eta with dasia Ἢ greek capital letter eta with psili and varia Ἣ greek capital letter eta with dasia and varia Ἤ greek capital letter eta with psili and oxia Ἥ greek capital letter eta with dasia and oxia Ἦ greek capital letter eta with psili and perispomeni Ἧ greek capital letter eta with dasia and perispomeni ἰ greek small letter iota with psili ἱ greek small letter iota with dasia ἲ greek small letter iota with psili and varia ἳ greek small letter iota with dasia and varia ἴ greek small letter iota with psili and oxia ἵ greek small letter iota with dasia and oxia ἶ greek small letter iota with psili and perispomeni ἷ greek small letter iota with dasia and perispomeni Ἰ greek capital letter iota with psili Ἱ greek capital letter iota with dasia Ἲ greek capital letter iota with psili and varia Ἳ greek capital letter iota with dasia and varia Ἴ greek capital letter iota with psili and oxia Ἵ greek capital letter iota with dasia and oxia Ἶ greek capital letter iota with psili and perispomeni Ἷ greek capital letter iota with dasia and perispomeni ὀ greek small letter omicron with psili ὁ greek small letter omicron with dasia ὂ greek small letter omicron with psili and varia ὃ greek small letter omicron with dasia and varia ὄ greek small letter omicron with psili and oxia ὅ greek small letter omicron with dasia and oxia Ὀ greek capital letter omicron with psili Ὁ greek capital letter omicron with dasia Ὂ greek capital letter omicron with psili and varia Ὃ greek capital letter omicron with dasia and varia Ὄ greek capital letter omicron with psili and oxia Ὅ greek capital letter omicron with dasia and oxia ὐ greek small letter upsilon with psili ὑ greek small letter upsilon with dasia ὒ greek small letter upsilon with psili and varia ὓ greek small letter upsilon with dasia and varia ὔ greek small letter upsilon with psili and oxia ὕ greek small letter upsilon with dasia and oxia ὖ greek small letter upsilon with psili and perispomeni ὗ greek small letter upsilon with dasia and perispomeni Ὑ greek capital letter upsilon with dasia Ὓ greek capital letter upsilon with dasia and varia Ὕ greek capital letter upsilon with dasia and oxia Ὗ greek capital letter upsilon with dasia and perispomeni ὠ greek small letter omega with psili ὡ greek small letter omega with dasia ὢ greek small letter omega with psili and varia ὣ greek small letter omega with dasia and varia ὤ greek small letter omega with psili and oxia ὥ greek small letter omega with dasia and oxia ὦ greek small letter omega with psili and perispomeni ὧ greek small letter omega with dasia and perispomeni Ὠ greek capital letter omega with psili Ὡ greek capital letter omega with dasia Ὢ greek capital letter omega with psili and varia Ὣ greek capital letter omega with dasia and varia Ὤ greek capital letter omega with psili and oxia Ὥ greek capital letter omega with dasia and oxia Ὦ greek capital letter omega with psili and perispomeni Ὧ greek capital letter omega with dasia and perispomeni ὰ greek small letter alpha with varia ά greek small letter alpha with oxia ὲ greek small letter epsilon with varia έ greek small letter epsilon with oxia ὴ greek small letter eta with varia ή greek small letter eta with oxia ὶ greek small letter iota with varia ί greek small letter iota with oxia ὸ greek small letter omicron with varia ό greek small letter omicron with oxia ὺ greek small letter upsilon with varia ύ greek small letter upsilon with oxia ὼ greek small letter omega with varia ώ greek small letter omega with oxia ᾀ greek small letter alpha with psili and ypogegrammeni ᾁ greek small letter alpha with dasia and ypogegrammeni ᾂ greek small letter alpha with psili and varia and ypogegrammeni ᾃ greek small letter alpha with dasia and varia and ypogegrammeni ᾄ greek small letter alpha with psili and oxia and ypogegrammeni ᾅ greek small letter alpha with dasia and oxia and ypogegrammeni ᾆ greek small letter alpha with psili and perispomeni and ypogegrammeni ᾇ greek small letter alpha with dasia and perispomeni and ypogegrammeni ᾈ greek capital letter alpha with psili and prosgegrammeni ᾉ greek capital letter alpha with dasia and prosgegrammeni ᾊ greek capital letter alpha with psili and varia and prosgegrammeni ᾋ greek capital letter alpha with dasia and varia and prosgegrammeni ᾌ greek capital letter alpha with psili and oxia and prosgegrammeni ᾍ greek capital letter alpha with dasia and oxia and prosgegrammeni ᾎ greek capital letter alpha with psili and perispomeni and prosgegrammeni ᾏ greek capital letter alpha with dasia and perispomeni and prosgegrammeni ᾐ greek small letter eta with psili and ypogegrammeni ᾑ greek small letter eta with dasia and ypogegrammeni ᾒ greek small letter eta with psili and varia and ypogegrammeni ᾓ greek small letter eta with dasia and varia and ypogegrammeni ᾔ greek small letter eta with psili and oxia and ypogegrammeni ᾕ greek small letter eta with dasia and oxia and ypogegrammeni ᾖ greek small letter eta with psili and perispomeni and ypogegrammeni ᾗ greek small letter eta with dasia and perispomeni and ypogegrammeni ᾘ greek capital letter eta with psili and prosgegrammeni ᾙ greek capital letter eta with dasia and prosgegrammeni ᾚ greek capital letter eta with psili and varia and prosgegrammeni ᾛ greek capital letter eta with dasia and varia and prosgegrammeni ᾜ greek capital letter eta with psili and oxia and prosgegrammeni ᾝ greek capital letter eta with dasia and oxia and prosgegrammeni ᾞ greek capital letter eta with psili and perispomeni and prosgegrammeni ᾟ greek capital letter eta with dasia and perispomeni and prosgegrammeni ᾠ greek small letter omega with psili and ypogegrammeni ᾡ greek small letter omega with dasia and ypogegrammeni ᾢ greek small letter omega with psili and varia and ypogegrammeni ᾣ greek small letter omega with dasia and varia and ypogegrammeni ᾤ greek small letter omega with psili and oxia and ypogegrammeni ᾥ greek small letter omega with dasia and oxia and ypogegrammeni ᾦ greek small letter omega with psili and perispomeni and ypogegrammeni ᾧ greek small letter omega with dasia and perispomeni and ypogegrammeni ᾨ greek capital letter omega with psili and prosgegrammeni ᾩ greek capital letter omega with dasia and prosgegrammeni ᾪ greek capital letter omega with psili and varia and prosgegrammeni ᾫ greek capital letter omega with dasia and varia and prosgegrammeni ᾬ greek capital letter omega with psili and oxia and prosgegrammeni ᾭ greek capital letter omega with dasia and oxia and prosgegrammeni ᾮ greek capital letter omega with psili and perispomeni and prosgegrammeni ᾯ greek capital letter omega with dasia and perispomeni and prosgegrammeni ᾰ greek small letter alpha with vrachy ᾱ greek small letter alpha with macron ᾲ greek small letter alpha with varia and ypogegrammeni ᾳ greek small letter alpha with ypogegrammeni ᾴ greek small letter alpha with oxia and ypogegrammeni ᾶ greek small letter alpha with perispomeni ᾷ greek small letter alpha with perispomeni and ypogegrammeni Ᾰ greek capital letter alpha with vrachy Ᾱ greek capital letter alpha with macron Ὰ greek capital letter alpha with varia Ά greek capital letter alpha with oxia ᾼ greek capital letter alpha with prosgegrammeni ᾽ greek koronis ι greek prosgegrammeni ᾿ greek psili ῀ greek perispomeni ῁ greek dialytika and perispomeni ῂ greek small letter eta with varia and ypogegrammeni ῃ greek small letter eta with ypogegrammeni ῄ greek small letter eta with oxia and ypogegrammeni ῆ greek small letter eta with perispomeni ῇ greek small letter eta with perispomeni and ypogegrammeni Ὲ greek capital letter epsilon with varia Έ greek capital letter epsilon with oxia Ὴ greek capital letter eta with varia Ή greek capital letter eta with oxia ῌ greek capital letter eta with prosgegrammeni ῍ greek psili and varia ῎ greek psili and oxia ῏ greek psili and perispomeni ῐ greek small letter iota with vrachy ῑ greek small letter iota with macron ῒ greek small letter iota with dialytika and varia ΐ greek small letter iota with dialytika and oxia ῖ greek small letter iota with perispomeni ῗ greek small letter iota with dialytika and perispomeni Ῐ greek capital letter iota with vrachy Ῑ greek capital letter iota with macron Ὶ greek capital letter iota with varia Ί greek capital letter iota with oxia ῝ greek dasia and varia ῞ greek dasia and oxia ῟ greek dasia and perispomeni ῠ greek small letter upsilon with vrachy ῡ greek small letter upsilon with macron ῢ greek small letter upsilon with dialytika and varia ΰ greek small letter upsilon with dialytika and oxia ῤ greek small letter rho with psili ῥ greek small letter rho with dasia ῦ greek small letter upsilon with perispomeni ῧ greek small letter upsilon with dialytika and perispomeni Ῠ greek capital letter upsilon with vrachy Ῡ greek capital letter upsilon with macron Ὺ greek capital letter upsilon with varia Ύ greek capital letter upsilon with oxia Ῥ greek capital letter rho with dasia ῭ greek dialytika and varia ΅ greek dialytika and oxia ` greek varia ῲ greek small letter omega with varia and ypogegrammeni ῳ greek small letter omega with ypogegrammeni ῴ greek small letter omega with oxia and ypogegrammeni ῶ greek small letter omega with perispomeni ῷ greek small letter omega with perispomeni and ypogegrammeni Ὸ greek capital letter omicron with varia Ό greek capital letter omicron with oxia Ὼ greek capital letter omega with varia Ώ greek capital letter omega with oxia ῼ greek capital letter omega with prosgegrammeni ´ greek oxia ῾ greek dasia   en quad   em quad   en space   em space   three-per-em space   four-per-em space   six-per-em space   figure space   punctuation space   thin space   hair space ‐ hyphen ‑ non-breaking hyphen ‒ figure dash – en dash — em dash ― horizontal bar ‖ double vertical line ‗ double low line ‘ left single quotation mark ’ right single quotation mark ‚ single low-9 quotation mark ‛ single high-reversed-9 quotation mark “ left double quotation mark ” right double quotation mark „ double low-9 quotation mark ‟ double high-reversed-9 quotation mark † dagger ‡ double dagger • bullet ‣ triangular bullet ․ one dot leader ‥ two dot leader … horizontal ellipsis ‧ hyphenation point 
 line separator 
 paragraph separator   narrow no-break space ‰ per mille sign ‱ per ten thousand sign ′ prime ″ double prime ‴ triple prime ‵ reversed prime ‶ reversed double prime ‷ reversed triple prime ‸ caret ‹ single left-pointing angle quotation mark › single right-pointing angle quotation mark ※ reference mark ‼ double exclamation mark ‽ interrobang ‾ overline ‿ undertie ⁀ character tie ⁁ caret insertion point ⁂ asterism ⁃ hyphen bullet ⁄ fraction slash ⁅ left square bracket with quill ⁆ right square bracket with quill ⁇ double question mark ⁈ question exclamation mark ⁉ exclamation question mark ⁊ tironian sign et ⁋ reversed pilcrow sign ⁌ black leftwards bullet ⁍ black rightwards bullet ⁎ low asterisk ⁏ reversed semicolon ⁐ close up ⁑ two asterisks aligned vertically ⁒ commercial minus sign ⁓ swung dash ⁔ inverted undertie ⁕ flower punctuation mark ⁖ three dot punctuation ⁗ quadruple prime ⁘ four dot punctuation ⁙ five dot punctuation ⁚ two dot punctuation ⁛ four dot mark ⁜ dotted cross ⁝ tricolon ⁞ vertical four dots   medium mathematical space ⁰ superscript zero ⁱ superscript latin small letter i ⁴ superscript four ⁵ superscript five ⁶ superscript six ⁷ superscript seven ⁸ superscript eight ⁹ superscript nine ⁺ superscript plus sign ⁻ superscript minus ⁼ superscript equals sign ⁽ superscript left parenthesis ⁾ superscript right parenthesis ⁿ superscript latin small letter n ₀ subscript zero ₁ subscript one ₂ subscript two ₃ subscript three ₄ subscript four ₅ subscript five ₆ subscript six ₇ subscript seven ₈ subscript eight ₉ subscript nine ₊ subscript plus sign ₋ subscript minus ₌ subscript equals sign ₍ subscript left parenthesis ₎ subscript right parenthesis ₐ latin subscript small letter a ₑ latin subscript small letter e ₒ latin subscript small letter o ₓ latin subscript small letter x ₔ latin subscript small letter schwa ₕ latin subscript small letter h ₖ latin subscript small letter k ₗ latin subscript small letter l ₘ latin subscript small letter m ₙ latin subscript small letter n ₚ latin subscript small letter p ₛ latin subscript small letter s ₜ latin subscript small letter t ₠ euro-currency sign ₡ colon sign ₢ cruzeiro sign ₣ french franc sign ₤ lira sign ₥ mill sign ₦ naira sign ₧ peseta sign ₨ rupee sign ₩ won sign ₪ new sheqel sign ₫ dong sign € euro sign ₭ kip sign ₮ tugrik sign ₯ drachma sign ₰ german penny sign ₱ peso sign ₲ guarani sign ₳ austral sign ₴ hryvnia sign ₵ cedi sign ₶ livre tournois sign ₷ spesmilo sign ₸ tenge sign ₹ indian rupee sign ₺ turkish lira sign ₻ nordic mark sign ₼ manat sign ₽ ruble sign ₾ lari sign ℀ account of ℁ addressed to the subject ℂ double-struck capital c ℃ degree celsius ℄ centre line symbol ℅ care of ℆ cada una ℇ euler constant ℈ scruple ℉ degree fahrenheit ℊ script small g ℋ script capital h ℌ black-letter capital h ℍ double-struck capital h ℎ planck constant ℏ planck constant over two pi ℐ script capital i ℑ black-letter capital i ℒ script capital l ℓ script small l ℔ l b bar symbol ℕ double-struck capital n № numero sign ℗ sound recording copyright ℘ script capital p ℙ double-struck capital p ℚ double-struck capital q ℛ script capital r ℜ black-letter capital r ℝ double-struck capital r ℞ prescription take ℟ response ℠ service mark ℡ telephone sign ™ trade mark sign ℣ versicle ℤ double-struck capital z ℥ ounce sign Ω ohm sign ℧ inverted ohm sign ℨ black-letter capital z ℩ turned greek small letter iota K kelvin sign Å angstrom sign ℬ script capital b ℭ black-letter capital c ℮ estimated symbol ℯ script small e ℰ script capital e ℱ script capital f Ⅎ turned capital f ℳ script capital m ℴ script small o ℵ alef symbol ℶ bet symbol ℷ gimel symbol ℸ dalet symbol ℹ information source ℺ rotated capital q ℻ facsimile sign ℼ double-struck small pi ℽ double-struck small gamma ℾ double-struck capital gamma ℿ double-struck capital pi ⅀ double-struck n-ary summation ⅁ turned sans-serif capital g ⅂ turned sans-serif capital l ⅃ reversed sans-serif capital l ⅄ turned sans-serif capital y ⅅ double-struck italic capital d ⅆ double-struck italic small d ⅇ double-struck italic small e ⅈ double-struck italic small i ⅉ double-struck italic small j ⅊ property line ⅋ turned ampersand ⅌ per sign ⅍ aktieselskab ⅎ turned small f ⅏ symbol for samaritan source ⅐ vulgar fraction one seventh ⅑ vulgar fraction one ninth ⅒ vulgar fraction one tenth ⅓ vulgar fraction one third ⅔ vulgar fraction two thirds ⅕ vulgar fraction one fifth ⅖ vulgar fraction two fifths ⅗ vulgar fraction three fifths ⅘ vulgar fraction four fifths ⅙ vulgar fraction one sixth ⅚ vulgar fraction five sixths ⅛ vulgar fraction one eighth ⅜ vulgar fraction three eighths ⅝ vulgar fraction five eighths ⅞ vulgar fraction seven eighths ⅟ fraction numerator one Ⅰ roman numeral one Ⅱ roman numeral two Ⅲ roman numeral three Ⅳ roman numeral four Ⅴ roman numeral five Ⅵ roman numeral six Ⅶ roman numeral seven Ⅷ roman numeral eight Ⅸ roman numeral nine Ⅹ roman numeral ten Ⅺ roman numeral eleven Ⅻ roman numeral twelve Ⅼ roman numeral fifty Ⅽ roman numeral one hundred Ⅾ roman numeral five hundred Ⅿ roman numeral one thousand ⅰ small roman numeral one ⅱ small roman numeral two ⅲ small roman numeral three ⅳ small roman numeral four ⅴ small roman numeral five ⅵ small roman numeral six ⅶ small roman numeral seven ⅷ small roman numeral eight ⅸ small roman numeral nine ⅹ small roman numeral ten ⅺ small roman numeral eleven ⅻ small roman numeral twelve ⅼ small roman numeral fifty ⅽ small roman numeral one hundred ⅾ small roman numeral five hundred ⅿ small roman numeral one thousand ↀ roman numeral one thousand c d ↁ roman numeral five thousand ↂ roman numeral ten thousand Ↄ roman numeral reversed one hundred ↄ latin small letter reversed c ↅ roman numeral six late form ↆ roman numeral fifty early form ↇ roman numeral fifty thousand ↈ roman numeral one hundred thousand ↉ vulgar fraction zero thirds ↊ turned digit two ↋ turned digit three ← leftwards arrow ↑ upwards arrow → rightwards arrow ↓ downwards arrow ↔ left right arrow ↕ up down arrow ↖ north west arrow ↗ north east arrow ↘ south east arrow ↙ south west arrow ↚ leftwards arrow with stroke ↛ rightwards arrow with stroke ↜ leftwards wave arrow ↝ rightwards wave arrow ↞ leftwards two headed arrow ↟ upwards two headed arrow ↠ rightwards two headed arrow ↡ downwards two headed arrow ↢ leftwards arrow with tail ↣ rightwards arrow with tail ↤ leftwards arrow from bar ↥ upwards arrow from bar ↦ rightwards arrow from bar ↧ downwards arrow from bar ↨ up down arrow with base ↩ leftwards arrow with hook ↪ rightwards arrow with hook ↫ leftwards arrow with loop ↬ rightwards arrow with loop ↭ left right wave arrow ↮ left right arrow with stroke ↯ downwards zigzag arrow ↰ upwards arrow with tip leftwards ↱ upwards arrow with tip rightwards ↲ downwards arrow with tip leftwards ↳ downwards arrow with tip rightwards ↴ rightwards arrow with corner downwards ↵ downwards arrow with corner leftwards ↶ anticlockwise top semicircle arrow ↷ clockwise top semicircle arrow ↸ north west arrow to long bar ↹ leftwards arrow to bar over rightwards arrow to bar ↺ anticlockwise open circle arrow ↻ clockwise open circle arrow ↼ leftwards harpoon with barb upwards ↽ leftwards harpoon with barb downwards ↾ upwards harpoon with barb rightwards ↿ upwards harpoon with barb leftwards ⇀ rightwards harpoon with barb upwards ⇁ rightwards harpoon with barb downwards ⇂ downwards harpoon with barb rightwards ⇃ downwards harpoon with barb leftwards ⇄ rightwards arrow over leftwards arrow ⇅ upwards arrow leftwards of downwards arrow ⇆ leftwards arrow over rightwards arrow ⇇ leftwards paired arrows ⇈ upwards paired arrows ⇉ rightwards paired arrows ⇊ downwards paired arrows ⇋ leftwards harpoon over rightwards harpoon ⇌ rightwards harpoon over leftwards harpoon ⇍ leftwards double arrow with stroke ⇎ left right double arrow with stroke ⇏ rightwards double arrow with stroke ⇐ leftwards double arrow ⇑ upwards double arrow ⇒ rightwards double arrow ⇓ downwards double arrow ⇔ left right double arrow ⇕ up down double arrow ⇖ north west double arrow ⇗ north east double arrow ⇘ south east double arrow ⇙ south west double arrow ⇚ leftwards triple arrow ⇛ rightwards triple arrow ⇜ leftwards squiggle arrow ⇝ rightwards squiggle arrow ⇞ upwards arrow with double stroke ⇟ downwards arrow with double stroke ⇠ leftwards dashed arrow ⇡ upwards dashed arrow ⇢ rightwards dashed arrow ⇣ downwards dashed arrow ⇤ leftwards arrow to bar ⇥ rightwards arrow to bar ⇦ leftwards white arrow ⇧ upwards white arrow ⇨ rightwards white arrow ⇩ downwards white arrow ⇪ upwards white arrow from bar ⇫ upwards white arrow on pedestal ⇬ upwards white arrow on pedestal with horizontal bar ⇭ upwards white arrow on pedestal with vertical bar ⇮ upwards white double arrow ⇯ upwards white double arrow on pedestal ⇰ rightwards white arrow from wall ⇱ north west arrow to corner ⇲ south east arrow to corner ⇳ up down white arrow ⇴ right arrow with small circle ⇵ downwards arrow leftwards of upwards arrow ⇶ three rightwards arrows ⇷ leftwards arrow with vertical stroke ⇸ rightwards arrow with vertical stroke ⇹ left right arrow with vertical stroke ⇺ leftwards arrow with double vertical stroke ⇻ rightwards arrow with double vertical stroke ⇼ left right arrow with double vertical stroke ⇽ leftwards open-headed arrow ⇾ rightwards open-headed arrow ⇿ left right open-headed arrow ∀ for all ∁ complement ∂ partial differential ∃ there exists ∄ there does not exist ∅ empty set ∆ increment ∇ nabla ∈ element of ∉ not an element of ∊ small element of ∋ contains as member ∌ does not contain as member ∍ small contains as member ∎ end of proof ∏ n-ary product ∐ n-ary coproduct ∑ n-ary summation − minus sign ∓ minus-or-plus sign ∔ dot plus ∕ division slash ∖ set minus ∗ asterisk operator ∘ ring operator ∙ bullet operator √ square root ∛ cube root ∜ fourth root ∝ proportional to ∞ infinity ∟ right angle ∠ angle ∡ measured angle ∢ spherical angle ∣ divides ∤ does not divide ∥ parallel to ∦ not parallel to ∧ logical and ∨ logical or ∩ intersection ∪ union ∫ integral ∬ double integral ∭ triple integral ∮ contour integral ∯ surface integral ∰ volume integral ∱ clockwise integral ∲ clockwise contour integral ∳ anticlockwise contour integral ∴ therefore ∵ because ∶ ratio ∷ proportion ∸ dot minus ∹ excess ∺ geometric proportion ∻ homothetic ∼ tilde operator ∽ reversed tilde ∾ inverted lazy s ∿ sine wave ≀ wreath product ≁ not tilde ≂ minus tilde ≃ asymptotically equal to ≄ not asymptotically equal to ≅ approximately equal to ≆ approximately but not actually equal to ≇ neither approximately nor actually equal to ≈ almost equal to ≉ not almost equal to ≊ almost equal or equal to ≋ triple tilde ≌ all equal to ≍ equivalent to ≎ geometrically equivalent to ≏ difference between ≐ approaches the limit ≑ geometrically equal to ≒ approximately equal to or the image of ≓ image of or approximately equal to ≔ colon equals ≕ equals colon ≖ ring in equal to ≗ ring equal to ≘ corresponds to ≙ estimates ≚ equiangular to ≛ star equals ≜ delta equal to ≝ equal to by definition ≞ measured by ≟ questioned equal to ≠ not equal to ≡ identical to ≢ not identical to ≣ strictly equivalent to ≤ less-than or equal to ≥ greater-than or equal to ≦ less-than over equal to ≧ greater-than over equal to ≨ less-than but not equal to ≩ greater-than but not equal to ≪ much less-than ≫ much greater-than ≬ between ≭ not equivalent to ≮ not less-than ≯ not greater-than ≰ neither less-than nor equal to ≱ neither greater-than nor equal to ≲ less-than or equivalent to ≳ greater-than or equivalent to ≴ neither less-than nor equivalent to ≵ neither greater-than nor equivalent to ≶ less-than or greater-than ≷ greater-than or less-than ≸ neither less-than nor greater-than ≹ neither greater-than nor less-than ≺ precedes ≻ succeeds ≼ precedes or equal to ≽ succeeds or equal to ≾ precedes or equivalent to ≿ succeeds or equivalent to ⊀ does not precede ⊁ does not succeed ⊂ subset of ⊃ superset of ⊄ not a subset of ⊅ not a superset of ⊆ subset of or equal to ⊇ superset of or equal to ⊈ neither a subset of nor equal to ⊉ neither a superset of nor equal to ⊊ subset of with not equal to ⊋ superset of with not equal to ⊌ multiset ⊍ multiset multiplication ⊎ multiset union ⊏ square image of ⊐ square original of ⊑ square image of or equal to ⊒ square original of or equal to ⊓ square cap ⊔ square cup ⊕ circled plus ⊖ circled minus ⊗ circled times ⊘ circled division slash ⊙ circled dot operator ⊚ circled ring operator ⊛ circled asterisk operator ⊜ circled equals ⊝ circled dash ⊞ squared plus ⊟ squared minus ⊠ squared times ⊡ squared dot operator ⊢ right tack ⊣ left tack ⊤ down tack ⊥ up tack ⊦ assertion ⊧ models ⊨ true ⊩ forces ⊪ triple vertical bar right turnstile ⊫ double vertical bar double right turnstile ⊬ does not prove ⊭ not true ⊮ does not force ⊯ negated double vertical bar double right turnstile ⊰ precedes under relation ⊱ succeeds under relation ⊲ normal subgroup of ⊳ contains as normal subgroup ⊴ normal subgroup of or equal to ⊵ contains as normal subgroup or equal to ⊶ original of ⊷ image of ⊸ multimap ⊹ hermitian conjugate matrix ⊺ intercalate ⊻ xor ⊼ nand ⊽ nor ⊾ right angle with arc ⊿ right triangle ⋀ n-ary logical and ⋁ n-ary logical or ⋂ n-ary intersection ⋃ n-ary union ⋄ diamond operator ⋅ dot operator ⋆ star operator ⋇ division times ⋈ bowtie ⋉ left normal factor semidirect product ⋊ right normal factor semidirect product ⋋ left semidirect product ⋌ right semidirect product ⋍ reversed tilde equals ⋎ curly logical or ⋏ curly logical and ⋐ double subset ⋑ double superset ⋒ double intersection ⋓ double union ⋔ pitchfork ⋕ equal and parallel to ⋖ less-than with dot ⋗ greater-than with dot ⋘ very much less-than ⋙ very much greater-than ⋚ less-than equal to or greater-than ⋛ greater-than equal to or less-than ⋜ equal to or less-than ⋝ equal to or greater-than ⋞ equal to or precedes ⋟ equal to or succeeds ⋠ does not precede or equal ⋡ does not succeed or equal ⋢ not square image of or equal to ⋣ not square original of or equal to ⋤ square image of or not equal to ⋥ square original of or not equal to ⋦ less-than but not equivalent to ⋧ greater-than but not equivalent to ⋨ precedes but not equivalent to ⋩ succeeds but not equivalent to ⋪ not normal subgroup of ⋫ does not contain as normal subgroup ⋬ not normal subgroup of or equal to ⋭ does not contain as normal subgroup or equal ⋮ vertical ellipsis ⋯ midline horizontal ellipsis ⋰ up right diagonal ellipsis ⋱ down right diagonal ellipsis ⋲ element of with long horizontal stroke ⋳ element of with vertical bar at end of horizontal stroke ⋴ small element of with vertical bar at end of horizontal stroke ⋵ element of with dot above ⋶ element of with overbar ⋷ small element of with overbar ⋸ element of with underbar ⋹ element of with two horizontal strokes ⋺ contains with long horizontal stroke ⋻ contains with vertical bar at end of horizontal stroke ⋼ small contains with vertical bar at end of horizontal stroke ⋽ contains with overbar ⋾ small contains with overbar ⋿ z notation bag membership ⌀ diameter sign ⌁ electric arrow ⌂ house ⌃ up arrowhead ⌄ down arrowhead ⌅ projective ⌆ perspective ⌇ wavy line ⌈ left ceiling ⌉ right ceiling ⌊ left floor ⌋ right floor ⌌ bottom right crop ⌍ bottom left crop ⌎ top right crop ⌏ top left crop ⌐ reversed not sign ⌑ square lozenge ⌒ arc ⌓ segment ⌔ sector ⌕ telephone recorder ⌖ position indicator ⌗ viewdata square ⌘ place of interest sign ⌙ turned not sign ⌚ watch ⌛ hourglass ⌜ top left corner ⌝ top right corner ⌞ bottom left corner ⌟ bottom right corner ⌠ top half integral ⌡ bottom half integral ⌢ frown ⌣ smile ⌤ up arrowhead between two horizontal bars ⌥ option key ⌦ erase to the right ⌧ x in a rectangle box ⌨ keyboard 〈 left-pointing angle bracket 〉 right-pointing angle bracket ⌫ erase to the left ⌬ benzene ring ⌭ cylindricity ⌮ all around-profile ⌯ symmetry ⌰ total runout ⌱ dimension origin ⌲ conical taper ⌳ slope ⌴ counterbore ⌵ countersink ⌶ apl functional symbol i-beam ⌷ apl functional symbol squish quad ⌸ apl functional symbol quad equal ⌹ apl functional symbol quad divide ⌺ apl functional symbol quad diamond ⌻ apl functional symbol quad jot ⌼ apl functional symbol quad circle ⌽ apl functional symbol circle stile ⌾ apl functional symbol circle jot ⌿ apl functional symbol slash bar ⍀ apl functional symbol backslash bar ⍁ apl functional symbol quad slash ⍂ apl functional symbol quad backslash ⍃ apl functional symbol quad less-than ⍄ apl functional symbol quad greater-than ⍅ apl functional symbol leftwards vane ⍆ apl functional symbol rightwards vane ⍇ apl functional symbol quad leftwards arrow ⍈ apl functional symbol quad rightwards arrow ⍉ apl functional symbol circle backslash ⍊ apl functional symbol down tack underbar ⍋ apl functional symbol delta stile ⍌ apl functional symbol quad down caret ⍍ apl functional symbol quad delta ⍎ apl functional symbol down tack jot ⍏ apl functional symbol upwards vane ⍐ apl functional symbol quad upwards arrow ⍑ apl functional symbol up tack overbar ⍒ apl functional symbol del stile ⍓ apl functional symbol quad up caret ⍔ apl functional symbol quad del ⍕ apl functional symbol up tack jot ⍖ apl functional symbol downwards vane ⍗ apl functional symbol quad downwards arrow ⍘ apl functional symbol quote underbar ⍙ apl functional symbol delta underbar ⍚ apl functional symbol diamond underbar ⍛ apl functional symbol jot underbar ⍜ apl functional symbol circle underbar ⍝ apl functional symbol up shoe jot ⍞ apl functional symbol quote quad ⍟ apl functional symbol circle star ⍠ apl functional symbol quad colon ⍡ apl functional symbol up tack diaeresis ⍢ apl functional symbol del diaeresis ⍣ apl functional symbol star diaeresis ⍤ apl functional symbol jot diaeresis ⍥ apl functional symbol circle diaeresis ⍦ apl functional symbol down shoe stile ⍧ apl functional symbol left shoe stile ⍨ apl functional symbol tilde diaeresis ⍩ apl functional symbol greater-than diaeresis ⍪ apl functional symbol comma bar ⍫ apl functional symbol del tilde ⍬ apl functional symbol zilde ⍭ apl functional symbol stile tilde ⍮ apl functional symbol semicolon underbar ⍯ apl functional symbol quad not equal ⍰ apl functional symbol quad question ⍱ apl functional symbol down caret tilde ⍲ apl functional symbol up caret tilde ⍳ apl functional symbol iota ⍴ apl functional symbol rho ⍵ apl functional symbol omega ⍶ apl functional symbol alpha underbar ⍷ apl functional symbol epsilon underbar ⍸ apl functional symbol iota underbar ⍹ apl functional symbol omega underbar ⍺ apl functional symbol alpha ⍻ not check mark ⍼ right angle with downwards zigzag arrow ⍽ shouldered open box ⍾ bell symbol ⍿ vertical line with middle dot ⎀ insertion symbol ⎁ continuous underline symbol ⎂ discontinuous underline symbol ⎃ emphasis symbol ⎄ composition symbol ⎅ white square with centre vertical line ⎆ enter symbol ⎇ alternative key symbol ⎈ helm symbol ⎉ circled horizontal bar with notch ⎊ circled triangle down ⎋ broken circle with northwest arrow ⎌ undo symbol ⎍ monostable symbol ⎎ hysteresis symbol ⎏ open-circuit-output h-type symbol ⎐ open-circuit-output l-type symbol ⎑ passive-pull-down-output symbol ⎒ passive-pull-up-output symbol ⎓ direct current symbol form two ⎔ software-function symbol ⎕ apl functional symbol quad ⎖ decimal separator key symbol ⎗ previous page ⎘ next page ⎙ print screen symbol ⎚ clear screen symbol ⎛ left parenthesis upper hook ⎜ left parenthesis extension ⎝ left parenthesis lower hook ⎞ right parenthesis upper hook ⎟ right parenthesis extension ⎠ right parenthesis lower hook ⎡ left square bracket upper corner ⎢ left square bracket extension ⎣ left square bracket lower corner ⎤ right square bracket upper corner ⎥ right square bracket extension ⎦ right square bracket lower corner ⎧ left curly bracket upper hook ⎨ left curly bracket middle piece ⎩ left curly bracket lower hook ⎪ curly bracket extension ⎫ right curly bracket upper hook ⎬ right curly bracket middle piece ⎭ right curly bracket lower hook ⎮ integral extension ⎯ horizontal line extension ⎰ upper left or lower right curly bracket section ⎱ upper right or lower left curly bracket section ⎲ summation top ⎳ summation bottom ⎴ top square bracket ⎵ bottom square bracket ⎶ bottom square bracket over top square bracket ⎷ radical symbol bottom ⎸ left vertical box line ⎹ right vertical box line ⎺ horizontal scan line-1 ⎻ horizontal scan line-3 ⎼ horizontal scan line-7 ⎽ horizontal scan line-9 ⎾ dentistry symbol light vertical and top right ⎿ dentistry symbol light vertical and bottom right ⏀ dentistry symbol light vertical with circle ⏁ dentistry symbol light down and horizontal with circle ⏂ dentistry symbol light up and horizontal with circle ⏃ dentistry symbol light vertical with triangle ⏄ dentistry symbol light down and horizontal with triangle ⏅ dentistry symbol light up and horizontal with triangle ⏆ dentistry symbol light vertical and wave ⏇ dentistry symbol light down and horizontal with wave ⏈ dentistry symbol light up and horizontal with wave ⏉ dentistry symbol light down and horizontal ⏊ dentistry symbol light up and horizontal ⏋ dentistry symbol light vertical and top left ⏌ dentistry symbol light vertical and bottom left ⏍ square foot ⏎ return symbol ⏏ eject symbol ⏐ vertical line extension ⏑ metrical breve ⏒ metrical long over short ⏓ metrical short over long ⏔ metrical long over two shorts ⏕ metrical two shorts over long ⏖ metrical two shorts joined ⏗ metrical triseme ⏘ metrical tetraseme ⏙ metrical pentaseme ⏚ earth ground ⏛ fuse ⏜ top parenthesis ⏝ bottom parenthesis ⏞ top curly bracket ⏟ bottom curly bracket ⏠ top tortoise shell bracket ⏡ bottom tortoise shell bracket ⏢ white trapezium ⏣ benzene ring with circle ⏤ straightness ⏥ flatness ⏦ ac current ⏧ electrical intersection ⏨ decimal exponent symbol ⏩ black right-pointing double triangle ⏪ black left-pointing double triangle ⏫ black up-pointing double triangle ⏬ black down-pointing double triangle ⏭ black right-pointing double triangle with vertical bar ⏮ black left-pointing double triangle with vertical bar ⏯ black right-pointing triangle with double vertical bar ⏰ alarm clock ⏱ stopwatch ⏲ timer clock ⏳ hourglass with flowing sand ⏴ black medium left-pointing triangle ⏵ black medium right-pointing triangle ⏶ black medium up-pointing triangle ⏷ black medium down-pointing triangle ⏸ double vertical bar ⏹ black square for stop ⏺ black circle for record ⏻ power symbol ⏼ power on-off symbol ⏽ power on symbol ⏾ power sleep symbol ␀ symbol for null ␁ symbol for start of heading ␂ symbol for start of text ␃ symbol for end of text ␄ symbol for end of transmission ␅ symbol for enquiry ␆ symbol for acknowledge ␇ symbol for bell ␈ symbol for backspace ␉ symbol for horizontal tabulation ␊ symbol for line feed ␋ symbol for vertical tabulation ␌ symbol for form feed ␍ symbol for carriage return ␎ symbol for shift out ␏ symbol for shift in ␐ symbol for data link escape ␑ symbol for device control one ␒ symbol for device control two ␓ symbol for device control three ␔ symbol for device control four ␕ symbol for negative acknowledge ␖ symbol for synchronous idle ␗ symbol for end of transmission block ␘ symbol for cancel ␙ symbol for end of medium ␚ symbol for substitute ␛ symbol for escape ␜ symbol for file separator ␝ symbol for group separator ␞ symbol for record separator ␟ symbol for unit separator ␠ symbol for space ␡ symbol for delete ␢ blank symbol ␣ open box ␤ symbol for newline ␥ symbol for delete form two ␦ symbol for substitute form two ⑀ ocr hook ⑁ ocr chair ⑂ ocr fork ⑃ ocr inverted fork ⑄ ocr belt buckle ⑅ ocr bow tie ⑆ ocr branch bank identification ⑇ ocr amount of check ⑈ ocr dash ⑉ ocr customer account number ⑊ ocr double backslash ① circled digit one ② circled digit two ③ circled digit three ④ circled digit four ⑤ circled digit five ⑥ circled digit six ⑦ circled digit seven ⑧ circled digit eight ⑨ circled digit nine ⑩ circled number ten ⑪ circled number eleven ⑫ circled number twelve ⑬ circled number thirteen ⑭ circled number fourteen ⑮ circled number fifteen ⑯ circled number sixteen ⑰ circled number seventeen ⑱ circled number eighteen ⑲ circled number nineteen ⑳ circled number twenty ⑴ parenthesized digit one ⑵ parenthesized digit two ⑶ parenthesized digit three ⑷ parenthesized digit four ⑸ parenthesized digit five ⑹ parenthesized digit six ⑺ parenthesized digit seven ⑻ parenthesized digit eight ⑼ parenthesized digit nine ⑽ parenthesized number ten ⑾ parenthesized number eleven ⑿ parenthesized number twelve ⒀ parenthesized number thirteen ⒁ parenthesized number fourteen ⒂ parenthesized number fifteen ⒃ parenthesized number sixteen ⒄ parenthesized number seventeen ⒅ parenthesized number eighteen ⒆ parenthesized number nineteen ⒇ parenthesized number twenty ⒈ digit one full stop ⒉ digit two full stop ⒊ digit three full stop ⒋ digit four full stop ⒌ digit five full stop ⒍ digit six full stop ⒎ digit seven full stop ⒏ digit eight full stop ⒐ digit nine full stop ⒑ number ten full stop ⒒ number eleven full stop ⒓ number twelve full stop ⒔ number thirteen full stop ⒕ number fourteen full stop ⒖ number fifteen full stop ⒗ number sixteen full stop ⒘ number seventeen full stop ⒙ number eighteen full stop ⒚ number nineteen full stop ⒛ number twenty full stop ⒜ parenthesized latin small letter a ⒝ parenthesized latin small letter b ⒞ parenthesized latin small letter c ⒟ parenthesized latin small letter d ⒠ parenthesized latin small letter e ⒡ parenthesized latin small letter f ⒢ parenthesized latin small letter g ⒣ parenthesized latin small letter h ⒤ parenthesized latin small letter i ⒥ parenthesized latin small letter j ⒦ parenthesized latin small letter k ⒧ parenthesized latin small letter l ⒨ parenthesized latin small letter m ⒩ parenthesized latin small letter n ⒪ parenthesized latin small letter o ⒫ parenthesized latin small letter p ⒬ parenthesized latin small letter q ⒭ parenthesized latin small letter r ⒮ parenthesized latin small letter s ⒯ parenthesized latin small letter t ⒰ parenthesized latin small letter u ⒱ parenthesized latin small letter v ⒲ parenthesized latin small letter w ⒳ parenthesized latin small letter x ⒴ parenthesized latin small letter y ⒵ parenthesized latin small letter z Ⓐ circled latin capital letter a Ⓑ circled latin capital letter b Ⓒ circled latin capital letter c Ⓓ circled latin capital letter d Ⓔ circled latin capital letter e Ⓕ circled latin capital letter f Ⓖ circled latin capital letter g Ⓗ circled latin capital letter h Ⓘ circled latin capital letter i Ⓙ circled latin capital letter j Ⓚ circled latin capital letter k Ⓛ circled latin capital letter l Ⓜ circled latin capital letter m Ⓝ circled latin capital letter n Ⓞ circled latin capital letter o Ⓟ circled latin capital letter p Ⓠ circled latin capital letter q Ⓡ circled latin capital letter r Ⓢ circled latin capital letter s Ⓣ circled latin capital letter t Ⓤ circled latin capital letter u Ⓥ circled latin capital letter v Ⓦ circled latin capital letter w Ⓧ circled latin capital letter x Ⓨ circled latin capital letter y Ⓩ circled latin capital letter z ⓐ circled latin small letter a ⓑ circled latin small letter b ⓒ circled latin small letter c ⓓ circled latin small letter d ⓔ circled latin small letter e ⓕ circled latin small letter f ⓖ circled latin small letter g ⓗ circled latin small letter h ⓘ circled latin small letter i ⓙ circled latin small letter j ⓚ circled latin small letter k ⓛ circled latin small letter l ⓜ circled latin small letter m ⓝ circled latin small letter n ⓞ circled latin small letter o ⓟ circled latin small letter p ⓠ circled latin small letter q ⓡ circled latin small letter r ⓢ circled latin small letter s ⓣ circled latin small letter t ⓤ circled latin small letter u ⓥ circled latin small letter v ⓦ circled latin small letter w ⓧ circled latin small letter x ⓨ circled latin small letter y ⓩ circled latin small letter z ⓪ circled digit zero ⓫ negative circled number eleven ⓬ negative circled number twelve ⓭ negative circled number thirteen ⓮ negative circled number fourteen ⓯ negative circled number fifteen ⓰ negative circled number sixteen ⓱ negative circled number seventeen ⓲ negative circled number eighteen ⓳ negative circled number nineteen ⓴ negative circled number twenty ⓵ double circled digit one ⓶ double circled digit two ⓷ double circled digit three ⓸ double circled digit four ⓹ double circled digit five ⓺ double circled digit six ⓻ double circled digit seven ⓼ double circled digit eight ⓽ double circled digit nine ⓾ double circled number ten ⓿ negative circled digit zero ─ box drawings light horizontal ━ box drawings heavy horizontal │ box drawings light vertical ┃ box drawings heavy vertical ┄ box drawings light triple dash horizontal ┅ box drawings heavy triple dash horizontal ┆ box drawings light triple dash vertical ┇ box drawings heavy triple dash vertical ┈ box drawings light quadruple dash horizontal ┉ box drawings heavy quadruple dash horizontal ┊ box drawings light quadruple dash vertical ┋ box drawings heavy quadruple dash vertical ┌ box drawings light down and right ┍ box drawings down light and right heavy ┎ box drawings down heavy and right light ┏ box drawings heavy down and right ┐ box drawings light down and left ┑ box drawings down light and left heavy ┒ box drawings down heavy and left light ┓ box drawings heavy down and left └ box drawings light up and right ┕ box drawings up light and right heavy ┖ box drawings up heavy and right light ┗ box drawings heavy up and right ┘ box drawings light up and left ┙ box drawings up light and left heavy ┚ box drawings up heavy and left light ┛ box drawings heavy up and left ├ box drawings light vertical and right ┝ box drawings vertical light and right heavy ┞ box drawings up heavy and right down light ┟ box drawings down heavy and right up light ┠ box drawings vertical heavy and right light ┡ box drawings down light and right up heavy ┢ box drawings up light and right down heavy ┣ box drawings heavy vertical and right ┤ box drawings light vertical and left ┥ box drawings vertical light and left heavy ┦ box drawings up heavy and left down light ┧ box drawings down heavy and left up light ┨ box drawings vertical heavy and left light ┩ box drawings down light and left up heavy ┪ box drawings up light and left down heavy ┫ box drawings heavy vertical and left ┬ box drawings light down and horizontal ┭ box drawings left heavy and right down light ┮ box drawings right heavy and left down light ┯ box drawings down light and horizontal heavy ┰ box drawings down heavy and horizontal light ┱ box drawings right light and left down heavy ┲ box drawings left light and right down heavy ┳ box drawings heavy down and horizontal ┴ box drawings light up and horizontal ┵ box drawings left heavy and right up light ┶ box drawings right heavy and left up light ┷ box drawings up light and horizontal heavy ┸ box drawings up heavy and horizontal light ┹ box drawings right light and left up heavy ┺ box drawings left light and right up heavy ┻ box drawings heavy up and horizontal ┼ box drawings light vertical and horizontal ┽ box drawings left heavy and right vertical light ┾ box drawings right heavy and left vertical light ┿ box drawings vertical light and horizontal heavy ╀ box drawings up heavy and down horizontal light ╁ box drawings down heavy and up horizontal light ╂ box drawings vertical heavy and horizontal light ╃ box drawings left up heavy and right down light ╄ box drawings right up heavy and left down light ╅ box drawings left down heavy and right up light ╆ box drawings right down heavy and left up light ╇ box drawings down light and up horizontal heavy ╈ box drawings up light and down horizontal heavy ╉ box drawings right light and left vertical heavy ╊ box drawings left light and right vertical heavy ╋ box drawings heavy vertical and horizontal ╌ box drawings light double dash horizontal ╍ box drawings heavy double dash horizontal ╎ box drawings light double dash vertical ╏ box drawings heavy double dash vertical ═ box drawings double horizontal ║ box drawings double vertical ╒ box drawings down single and right double ╓ box drawings down double and right single ╔ box drawings double down and right ╕ box drawings down single and left double ╖ box drawings down double and left single ╗ box drawings double down and left ╘ box drawings up single and right double ╙ box drawings up double and right single ╚ box drawings double up and right ╛ box drawings up single and left double ╜ box drawings up double and left single ╝ box drawings double up and left ╞ box drawings vertical single and right double ╟ box drawings vertical double and right single ╠ box drawings double vertical and right ╡ box drawings vertical single and left double ╢ box drawings vertical double and left single ╣ box drawings double vertical and left ╤ box drawings down single and horizontal double ╥ box drawings down double and horizontal single ╦ box drawings double down and horizontal ╧ box drawings up single and horizontal double ╨ box drawings up double and horizontal single ╩ box drawings double up and horizontal ╪ box drawings vertical single and horizontal double ╫ box drawings vertical double and horizontal single ╬ box drawings double vertical and horizontal ╭ box drawings light arc down and right ╮ box drawings light arc down and left ╯ box drawings light arc up and left ╰ box drawings light arc up and right ╱ box drawings light diagonal upper right to lower left ╲ box drawings light diagonal upper left to lower right ╳ box drawings light diagonal cross ╴ box drawings light left ╵ box drawings light up ╶ box drawings light right ╷ box drawings light down ╸ box drawings heavy left ╹ box drawings heavy up ╺ box drawings heavy right ╻ box drawings heavy down ╼ box drawings light left and heavy right ╽ box drawings light up and heavy down ╾ box drawings heavy left and light right ╿ box drawings heavy up and light down ▀ upper half block ▁ lower one eighth block ▂ lower one quarter block ▃ lower three eighths block ▄ lower half block ▅ lower five eighths block ▆ lower three quarters block ▇ lower seven eighths block █ full block ▉ left seven eighths block ▊ left three quarters block ▋ left five eighths block ▌ left half block ▍ left three eighths block ▎ left one quarter block ▏ left one eighth block ▐ right half block ░ light shade ▒ medium shade ▓ dark shade ▔ upper one eighth block ▕ right one eighth block ▖ quadrant lower left ▗ quadrant lower right ▘ quadrant upper left ▙ quadrant upper left and lower left and lower right ▚ quadrant upper left and lower right ▛ quadrant upper left and upper right and lower left ▜ quadrant upper left and upper right and lower right ▝ quadrant upper right ▞ quadrant upper right and lower left ▟ quadrant upper right and lower left and lower right ■ black square □ white square ▢ white square with rounded corners ▣ white square containing black small square ▤ square with horizontal fill ▥ square with vertical fill ▦ square with orthogonal crosshatch fill ▧ square with upper left to lower right fill ▨ square with upper right to lower left fill ▩ square with diagonal crosshatch fill ▪ black small square ▫ white small square ▬ black rectangle ▭ white rectangle ▮ black vertical rectangle ▯ white vertical rectangle ▰ black parallelogram ▱ white parallelogram ▲ black up-pointing triangle △ white up-pointing triangle ▴ black up-pointing small triangle ▵ white up-pointing small triangle ▶ black right-pointing triangle ▷ white right-pointing triangle ▸ black right-pointing small triangle ▹ white right-pointing small triangle ► black right-pointing pointer ▻ white right-pointing pointer ▼ black down-pointing triangle ▽ white down-pointing triangle ▾ black down-pointing small triangle ▿ white down-pointing small triangle ◀ black left-pointing triangle ◁ white left-pointing triangle ◂ black left-pointing small triangle ◃ white left-pointing small triangle ◄ black left-pointing pointer ◅ white left-pointing pointer ◆ black diamond ◇ white diamond ◈ white diamond containing black small diamond ◉ fisheye ◊ lozenge ○ white circle ◌ dotted circle ◍ circle with vertical fill ◎ bullseye ● black circle ◐ circle with left half black ◑ circle with right half black ◒ circle with lower half black ◓ circle with upper half black ◔ circle with upper right quadrant black ◕ circle with all but upper left quadrant black ◖ left half black circle ◗ right half black circle ◘ inverse bullet ◙ inverse white circle ◚ upper half inverse white circle ◛ lower half inverse white circle ◜ upper left quadrant circular arc ◝ upper right quadrant circular arc ◞ lower right quadrant circular arc ◟ lower left quadrant circular arc ◠ upper half circle ◡ lower half circle ◢ black lower right triangle ◣ black lower left triangle ◤ black upper left triangle ◥ black upper right triangle ◦ white bullet ◧ square with left half black ◨ square with right half black ◩ square with upper left diagonal half black ◪ square with lower right diagonal half black ◫ white square with vertical bisecting line ◬ white up-pointing triangle with dot ◭ up-pointing triangle with left half black ◮ up-pointing triangle with right half black ◯ large circle ◰ white square with upper left quadrant ◱ white square with lower left quadrant ◲ white square with lower right quadrant ◳ white square with upper right quadrant ◴ white circle with upper left quadrant ◵ white circle with lower left quadrant ◶ white circle with lower right quadrant ◷ white circle with upper right quadrant ◸ upper left triangle ◹ upper right triangle ◺ lower left triangle ◻ white medium square ◼ black medium square ◽ white medium small square ◾ black medium small square ◿ lower right triangle ☀ black sun with rays ☁ cloud ☂ umbrella ☃ snowman ☄ comet ★ black star ☆ white star ☇ lightning ☈ thunderstorm ☉ sun ☊ ascending node ☋ descending node ☌ conjunction ☍ opposition ☎ black telephone ☏ white telephone ☐ ballot box ☑ ballot box with check ☒ ballot box with x ☓ saltire ☔ umbrella with rain drops ☕ hot beverage ☖ white shogi piece ☗ black shogi piece ☘ shamrock ☙ reversed rotated floral heart bullet ☚ black left pointing index ☛ black right pointing index ☜ white left pointing index ☝ white up pointing index ☞ white right pointing index ☟ white down pointing index ☠ skull and crossbones ☡ caution sign ☢ radioactive sign ☣ biohazard sign ☤ caduceus ☥ ankh ☦ orthodox cross ☧ chi rho ☨ cross of lorraine ☩ cross of jerusalem ☪ star and crescent ☫ farsi symbol ☬ adi shakti ☭ hammer and sickle ☮ peace symbol ☯ yin yang ☰ trigram for heaven ☱ trigram for lake ☲ trigram for fire ☳ trigram for thunder ☴ trigram for wind ☵ trigram for water ☶ trigram for mountain ☷ trigram for earth ☸ wheel of dharma ☹ white frowning face ☺ white smiling face ☻ black smiling face ☼ white sun with rays ☽ first quarter moon ☾ last quarter moon ☿ mercury ♀ female sign ♁ earth ♂ male sign ♃ jupiter ♄ saturn ♅ uranus ♆ neptune ♇ pluto ♈ aries ♉ taurus ♊ gemini ♋ cancer ♌ leo ♍ virgo ♎ libra ♏ scorpius ♐ sagittarius ♑ capricorn ♒ aquarius ♓ pisces ♔ white chess king ♕ white chess queen ♖ white chess rook ♗ white chess bishop ♘ white chess knight ♙ white chess pawn ♚ black chess king ♛ black chess queen ♜ black chess rook ♝ black chess bishop ♞ black chess knight ♟ black chess pawn ♠ black spade suit ♡ white heart suit ♢ white diamond suit ♣ black club suit ♤ white spade suit ♥ black heart suit ♦ black diamond suit ♧ white club suit ♨ hot springs ♩ quarter note ♪ eighth note ♫ beamed eighth notes ♬ beamed sixteenth notes ♭ music flat sign ♮ music natural sign ♯ music sharp sign ♰ west syriac cross ♱ east syriac cross ♲ universal recycling symbol ♳ recycling symbol for type-1 plastics ♴ recycling symbol for type-2 plastics ♵ recycling symbol for type-3 plastics ♶ recycling symbol for type-4 plastics ♷ recycling symbol for type-5 plastics ♸ recycling symbol for type-6 plastics ♹ recycling symbol for type-7 plastics ♺ recycling symbol for generic materials ♻ black universal recycling symbol ♼ recycled paper symbol ♽ partially-recycled paper symbol ♾ permanent paper sign ♿ wheelchair symbol ⚀ die face-1 ⚁ die face-2 ⚂ die face-3 ⚃ die face-4 ⚄ die face-5 ⚅ die face-6 ⚆ white circle with dot right ⚇ white circle with two dots ⚈ black circle with white dot right ⚉ black circle with two white dots ⚊ monogram for yang ⚋ monogram for yin ⚌ digram for greater yang ⚍ digram for lesser yin ⚎ digram for lesser yang ⚏ digram for greater yin ⚐ white flag ⚑ black flag ⚒ hammer and pick ⚓ anchor ⚔ crossed swords ⚕ staff of aesculapius ⚖ scales ⚗ alembic ⚘ flower ⚙ gear ⚚ staff of hermes ⚛ atom symbol ⚜ fleur-de-lis ⚝ outlined white star ⚞ three lines converging right ⚟ three lines converging left ⚠ warning sign ⚡ high voltage sign ⚢ doubled female sign ⚣ doubled male sign ⚤ interlocked female and male sign ⚥ male and female sign ⚦ male with stroke sign ⚧ male with stroke and male and female sign ⚨ vertical male with stroke sign ⚩ horizontal male with stroke sign ⚪ medium white circle ⚫ medium black circle ⚬ medium small white circle ⚭ marriage symbol ⚮ divorce symbol ⚯ unmarried partnership symbol ⚰ coffin ⚱ funeral urn ⚲ neuter ⚳ ceres ⚴ pallas ⚵ juno ⚶ vesta ⚷ chiron ⚸ black moon lilith ⚹ sextile ⚺ semisextile ⚻ quincunx ⚼ sesquiquadrate ⚽ soccer ball ⚾ baseball ⚿ squared key ⛀ white draughts man ⛁ white draughts king ⛂ black draughts man ⛃ black draughts king ⛄ snowman without snow ⛅ sun behind cloud ⛆ rain ⛇ black snowman ⛈ thunder cloud and rain ⛉ turned white shogi piece ⛊ turned black shogi piece ⛋ white diamond in square ⛌ crossing lanes ⛍ disabled car ⛎ ophiuchus ⛏ pick ⛐ car sliding ⛑ helmet with white cross ⛒ circled crossing lanes ⛓ chains ⛔ no entry ⛕ alternate one-way left way traffic ⛖ black two-way left way traffic ⛗ white two-way left way traffic ⛘ black left lane merge ⛙ white left lane merge ⛚ drive slow sign ⛛ heavy white down-pointing triangle ⛜ left closed entry ⛝ squared saltire ⛞ falling diagonal in white circle in black square ⛟ black truck ⛠ restricted left entry-1 ⛡ restricted left entry-2 ⛢ astronomical symbol for uranus ⛣ heavy circle with stroke and two dots above ⛤ pentagram ⛥ right-handed interlaced pentagram ⛦ left-handed interlaced pentagram ⛧ inverted pentagram ⛨ black cross on shield ⛩ shinto shrine ⛪ church ⛫ castle ⛬ historic site ⛭ gear without hub ⛮ gear with handles ⛯ map symbol for lighthouse ⛰ mountain ⛱ umbrella on ground ⛲ fountain ⛳ flag in hole ⛴ ferry ⛵ sailboat ⛶ square four corners ⛷ skier ⛸ ice skate ⛹ person with ball ⛺ tent ⛻ japanese bank symbol ⛼ headstone graveyard symbol ⛽ fuel pump ⛾ cup on black square ⛿ white flag with horizontal middle black stripe ✀ black safety scissors ✁ upper blade scissors ✂ black scissors ✃ lower blade scissors ✄ white scissors ✅ white heavy check mark ✆ telephone location sign ✇ tape drive ✈ airplane ✉ envelope ✊ raised fist ✋ raised hand ✌ victory hand ✍ writing hand ✎ lower right pencil ✏ pencil ✐ upper right pencil ✑ white nib ✒ black nib ✓ check mark ✔ heavy check mark ✕ multiplication x ✖ heavy multiplication x ✗ ballot x ✘ heavy ballot x ✙ outlined greek cross ✚ heavy greek cross ✛ open centre cross ✜ heavy open centre cross ✝ latin cross ✞ shadowed white latin cross ✟ outlined latin cross ✠ maltese cross ✡ star of david ✢ four teardrop-spoked asterisk ✣ four balloon-spoked asterisk ✤ heavy four balloon-spoked asterisk ✥ four club-spoked asterisk ✦ black four pointed star ✧ white four pointed star ✨ sparkles ✩ stress outlined white star ✪ circled white star ✫ open centre black star ✬ black centre white star ✭ outlined black star ✮ heavy outlined black star ✯ pinwheel star ✰ shadowed white star ✱ heavy asterisk ✲ open centre asterisk ✳ eight spoked asterisk ✴ eight pointed black star ✵ eight pointed pinwheel star ✶ six pointed black star ✷ eight pointed rectilinear black star ✸ heavy eight pointed rectilinear black star ✹ twelve pointed black star ✺ sixteen pointed asterisk ✻ teardrop-spoked asterisk ✼ open centre teardrop-spoked asterisk ✽ heavy teardrop-spoked asterisk ✾ six petalled black and white florette ✿ black florette ❀ white florette ❁ eight petalled outlined black florette ❂ circled open centre eight pointed star ❃ heavy teardrop-spoked pinwheel asterisk ❄ snowflake ❅ tight trifoliate snowflake ❆ heavy chevron snowflake ❇ sparkle ❈ heavy sparkle ❉ balloon-spoked asterisk ❊ eight teardrop-spoked propeller asterisk ❋ heavy eight teardrop-spoked propeller asterisk ❌ cross mark ❍ shadowed white circle ❎ negative squared cross mark ❏ lower right drop-shadowed white square ❐ upper right drop-shadowed white square ❑ lower right shadowed white square ❒ upper right shadowed white square ❓ black question mark ornament ❔ white question mark ornament ❕ white exclamation mark ornament ❖ black diamond minus white x ❗ heavy exclamation mark symbol ❘ light vertical bar ❙ medium vertical bar ❚ heavy vertical bar ❛ heavy single turned comma quotation mark ornament ❜ heavy single comma quotation mark ornament ❝ heavy double turned comma quotation mark ornament ❞ heavy double comma quotation mark ornament ❟ heavy low single comma quotation mark ornament ❠ heavy low double comma quotation mark ornament ❡ curved stem paragraph sign ornament ❢ heavy exclamation mark ornament ❣ heavy heart exclamation mark ornament ❤ heavy black heart ❥ rotated heavy black heart bullet ❦ floral heart ❧ rotated floral heart bullet ❨ medium left parenthesis ornament ❩ medium right parenthesis ornament ❪ medium flattened left parenthesis ornament ❫ medium flattened right parenthesis ornament ❬ medium left-pointing angle bracket ornament ❭ medium right-pointing angle bracket ornament ❮ heavy left-pointing angle quotation mark ornament ❯ heavy right-pointing angle quotation mark ornament ❰ heavy left-pointing angle bracket ornament ❱ heavy right-pointing angle bracket ornament ❲ light left tortoise shell bracket ornament ❳ light right tortoise shell bracket ornament ❴ medium left curly bracket ornament ❵ medium right curly bracket ornament ❶ dingbat negative circled digit one ❷ dingbat negative circled digit two ❸ dingbat negative circled digit three ❹ dingbat negative circled digit four ❺ dingbat negative circled digit five ❻ dingbat negative circled digit six ❼ dingbat negative circled digit seven ❽ dingbat negative circled digit eight ❾ dingbat negative circled digit nine ❿ dingbat negative circled number ten ➀ dingbat circled sans-serif digit one ➁ dingbat circled sans-serif digit two ➂ dingbat circled sans-serif digit three ➃ dingbat circled sans-serif digit four ➄ dingbat circled sans-serif digit five ➅ dingbat circled sans-serif digit six ➆ dingbat circled sans-serif digit seven ➇ dingbat circled sans-serif digit eight ➈ dingbat circled sans-serif digit nine ➉ dingbat circled sans-serif number ten ➊ dingbat negative circled sans-serif digit one ➋ dingbat negative circled sans-serif digit two ➌ dingbat negative circled sans-serif digit three ➍ dingbat negative circled sans-serif digit four ➎ dingbat negative circled sans-serif digit five ➏ dingbat negative circled sans-serif digit six ➐ dingbat negative circled sans-serif digit seven ➑ dingbat negative circled sans-serif digit eight ➒ dingbat negative circled sans-serif digit nine ➓ dingbat negative circled sans-serif number ten ➔ heavy wide-headed rightwards arrow ➕ heavy plus sign ➖ heavy minus sign ➗ heavy division sign ➘ heavy south east arrow ➙ heavy rightwards arrow ➚ heavy north east arrow ➛ drafting point rightwards arrow ➜ heavy round-tipped rightwards arrow ➝ triangle-headed rightwards arrow ➞ heavy triangle-headed rightwards arrow ➟ dashed triangle-headed rightwards arrow ➠ heavy dashed triangle-headed rightwards arrow ➡ black rightwards arrow ➢ three-d top-lighted rightwards arrowhead ➣ three-d bottom-lighted rightwards arrowhead ➤ black rightwards arrowhead ➥ heavy black curved downwards and rightwards arrow ➦ heavy black curved upwards and rightwards arrow ➧ squat black rightwards arrow ➨ heavy concave-pointed black rightwards arrow ➩ right-shaded white rightwards arrow ➪ left-shaded white rightwards arrow ➫ back-tilted shadowed white rightwards arrow ➬ front-tilted shadowed white rightwards arrow ➭ heavy lower right-shadowed white rightwards arrow ➮ heavy upper right-shadowed white rightwards arrow ➯ notched lower right-shadowed white rightwards arrow ➰ curly loop ➱ notched upper right-shadowed white rightwards arrow ➲ circled heavy white rightwards arrow ➳ white-feathered rightwards arrow ➴ black-feathered south east arrow ➵ black-feathered rightwards arrow ➶ black-feathered north east arrow ➷ heavy black-feathered south east arrow ➸ heavy black-feathered rightwards arrow ➹ heavy black-feathered north east arrow ➺ teardrop-barbed rightwards arrow ➻ heavy teardrop-shanked rightwards arrow ➼ wedge-tailed rightwards arrow ➽ heavy wedge-tailed rightwards arrow ➾ open-outlined rightwards arrow ➿ double curly loop ⟀ three dimensional angle ⟁ white triangle containing small white triangle ⟂ perpendicular ⟃ open subset ⟄ open superset ⟅ left s-shaped bag delimiter ⟆ right s-shaped bag delimiter ⟇ or with dot inside ⟈ reverse solidus preceding subset ⟉ superset preceding solidus ⟊ vertical bar with horizontal stroke ⟋ mathematical rising diagonal ⟌ long division ⟍ mathematical falling diagonal ⟎ squared logical and ⟏ squared logical or ⟐ white diamond with centred dot ⟑ and with dot ⟒ element of opening upwards ⟓ lower right corner with dot ⟔ upper left corner with dot ⟕ left outer join ⟖ right outer join ⟗ full outer join ⟘ large up tack ⟙ large down tack ⟚ left and right double turnstile ⟛ left and right tack ⟜ left multimap ⟝ long right tack ⟞ long left tack ⟟ up tack with circle above ⟠ lozenge divided by horizontal rule ⟡ white concave-sided diamond ⟢ white concave-sided diamond with leftwards tick ⟣ white concave-sided diamond with rightwards tick ⟤ white square with leftwards tick ⟥ white square with rightwards tick ⟦ mathematical left white square bracket ⟧ mathematical right white square bracket ⟨ mathematical left angle bracket ⟩ mathematical right angle bracket ⟪ mathematical left double angle bracket ⟫ mathematical right double angle bracket ⟬ mathematical left white tortoise shell bracket ⟭ mathematical right white tortoise shell bracket ⟮ mathematical left flattened parenthesis ⟯ mathematical right flattened parenthesis ⟰ upwards quadruple arrow ⟱ downwards quadruple arrow ⟲ anticlockwise gapped circle arrow ⟳ clockwise gapped circle arrow ⟴ right arrow with circled plus ⟵ long leftwards arrow ⟶ long rightwards arrow ⟷ long left right arrow ⟸ long leftwards double arrow ⟹ long rightwards double arrow ⟺ long left right double arrow ⟻ long leftwards arrow from bar ⟼ long rightwards arrow from bar ⟽ long leftwards double arrow from bar ⟾ long rightwards double arrow from bar ⟿ long rightwards squiggle arrow ⠀ braille pattern blank ⠁ braille pattern dots-1 ⠂ braille pattern dots-2 ⠃ braille pattern dots-12 ⠄ braille pattern dots-3 ⠅ braille pattern dots-13 ⠆ braille pattern dots-23 ⠇ braille pattern dots-123 ⠈ braille pattern dots-4 ⠉ braille pattern dots-14 ⠊ braille pattern dots-24 ⠋ braille pattern dots-124 ⠌ braille pattern dots-34 ⠍ braille pattern dots-134 ⠎ braille pattern dots-234 ⠏ braille pattern dots-1234 ⠐ braille pattern dots-5 ⠑ braille pattern dots-15 ⠒ braille pattern dots-25 ⠓ braille pattern dots-125 ⠔ braille pattern dots-35 ⠕ braille pattern dots-135 ⠖ braille pattern dots-235 ⠗ braille pattern dots-1235 ⠘ braille pattern dots-45 ⠙ braille pattern dots-145 ⠚ braille pattern dots-245 ⠛ braille pattern dots-1245 ⠜ braille pattern dots-345 ⠝ braille pattern dots-1345 ⠞ braille pattern dots-2345 ⠟ braille pattern dots-12345 ⠠ braille pattern dots-6 ⠡ braille pattern dots-16 ⠢ braille pattern dots-26 ⠣ braille pattern dots-126 ⠤ braille pattern dots-36 ⠥ braille pattern dots-136 ⠦ braille pattern dots-236 ⠧ braille pattern dots-1236 ⠨ braille pattern dots-46 ⠩ braille pattern dots-146 ⠪ braille pattern dots-246 ⠫ braille pattern dots-1246 ⠬ braille pattern dots-346 ⠭ braille pattern dots-1346 ⠮ braille pattern dots-2346 ⠯ braille pattern dots-12346 ⠰ braille pattern dots-56 ⠱ braille pattern dots-156 ⠲ braille pattern dots-256 ⠳ braille pattern dots-1256 ⠴ braille pattern dots-356 ⠵ braille pattern dots-1356 ⠶ braille pattern dots-2356 ⠷ braille pattern dots-12356 ⠸ braille pattern dots-456 ⠹ braille pattern dots-1456 ⠺ braille pattern dots-2456 ⠻ braille pattern dots-12456 ⠼ braille pattern dots-3456 ⠽ braille pattern dots-13456 ⠾ braille pattern dots-23456 ⠿ braille pattern dots-123456 ⡀ braille pattern dots-7 ⡁ braille pattern dots-17 ⡂ braille pattern dots-27 ⡃ braille pattern dots-127 ⡄ braille pattern dots-37 ⡅ braille pattern dots-137 ⡆ braille pattern dots-237 ⡇ braille pattern dots-1237 ⡈ braille pattern dots-47 ⡉ braille pattern dots-147 ⡊ braille pattern dots-247 ⡋ braille pattern dots-1247 ⡌ braille pattern dots-347 ⡍ braille pattern dots-1347 ⡎ braille pattern dots-2347 ⡏ braille pattern dots-12347 ⡐ braille pattern dots-57 ⡑ braille pattern dots-157 ⡒ braille pattern dots-257 ⡓ braille pattern dots-1257 ⡔ braille pattern dots-357 ⡕ braille pattern dots-1357 ⡖ braille pattern dots-2357 ⡗ braille pattern dots-12357 ⡘ braille pattern dots-457 ⡙ braille pattern dots-1457 ⡚ braille pattern dots-2457 ⡛ braille pattern dots-12457 ⡜ braille pattern dots-3457 ⡝ braille pattern dots-13457 ⡞ braille pattern dots-23457 ⡟ braille pattern dots-123457 ⡠ braille pattern dots-67 ⡡ braille pattern dots-167 ⡢ braille pattern dots-267 ⡣ braille pattern dots-1267 ⡤ braille pattern dots-367 ⡥ braille pattern dots-1367 ⡦ braille pattern dots-2367 ⡧ braille pattern dots-12367 ⡨ braille pattern dots-467 ⡩ braille pattern dots-1467 ⡪ braille pattern dots-2467 ⡫ braille pattern dots-12467 ⡬ braille pattern dots-3467 ⡭ braille pattern dots-13467 ⡮ braille pattern dots-23467 ⡯ braille pattern dots-123467 ⡰ braille pattern dots-567 ⡱ braille pattern dots-1567 ⡲ braille pattern dots-2567 ⡳ braille pattern dots-12567 ⡴ braille pattern dots-3567 ⡵ braille pattern dots-13567 ⡶ braille pattern dots-23567 ⡷ braille pattern dots-123567 ⡸ braille pattern dots-4567 ⡹ braille pattern dots-14567 ⡺ braille pattern dots-24567 ⡻ braille pattern dots-124567 ⡼ braille pattern dots-34567 ⡽ braille pattern dots-134567 ⡾ braille pattern dots-234567 ⡿ braille pattern dots-1234567 ⢀ braille pattern dots-8 ⢁ braille pattern dots-18 ⢂ braille pattern dots-28 ⢃ braille pattern dots-128 ⢄ braille pattern dots-38 ⢅ braille pattern dots-138 ⢆ braille pattern dots-238 ⢇ braille pattern dots-1238 ⢈ braille pattern dots-48 ⢉ braille pattern dots-148 ⢊ braille pattern dots-248 ⢋ braille pattern dots-1248 ⢌ braille pattern dots-348 ⢍ braille pattern dots-1348 ⢎ braille pattern dots-2348 ⢏ braille pattern dots-12348 ⢐ braille pattern dots-58 ⢑ braille pattern dots-158 ⢒ braille pattern dots-258 ⢓ braille pattern dots-1258 ⢔ braille pattern dots-358 ⢕ braille pattern dots-1358 ⢖ braille pattern dots-2358 ⢗ braille pattern dots-12358 ⢘ braille pattern dots-458 ⢙ braille pattern dots-1458 ⢚ braille pattern dots-2458 ⢛ braille pattern dots-12458 ⢜ braille pattern dots-3458 ⢝ braille pattern dots-13458 ⢞ braille pattern dots-23458 ⢟ braille pattern dots-123458 ⢠ braille pattern dots-68 ⢡ braille pattern dots-168 ⢢ braille pattern dots-268 ⢣ braille pattern dots-1268 ⢤ braille pattern dots-368 ⢥ braille pattern dots-1368 ⢦ braille pattern dots-2368 ⢧ braille pattern dots-12368 ⢨ braille pattern dots-468 ⢩ braille pattern dots-1468 ⢪ braille pattern dots-2468 ⢫ braille pattern dots-12468 ⢬ braille pattern dots-3468 ⢭ braille pattern dots-13468 ⢮ braille pattern dots-23468 ⢯ braille pattern dots-123468 ⢰ braille pattern dots-568 ⢱ braille pattern dots-1568 ⢲ braille pattern dots-2568 ⢳ braille pattern dots-12568 ⢴ braille pattern dots-3568 ⢵ braille pattern dots-13568 ⢶ braille pattern dots-23568 ⢷ braille pattern dots-123568 ⢸ braille pattern dots-4568 ⢹ braille pattern dots-14568 ⢺ braille pattern dots-24568 ⢻ braille pattern dots-124568 ⢼ braille pattern dots-34568 ⢽ braille pattern dots-134568 ⢾ braille pattern dots-234568 ⢿ braille pattern dots-1234568 ⣀ braille pattern dots-78 ⣁ braille pattern dots-178 ⣂ braille pattern dots-278 ⣃ braille pattern dots-1278 ⣄ braille pattern dots-378 ⣅ braille pattern dots-1378 ⣆ braille pattern dots-2378 ⣇ braille pattern dots-12378 ⣈ braille pattern dots-478 ⣉ braille pattern dots-1478 ⣊ braille pattern dots-2478 ⣋ braille pattern dots-12478 ⣌ braille pattern dots-3478 ⣍ braille pattern dots-13478 ⣎ braille pattern dots-23478 ⣏ braille pattern dots-123478 ⣐ braille pattern dots-578 ⣑ braille pattern dots-1578 ⣒ braille pattern dots-2578 ⣓ braille pattern dots-12578 ⣔ braille pattern dots-3578 ⣕ braille pattern dots-13578 ⣖ braille pattern dots-23578 ⣗ braille pattern dots-123578 ⣘ braille pattern dots-4578 ⣙ braille pattern dots-14578 ⣚ braille pattern dots-24578 ⣛ braille pattern dots-124578 ⣜ braille pattern dots-34578 ⣝ braille pattern dots-134578 ⣞ braille pattern dots-234578 ⣟ braille pattern dots-1234578 ⣠ braille pattern dots-678 ⣡ braille pattern dots-1678 ⣢ braille pattern dots-2678 ⣣ braille pattern dots-12678 ⣤ braille pattern dots-3678 ⣥ braille pattern dots-13678 ⣦ braille pattern dots-23678 ⣧ braille pattern dots-123678 ⣨ braille pattern dots-4678 ⣩ braille pattern dots-14678 ⣪ braille pattern dots-24678 ⣫ braille pattern dots-124678 ⣬ braille pattern dots-34678 ⣭ braille pattern dots-134678 ⣮ braille pattern dots-234678 ⣯ braille pattern dots-1234678 ⣰ braille pattern dots-5678 ⣱ braille pattern dots-15678 ⣲ braille pattern dots-25678 ⣳ braille pattern dots-125678 ⣴ braille pattern dots-35678 ⣵ braille pattern dots-135678 ⣶ braille pattern dots-235678 ⣷ braille pattern dots-1235678 ⣸ braille pattern dots-45678 ⣹ braille pattern dots-145678 ⣺ braille pattern dots-245678 ⣻ braille pattern dots-1245678 ⣼ braille pattern dots-345678 ⣽ braille pattern dots-1345678 ⣾ braille pattern dots-2345678 ⣿ braille pattern dots-12345678 ⤀ rightwards two-headed arrow with vertical stroke ⤁ rightwards two-headed arrow with double vertical stroke ⤂ leftwards double arrow with vertical stroke ⤃ rightwards double arrow with vertical stroke ⤄ left right double arrow with vertical stroke ⤅ rightwards two-headed arrow from bar ⤆ leftwards double arrow from bar ⤇ rightwards double arrow from bar ⤈ downwards arrow with horizontal stroke ⤉ upwards arrow with horizontal stroke ⤊ upwards triple arrow ⤋ downwards triple arrow ⤌ leftwards double dash arrow ⤍ rightwards double dash arrow ⤎ leftwards triple dash arrow ⤏ rightwards triple dash arrow ⤐ rightwards two-headed triple dash arrow ⤑ rightwards arrow with dotted stem ⤒ upwards arrow to bar ⤓ downwards arrow to bar ⤔ rightwards arrow with tail with vertical stroke ⤕ rightwards arrow with tail with double vertical stroke ⤖ rightwards two-headed arrow with tail ⤗ rightwards two-headed arrow with tail with vertical stroke ⤘ rightwards two-headed arrow with tail with double vertical stroke ⤙ leftwards arrow-tail ⤚ rightwards arrow-tail ⤛ leftwards double arrow-tail ⤜ rightwards double arrow-tail ⤝ leftwards arrow to black diamond ⤞ rightwards arrow to black diamond ⤟ leftwards arrow from bar to black diamond ⤠ rightwards arrow from bar to black diamond ⤡ north west and south east arrow ⤢ north east and south west arrow ⤣ north west arrow with hook ⤤ north east arrow with hook ⤥ south east arrow with hook ⤦ south west arrow with hook ⤧ north west arrow and north east arrow ⤨ north east arrow and south east arrow ⤩ south east arrow and south west arrow ⤪ south west arrow and north west arrow ⤫ rising diagonal crossing falling diagonal ⤬ falling diagonal crossing rising diagonal ⤭ south east arrow crossing north east arrow ⤮ north east arrow crossing south east arrow ⤯ falling diagonal crossing north east arrow ⤰ rising diagonal crossing south east arrow ⤱ north east arrow crossing north west arrow ⤲ north west arrow crossing north east arrow ⤳ wave arrow pointing directly right ⤴ arrow pointing rightwards then curving upwards ⤵ arrow pointing rightwards then curving downwards ⤶ arrow pointing downwards then curving leftwards ⤷ arrow pointing downwards then curving rightwards ⤸ right-side arc clockwise arrow ⤹ left-side arc anticlockwise arrow ⤺ top arc anticlockwise arrow ⤻ bottom arc anticlockwise arrow ⤼ top arc clockwise arrow with minus ⤽ top arc anticlockwise arrow with plus ⤾ lower right semicircular clockwise arrow ⤿ lower left semicircular anticlockwise arrow ⥀ anticlockwise closed circle arrow ⥁ clockwise closed circle arrow ⥂ rightwards arrow above short leftwards arrow ⥃ leftwards arrow above short rightwards arrow ⥄ short rightwards arrow above leftwards arrow ⥅ rightwards arrow with plus below ⥆ leftwards arrow with plus below ⥇ rightwards arrow through x ⥈ left right arrow through small circle ⥉ upwards two-headed arrow from small circle ⥊ left barb up right barb down harpoon ⥋ left barb down right barb up harpoon ⥌ up barb right down barb left harpoon ⥍ up barb left down barb right harpoon ⥎ left barb up right barb up harpoon ⥏ up barb right down barb right harpoon ⥐ left barb down right barb down harpoon ⥑ up barb left down barb left harpoon ⥒ leftwards harpoon with barb up to bar ⥓ rightwards harpoon with barb up to bar ⥔ upwards harpoon with barb right to bar ⥕ downwards harpoon with barb right to bar ⥖ leftwards harpoon with barb down to bar ⥗ rightwards harpoon with barb down to bar ⥘ upwards harpoon with barb left to bar ⥙ downwards harpoon with barb left to bar ⥚ leftwards harpoon with barb up from bar ⥛ rightwards harpoon with barb up from bar ⥜ upwards harpoon with barb right from bar ⥝ downwards harpoon with barb right from bar ⥞ leftwards harpoon with barb down from bar ⥟ rightwards harpoon with barb down from bar ⥠ upwards harpoon with barb left from bar ⥡ downwards harpoon with barb left from bar ⥢ leftwards harpoon with barb up above leftwards harpoon with barb down ⥣ upwards harpoon with barb left beside upwards harpoon with barb right ⥤ rightwards harpoon with barb up above rightwards harpoon with barb down ⥥ downwards harpoon with barb left beside downwards harpoon with barb right ⥦ leftwards harpoon with barb up above rightwards harpoon with barb up ⥧ leftwards harpoon with barb down above rightwards harpoon with barb down ⥨ rightwards harpoon with barb up above leftwards harpoon with barb up ⥩ rightwards harpoon with barb down above leftwards harpoon with barb down ⥪ leftwards harpoon with barb up above long dash ⥫ leftwards harpoon with barb down below long dash ⥬ rightwards harpoon with barb up above long dash ⥭ rightwards harpoon with barb down below long dash ⥮ upwards harpoon with barb left beside downwards harpoon with barb right ⥯ downwards harpoon with barb left beside upwards harpoon with barb right ⥰ right double arrow with rounded head ⥱ equals sign above rightwards arrow ⥲ tilde operator above rightwards arrow ⥳ leftwards arrow above tilde operator ⥴ rightwards arrow above tilde operator ⥵ rightwards arrow above almost equal to ⥶ less-than above leftwards arrow ⥷ leftwards arrow through less-than ⥸ greater-than above rightwards arrow ⥹ subset above rightwards arrow ⥺ leftwards arrow through subset ⥻ superset above leftwards arrow ⥼ left fish tail ⥽ right fish tail ⥾ up fish tail ⥿ down fish tail ⦀ triple vertical bar delimiter ⦁ z notation spot ⦂ z notation type colon ⦃ left white curly bracket ⦄ right white curly bracket ⦅ left white parenthesis ⦆ right white parenthesis ⦇ z notation left image bracket ⦈ z notation right image bracket ⦉ z notation left binding bracket ⦊ z notation right binding bracket ⦋ left square bracket with underbar ⦌ right square bracket with underbar ⦍ left square bracket with tick in top corner ⦎ right square bracket with tick in bottom corner ⦏ left square bracket with tick in bottom corner ⦐ right square bracket with tick in top corner ⦑ left angle bracket with dot ⦒ right angle bracket with dot ⦓ left arc less-than bracket ⦔ right arc greater-than bracket ⦕ double left arc greater-than bracket ⦖ double right arc less-than bracket ⦗ left black tortoise shell bracket ⦘ right black tortoise shell bracket ⦙ dotted fence ⦚ vertical zigzag line ⦛ measured angle opening left ⦜ right angle variant with square ⦝ measured right angle with dot ⦞ angle with s inside ⦟ acute angle ⦠ spherical angle opening left ⦡ spherical angle opening up ⦢ turned angle ⦣ reversed angle ⦤ angle with underbar ⦥ reversed angle with underbar ⦦ oblique angle opening up ⦧ oblique angle opening down ⦨ measured angle with open arm ending in arrow pointing up and right ⦩ measured angle with open arm ending in arrow pointing up and left ⦪ measured angle with open arm ending in arrow pointing down and right ⦫ measured angle with open arm ending in arrow pointing down and left ⦬ measured angle with open arm ending in arrow pointing right and up ⦭ measured angle with open arm ending in arrow pointing left and up ⦮ measured angle with open arm ending in arrow pointing right and down ⦯ measured angle with open arm ending in arrow pointing left and down ⦰ reversed empty set ⦱ empty set with overbar ⦲ empty set with small circle above ⦳ empty set with right arrow above ⦴ empty set with left arrow above ⦵ circle with horizontal bar ⦶ circled vertical bar ⦷ circled parallel ⦸ circled reverse solidus ⦹ circled perpendicular ⦺ circle divided by horizontal bar and top half divided by vertical bar ⦻ circle with superimposed x ⦼ circled anticlockwise-rotated division sign ⦽ up arrow through circle ⦾ circled white bullet ⦿ circled bullet ⧀ circled less-than ⧁ circled greater-than ⧂ circle with small circle to the right ⧃ circle with two horizontal strokes to the right ⧄ squared rising diagonal slash ⧅ squared falling diagonal slash ⧆ squared asterisk ⧇ squared small circle ⧈ squared square ⧉ two joined squares ⧊ triangle with dot above ⧋ triangle with underbar ⧌ s in triangle ⧍ triangle with serifs at bottom ⧎ right triangle above left triangle ⧏ left triangle beside vertical bar ⧐ vertical bar beside right triangle ⧑ bowtie with left half black ⧒ bowtie with right half black ⧓ black bowtie ⧔ times with left half black ⧕ times with right half black ⧖ white hourglass ⧗ black hourglass ⧘ left wiggly fence ⧙ right wiggly fence ⧚ left double wiggly fence ⧛ right double wiggly fence ⧜ incomplete infinity ⧝ tie over infinity ⧞ infinity negated with vertical bar ⧟ double-ended multimap ⧠ square with contoured outline ⧡ increases as ⧢ shuffle product ⧣ equals sign and slanted parallel ⧤ equals sign and slanted parallel with tilde above ⧥ identical to and slanted parallel ⧦ gleich stark ⧧ thermodynamic ⧨ down-pointing triangle with left half black ⧩ down-pointing triangle with right half black ⧪ black diamond with down arrow ⧫ black lozenge ⧬ white circle with down arrow ⧭ black circle with down arrow ⧮ error-barred white square ⧯ error-barred black square ⧰ error-barred white diamond ⧱ error-barred black diamond ⧲ error-barred white circle ⧳ error-barred black circle ⧴ rule-delayed ⧵ reverse solidus operator ⧶ solidus with overbar ⧷ reverse solidus with horizontal stroke ⧸ big solidus ⧹ big reverse solidus ⧺ double plus ⧻ triple plus ⧼ left-pointing curved angle bracket ⧽ right-pointing curved angle bracket ⧾ tiny ⧿ miny ⨀ n-ary circled dot operator ⨁ n-ary circled plus operator ⨂ n-ary circled times operator ⨃ n-ary union operator with dot ⨄ n-ary union operator with plus ⨅ n-ary square intersection operator ⨆ n-ary square union operator ⨇ two logical and operator ⨈ two logical or operator ⨉ n-ary times operator ⨊ modulo two sum ⨋ summation with integral ⨌ quadruple integral operator ⨍ finite part integral ⨎ integral with double stroke ⨏ integral average with slash ⨐ circulation function ⨑ anticlockwise integration ⨒ line integration with rectangular path around pole ⨓ line integration with semicircular path around pole ⨔ line integration not including the pole ⨕ integral around a point operator ⨖ quaternion integral operator ⨗ integral with leftwards arrow with hook ⨘ integral with times sign ⨙ integral with intersection ⨚ integral with union ⨛ integral with overbar ⨜ integral with underbar ⨝ join ⨞ large left triangle operator ⨟ z notation schema composition ⨠ z notation schema piping ⨡ z notation schema projection ⨢ plus sign with small circle above ⨣ plus sign with circumflex accent above ⨤ plus sign with tilde above ⨥ plus sign with dot below ⨦ plus sign with tilde below ⨧ plus sign with subscript two ⨨ plus sign with black triangle ⨩ minus sign with comma above ⨪ minus sign with dot below ⨫ minus sign with falling dots ⨬ minus sign with rising dots ⨭ plus sign in left half circle ⨮ plus sign in right half circle ⨯ vector or cross product ⨰ multiplication sign with dot above ⨱ multiplication sign with underbar ⨲ semidirect product with bottom closed ⨳ smash product ⨴ multiplication sign in left half circle ⨵ multiplication sign in right half circle ⨶ circled multiplication sign with circumflex accent ⨷ multiplication sign in double circle ⨸ circled division sign ⨹ plus sign in triangle ⨺ minus sign in triangle ⨻ multiplication sign in triangle ⨼ interior product ⨽ righthand interior product ⨾ z notation relational composition ⨿ amalgamation or coproduct ⩀ intersection with dot ⩁ union with minus sign ⩂ union with overbar ⩃ intersection with overbar ⩄ intersection with logical and ⩅ union with logical or ⩆ union above intersection ⩇ intersection above union ⩈ union above bar above intersection ⩉ intersection above bar above union ⩊ union beside and joined with union ⩋ intersection beside and joined with intersection ⩌ closed union with serifs ⩍ closed intersection with serifs ⩎ double square intersection ⩏ double square union ⩐ closed union with serifs and smash product ⩑ logical and with dot above ⩒ logical or with dot above ⩓ double logical and ⩔ double logical or ⩕ two intersecting logical and ⩖ two intersecting logical or ⩗ sloping large or ⩘ sloping large and ⩙ logical or overlapping logical and ⩚ logical and with middle stem ⩛ logical or with middle stem ⩜ logical and with horizontal dash ⩝ logical or with horizontal dash ⩞ logical and with double overbar ⩟ logical and with underbar ⩠ logical and with double underbar ⩡ small vee with underbar ⩢ logical or with double overbar ⩣ logical or with double underbar ⩤ z notation domain antirestriction ⩥ z notation range antirestriction ⩦ equals sign with dot below ⩧ identical with dot above ⩨ triple horizontal bar with double vertical stroke ⩩ triple horizontal bar with triple vertical stroke ⩪ tilde operator with dot above ⩫ tilde operator with rising dots ⩬ similar minus similar ⩭ congruent with dot above ⩮ equals with asterisk ⩯ almost equal to with circumflex accent ⩰ approximately equal or equal to ⩱ equals sign above plus sign ⩲ plus sign above equals sign ⩳ equals sign above tilde operator ⩴ double colon equal ⩵ two consecutive equals signs ⩶ three consecutive equals signs ⩷ equals sign with two dots above and two dots below ⩸ equivalent with four dots above ⩹ less-than with circle inside ⩺ greater-than with circle inside ⩻ less-than with question mark above ⩼ greater-than with question mark above ⩽ less-than or slanted equal to ⩾ greater-than or slanted equal to ⩿ less-than or slanted equal to with dot inside ⪀ greater-than or slanted equal to with dot inside ⪁ less-than or slanted equal to with dot above ⪂ greater-than or slanted equal to with dot above ⪃ less-than or slanted equal to with dot above right ⪄ greater-than or slanted equal to with dot above left ⪅ less-than or approximate ⪆ greater-than or approximate ⪇ less-than and single-line not equal to ⪈ greater-than and single-line not equal to ⪉ less-than and not approximate ⪊ greater-than and not approximate ⪋ less-than above double-line equal above greater-than ⪌ greater-than above double-line equal above less-than ⪍ less-than above similar or equal ⪎ greater-than above similar or equal ⪏ less-than above similar above greater-than ⪐ greater-than above similar above less-than ⪑ less-than above greater-than above double-line equal ⪒ greater-than above less-than above double-line equal ⪓ less-than above slanted equal above greater-than above slanted equal ⪔ greater-than above slanted equal above less-than above slanted equal ⪕ slanted equal to or less-than ⪖ slanted equal to or greater-than ⪗ slanted equal to or less-than with dot inside ⪘ slanted equal to or greater-than with dot inside ⪙ double-line equal to or less-than ⪚ double-line equal to or greater-than ⪛ double-line slanted equal to or less-than ⪜ double-line slanted equal to or greater-than ⪝ similar or less-than ⪞ similar or greater-than ⪟ similar above less-than above equals sign ⪠ similar above greater-than above equals sign ⪡ double nested less-than ⪢ double nested greater-than ⪣ double nested less-than with underbar ⪤ greater-than overlapping less-than ⪥ greater-than beside less-than ⪦ less-than closed by curve ⪧ greater-than closed by curve ⪨ less-than closed by curve above slanted equal ⪩ greater-than closed by curve above slanted equal ⪪ smaller than ⪫ larger than ⪬ smaller than or equal to ⪭ larger than or equal to ⪮ equals sign with bumpy above ⪯ precedes above single-line equals sign ⪰ succeeds above single-line equals sign ⪱ precedes above single-line not equal to ⪲ succeeds above single-line not equal to ⪳ precedes above equals sign ⪴ succeeds above equals sign ⪵ precedes above not equal to ⪶ succeeds above not equal to ⪷ precedes above almost equal to ⪸ succeeds above almost equal to ⪹ precedes above not almost equal to ⪺ succeeds above not almost equal to ⪻ double precedes ⪼ double succeeds ⪽ subset with dot ⪾ superset with dot ⪿ subset with plus sign below ⫀ superset with plus sign below ⫁ subset with multiplication sign below ⫂ superset with multiplication sign below ⫃ subset of or equal to with dot above ⫄ superset of or equal to with dot above ⫅ subset of above equals sign ⫆ superset of above equals sign ⫇ subset of above tilde operator ⫈ superset of above tilde operator ⫉ subset of above almost equal to ⫊ superset of above almost equal to ⫋ subset of above not equal to ⫌ superset of above not equal to ⫍ square left open box operator ⫎ square right open box operator ⫏ closed subset ⫐ closed superset ⫑ closed subset or equal to ⫒ closed superset or equal to ⫓ subset above superset ⫔ superset above subset ⫕ subset above subset ⫖ superset above superset ⫗ superset beside subset ⫘ superset beside and joined by dash with subset ⫙ element of opening downwards ⫚ pitchfork with tee top ⫛ transversal intersection ⫝̸ forking ⫝ nonforking ⫞ short left tack ⫟ short down tack ⫠ short up tack ⫡ perpendicular with s ⫢ vertical bar triple right turnstile ⫣ double vertical bar left turnstile ⫤ vertical bar double left turnstile ⫥ double vertical bar double left turnstile ⫦ long dash from left member of double vertical ⫧ short down tack with overbar ⫨ short up tack with underbar ⫩ short up tack above short down tack ⫪ double down tack ⫫ double up tack ⫬ double stroke not sign ⫭ reversed double stroke not sign ⫮ does not divide with reversed negation slash ⫯ vertical line with circle above ⫰ vertical line with circle below ⫱ down tack with circle below ⫲ parallel with horizontal stroke ⫳ parallel with tilde operator ⫴ triple vertical bar binary relation ⫵ triple vertical bar with horizontal stroke ⫶ triple colon operator ⫷ triple nested less-than ⫸ triple nested greater-than ⫹ double-line slanted less-than or equal to ⫺ double-line slanted greater-than or equal to ⫻ triple solidus binary relation ⫼ large triple vertical bar operator ⫽ double solidus operator ⫾ white vertical bar ⫿ n-ary white vertical bar ⬀ north east white arrow ⬁ north west white arrow ⬂ south east white arrow ⬃ south west white arrow ⬄ left right white arrow ⬅ leftwards black arrow ⬆ upwards black arrow ⬇ downwards black arrow ⬈ north east black arrow ⬉ north west black arrow ⬊ south east black arrow ⬋ south west black arrow ⬌ left right black arrow ⬍ up down black arrow ⬎ rightwards arrow with tip downwards ⬏ rightwards arrow with tip upwards ⬐ leftwards arrow with tip downwards ⬑ leftwards arrow with tip upwards ⬒ square with top half black ⬓ square with bottom half black ⬔ square with upper right diagonal half black ⬕ square with lower left diagonal half black ⬖ diamond with left half black ⬗ diamond with right half black ⬘ diamond with top half black ⬙ diamond with bottom half black ⬚ dotted square ⬛ black large square ⬜ white large square ⬝ black very small square ⬞ white very small square ⬟ black pentagon ⬠ white pentagon ⬡ white hexagon ⬢ black hexagon ⬣ horizontal black hexagon ⬤ black large circle ⬥ black medium diamond ⬦ white medium diamond ⬧ black medium lozenge ⬨ white medium lozenge ⬩ black small diamond ⬪ black small lozenge ⬫ white small lozenge ⬬ black horizontal ellipse ⬭ white horizontal ellipse ⬮ black vertical ellipse ⬯ white vertical ellipse ⬰ left arrow with small circle ⬱ three leftwards arrows ⬲ left arrow with circled plus ⬳ long leftwards squiggle arrow ⬴ leftwards two-headed arrow with vertical stroke ⬵ leftwards two-headed arrow with double vertical stroke ⬶ leftwards two-headed arrow from bar ⬷ leftwards two-headed triple dash arrow ⬸ leftwards arrow with dotted stem ⬹ leftwards arrow with tail with vertical stroke ⬺ leftwards arrow with tail with double vertical stroke ⬻ leftwards two-headed arrow with tail ⬼ leftwards two-headed arrow with tail with vertical stroke ⬽ leftwards two-headed arrow with tail with double vertical stroke ⬾ leftwards arrow through x ⬿ wave arrow pointing directly left ⭀ equals sign above leftwards arrow ⭁ reverse tilde operator above leftwards arrow ⭂ leftwards arrow above reverse almost equal to ⭃ rightwards arrow through greater-than ⭄ rightwards arrow through superset ⭅ leftwards quadruple arrow ⭆ rightwards quadruple arrow ⭇ reverse tilde operator above rightwards arrow ⭈ rightwards arrow above reverse almost equal to ⭉ tilde operator above leftwards arrow ⭊ leftwards arrow above almost equal to ⭋ leftwards arrow above reverse tilde operator ⭌ rightwards arrow above reverse tilde operator ⭍ downwards triangle-headed zigzag arrow ⭎ short slanted north arrow ⭏ short backslanted south arrow ⭐ white medium star ⭑ black small star ⭒ white small star ⭓ black right-pointing pentagon ⭔ white right-pointing pentagon ⭕ heavy large circle ⭖ heavy oval with oval inside ⭗ heavy circle with circle inside ⭘ heavy circle ⭙ heavy circled saltire ⭚ slanted north arrow with hooked head ⭛ backslanted south arrow with hooked tail ⭜ slanted north arrow with horizontal tail ⭝ backslanted south arrow with horizontal tail ⭞ bent arrow pointing downwards then north east ⭟ short bent arrow pointing downwards then north east ⭠ leftwards triangle-headed arrow ⭡ upwards triangle-headed arrow ⭢ rightwards triangle-headed arrow ⭣ downwards triangle-headed arrow ⭤ left right triangle-headed arrow ⭥ up down triangle-headed arrow ⭦ north west triangle-headed arrow ⭧ north east triangle-headed arrow ⭨ south east triangle-headed arrow ⭩ south west triangle-headed arrow ⭪ leftwards triangle-headed dashed arrow ⭫ upwards triangle-headed dashed arrow ⭬ rightwards triangle-headed dashed arrow ⭭ downwards triangle-headed dashed arrow ⭮ clockwise triangle-headed open circle arrow ⭯ anticlockwise triangle-headed open circle arrow ⭰ leftwards triangle-headed arrow to bar ⭱ upwards triangle-headed arrow to bar ⭲ rightwards triangle-headed arrow to bar ⭳ downwards triangle-headed arrow to bar ⭶ north west triangle-headed arrow to bar ⭷ north east triangle-headed arrow to bar ⭸ south east triangle-headed arrow to bar ⭹ south west triangle-headed arrow to bar ⭺ leftwards triangle-headed arrow with double horizontal stroke ⭻ upwards triangle-headed arrow with double horizontal stroke ⭼ rightwards triangle-headed arrow with double horizontal stroke ⭽ downwards triangle-headed arrow with double horizontal stroke ⭾ horizontal tab key ⭿ vertical tab key ⮀ leftwards triangle-headed arrow over rightwards triangle-headed arrow ⮁ upwards triangle-headed arrow leftwards of downwards triangle-headed arrow ⮂ rightwards triangle-headed arrow over leftwards triangle-headed arrow ⮃ downwards triangle-headed arrow leftwards of upwards triangle-headed arrow ⮄ leftwards triangle-headed paired arrows ⮅ upwards triangle-headed paired arrows ⮆ rightwards triangle-headed paired arrows ⮇ downwards triangle-headed paired arrows ⮈ leftwards black circled white arrow ⮉ upwards black circled white arrow ⮊ rightwards black circled white arrow ⮋ downwards black circled white arrow ⮌ anticlockwise triangle-headed right u-shaped arrow ⮍ anticlockwise triangle-headed bottom u-shaped arrow ⮎ anticlockwise triangle-headed left u-shaped arrow ⮏ anticlockwise triangle-headed top u-shaped arrow ⮐ return left ⮑ return right ⮒ newline left ⮓ newline right ⮔ four corner arrows circling anticlockwise ⮕ rightwards black arrow ⮘ three-d top-lighted leftwards equilateral arrowhead ⮙ three-d right-lighted upwards equilateral arrowhead ⮚ three-d top-lighted rightwards equilateral arrowhead ⮛ three-d left-lighted downwards equilateral arrowhead ⮜ black leftwards equilateral arrowhead ⮝ black upwards equilateral arrowhead ⮞ black rightwards equilateral arrowhead ⮟ black downwards equilateral arrowhead ⮠ downwards triangle-headed arrow with long tip leftwards ⮡ downwards triangle-headed arrow with long tip rightwards ⮢ upwards triangle-headed arrow with long tip leftwards ⮣ upwards triangle-headed arrow with long tip rightwards ⮤ leftwards triangle-headed arrow with long tip upwards ⮥ rightwards triangle-headed arrow with long tip upwards ⮦ leftwards triangle-headed arrow with long tip downwards ⮧ rightwards triangle-headed arrow with long tip downwards ⮨ black curved downwards and leftwards arrow ⮩ black curved downwards and rightwards arrow ⮪ black curved upwards and leftwards arrow ⮫ black curved upwards and rightwards arrow ⮬ black curved leftwards and upwards arrow ⮭ black curved rightwards and upwards arrow ⮮ black curved leftwards and downwards arrow ⮯ black curved rightwards and downwards arrow ⮰ ribbon arrow down left ⮱ ribbon arrow down right ⮲ ribbon arrow up left ⮳ ribbon arrow up right ⮴ ribbon arrow left up ⮵ ribbon arrow right up ⮶ ribbon arrow left down ⮷ ribbon arrow right down ⮸ upwards white arrow from bar with horizontal bar ⮹ up arrowhead in a rectangle box ⮽ ballot box with light x ⮾ circled x ⮿ circled bold x ⯀ black square centred ⯁ black diamond centred ⯂ turned black pentagon ⯃ horizontal black octagon ⯄ black octagon ⯅ black medium up-pointing triangle centred ⯆ black medium down-pointing triangle centred ⯇ black medium left-pointing triangle centred ⯈ black medium right-pointing triangle centred ⯊ top half black circle ⯋ bottom half black circle ⯌ light four pointed black cusp ⯍ rotated light four pointed black cusp ⯎ white four pointed cusp ⯏ rotated white four pointed cusp ⯐ square position indicator ⯑ uncertainty sign ⯬ leftwards two-headed arrow with triangle arrowheads ⯭ upwards two-headed arrow with triangle arrowheads ⯮ rightwards two-headed arrow with triangle arrowheads ⯯ downwards two-headed arrow with triangle arrowheads Ⰰ glagolitic capital letter azu Ⰱ glagolitic capital letter buky Ⰲ glagolitic capital letter vede Ⰳ glagolitic capital letter glagoli Ⰴ glagolitic capital letter dobro Ⰵ glagolitic capital letter yestu Ⰶ glagolitic capital letter zhivete Ⰷ glagolitic capital letter dzelo Ⰸ glagolitic capital letter zemlja Ⰹ glagolitic capital letter izhe Ⰺ glagolitic capital letter initial izhe Ⰻ glagolitic capital letter i Ⰼ glagolitic capital letter djervi Ⰽ glagolitic capital letter kako Ⰾ glagolitic capital letter ljudije Ⰿ glagolitic capital letter myslite Ⱀ glagolitic capital letter nashi Ⱁ glagolitic capital letter onu Ⱂ glagolitic capital letter pokoji Ⱃ glagolitic capital letter ritsi Ⱄ glagolitic capital letter slovo Ⱅ glagolitic capital letter tvrido Ⱆ glagolitic capital letter uku Ⱇ glagolitic capital letter fritu Ⱈ glagolitic capital letter heru Ⱉ glagolitic capital letter otu Ⱊ glagolitic capital letter pe Ⱋ glagolitic capital letter shta Ⱌ glagolitic capital letter tsi Ⱍ glagolitic capital letter chrivi Ⱎ glagolitic capital letter sha Ⱏ glagolitic capital letter yeru Ⱐ glagolitic capital letter yeri Ⱑ glagolitic capital letter yati Ⱒ glagolitic capital letter spidery ha Ⱓ glagolitic capital letter yu Ⱔ glagolitic capital letter small yus Ⱕ glagolitic capital letter small yus with tail Ⱖ glagolitic capital letter yo Ⱗ glagolitic capital letter iotated small yus Ⱘ glagolitic capital letter big yus Ⱙ glagolitic capital letter iotated big yus Ⱚ glagolitic capital letter fita Ⱛ glagolitic capital letter izhitsa Ⱜ glagolitic capital letter shtapic Ⱝ glagolitic capital letter trokutasti a Ⱞ glagolitic capital letter latinate myslite ⰰ glagolitic small letter azu ⰱ glagolitic small letter buky ⰲ glagolitic small letter vede ⰳ glagolitic small letter glagoli ⰴ glagolitic small letter dobro ⰵ glagolitic small letter yestu ⰶ glagolitic small letter zhivete ⰷ glagolitic small letter dzelo ⰸ glagolitic small letter zemlja ⰹ glagolitic small letter izhe ⰺ glagolitic small letter initial izhe ⰻ glagolitic small letter i ⰼ glagolitic small letter djervi ⰽ glagolitic small letter kako ⰾ glagolitic small letter ljudije ⰿ glagolitic small letter myslite ⱀ glagolitic small letter nashi ⱁ glagolitic small letter onu ⱂ glagolitic small letter pokoji ⱃ glagolitic small letter ritsi ⱄ glagolitic small letter slovo ⱅ glagolitic small letter tvrido ⱆ glagolitic small letter uku ⱇ glagolitic small letter fritu ⱈ glagolitic small letter heru ⱉ glagolitic small letter otu ⱊ glagolitic small letter pe ⱋ glagolitic small letter shta ⱌ glagolitic small letter tsi ⱍ glagolitic small letter chrivi ⱎ glagolitic small letter sha ⱏ glagolitic small letter yeru ⱐ glagolitic small letter yeri ⱑ glagolitic small letter yati ⱒ glagolitic small letter spidery ha ⱓ glagolitic small letter yu ⱔ glagolitic small letter small yus ⱕ glagolitic small letter small yus with tail ⱖ glagolitic small letter yo ⱗ glagolitic small letter iotated small yus ⱘ glagolitic small letter big yus ⱙ glagolitic small letter iotated big yus ⱚ glagolitic small letter fita ⱛ glagolitic small letter izhitsa ⱜ glagolitic small letter shtapic ⱝ glagolitic small letter trokutasti a ⱞ glagolitic small letter latinate myslite Ⱡ latin capital letter l with double bar ⱡ latin small letter l with double bar Ɫ latin capital letter l with middle tilde Ᵽ latin capital letter p with stroke Ɽ latin capital letter r with tail ⱥ latin small letter a with stroke ⱦ latin small letter t with diagonal stroke Ⱨ latin capital letter h with descender ⱨ latin small letter h with descender Ⱪ latin capital letter k with descender ⱪ latin small letter k with descender Ⱬ latin capital letter z with descender ⱬ latin small letter z with descender Ɑ latin capital letter alpha Ɱ latin capital letter m with hook Ɐ latin capital letter turned a Ɒ latin capital letter turned alpha ⱱ latin small letter v with right hook Ⱳ latin capital letter w with hook ⱳ latin small letter w with hook ⱴ latin small letter v with curl Ⱶ latin capital letter half h ⱶ latin small letter half h ⱷ latin small letter tailless phi ⱸ latin small letter e with notch ⱹ latin small letter turned r with tail ⱺ latin small letter o with low ring inside ⱻ latin letter small capital turned e ⱼ latin subscript small letter j ⱽ modifier letter capital v Ȿ latin capital letter s with swash tail Ɀ latin capital letter z with swash tail Ⲁ coptic capital letter alfa ⲁ coptic small letter alfa Ⲃ coptic capital letter vida ⲃ coptic small letter vida Ⲅ coptic capital letter gamma ⲅ coptic small letter gamma Ⲇ coptic capital letter dalda ⲇ coptic small letter dalda Ⲉ coptic capital letter eie ⲉ coptic small letter eie Ⲋ coptic capital letter sou ⲋ coptic small letter sou Ⲍ coptic capital letter zata ⲍ coptic small letter zata Ⲏ coptic capital letter hate ⲏ coptic small letter hate Ⲑ coptic capital letter thethe ⲑ coptic small letter thethe Ⲓ coptic capital letter iauda ⲓ coptic small letter iauda Ⲕ coptic capital letter kapa ⲕ coptic small letter kapa Ⲗ coptic capital letter laula ⲗ coptic small letter laula Ⲙ coptic capital letter mi ⲙ coptic small letter mi Ⲛ coptic capital letter ni ⲛ coptic small letter ni Ⲝ coptic capital letter ksi ⲝ coptic small letter ksi Ⲟ coptic capital letter o ⲟ coptic small letter o Ⲡ coptic capital letter pi ⲡ coptic small letter pi Ⲣ coptic capital letter ro ⲣ coptic small letter ro Ⲥ coptic capital letter sima ⲥ coptic small letter sima Ⲧ coptic capital letter tau ⲧ coptic small letter tau Ⲩ coptic capital letter ua ⲩ coptic small letter ua Ⲫ coptic capital letter fi ⲫ coptic small letter fi Ⲭ coptic capital letter khi ⲭ coptic small letter khi Ⲯ coptic capital letter psi ⲯ coptic small letter psi Ⲱ coptic capital letter oou ⲱ coptic small letter oou Ⲳ coptic capital letter dialect-p alef ⲳ coptic small letter dialect-p alef Ⲵ coptic capital letter old coptic ain ⲵ coptic small letter old coptic ain Ⲷ coptic capital letter cryptogrammic eie ⲷ coptic small letter cryptogrammic eie Ⲹ coptic capital letter dialect-p kapa ⲹ coptic small letter dialect-p kapa Ⲻ coptic capital letter dialect-p ni ⲻ coptic small letter dialect-p ni Ⲽ coptic capital letter cryptogrammic ni ⲽ coptic small letter cryptogrammic ni Ⲿ coptic capital letter old coptic oou ⲿ coptic small letter old coptic oou Ⳁ coptic capital letter sampi ⳁ coptic small letter sampi Ⳃ coptic capital letter crossed shei ⳃ coptic small letter crossed shei Ⳅ coptic capital letter old coptic shei ⳅ coptic small letter old coptic shei Ⳇ coptic capital letter old coptic esh ⳇ coptic small letter old coptic esh Ⳉ coptic capital letter akhmimic khei ⳉ coptic small letter akhmimic khei Ⳋ coptic capital letter dialect-p hori ⳋ coptic small letter dialect-p hori Ⳍ coptic capital letter old coptic hori ⳍ coptic small letter old coptic hori Ⳏ coptic capital letter old coptic ha ⳏ coptic small letter old coptic ha Ⳑ coptic capital letter l-shaped ha ⳑ coptic small letter l-shaped ha Ⳓ coptic capital letter old coptic hei ⳓ coptic small letter old coptic hei Ⳕ coptic capital letter old coptic hat ⳕ coptic small letter old coptic hat Ⳗ coptic capital letter old coptic gangia ⳗ coptic small letter old coptic gangia Ⳙ coptic capital letter old coptic dja ⳙ coptic small letter old coptic dja Ⳛ coptic capital letter old coptic shima ⳛ coptic small letter old coptic shima Ⳝ coptic capital letter old nubian shima ⳝ coptic small letter old nubian shima Ⳟ coptic capital letter old nubian ngi ⳟ coptic small letter old nubian ngi Ⳡ coptic capital letter old nubian nyi ⳡ coptic small letter old nubian nyi Ⳣ coptic capital letter old nubian wau ⳣ coptic small letter old nubian wau ⳤ coptic symbol kai ⳥ coptic symbol mi ro ⳦ coptic symbol pi ro ⳧ coptic symbol stauros ⳨ coptic symbol tau ro ⳩ coptic symbol khi ro ⳪ coptic symbol shima sima Ⳬ coptic capital letter cryptogrammic shei ⳬ coptic small letter cryptogrammic shei Ⳮ coptic capital letter cryptogrammic gangia ⳮ coptic small letter cryptogrammic gangia Ⳳ coptic capital letter bohairic khei ⳳ coptic small letter bohairic khei ⳹ coptic old nubian full stop ⳺ coptic old nubian direct question mark ⳻ coptic old nubian indirect question mark ⳼ coptic old nubian verse divider ⳽ coptic fraction one half ⳾ coptic full stop ⳿ coptic morphological divider ⴀ georgian small letter an ⴁ georgian small letter ban ⴂ georgian small letter gan ⴃ georgian small letter don ⴄ georgian small letter en ⴅ georgian small letter vin ⴆ georgian small letter zen ⴇ georgian small letter tan ⴈ georgian small letter in ⴉ georgian small letter kan ⴊ georgian small letter las ⴋ georgian small letter man ⴌ georgian small letter nar ⴍ georgian small letter on ⴎ georgian small letter par ⴏ georgian small letter zhar ⴐ georgian small letter rae ⴑ georgian small letter san ⴒ georgian small letter tar ⴓ georgian small letter un ⴔ georgian small letter phar ⴕ georgian small letter khar ⴖ georgian small letter ghan ⴗ georgian small letter qar ⴘ georgian small letter shin ⴙ georgian small letter chin ⴚ georgian small letter can ⴛ georgian small letter jil ⴜ georgian small letter cil ⴝ georgian small letter char ⴞ georgian small letter xan ⴟ georgian small letter jhan ⴠ georgian small letter hae ⴡ georgian small letter he ⴢ georgian small letter hie ⴣ georgian small letter we ⴤ georgian small letter har ⴥ georgian small letter hoe ⴧ georgian small letter yn ⴭ georgian small letter aen ⴰ tifinagh letter ya ⴱ tifinagh letter yab ⴲ tifinagh letter yabh ⴳ tifinagh letter yag ⴴ tifinagh letter yaghh ⴵ tifinagh letter berber academy yaj ⴶ tifinagh letter yaj ⴷ tifinagh letter yad ⴸ tifinagh letter yadh ⴹ tifinagh letter yadd ⴺ tifinagh letter yaddh ⴻ tifinagh letter yey ⴼ tifinagh letter yaf ⴽ tifinagh letter yak ⴾ tifinagh letter tuareg yak ⴿ tifinagh letter yakhh ⵀ tifinagh letter yah ⵁ tifinagh letter berber academy yah ⵂ tifinagh letter tuareg yah ⵃ tifinagh letter yahh ⵄ tifinagh letter yaa ⵅ tifinagh letter yakh ⵆ tifinagh letter tuareg yakh ⵇ tifinagh letter yaq ⵈ tifinagh letter tuareg yaq ⵉ tifinagh letter yi ⵊ tifinagh letter yazh ⵋ tifinagh letter ahaggar yazh ⵌ tifinagh letter tuareg yazh ⵍ tifinagh letter yal ⵎ tifinagh letter yam ⵏ tifinagh letter yan ⵐ tifinagh letter tuareg yagn ⵑ tifinagh letter tuareg yang ⵒ tifinagh letter yap ⵓ tifinagh letter yu ⵔ tifinagh letter yar ⵕ tifinagh letter yarr ⵖ tifinagh letter yagh ⵗ tifinagh letter tuareg yagh ⵘ tifinagh letter ayer yagh ⵙ tifinagh letter yas ⵚ tifinagh letter yass ⵛ tifinagh letter yash ⵜ tifinagh letter yat ⵝ tifinagh letter yath ⵞ tifinagh letter yach ⵟ tifinagh letter yatt ⵠ tifinagh letter yav ⵡ tifinagh letter yaw ⵢ tifinagh letter yay ⵣ tifinagh letter yaz ⵤ tifinagh letter tawellemet yaz ⵥ tifinagh letter yazz ⵦ tifinagh letter ye ⵧ tifinagh letter yo ⵯ tifinagh modifier letter labialization mark ⵰ tifinagh separator mark ⶀ ethiopic syllable loa ⶁ ethiopic syllable moa ⶂ ethiopic syllable roa ⶃ ethiopic syllable soa ⶄ ethiopic syllable shoa ⶅ ethiopic syllable boa ⶆ ethiopic syllable toa ⶇ ethiopic syllable coa ⶈ ethiopic syllable noa ⶉ ethiopic syllable nyoa ⶊ ethiopic syllable glottal oa ⶋ ethiopic syllable zoa ⶌ ethiopic syllable doa ⶍ ethiopic syllable ddoa ⶎ ethiopic syllable joa ⶏ ethiopic syllable thoa ⶐ ethiopic syllable choa ⶑ ethiopic syllable phoa ⶒ ethiopic syllable poa ⶓ ethiopic syllable ggwa ⶔ ethiopic syllable ggwi ⶕ ethiopic syllable ggwee ⶖ ethiopic syllable ggwe ⶠ ethiopic syllable ssa ⶡ ethiopic syllable ssu ⶢ ethiopic syllable ssi ⶣ ethiopic syllable ssaa ⶤ ethiopic syllable ssee ⶥ ethiopic syllable sse ⶦ ethiopic syllable sso ⶨ ethiopic syllable cca ⶩ ethiopic syllable ccu ⶪ ethiopic syllable cci ⶫ ethiopic syllable ccaa ⶬ ethiopic syllable ccee ⶭ ethiopic syllable cce ⶮ ethiopic syllable cco ⶰ ethiopic syllable zza ⶱ ethiopic syllable zzu ⶲ ethiopic syllable zzi ⶳ ethiopic syllable zzaa ⶴ ethiopic syllable zzee ⶵ ethiopic syllable zze ⶶ ethiopic syllable zzo ⶸ ethiopic syllable ccha ⶹ ethiopic syllable cchu ⶺ ethiopic syllable cchi ⶻ ethiopic syllable cchaa ⶼ ethiopic syllable cchee ⶽ ethiopic syllable cche ⶾ ethiopic syllable ccho ⷀ ethiopic syllable qya ⷁ ethiopic syllable qyu ⷂ ethiopic syllable qyi ⷃ ethiopic syllable qyaa ⷄ ethiopic syllable qyee ⷅ ethiopic syllable qye ⷆ ethiopic syllable qyo ⷈ ethiopic syllable kya ⷉ ethiopic syllable kyu ⷊ ethiopic syllable kyi ⷋ ethiopic syllable kyaa ⷌ ethiopic syllable kyee ⷍ ethiopic syllable kye ⷎ ethiopic syllable kyo ⷐ ethiopic syllable xya ⷑ ethiopic syllable xyu ⷒ ethiopic syllable xyi ⷓ ethiopic syllable xyaa ⷔ ethiopic syllable xyee ⷕ ethiopic syllable xye ⷖ ethiopic syllable xyo ⷘ ethiopic syllable gya ⷙ ethiopic syllable gyu ⷚ ethiopic syllable gyi ⷛ ethiopic syllable gyaa ⷜ ethiopic syllable gyee ⷝ ethiopic syllable gye ⷞ ethiopic syllable gyo ⸀ right angle substitution marker ⸁ right angle dotted substitution marker ⸂ left substitution bracket ⸃ right substitution bracket ⸄ left dotted substitution bracket ⸅ right dotted substitution bracket ⸆ raised interpolation marker ⸇ raised dotted interpolation marker ⸈ dotted transposition marker ⸉ left transposition bracket ⸊ right transposition bracket ⸋ raised square ⸌ left raised omission bracket ⸍ right raised omission bracket ⸎ editorial coronis ⸏ paragraphos ⸐ forked paragraphos ⸑ reversed forked paragraphos ⸒ hypodiastole ⸓ dotted obelos ⸔ downwards ancora ⸕ upwards ancora ⸖ dotted right-pointing angle ⸗ double oblique hyphen ⸘ inverted interrobang ⸙ palm branch ⸚ hyphen with diaeresis ⸛ tilde with ring above ⸜ left low paraphrase bracket ⸝ right low paraphrase bracket ⸞ tilde with dot above ⸟ tilde with dot below ⸠ left vertical bar with quill ⸡ right vertical bar with quill ⸢ top left half bracket ⸣ top right half bracket ⸤ bottom left half bracket ⸥ bottom right half bracket ⸦ left sideways u bracket ⸧ right sideways u bracket ⸨ left double parenthesis ⸩ right double parenthesis ⸪ two dots over one dot punctuation ⸫ one dot over two dots punctuation ⸬ squared four dot punctuation ⸭ five dot mark ⸮ reversed question mark ⸯ vertical tilde ⸰ ring point ⸱ word separator middle dot ⸲ turned comma ⸳ raised dot ⸴ raised comma ⸵ turned semicolon ⸶ dagger with left guard ⸷ dagger with right guard ⸸ turned dagger ⸹ top half section sign ⸺ two-em dash ⸻ three-em dash ⸼ stenographic full stop ⸽ vertical six dots ⸾ wiggly vertical line ⸿ capitulum ⹀ double hyphen ⹁ reversed comma ⹂ double low-reversed-9 quotation mark ⹃ dash with left upturn ⹄ double suspension mark ================================================ FILE: rofi/.config/rofi/scripts/rofi-farge.sh ================================================ #!/usr/bin/env bash for file in $(ls -tl /tmp/farge | cut -d " " -f 9); do hex_code=$(echo $file | cut -d"." -f 1) echo -en "#$hex_code\0icon\x1f/tmp/farge/$file\n" done | rofi -dmenu | tr -d "\n" | xclip -sel c ================================================ FILE: rofi/.config/rofi/scripts/rofi-finder.sh ================================================ selection=$(fd . --hidden --type file $HOME 2>/dev/null | \ sed "s;$HOME;~;" | \ rofi -sort -sorting-method fzf -disable-history -dmenu -theme default-no-icon -no-custom -p "" | \ sed "s;\~;$HOME;" ) open "$selection" ================================================ FILE: rofi/.config/rofi/scripts/rofi-picker.sh ================================================ #!/usr/bin/env bash char_file="$HOME/.config/rofi/scripts/chars.txt" selection="$(cat "$char_file" | rofi -dmenu -i -p '')" char=$(printf %b "$selection" | cut -d " " -f1) printf %b "$char" | xclip -selection c ================================================ FILE: rofi/.config/rofi/themes/askpass.rasi ================================================ /* * by Siddharth Dushantha 2020 * A very minimal graphical helper for sudo's askpass. * * Preview: https://0x0.st/iu4y.png * * Put the code below in a location such as ~/bin/askpass-rofi * #!/usr/bin/env bash * rofi -dmenu\ * -password\ * -i\ * -no-fixed-num-lines\ * -p "Password:"\ * -theme ~/.config/rofi/themes/askpass.rasi * * Then the code below in your bashrc, zshrc, or something similar * SUDO_ASKPASS=~/bin/askpass-rofi * */ * { background-color: #111116; text-color: #D8DEE9; font: "SF Mono 12"; } #window { /* Change the this according to your screen width */ width: 380px; /* Change this value according to your screen height */ y-offset: -10%; /* This padding is given just for aesthetic purposes */ padding: 40px; /* Add a border so that it is noticeable when the prompt appears. * This is because the prompt blends in with my terminal color */ border-color: #333333; border: 2px; border-radius: 5px; } #entry { /* * For some reason, without this option, a dash/hyphen appears * at the end of the entry */ expand: true; /* Keeping using 200px so that long passwords can be typed */ width: 200px; } ================================================ FILE: rofi/.config/rofi/themes/default.rasi ================================================ configuration { font: "JetBrainsMono Nerd Font Medium 11"; kb-row-up: "Up,Alt+k"; kb-row-down: "Down,Alt+j"; kb-mode-next: "Tab"; kb-element-next: ""; drun { display-name: ""; } run { display-name: ""; } window { display-name: ""; } clipboard { display-name: "󰅍"; } ssh { display-name: ""; } emoji { display-name: ":)"; } timeout { delay: 30; action: "kb-cancel"; } } * { margin: 0; padding: 0; spacing: 0; /* We use full transparency here so that we can simiulate the effect where the height gets reduced. Difficult to explain, easier to understand when the config is used. */ background-color: #00000000; text-color: #c5c8c6; } window { transparency: "real"; width: 500px; } mainbox { children: [inputbar, listview]; } inputbar { background-color: #17191d; children: [prompt, entry]; } prompt { background-color: inherit; padding: 12px; } entry { background-color: inherit; padding: 12px 3px; } listview { lines: 5; } element { children: [element-icon, element-text]; text-color: #6c6c6c; background-color: #121416; padding: 8px 10px 8px 10px; } element run { children: [element-icon, element-text]; text-color: #6c6c6c; } element-icon { padding: 10px 10px; size: 20px; } element-icon selected { background-color: #17191d; } element-text { padding: 10px 0; text-color: inherit; } element-text selected { text-color: #a4aeab; background-color: #17191d; } ================================================ FILE: rofi/.config/rofi/themes/run.rasi ================================================ configuration { font: "JetBrainsMono Nerd Font Medium 11"; dmenu { display-name: ""; } timeout { delay: 30; action: "kb-cancel"; } } * { border: 3px; margin: 0; padding: 0; spacing: 0; background-color: #121416; text-color: #c5c8c6; } window { transparency: "real"; width: 500px; x-offset: -5px; y-offset: -280px; } inputbar { background-color: #121416; children: [prompt, entry]; height: 100px; } prompt { background-color: inherit; padding: 12px; } entry { background-color: inherit; padding: 12px 3px; } ================================================ FILE: vifm/.config/vifm/colors/Default.vifm ================================================ " You can edit this file by hand. " The " character at the beginning of a line comments out the line. " Blank lines are ignored. " The Default color scheme is used for any directory that does not have " a specified scheme and for parts of user interface like menus. A " color scheme set for a base directory will also " be used for the sub directories. " The standard ncurses colors are: " Default = -1 = None, can be used for transparency or default color " Black = 0 " Red = 1 " Green = 2 " Yellow = 3 " Blue = 4 " Magenta = 5 " Cyan = 6 " White = 7 " Light versions of colors are also available (set bold attribute): " LightBlack " LightRed " LightGreen " LightYellow " LightBlue " LightMagenta " LightCyan " LightWhite " Available attributes (some of them can be combined): " bold " underline " reverse or inverse " standout " italic (on unsupported systems becomes reverse) " none " Vifm supports 256 colors you can use color numbers 0-255 " (requires properly set up terminal: set your TERM environment variable " (directly or using resources) to some color terminal name (e.g. " xterm-256color) from /usr/lib/terminfo/; you can check current number " of colors in your terminal with tput colors command) " highlight group cterm=attrs ctermfg=foreground_color ctermbg=background_color highlight clear highlight Win cterm=none ctermfg=white ctermbg=black highlight Directory cterm=bold ctermfg=cyan ctermbg=default highlight Link cterm=bold ctermfg=yellow ctermbg=default highlight BrokenLink cterm=bold ctermfg=red ctermbg=default highlight Socket cterm=bold ctermfg=magenta ctermbg=default highlight Device cterm=bold ctermfg=red ctermbg=default highlight Fifo cterm=bold ctermfg=cyan ctermbg=default highlight Executable cterm=bold ctermfg=green ctermbg=default highlight Selected cterm=bold ctermfg=magenta ctermbg=default highlight CurrLine cterm=bold,reverse ctermfg=default ctermbg=default highlight TopLine cterm=none ctermfg=black ctermbg=white highlight TopLineSel cterm=bold ctermfg=black ctermbg=default highlight StatusLine cterm=bold ctermfg=black ctermbg=white highlight WildMenu cterm=underline,reverse ctermfg=white ctermbg=black highlight CmdLine cterm=none ctermfg=white ctermbg=black highlight ErrorMsg cterm=none ctermfg=red ctermbg=black highlight Border cterm=none ctermfg=black ctermbg=white highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=white highlight SuggestBox cterm=bold ctermfg=default ctermbg=default highlight CmpMismatch cterm=bold ctermfg=white ctermbg=red highlight AuxWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight TabLine cterm=none ctermfg=white ctermbg=black highlight TabLineSel cterm=bold,reverse ctermfg=default ctermbg=default highlight User1 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User2 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User3 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User4 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User5 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User6 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User7 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User8 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight User9 cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default highlight OtherWin cterm=bold,underline,reverse,standout,italic ctermfg=default ctermbg=default ================================================ FILE: vifm/.config/vifm/colors/minimal.vifm ================================================ " colortheme highlight clear highlight Win cterm=none ctermfg=default ctermbg=none highlight Directory cterm=bold ctermfg=12 ctermbg=default highlight Link cterm=bold ctermfg=216 ctermbg=default highlight BrokenLink cterm=bold ctermfg=9 ctermbg=default highlight Socket cterm=bold ctermfg=10 ctermbg=default highlight Device cterm=bold ctermfg=9 ctermbg=default highlight Fifo cterm=bold ctermfg=150 ctermbg=default highlight Executable cterm=none ctermfg=150 ctermbg=default highlight Selected cterm=none ctermfg=255 ctermbg=236 highlight CurrLine cterm=reverse highlight TopLine cterm=none ctermfg=255 ctermbg=none highlight TopLineSel cterm=bold ctermfg=110 ctermbg=none highlight StatusLine cterm=none ctermfg=default ctermbg=none highlight WildMenu cterm=reverse ctermfg=255 ctermbg=black highlight CmdLine cterm=none ctermfg=default ctermbg=none highlight ErrorMsg cterm=none ctermfg=203 ctermbg=none highlight Border cterm=none ctermfg=black ctermbg=none highlight JobLine cterm=bold,reverse ctermfg=black ctermbg=255 highlight SuggestBox cterm=bold ctermfg=255 ctermbg=default highlight CmpMismatch cterm=bold ctermfg=255 ctermbg=9 highlight AuxWin cterm=bold,reverse ctermfg=default ctermbg=default ================================================ FILE: vifm/.config/vifm/scripts/README ================================================ This directory is dedicated for user-supplied scripts/executables. vifm modifies its PATH environment variable to let user run those scripts without specifying full path. All subdirectories are added as well. File in a subdirectory overrules file with the same name in parent directories. Restart might be needed to recognize files in newly created or renamed subdirectories. ================================================ FILE: vifm/.config/vifm/vifm-help.txt ================================================ VIFM(1) General Commands Manual VIFM(1) NAME vifm - vi file manager SYNOPSIS vifm [OPTION]... vifm [OPTION]... path vifm [OPTION]... path path DESCRIPTION Vifm is an ncurses based file manager with vi like keybindings. If you use vi, vifm gives you complete keyboard control over your files with- out having to learn a new set of commands. OPTIONS vifm starts in the current directory unless it is given a different di- rectory on the command line or 'vifminfo' option includes "savedirs" (in which case last visited directories are used as defaults). - Read list of files from standard input stream and compose custom view out of them (see "Custom views" section). Current working directory is used as a base for relative paths. Starts Vifm in the specified path. Starts Vifm in the specified paths. Specifying two directories triggers split view even when vifm was in single-view mode on finishing previous session. To suppress this be- haviour :only command can be put in the vifmrc file. When only one path argument is found on command-line, the left/top pane is automatically set as the current view. Paths to files are also allowed in case you want vifm to start with some archive opened. --select Open parent directory of the given path and select specified file in it. -f Makes vifm instead of opening files write selection to $VIFM/vimfiles and quit. --choose-files |- Sets output file to write selection into on exit instead of opening files. "-" means standard output. Use empty value to disable it. --choose-dir |- Sets output file to write last visited directory into on exit. "-" means standard output. Use empty value to disable it. --delimiter Sets separator for list of file paths written out by vifm. Empty value means null character. Default is new line charac- ter. --on-choose Sets command to be executed on selected files instead of opening them. The command may use any of macros described in "Command macros" section below. The command is executed once for whole selection. --logging[=] Log some operational details $VIFM/log. If the optional startup log path is specified and permissions allow to open it for writ- ing, then logging of early initialization (before value of $VIFM is determined) is put there. --server-list List available server names and exit. --server-name Name of target or this instance (sequential numbers are appended on name conflict). --remote Sends the rest of the command line to another instance of vifm, --server-name is treated just like any other argument and should precede --remote on the command line. When there is no server, quits silently. There is no limit on how many arguments can be processed. One can combine --remote with -c or + to execute commands in already running instance of vifm. See also "Client-Server" section below. --remote-expr passes expression to vifm server and prints result. See also "Client-Server" section below. -c or + Run command-line mode on startup. Commands in such arguments are executed in the order they appear in command line. Commands with spaces or special symbols must be enclosed in dou- ble or single quotes or all special symbols should be escaped (the exact syntax strongly depends on shell). "+" argument is equivalent to "$" and thus picks last item of of the view. --help, -h Show a brief command summary and exit vifm. --version, -v Show version information and quit. --no-configs Skip reading vifmrc and vifminfo. See "Startup" section below for the explanations on $VIFM. General keys Ctrl-C or Escape cancel most operations (see "Cancellation" section below), clear all selected files. Ctrl-L clear and redraw the screen. Basic Movement The basic vi key bindings are used to move through the files and pop-up windows. k, gk, or Ctrl-P move cursor up one line. j, gj or Ctrl-N move cursor down one line. h when 'lsview' is off move up one directory (moves to parent di- rectory node in tree view), otherwise move left one file. l when 'lsview' is off move into a directory or launches a file, otherwise move right one file. gg move to the first line of the file list. G move to the last line in the file list. gh go up one directory regardless of view representation (regular, ls-like). Also can be used to leave custom views including tree view. gl or Enter enter directory or launch a file. H move to the first file in the window. M move to the file in the middle of the window. L move to the last file in the window. Ctrl-F or Page Down move forward one page. Ctrl-B or Page Up move back one page. Ctrl-D jump back one half page. Ctrl-U jump forward one half page. n% move to the file that is n percent from the top of the list (for example 25%). 0 or ^ move cursor to the first column. See 'lsview' option descrip- tion. $ move cursor to the last column. See 'lsview' option descrip- tion. Space switch file lists. gt switch to the next tab (wrapping around). {n}gt switch to the tab number {n} (wrapping around). gT switch to the previous tab (wrapping around). {n}gT switch to {n}-th previous tab. Movement with Count Most movement commands also accept a count, 12j would move down 12 files. [count]% move to percent of the file list. [count]j move down [count] files. [count]k move up [count] files. [count]G or [count]gg move to list position [count]. [count]h go up [count] directories. Scrolling panes zt redraw pane with file in top of list. zz redraw pane with file in center of list. zb redraw pane with file in bottom of list. Ctrl-E scroll pane one line down. Ctrl-Y scroll pane one line up. Pane manipulation Second character can be entered with or without Control key. Ctrl-W H move the pane to the far left. Ctrl-W J move the pane to the very bottom. Ctrl-W K move the pane to the very top. Ctrl-W L move the pane to the far right. Ctrl-W h switch to the left pane. Ctrl-W j switch to the pane below. Ctrl-W k switch to the pane above. Ctrl-W l switch to the right pane. Ctrl-W b switch to bottom-right window. Ctrl-W t switch to top-left window. Ctrl-W p switch to previous window. Ctrl-W w switch to other pane. Ctrl-W o leave only one pane. Ctrl-W s split window horizontally. Ctrl-W v split window vertically. Ctrl-W x exchange panes. Ctrl-W z quit preview pane or view modes. Ctrl-W - decrease size of the view by count. Ctrl-W + increase size of the view by count. Ctrl-W < decrease size of the view by count. Ctrl-W > increase size of the view by count. Ctrl-W | set current view size to count. Ctrl-W _ set current view size to count. Ctrl-W = make size of two views equal. For Ctrl-W +, Ctrl-W -, Ctrl-W <, Ctrl-W >, Ctrl-W | and Ctrl-W _ com- mands count can be given before and/or after Ctrl-W. The resulting count is a multiplication of those two. So "2 Ctrl-W 2 -" decreases window size by 4 lines or columns. Ctrl-W | and Ctrl-W _ maximise current view by default. Marks Marks are set the same way as they are in vi. You can use these characters for marks [a-z][A-Z][0-9]. m[a-z][A-Z][0-9] set a mark for the file at the current cursor position. '[a-z][A-Z][0-9] navigate to the file set for the mark. There are also several special marks that can't be set manually: - ' (single quote) - previously visited directory of the view, thus hitting '' allows switching between two last locations - < - the first file of the last visually selected block - > - the last file of the last visually selected block Searching /regular expression pattern search for files matching regular expression in forward direc- tion and advance cursor to next match. / perform forward search with top item of search pattern history. ?regular expression pattern search for files matching regular expression in backward direc- tion and advance cursor to previous match. ? perform backward search with top item of search pattern history. Trailing slash for directories is taken into account, so /\/ searches for directories and symbolic links to directories. At the moment // works too, but this can change in the future, so consider escaping the slash if not typing pattern by hand. Matches are automatically selected if 'hlsearch' is set. Enabling 'incsearch' makes search interactive. 'ignorecase' and 'smartcase' op- tions affect case sensitivity of search queries. [count]n go to the next file matching last search pattern. Takes last search direction into account. [count]N go to the previous file matching last search pattern. Takes last search direction into account. If 'hlsearch' option is set, hitting n/N to perform search and go to the first matching item resets current selection in normal mode. It is not the case if search was already performed on files in the directory, thus selection is not reset after clearing selection with escape key and hitting n/N key again. Note: vifm uses extended regular expressions for / and ?. [count]f[character] search forward for file with [character] as first character in name. Search wraps around the end of the list. [count]F[character] search backward for file with [character] as first character in name. Search wraps around the end of the list. [count]; find the next match of f or F. [count], find the previous match of f or F. Note: f, F, ; and , wrap around list beginning and end when they are used alone and they don't wrap when they are used as selectors. File Filters There are three basic file filters: - dot files filter (does not affect "." and ".." special directories, whose appearance is controlled by the 'dotdirs' option), see 'dot- files' option; - permanent filter; - local filter (see description of the "=" normal mode command). Permanent filter essentially allows defining a group of files names which are not desirable to be seen by default, like temporary or backup files, which might be created alongside normal ones. Just like you don't usually need to see hidden dot files (files starting with a dot). Local filter on the other hand is for temporary immediate filtering of file list at hand, to get rid of uninterested files in the view or to make it possible to use % range in a :command. For the purposes of more deterministic editing permanent filter is split into two parts: - one edited explicitly via :filter command; - another one which is edited implicitly via zf shortcut. Files are tested against both parts and a match counts if at least one of the parts matched. Each file list has its own copy of each filter. Filtered files are not checked in / search or :commands. Files and directories are filtered separately. This is done by append- ing a slash to a directory name before testing whether it matches the filter. Examples: " filter directories which names end with '.files' :filter /^.*\.files\/$/ " filter files which names end with '.d' :filter {*.d} " filter files and directories which names end with '.o' :filter /^.*\.o\/?$/ Note: vifm uses extended regular expressions. The basic vim folding key bindings are used for managing filters. za toggle visibility of dot files. zo show dot files. zm hide dot files. zf add selected files to permanent filter. zO reset permanent filter. zR save and reset all filters. zr clear local filter. zM restore all filters (undoes last zR). zd exclude selection or current file from a custom view. Does nothing for regular view. For tree view excluding directory ex- cludes that sub-tree. For compare views zd hides group of adja- cent identical files, count can be specified as 1 to exclude just single file or selected items instead. Files excluded this way are not counted as filtered out and can't be returned unless view is reloaded. =regular expression pattern filter out files that don't match regular expression. Whether view is updated as regular expression is changed depends on the value of the 'incsearch' option. This kind of filter is auto- matically reset when directory is changed. Other Normal Mode Keys [count]: enter command line mode. [count] generates range. q: open external editor to prompt for command-line command. See "Command line editing" section for details. q/ open external editor to prompt for search pattern to be searched in forward direction. See "Command line editing" section for details. q? open external editor to prompt for search pattern to be searched in backward direction. See "Command line editing" section for details. q= open external editor to prompt for filter pattern. See "Command line editing" section for details. Unlike other q{x} commands this one doesn't work in Visual mode. [count]!! and [count]! enter command line mode with entered ! command. [count] modi- fies range. Ctrl-O go backwards through directory history of current view. Nonex- istent directories are automatically skipped. Ctrl-I if 'cpoptions' contains "t" flag, and switch active pane just like does, otherwise it goes forward through directory history of current view. Nonexistent directories are automatically skipped. Ctrl-G create a window showing detailed information about the current file. Shift-Tab enters view mode (works only after activating view pane with :view command). ga calculate directory size. Uses cached directory sizes when pos- sible for better performance. As a special case calculating size of ".." entry results in calculation of size of current di- rectory. gA like ga, but force update. Ignores old values of directory sizes. If file under cursor is selected, each selected item is processed, oth- erwise only current file is updated. gf find link destination (like l with 'followlinks' off, but also finds directories). gr only for MS-Windows same as l key, but tries to run program with administrative privileges. av go to visual mode into selection amending state preserving cur- rent selection. gv go to visual mode restoring last selection. [reg]gs when no register is specified, restore last t selection (similar to what gv does for visual mode selection). If register is present, then all files listed in that register and which are visible in current view are selected. gu make names of selected files lowercase. [count]guu and [count]gugu make names of [count] files starting from the current one lower- case. Without [count] only current file is affected. gU make names of selected files uppercase. [count]gUU and [count]gUgU make names of [count] files starting from the current one upper- case. Without [count] only current file is affected. e explore file in the current pane. i handle file (even if it's an executable and 'runexec' option is set). cw change word is used to rename a file or files. cW change WORD is used to change only name of file (without exten- sion). cl change link target. co only for *nix change file owner. cg only for *nix change file group. [count]cp change file attributes (permission on *nix and properties on Windows). If [count] is specified, it's treated as numerical argument for non-recursive `chmod` command (of the form [0-7]{3,4}). [count]C clone file [count] times. [count]dd or d[count]selector move selected file or files to trash directory (if 'trash' op- tion is set, otherwise delete). See "Trash directory" section below. [count]DD or D[count]selector like dd and d, but omitting trash directory (even when 'trash' option is set). Y, [count]yy or y[count]selector yank selected files. p copy yanked files to the current directory or move the files to the current directory if they were deleted with dd or :d[elete] or if the files were yanked from trash directory. See "Trash directory" section below. P move the last yanked files. The advantage of using P instead of d followed by p is that P moves files only once. This isn't im- portant in case you're moving files in the same file system where your home directory is, but using P to move files on some other file system (or file systems, in case you want to move files from fs1 to fs2 and your home is on fs3) can save your time. al put symbolic links with absolute paths. rl put symbolic links with relative paths. t select or unselect (tag) the current file. u undo last change. Ctrl-R redo last change. dp in compare view of "ofboth grouppaths" kind, makes corresponding entry of the other pane equal to the current one. The semantics is as follows: - nothing done for identical entries - if file is missing in current view, its pair gets removed - if file is missing or differs in other view, it's replaced - file pairs are defined by matching relative paths File removal obeys 'trash' option. When the option is enabled, the operation can be undone/redone (although results won't be visible automatically). Unlike in Vim, this operation is performed on a single line rather than a set of adjacent changes. do same as dp, but applies changes in the opposite direction. v or V enter visual mode, clears current selection. [count]Ctrl-A increment first number in file name by [count] (1 by default). [count]Ctrl-X decrement first number in file name by [count] (1 by default). ZQ same as :quit!. ZZ same as :quit. . repeat last command-line command (not normal mode command) of this session (does nothing right after startup or :restart com- mand). The command doesn't depend on command-line history and can be used with completely disabled history. ( go to previous group. Groups are defined by primary sorting key. For name and iname members of each group have same first letter, for all other sorting keys vifm uses size, uid, ... ) go to next group. See ( key description above. { speeds up navigation to closest previous entry of the opposite type by moving to the first file backwards when cursor is on a directory and to the first directory backwards when cursor is on a file. This is essentially a special case of ( that is locked on "dirs". } same as {, but in forward direction. [c go to previous mismatched entry in directory comparison view or do nothing. ]c go to next mismatched entry in directory comparison view or do nothing. [d go to previous directory entry or do nothing. ]d go to next directory entry or do nothing. [r same as :siblprev. ]r same as :siblnext. [R same as :siblprev!. ]R same as :siblnext!. [s go to previous selected entry or do nothing. ]s go to next selected entry or do nothing. [z go to first sibling of current entry. ]z go to last sibling of current entry. zj go to next directory sibling of current entry or do nothing. zk go to previous directory sibling of current entry or do nothing. Using Count You can use count with commands like yy. [count]yy yank count files starting from current cursor position downward. Or you can use count with motions passed to y, d or D. d[count]j delete (count + 1) files starting from current cursor position upward. Registers vifm supports multiple registers for temporary storing list of yanked or deleted files. Registers should be specified by hitting double quote key followed by a register name. Count is specified after register name. By default commands use unnamed register, which has double quote as its name. Though all commands accept registers, most of commands ignores them (for example H or Ctrl-U). Other commands can fill register or append new files to it. Presently vifm supports ", _, a-z and A-Z characters as register names. As mentioned above " is unnamed register and has special meaning of the default register. Every time when you use named registers (a-z and A- Z) unnamed register is updated to contain same list of files as the last used register. _ is black hole register. It can be used for writing, but its list is always empty. Registers with names from a to z and from A to Z are named ones. Low- ercase registers are cleared before adding new files, while uppercase aren't and should be used to append new files to the existing file list of appropriate lowercase register (A for a, B for b, ...). Registers can be changed on :empty command if they contain files under trash directory (see "Trash directory" section below). Registers do not contain one file more than once. Example: "a2yy puts names of two files to register a (and to the unnamed register), "Ad removes one file and append its name to register a (and to the unnamed register), p or "ap or "Ap inserts previously yanked and deleted files into current directory. Selectors y, d, D, !, gu and gU commands accept selectors. You can combine them with any of selectors below to quickly remove or yank several files. Most of selectors are like vi motions: j, k, gg, G, H, L, M, %, f, F, ;, comma, ', ^, 0 and $. But there are some additional ones. a all files in current view. s selected files. S all files except selected. Examples: - dj - delete file under cursor and one below; - d2j - delete file under cursor and two below; - y6gg - yank all files from cursor position to 6th file in the list. When you pass a count to whole command and its selector they are multi- plied. So: - 2d2j - delete file under cursor and four below; - 2dj - delete file under cursor and two below; - 2y6gg - yank all files from cursor position to 12th file in the list. Visual Mode Visual mode has to generic operating submodes: - plain selection as it is in Vim; - selection editing submode. Both modes select files in range from cursor position at which visual mode was entered to current cursor position (let's call it "selection region"). Each of two borders can be adjusted by swapping them via "o" or "O" keys and updating cursor position with regular cursor motion keys. Obviously, once initial cursor position is altered this way, real start position becomes unavailable. Plain Vim-like visual mode starts with cleared selection, which is not restored on rejecting selection ("Escape", "Ctrl-C", "v", "V"). Con- trary to it, selection editing doesn't clear previously selected files and restores them after reject. Accepting selection by performing an operation on selected items (e.g. yanking them via "y") moves cursor to the top of current selection region (not to the top most selected file of the view). In turn, selection editing supports three types of editing (look at statusbar to know which one is currently active): - append - amend selection by selecting elements in selection region; - remove - amend selection by deselecting elements in selection re- gion; - invert - amend selection by inverting selection of elements in se- lection region. No matter how you activate selection editing it starts in "append". One can switch type of operation (in the order given above) via "Ctrl- G" key. Almost all normal mode keys work in visual mode, but instead of accept- ing selectors they operate on selected items. Enter save selection and go back to normal mode not moving cursor. av leave visual mode if in amending mode (restores previous selec- tion), otherwise switch to amending selection mode. gv restore previous visual selection. v, V, Ctrl-C or Escape leave visual mode if not in amending mode, otherwise switch to normal visual selection. Ctrl-G switch type of amending by round robin scheme: append -> remove -> invert. : enter command line mode. Selection is cleared on leaving the mode. o switch active selection bound. O switch active selection bound. gu, u make names of selected files lowercase. gU, U make names of selected files uppercase. View Mode This mode tries to imitate the less program. List of builtin shortcuts can be found below. Shortcuts can be customized using :qmap, :qnoremap and :qunmap command-line commands. Shift-Tab, Tab, q, Q, ZZ return to normal mode. [count]e, [count]Ctrl-E, [count]j, [count]Ctrl-N, [count]Enter scroll forward one line (or [count] lines). [count]y, [count]Ctrl-Y, [count]k, [count]Ctrl-K, [count]Ctrl-P scroll backward one line (or [count] lines). [count]f, [count]Ctrl-F, [count]Ctrl-V, [count]Space scroll forward one window (or [count] lines). [count]b, [count]Ctrl-B, [count]Alt-V scroll backward one window (or [count] lines). [count]z scroll forward one window (and set window to [count]). [count]w scroll backward one window (and set window to [count]). [count]Alt-Space scroll forward one window, but don't stop at end-of-file. [count]d, [count]Ctrl-D scroll forward one half-window (and set half-window to [count]). [count]u, [count]Ctrl-U scroll backward one half-window (and set half-window to [count]). r, Ctrl-R, Ctrl-L repaint screen. R reload view preserving scroll position. F toggle automatic forwarding. Roughly equivalent to periodic file reload and scrolling to the bottom. The behaviour is simi- lar to `tail -F` or F key in less. [count]/pattern search forward for ([count]-th) matching line. [count]?pattern search backward for ([count]-th) matching line. [count]n repeat previous search (for [count]-th occurrence). [count]N repeat previous search in reverse direction (for [count]-th oc- currence). [count]g, [count]<, [count]Alt-< scroll to the first line of the file (or line [count]). [count]G, [count]>, [count]Alt-> scroll to the last line of the file (or line [count]). [count]p, [count]% scroll to the beginning of the file (or N percent into file). v invoke an editor to edit the current file being viewed. The command for editing is taken from the 'vicmd'/'vixcmd' option value and extended with middle line number prepended by a plus sign and name of the current file. All "Ctrl-W x" keys work the same was as in Normal mode. Active mode is automatically changed on navigating among windows. When less-like mode activated on file preview is left using one by "Ctrl-W x" keys, its state is stored until another file is displayed using preview (it's possible to leave the mode, hide preview pane, do something else, then get back to the file and show preview pane again with previously stored state in it). Command line Mode These keys are available in all submodes of the command line mode: com- mand, search, prompt and filtering. Down, Up, Left, Right, Home, End and Delete are extended keys and they are not available if vifm is compiled with --disable-extended-keys op- tion. Esc, Ctrl-C leave command line mode, cancels input. Cancelled input is saved into appropriate history and can be recalled later. Ctrl-M, Enter execute command and leave command line mode. Ctrl-I, Tab complete command or its argument. Shift-Tab complete in reverse order. Ctrl-_ stop completion and return original input. Ctrl-B, Left move cursor to the left. Ctrl-F, Right move cursor to the right. Ctrl-A, Home go to line beginning. Ctrl-E, End go to line end. Alt-B go to the beginning of previous word. Alt-F go to the end of next word. Ctrl-U remove characters from cursor position till the beginning of line. Ctrl-K remove characters from cursor position till the end of line. Ctrl-H, Backspace remove character before the cursor. Ctrl-D, Delete remove character under the cursor. Ctrl-W remove characters from cursor position till the beginning of previous word. Alt-D remove characters from cursor position till the beginning of next word. Ctrl-T swap the order of current and previous character and move cursor forward or, if cursor past the end of line, swap the order of two last characters in the line. Alt-. insert last part of previous command to current cursor position. Each next call will insert last part of older command. Ctrl-G edit command-line content in external editor. See "Command line editing" section for details. Ctrl-N recall more recent command-line from history. Ctrl-P recall older command-line from history. Up recall more recent command-line from history, that begins as the current command-line. Down recall older command-line from history, that begins as the cur- rent command-line. Ctrl-] trigger abbreviation expansion. Pasting special values The shortcuts listed below insert specified values into current cursor position. Last key of every shortcut references value that it inserts: - c - [c]urrent file - d - [d]irectory path - e - [e]xtension of a file name - r - [r]oot part of a file name - t - [t]ail part of directory path - a - [a]utomatic filter - m - [m]anual filter - = - local filter, which is bound to "=" in normal mode Values related to filelist in current pane are available through Ctrl-X prefix, while values from the other pane have doubled Ctrl-X key as their prefix (doubled Ctrl-X is presumably easier to type than upper- case letters; it's still easy to remap the keys to correspond to names of similar macros). Ctrl-X c name of the current file of the active pane. Ctrl-X d path to the current directory of the active pane. Ctrl-X e extension of the current file of the active pane. Ctrl-X r name root of current file of the active pane. Ctrl-X t the last component of path to the current directory of the ac- tive pane. Ctrl-X Ctrl-X c name of the current file of the inactive pane. Ctrl-X Ctrl-X d path to the current directory of the inactive pane. Ctrl-X Ctrl-X e extension of the current file of the inactive pane. Ctrl-X Ctrl-X r name root of current file of the inactive pane. Ctrl-X Ctrl-X t the last component of path to the current directory of the inac- tive pane. Ctrl-X a value of implicit permanent filter (old name "automatic") of the active pane. Ctrl-X m value of explicit permanent filter (old name "manual") of the active pane. Ctrl-X = value of local filter of the active pane. Ctrl-X / last pattern from search history. Command line editing vifm provides a facility to edit several kinds of data, that is usually edited in command-line mode, in external editor (using command speci- fied by 'vicmd' or 'vixcmd' option). This has at least two advantages over built-in command-line mode: - one can use full power of Vim to edit text; - finding and reusing history entries becomes possible. The facility is supported by four input submodes of the command-line: - command; - forward search; - backward search; - file rename (see description of cw and cW normal mode keys). Editing command-line using external editor is activated by the Ctrl-G shortcut. It's also possible to do almost the same from Normal and Visual modes using q:, q/ and q? commands. Temporary file created for the purpose of editing the line has the fol- lowing structure: 1. First line, which is either empty or contains text already entered in command-line. 2. 2nd and all other lines with history items starting with the most recent one. Altering this lines in any way won't change history items stored by vifm. After editing application is finished the first line of the file is taken as the result of operation, when the application returns zero exit code. If the application returns an error (see :cquit command in Vim), all the edits made to the file are ignored, but the initial value of the first line is saved in appropriate history. More Mode This is the mode that appears when status bar content is so big that it doesn't fit on the screen. One can identify the mode by "-- More --" message at the bottom. The following keys are handled in this mode: Enter, Ctrl-J, j or Down scroll one line down. Backspace, k or Up scroll one line up. d scroll one page (half of a screen) down. u scroll one page (half of a screen) up. Space, f or PageDown scroll down a screen. b or PageUp scroll up a screen. G scroll to the bottom. g scroll to the top. q, Escape or Ctrl-C quit the mode. : switch to command-line mode. Commands Commands are executed with :command_name Commented out lines should start with the double quote symbol ("), which may be preceded by whitespace characters intermixed with colons. Inline comments can be added at the end of the line after double quote symbol, only last line of a multi-line command can contain such com- ment. Not all commands support inline comments as their syntax con- flicts with names of registers and fields where double quotes are al- lowed. Most of the commands have two forms: complete and the short one. Exam- ple: :noh[lsearch] This means the complete command is nohlsearch, and the short one is noh. Most of command-line commands completely reset selection in the current view. However, there are several exceptions: - `:invert s` most likely leaves some files selected; - :normal command (when it doesn't leave command-line mode); - :if and :else commands don't affect selection on successful execu- tion. '|' can be used to separate commands, so you can give multiple commands in one line. If you want to use '|' in an argument, precede it with '\'. These commands see '|' as part of their arguments even when it's es- caped: :[range]! :autocmd :cabbrev :cmap :cnoreabbrev :cnoremap :command :dmap :dnoremap :filetype :fileviewer :filextype :map :mmap :mnoremap :nmap :nnoremap :noremap :normal :qmap :qnoremap :vmap :vnoremap :wincmd :windo :winrun To be able to use another command after one of these, wrap it with the :execute command. An example: if filetype('.') == 'reg' | execute '!!echo regular file' | endif :[count] :number move to the file number. :12 would move to the 12th file in the list. :0 move to the top of the list. :$ move to the bottom of the list. :[count]command The only builtin :[count]command are :[count]d[elete] and :[count]y[ank]. :d3 would delete three files starting at the current file position moving down. :3d would delete one file at the third line in the list. :command [args] :[range]!program execute command via shell. Accepts macros. :[range]!command & same as above, but the command is run in the background using vifm's means. Programs that write to stdout like "ls" create an error message showing partial output of the command. Note the space before ampersand symbol, if you omit it, command will be run in the background using job control of your shell. Accepts macros. :!! :[range]!!command same as :!, but pauses before returning. :!! repeat the last command. :alink :[range]alink[!?] create absolute symbolic links to files in directory of inactive view. With "?" prompts for destination file names in an edi- tor. "!" forces overwrite. :[range]alink[!] path create absolute symbolic links to files in directory specified by the path (absolute or relative to directory of inactive view). :[range]alink[!] name1 name2... create absolute symbolic links of files in directory of other view giving each next link a corresponding name from the argu- ment list. :apropos :apropos keyword... create a menu of items returned by the apropos command. Select- ing an item in the menu opens corresponding man page. By de- fault the command relies on the external "apropos" utility, which can be customized by altering value of the 'aproposprg' option. :autocmd :au[tocmd] {event} {pat} {cmd} register autocommand for the {event}, which can be: - DirEnter - triggered after directory is changed Event name is case insensitive. {pat} is a comma-separated list of modified globs patterns, which can contain tilde or environment variables. All paths use slash ('/') as directory separator. The pattern can start with a '!', which negates it. Patterns that do not contain slashes are matched against the last item of the path only (e.g. "dir" in "/path/dir"). Literal comma can be entered by doubling it. Two modifications to globs matching are as follows: - * - never matches a slash (i.e., can signify single direc- tory level) - ** - matches any character (i.e., can match path of arbi- trary depth) {cmd} is a :command or several of them separated with '|'. Examples of patterns: - conf.d - matches conf.d directory anywhere - *.d - matches directories ending with ".d" anywhere - **.git - matches something.git, but not .git anywhere - **/.git/** - matches /path/.git/objects, but not /path/.git - **/.git/**/ - matches /path/.git/ only (because of trailing slash) - /etc/* - matches /etc/conf.d/, /etc/X11, but not /etc/X11/fs - /etc/**/*.d - matches /etc/conf.d, /etc/X11/conf.d, etc. - /etc/**/* - matches /etc/ itself and any file below it - /etc/**/** - matches /etc/ itself and any file below it :au[tocmd] [{event}] [{pat}] list those autocommands that match given event-pattern combina- tion. {event} and {pat} can be omitted to list all autocommands. To list any autocommands for specific pattern one can use * place- holder in place of {event}. :au[tocmd]! [{event}] [{pat}] remove autocommands that match given event-pattern combination. Syntax is the same as for listing above. :apropos repeat last :apropos command. :bmark :bmark tag1 [tag2 [tag3...]] bookmark current directory with specified tags. :bmark! path tag1 [tag2 [tag3...]] same as :bmark, but allows bookmarking specific path instead of current directory. This is for use in vifmrc and for bookmark- ing files. Path can contain macros that expand to single path (%c, %C, %d, %D) or those that can expand to multiple paths, but contain only one (%f, %F, %rx). The latter is done for convenience on using the command interactively. Complex macros that include spaces (e.g. "%c:gs/ /_") should be escaped. :bmarks :bmarks display all bookmarks in a menu. :bmarks [tag1 [tag2...]] display menu of bookmarks that include all of the specified tags. :bmgo :bmgo [tag1 [tag2...]] when there are more than one match acts exactly like :bmarks, otherwise navigates to single match immediately (and fails if there is no match). :cabbrev :ca[bbrev] display menu of command-line mode abbreviations. :ca[bbrev] lhs-prefix display command-line mode abbreviations which left-hand side starts with specified prefix. :ca[bbrev] lhs rhs register new or overwrites existing abbreviation for command- line mode. rhs can contain spaces and any special sequences ac- cepted in rhs of mappings (see "Mappings" section below). Ab- breviations are expanded non-recursively. :cnoreabbrev :cnorea[bbrev] display menu of command-line mode abbreviations. :cnorea[bbrev] lhs-prefix display command-line mode abbreviations which left-hand side starts with specified prefix. :cnorea[bbrev] lhs rhs same as :cabbrev, but mappings in rhs are ignored during expan- sion. :cd :cd or :cd ~ or :cd $HOME change to home directory. :cd - go to the last visited directory. :cd ~/dir change directory to ~/dir. :cd /curr/dir /other/dir change directory of the current pane to /curr/dir and directory of the other pane to /other/dir. Relative paths are assumed to be relative to directory of current view. Command won't fail if one of directories is invalid. All forms of the command accept macros. :cd! /dir same as :cd /dir /dir. :cds :cds[!] pattern string navigate to path obtained by substituting first match in current path. Arguments can include slashes, but starting first argu- ment with a separator will activate below form of the command. Specifying "!" changes directory of both panes. Available flags: - i - ignore case (the 'ignorecase' and 'smartcase' options are not used) - I - don't ignore case (the 'ignorecase' and 'smartcase' options are not used) :cds[!]/pattern/string/[flags] same as above, but with :substitute-like syntax. Other punctua- tion characters can be used as separators. :change :c[hange] create a menu window to alter a files properties. :chmod :[range]chmod display file attributes (permission on *nix and properties on Windows) change dialog. :[range]chmod[!] arg... only for *nix change permissions for files. See `man 1 chmod` for arg format. "!" means set permissions recursively. :chown :[range]chown only for *nix same as co key in normal mode. :[range]chown [user][:][group] only for *nix change owner and/or group of files. Operates on directories re- cursively. :clone :[range]clone[!?] clones files in current directory. With "?" vifm will open vi to edit file names. "!" forces overwrite. Macros are expanded. :[range]clone[!] path clones files to directory specified with the path (absolute or relative to current directory). "!" forces overwrite. Macros are expanded. :[range]clone[!] name1 name2... clones files in current directory giving each next clone a cor- responding name from the argument list. "!" forces overwrite. Macros are expanded. :colorscheme :colo[rscheme]? print current color scheme name on the status bar. :colo[rscheme] display a menu with a list of available color schemes. You can choose primary color scheme here. It is used for view if no di- rectory specific colorscheme fits current path. It's also used to set border color (except view titles) and colors in menus and dialogs. :colo[rscheme] color_scheme_name change primary color scheme to color_scheme_name. In case of errors (e.g. some colors are not supported by terminal) either nothing is changed or color scheme is reset to builtin colors to ensure that TUI is left in a usable state. :colo[rscheme] color_scheme_name directory associate directory with the color scheme. The directory argu- ment can be either absolute or relative path when :colorscheme command is executed from command line, but mandatory should be an absolute path when the command is executed in scripts loaded at startup (until vifm is completely loaded). :colo[rscheme] color_scheme_name color_scheme_name... loads the first color scheme in the order given that exists and is supported by the terminal. If none matches, current one re- mains unchanged. For example: " use a separate color scheme for panes which are inside FUSE mounts execute 'colorscheme in-fuse' &fusehome :comclear :comc[lear] remove all user defined commands. :command :com[mand] display a menu of user commands. :com[mand] beginning display user defined commands that start with the beginning. :com[mand] name action set a new user command. Trying to use a reserved command name will result in an error message. Use :com[mand]! to overwrite a previously set command. Unlike vim user commands do not have to start with a capital letter. User commands are run in a shell by default. To run a command in the background you must set it as a background com- mand with & at the end of the commands action (:com rm rm %f &). Command name cannot contain numbers or special symbols (except '?' and '!'). :com[mand] name /pattern set search pattern. :com[mand] name =pattern set local filter value. :com[mand] name filter{:filter args} set file name filter (see :filter command description). For ex- ample: " display only audio files :command onlyaudio filter/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i " display everything except audio files :command noaudio filter!/.+.\(mp3|wav|mp3|flac|ogg|m4a|wma|ape\)$/i :com[mand] cmd :commands set kind of an alias for internal command (like in a shell). Passes range given to alias to an aliased command, so running :%cp after :command cp :copy %a equals :%copy :compare :compare [byname | bysize | bycontents | listall | listunique | listdups | ofboth | ofone | groupids | grouppaths | skipempty]... compare files in one or two views according the arguments. The default is "bycontents listall ofboth grouppaths". See "Compare views" section below for details. Tree structure is incompati- ble with alternative representations, so values of 'lsview' and 'millerview' options are ignored. :copen :cope[n] opens menu with contents of the last displayed menu with naviga- tion to files by default, if any. :copy :[range]co[py][!?][ &] copy files to directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. :[range]co[py][!] path[ &] copy files to directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. :[range]co[py][!] name1 name2...[ &] copy files to directory of other view giving each next file a corresponding name from the argument list. "!" forces over- write. :cquit :cq[uit][!] same as :quit, but also aborts directory choosing via --choose-dir (empties output file) and returns non-zero exit code. :cunabbrev :cuna[bbrev] lhs unregister command-line mode abbreviation by its lhs. :cuna[bbrev] rhs unregister command-line mode abbreviation by its rhs, so that abbreviation could be removed even after expansion. :delbmarks :delbmarks remove bookmarks from current directory. :delbmarks tag1 [tag2 [tag3...]] remove set of bookmarks that include all of the specified tags. :delbmarks! remove all bookmarks. :delbmarks! path1 [path2 [path3...]] remove bookmarks of listed paths. :delcommand :delc[ommand] user_command remove user defined command named user_command. :delete :[range]d[elete][!][ &] delete selected file or files. "!" means complete removal (omitting trash). :[range]d[elete][!] [reg] [count][ &] delete selected or [count] files to the reg register. "!" means complete removal (omitting trash). :delmarks :delm[arks]! delete all marks. :delm[arks] marks ... delete specified marks, each argument is treated as a set of marks. :display :di[splay] display menu with registers content. :di[splay] list ... display the contents of the numbered and named registers that are mentioned in list (for example "az to display "", "a and "z content). :dirs :dirs display directory stack. :echo :ec[ho] [...] evaluate each argument as an expression and output them sepa- rated with a space. See help on :let command for a definition of . :edit :[range]e[dit] [file...] open selected or passed file(s) in editor. Macros and environ- ment variables are expanded. :else :el[se] execute commands until next matching :endif if all other condi- tions didn't match. See also help on :if and :endif commands. :elseif :elsei[f] {expr1} execute commands until next matching :elseif, :else or :endif if conditions of previous :if and :elseif branches were evaluated to zero. See also help on :if and :endif commands. :empty :empty permanently remove files from all existing non-empty trash di- rectories (see "Trash directory" section below). Trash directo- ries which are specified via %r and/or %u also get deleted com- pletely. Also remove all operations from undolist that have no sense after :empty and remove all records about files located inside directories from all registers. Removal is performed as background task with undetermined amount of work and can be checked via :jobs menu. :endif :en[dif] end conditional block. See also help on :if and :else commands. :execute :exe[cute] [...] evaluate each argument as an expression and join results sepa- rated by a space to get a single string which is then executed as a command-line command. See help on :let command for a defi- nition of . :exit :exi[t][!] same as :quit. :file :f[ile][ &] display menu of programs set for the file type of the current file. " &" forces running associated program in background. :f[ile] arg[ &] run associated command that begins with the arg skipping opening menu. " &" forces running associated program in background. :filetype :filet[ype] pattern-list [{descr}]def_prog[ &],[{descr}]prog2[ &],... associate given program list to each of the patterns. Associ- ated program (command) is used by handlers of l and Enter keys (and also in the :file menu). If you need to insert comma into command just double it (",,"). Space followed by an ampersand as two last characters of a command means running of the command in the background. Optional description can be given to each command to ease understanding of what command will do in the :file menu. Vifm will try the rest of the programs for an asso- ciation when the default isn't found. When program entry doesn't contain any of vifm macros, name of current file is ap- pended as if program entry ended with %c macro on *nix and %"c on Windows. On Windows path to executables containing spaces can (and should be for correct work with such paths) be double quoted. See "Patterns" section below for pattern definition. See also "Automatic FUSE mounts" section below. Example for zip archives and several actions: filetype *.zip,*.jar,*.war,*.ear \ {Mount with fuse-zip} \ FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR, \ {View contents} \ zip -sf %c | less, \ {Extract here} \ tar -xf %c, Note that on OS X when `open` is used to call an app, vifm is unable to check whether that app is actually available. So if automatic skipping of programs that aren't there is desirable, `open` should be replaced with an actual command. :filet[ype] filename list (in menu mode) currently registered patterns that match specified file name. Same as ":filextype filename". :filextype :filex[type] pattern-list [{ description }] def_program,program2,... same as :filetype, but this command is ignored if not running in X. In X :filextype is equal to :filetype. See "Patterns" sec- tion below for pattern definition. See also "Automatic FUSE mounts" section below. For example, consider the following settings (the order might seem strange, but it's for the demonstration purpose): filetype *.html,*.htm \ {View in lynx} \ lynx filextype *.html,*.htm \ {Open with dwb} \ dwb %f %i &, filetype *.html,*.htm \ {View in links} \ links filextype *.html,*.htm \ {Open with firefox} \ firefox %f &, \ {Open with uzbl} \ uzbl-browser %f %i &, If you're using vifm inside a terminal emulator that is running in graphical environment (when X is used on *nix; always on Win- dows), vifm attempts to run application in this order: 1. lynx 2. dwb 3. links 4. firefox 5. uzbl If there is no graphical environment (checked presence of $DIS- PLAY environment variable on *nix; never happens on Windows), the list will look like: 1. lynx 2. links Just as if all :filextype commands were not there. The purpose of such differentiation is to allow comfortable use of vifm with same settings in desktop environment/through remote connection (SSH)/in native console. Note that on OS X $DISPLAY isn't defined unless you define it, so :filextype should be used only if you set $DISPLAY in some way. :filext[ype] filename list (in menu mode) currently registered patterns that match specified file name. Same as ":filetype filename". :fileviewer :filev[iewer] pattern-list command1,command2,... register specified list of commands as viewers for each of the patterns. Viewer is a command which output is captured and dis- played in one of the panes of vifm after pressing "e" or running :view command. When the command doesn't contain any of vifm macros, name of current file is appended as if command ended with %c macro. Comma escaping and missing commands processing rules as for :filetype apply to this command. See "Patterns" section below for pattern definition. Example for zip archives: fileviewer *.zip,*.jar,*.war,*.ear zip -sf %c, echo "No zip to preview:" :filev[iewer] filename list (in menu mode) currently registered patterns that match specified filename. :filter :filter[!] {pattern} filter files matching the pattern out of directory listings. '!' controls state of filter inversion after updating filter value (see also 'cpoptions' description). Filter is matched case sensitively on *nix and case insensitively on Windows. See "File Filters" and "Patterns" sections. Example: " filter all files ending in .o from the filelist. :filter /.o$/ :filter[!] {empty-pattern} same as above, but use last search pattern as pattern value. Example: :filter //I :filter reset filter (set it to an empty string) and show all files. :filter! same as :invert. :filter? show information on local, name and auto filters. :find :[range]fin[d] pattern display results of find command in the menu. Searches among se- lected files if any. Accepts macros. By default the command relies on the external "find" utility, which can be customized by altering value of the 'findprg' option. :[range]fin[d] -opt... same as :find above, but user defines all find arguments. Searches among selected files if any. :[range]fin[d] path -opt... same as :find above, but user defines all find arguments. Ig- nores selection and range. :[range]fin[d] repeat last :find command. :finish :fini[sh] stop sourcing a script. Can only be used in a vifm script file. This is a quick way to skip the rest of the file. :goto :go[to] change directory if necessary and put specified path under the cursor. The path should be existing non-root path. Macros and environment variables are expanded. :grep :[range]gr[ep][!] pattern will show results of grep command in the menu. Add "!" to re- quest inversion of search (look for lines that do not match pat- tern). Searches among selected files if any and no range given. Ignores binary files by default. By default the command relies on the external "grep" utility, which can be customized by al- tering value of the 'grepprg' option. :[range]gr[ep][!] -opt... same as :grep above, but user defines all grep arguments, which are not escaped. Searches among selected files if any. :[range]gr[ep][!] repeat last :grep command. "!" of this command inverts "!" in repeated command. :help :h[elp] show the help file. :h[elp] argument is the same as using ':h argument' in vim. Use vifm- to get help on vifm (tab completion works). This form of the command doesn't work when 'vimhelp' option is off. :hideui :hideui hide interface to show previous commands' output. :highlight :hi[ghlight] display information about all highlight groups active at the mo- ment. :hi[ghlight] clear reset all highlighting to builtin defaults and removed all file- name-specific rules. :hi[ghlight] clear ( {pat1,pat2,...} | /regexp/ ) remove specified rule. :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/ ) display information on given highlight group or file name pat- tern of color scheme used in the active view. :hi[ghlight] ( group-name | {pat1,pat2,...} | /regexp/[iI] ) cterm=style | ctermfg=color | ctermbg=color set style (cterm), foreground (ctermfg) or/and background (ctermbg) parameters of highlight group or file name pattern for color scheme used in the active view. All style values as well as color names are case insensitive. Available style values (some of them can be combined): - bold - underline - reverse or inverse - standout - italic (on unsupported systems becomes reverse) - none Available group-name values: - Win - color of all windows (views, dialogs, menus) and default color for their content (e.g. regular files in views) - AuxWin - color of auxiliary areas of windows - OtherWin - color of inactive pane - Border - color of vertical parts of the border - TabLine - tab line color (for 'tabscope' set to "global") - TabLineSel - color of the tip of selected tab (regardless of 'tab- scope') - TopLineSel - top line color of the current pane - TopLine - top line color of the other pane - CmdLine - the command line/status bar color - ErrorMsg - color of error messages in the status bar - StatusLine - color of the line above the status bar - JobLine - color of job line that appears above the status line - WildMenu - color of the wild menu items - SuggestBox - color of key suggestion box - CurrLine - line at cursor position in active view - OtherLine - line at cursor position in inactive view - Selected - color of selected files - Directory - color of directories - Link - color of symbolic links in the views - BrokenLink - color of broken symbolic links - Socket - color of sockets - Device - color of block and character devices - Executable - color of executable files - Fifo - color of fifo pipes - CmpMismatch - color of mismatched files in side-by-side comparison by path - User1..User9 - 9 colors which can be used via %* 'statusline' macro Available colors: - -1 or default or none - default or transparent - black and lightblack - red and lightred - green and lightgreen - yellow and lightyellow - blue and lightblue - magenta and lightmagenta - cyan and lightcyan - white and lightwhite - 0-255 - corresponding colors from 256-color palette Light versions of colors are regular colors with bold attribute set. So order of arguments of :highlight command is important and it's bet- ter to put "cterm" in front of others to prevent it from overwriting attributes set by "ctermfg" or "ctermbg" arguments. For convenience of color scheme authors xterm-like names for 256 color palette is also supported. The mapping is taken from http://vim.wikia.com/wiki/Xterm256_color_names_for_console_Vim Dupli- cated entries were altered by adding an underscore followed by numeri- cal suffix. 0 Black 86 Aquamarine1 172 Orange3 1 Red 87 DarkSlateGray2 173 LightSalmon3_2 2 Green 88 DarkRed_2 174 LightPink3 3 Yellow 89 DeepPink4_2 175 Pink3 4 Blue 90 DarkMagenta 176 Plum3 5 Magenta 91 DarkMagenta_2 177 Violet 6 Cyan 92 DarkViolet 178 Gold3_2 7 White 93 Purple 179 LightGoldenrod3 8 LightBlack 94 Orange4_2 180 Tan 9 LightRed 95 LightPink4 181 MistyRose3 10 LightGreen 96 Plum4 182 Thistle3 11 LightYellow 97 MediumPurple3 183 Plum2 12 LightBlue 98 MediumPurple3_2 184 Yellow3_2 13 LightMagenta 99 SlateBlue1 185 Khaki3 14 LightCyan 100 Yellow4 186 LightGoldenrod2 15 LightWhite 101 Wheat4 187 LightYellow3 16 Grey0 102 Grey53 188 Grey84 17 NavyBlue 103 LightSlateGrey 189 LightSteelBlue1 18 DarkBlue 104 MediumPurple 190 Yellow2 19 Blue3 105 LightSlateBlue 191 DarkOliveGreen1 20 Blue3_2 106 Yellow4_2 192 DarkOliveG- reen1_2 21 Blue1 107 DarkOliveGreen3 193 DarkSeaGreen1_2 22 DarkGreen 108 DarkSeaGreen 194 Honeydew2 23 DeepSkyBlue4 109 LightSkyBlue3 195 LightCyan1 24 DeepSkyBlue4_2 110 LightSkyBlue3_2 196 Red1 25 DeepSkyBlue4_3 111 SkyBlue2 197 DeepPink2 26 DodgerBlue3 112 Chartreuse2_2 198 DeepPink1 27 DodgerBlue2 113 DarkOliveGreen3_2 199 DeepPink1_2 28 Green4 114 PaleGreen3_2 200 Magenta2_2 29 SpringGreen4 115 DarkSeaGreen3 201 Magenta1 30 Turquoise4 116 DarkSlateGray3 202 OrangeRed1 31 DeepSkyBlue3 117 SkyBlue1 203 IndianRed1 32 DeepSkyBlue3_2 118 Chartreuse1 204 IndianRed1_2 33 DodgerBlue1 119 LightGreen_2 205 HotPink 34 Green3 120 LightGreen_3 206 HotPink_2 35 SpringGreen3 121 PaleGreen1 207 MediumOrchid1_2 36 DarkCyan 122 Aquamarine1_2 208 DarkOrange 37 LightSeaGreen 123 DarkSlateGray1 209 Salmon1 38 DeepSkyBlue2 124 Red3 210 LightCoral 39 DeepSkyBlue1 125 DeepPink4_3 211 PaleVioletRed1 40 Green3_2 126 MediumVioletRed 212 Orchid2 41 SpringGreen3_2 127 Magenta3 213 Orchid1 42 SpringGreen2 128 DarkViolet_2 214 Orange1 43 Cyan3 129 Purple_2 215 SandyBrown 44 DarkTurquoise 130 DarkOrange3 216 LightSalmon1 45 Turquoise2 131 IndianRed 217 LightPink1 46 Green1 132 HotPink3 218 Pink1 47 SpringGreen2_2 133 MediumOrchid3 219 Plum1 48 SpringGreen1 134 MediumOrchid 220 Gold1 49 MediumSpringGreen 135 MediumPurple2 221 LightGolden- rod2_2 50 Cyan2 136 DarkGoldenrod 222 LightGolden- rod2_3 51 Cyan1 137 LightSalmon3 223 NavajoWhite1 52 DarkRed 138 RosyBrown 224 MistyRose1 53 DeepPink4 139 Grey63 225 Thistle1 54 Purple4 140 MediumPurple2_2 226 Yellow1 55 Purple4_2 141 MediumPurple1 227 LightGoldenrod1 56 Purple3 142 Gold3 228 Khaki1 57 BlueViolet 143 DarkKhaki 229 Wheat1 58 Orange4 144 NavajoWhite3 230 Cornsilk1 59 Grey37 145 Grey69 231 Grey100 60 MediumPurple4 146 LightSteelBlue3 232 Grey3 61 SlateBlue3 147 LightSteelBlue 233 Grey7 62 SlateBlue3_2 148 Yellow3 234 Grey11 63 RoyalBlue1 149 DarkOliveGreen3_3 235 Grey15 64 Chartreuse4 150 DarkSeaGreen3_2 236 Grey19 65 DarkSeaGreen4 151 DarkSeaGreen2 237 Grey23 66 PaleTurquoise4 152 LightCyan3 238 Grey27 67 SteelBlue 153 LightSkyBlue1 239 Grey30 68 SteelBlue3 154 GreenYellow 240 Grey35 69 CornflowerBlue 155 DarkOliveGreen2 241 Grey39 70 Chartreuse3 156 PaleGreen1_2 242 Grey42 71 DarkSeaGreen4_2 157 DarkSeaGreen2_2 243 Grey46 72 CadetBlue 158 DarkSeaGreen1 244 Grey50 73 CadetBlue_2 159 PaleTurquoise1 245 Grey54 74 SkyBlue3 160 Red3_2 246 Grey58 75 SteelBlue1 161 DeepPink3 247 Grey62 76 Chartreuse3_2 162 DeepPink3_2 248 Grey66 77 PaleGreen3 163 Magenta3_2 249 Grey70 78 SeaGreen3 164 Magenta3_3 250 Grey74 79 Aquamarine3 165 Magenta2 251 Grey78 80 MediumTurquoise 166 DarkOrange3_2 252 Grey82 81 SteelBlue1_2 167 IndianRed_2 253 Grey85 82 Chartreuse2 168 HotPink3_2 254 Grey89 83 SeaGreen2 169 HotPink2 255 Grey93 84 SeaGreen1 170 Orchid 85 SeaGreen1_2 171 MediumOrchid1 There are two colors (foreground and background) and only one bold at- tribute. Thus single bold attribute affects both colors when "reverse" attribute is used in vifm run inside terminal emulator. At the same time linux native console can handle boldness of foreground and back- ground colors independently, but for consistency with terminal emula- tors this is available only implicitly by using light versions of col- ors. This behaviour might be changed in the future. Although vifm supports 256 colors in a sense they are supported by UI drawing library, whether you will be able to use all of them highly de- pends on your terminal. To set up terminal properly, make sure that $TERM in the environment you run vifm is set to name of 256-color ter- minal (on *nixes it can also be set via X resources), e.g. xterm-256color. One can find list of available terminal names by list- ing /usr/lib/terminfo/. Number of colors supported by terminal with current settings can be checked via "tput colors" command. Here is the hierarchy of highlight groups, which you need to know for using transparency: JobLine SuggestBox StatusLine WildMenu User1..User9 Border CmdLine ErrorMsg Win OtherWin AuxWin File name specific highlights Directory Link BrokenLink Socket Device Fifo Executable Selected CurrLine OtherLine TopLine TopLineSel TabLineSel (for pane tabs) TabLine TabLineSel "none" means default terminal color for highlight groups at the first level of the hierarchy and transparency for all others. Here file name specific highlights mean those configured via globs ({}) or regular expressions (//). At most one of them is applied per file entry, namely the first that matches file name, hence order of :high- light commands might be important in certain cases. :history :his[tory] creates a pop-up menu of directories visited. :his[tory] x x can be: d[ir] or . show directory history. c[md] or : show command line history. s[earch] or / show search history and search forward on l key. f[search] or / show search history and search forward on l key. b[search] or ? show search history and search backward on l key. i[nput] or @ show prompt history (e.g. on one file renaming). fi[lter] or = show filter history (see description of the "=" normal mode command). :histnext :histnext same as . The main use case for this command is to work around the common pain point of and being the same ASCII character: one could alter the terminal emulator settings to emit, for example, the `F1` keycode when Ctrl-I is pressed, then `:noremap :histnext` in vifm, add "t" flag to the 'cpoptions', and thus have both and working as ex- pected. :histprev :histprev same as . :if :if {expr1} starts conditional block. Commands are executed until next matching :elseif, :else or :endif command if {expr1} evaluates to non-zero, otherwise they are ignored. See also help on :else and :endif commands. Example: if $TERM == 'screen.linux' highlight CurrLine ctermfg=lightwhite ctermbg=lightblack elseif $TERM == 'tmux' highlight CurrLine cterm=reverse ctermfg=black ctermbg=white else highlight CurrLine cterm=bold,reverse ctermfg=black ctermbg=white endif :invert :invert [f] invert file name filter. :invert? [f] show current filter state. :invert s invert selection. :invert o invert sorting order of the primary sorting key. :invert? o show sorting order of the primary sorting key. :jobs :jobs shows menu of current backgrounded processes. :let :let $ENV_VAR = sets environment variable. Warning: setting environment vari- able to an empty string on Windows removes it. :let $ENV_VAR .= append value to environment variable. :let &[l:|g:]opt = sets option value. :let &[l:|g:]opt .= append value to string option. :let &[l:|g:]opt += increasing option value, adding sub-values. :let &[l:|g:]opt -= decreasing option value, removing sub-values. Where could be a single-quoted string, double-quoted string, an environment variable, function call or a concatanation of any of them in any order using the '.' operator. Any whitespace is ignored. :locate :locate filename use "locate" command to create a menu of filenames. Selecting a file from the menu will reload the current file list in vifm to show the selected file. By default the command relies on the external "locate" utility (it's assumed that its database is al- ready built), which can be customized by altering value of the 'locateprg' option. :locate repeats last :locate command. :ls :ls lists windows of active terminal multiplexer (only when terminal multiplexer is used). This is achieved by issuing proper com- mand for active terminal multiplexer, thus the list is not han- dled by vifm. :lstrash :lstrash displays a menu with list of files in trash. Each element of the list is original path of a deleted file, thus the list can contain duplicates. :mark :[range]ma[rk][?] x [/full/path] [filename] Set mark x (a-zA-Z0-9) at /full/path and filename. By default current directory is being used. If no filename was given and /full/path is current directory then last file in [range] is used. Using of macros is allowed. Question mark will stop com- mand from overwriting existing marks. :marks :marks create a pop-up menu of marks. :marks list ... display the contents of the marks that are mentioned in list. :media :media only for *nix display media management menu. See also 'mediaprg' option. :messages :mes[sages] shows previously given messages (up to 50). :mkdir :[line]mkdir[!] dir ... create directories at specified paths. The [line] can be used to pick node in a tree-view. "!" means make parent directories as needed. Macros are expanded. :move :[range]m[ove][!?][ &] move files to directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. :[range]m[ove][!] path[ &] move files to directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. :[range]m[ove][!] name1 name2...[ &] move files to directory of other view giving each next file a corresponding name from the argument list. "!" forces over- write. :nohlsearch :noh[lsearch] clear selection in current pane. :normal :norm[al][!] commands execute normal mode commands. If "!" is used, user defined map- pings are ignored. Unfinished last command is aborted as if or was typed. A ":" should be completed as well. Commands can't start with a space, so put a count of 1 (one) be- fore it. :only :on[ly] switch to a one window view. :popd :popd remove pane directories from stack. :pushd :pushd[!] /curr/dir [/other/dir] add pane directories to stack and process arguments like :cd command. :pushd exchange the top two items of the directory stack. :put :[line]pu[t][!] [reg] [ &] puts files from specified register (" by default) into current directory. The [line] can be used to pick node in a tree-view. "!" moves files "!" moves files from their original location in- stead of copying them. During this operation no confirmation dialogs will be shown, all checks are performed beforehand. :pwd :pw[d] show the present working directory. :qall :qa[ll][!] exit vifm (add ! to skip saving changes and checking for active backgrounded commands). :quit :q[uit][!] if there is more than one tab, close the current one, otherwise exit vifm (add ! to skip saving changes and checking for active backgrounded commands). :redraw :redr[aw] redraw the screen immediately. :registers :reg[isters] display menu with registers content. :reg[isters] list ... display the contents of the numbered and named registers that are mentioned in list (for example "az to display "", "a and "z content). :regular :regular switch to regular view leaving custom view. :rename :[range]rename[!] rename files using vi to edit names. ! means go recursively through directories. :[range]rename name1 name2... rename each of selected files to a corresponding name. :restart :restart free a lot of things (histories, commands, etc.), reread vifminfo and vifmrc files and run startup commands passed in the argument list, thus losing all unsaved changes (e.g. recent his- tory or keys mapped in current session). While many things get reset, some basic UI state and current lo- cations are preserved, including tabs. :restore :[range]restore restore file from trash directory, doesn't work outside one of trash directories. See "Trash directory" section below. :rlink :[range]rlink[!?] create relative symbolic links to files in directory of other view. With "?" prompts for destination file names in an editor. "!" forces overwrite. :[range]rlink[!] path create relative symbolic links of files in directory specified with the path (absolute or relative to directory of other view). "!" forces overwrite. :[range]rlink[!] name1 name2... create relative symbolic links of files in directory of other view giving each next link a corresponding name from the argu- ment list. "!" forces overwrite. :screen :screen toggle whether to use the terminal multiplexer or not. A terminal multiplexer uses pseudo terminals to allow multiple windows to be used in the console or in a single xterm. Start- ing vifm from terminal multiplexer with appropriate support turned on will cause vifm to open a new terminal multiplexer window for each new file edited or program launched from vifm. This requires screen version 3.9.9 or newer for the screen -X argument or tmux (1.8 version or newer is recommended). :screen! enable integration with terminal multiplexers. :screen? display whether integration with terminal multiplexers is en- abled. Note: the command is called screen for historical reasons (when tmux wasn't yet supported) and might be changed in future releases, or get an alias. :select :[range]select select files in the given range (current file if no range is given). :select {pattern} select files that match specified pattern. Possible {pattern} forms are described in "Patterns" section below. Trailing slash for directories is taken into account, so `:select! */ | invert s` selects only files. :select //[iI] same as item above, but reuses last search pattern. :select !{external command} select files from the list supplied by external command. Files are matched by full paths, relative paths are converted to abso- lute ones beforehand. :[range]select! [{pattern}] same as above, but resets previously selected items before pro- ceeding. :set :se[t] display all options that differ from their default value. :se[t] all display all options. :se[t] opt1=val1 opt2='val2' opt3="val3" ... sets given options. For local options both values are set. You can use following syntax: - for all options - option, option? and option& - for boolean options - nooption, invoption and option! - for integer options - option=x, option+=x and option-=x - for string options - option=x and option+=x - for string list options - option=x, option+=x, option-=x and option^=x - for enumeration options - option=x, option+=x and option-=x - for set options - option=x, option+=x, option-=x and op- tion^=x - for charset options - option=x, option+=x, option-=x and op- tion^=x the meaning: - option - turn option on (for boolean) or print its value (for all others) - nooption - turn option off - invoption - invert option state - option! - invert option state - option? - print option value - option& - reset option to its default value - option=x or option:x - set option to x - option+=x - add/append x to option - option-=x - remove (or subtract) x from option - option^=x - toggle x presence among values of the option Option name can be prepended and appended by any number of whitespace characters. :setglobal :setg[lobal] display all global options that differ from their default value. :setg[lobal] all display all global options. :setg[lobal] opt1=val1 opt2='val2' opt3="val3" ... same as :set, but changes/prints only global options or global values of local options. Changes to the latter might be not visible until directory is changed. :setlocal :setl[ocal] display all local options that differ from their default value. :setl[ocal] all display all local options. :setl[ocal] opt1=val1 opt2='val2' opt3="val3" ... same as :set, but changes/prints only local values of local op- tions. :shell :sh[ell][!] start a shell in current directory. "!" suppresses spawning dedicated window of terminal multiplexer for a shell. To make vifm adaptive to environment it uses $SHELL if it's defined, otherwise 'shell' value is used. :siblnext :[count]siblnext[!] change directory to [count]th next sibling directory after cur- rent path using value of global sort option of current pane. "!" enables wrapping. For example, say, you're at /boot and root listing starts like this: bin/ boot/ dev/ ... Issuing :siblnext will navigate to /dev. :siblprev :[count]siblprev[!] same as :siblnext, but in the opposite direction. :sort :sor[t] display dialog with different sorting methods, when one can se- lect primary sorting key. When 'viewcolumns' options is empty and 'lsview' is off, changing primary sorting key will also af- fect view look (in particular the second column of the view will be changed). :source :so[urce] file read command-line commands from the file. :split :sp[lit] switch to a two window horizontal view. :sp[lit]! toggle horizontal window splitting. :sp[lit] path splits the window horizontally to show both file directories. Also changes other pane to path (absolute or relative to current directory of active pane). :substitute :[range]s[ubstitute]/pattern/string/[flags] for each file in range replace a match of pattern with string. String can contain \0...\9 to link to capture groups (\0 - all match, \1 - first group, etc.). Pattern is stored in search history. Available flags: - i - ignore case (the 'ignorecase' and 'smartcase' options are not used) - I - don't ignore case (the 'ignorecase' and 'smartcase' options are not used) - g - substitute all matches in each file name (each g toggles this) :[range]s[ubstitute]/pattern substitute pattern with an empty string. :[range]s[ubstitute]//string/[flags] use last pattern from search history. :[range]s[ubstitute] repeat previous substitution command. :sync :sync [relative path] change the other pane to the current pane directory or to some path relative to the current directory. Using macros is al- lowed. :sync! change the other pane to the current pane directory and synchro- nize cursor position. If current pane displays custom list of files, position before entering it is used (current one might not make any sense). :sync! [location | cursorpos | localopts | filters | filelist | tree | all]... change enumerated properties of the other pane to match corre- sponding properties of the current pane. Arguments have the following meanings: - location - current directory of the pane; - cursorpos - cursor position (doesn't make sense without "lo- cation"); - localopts - all local options; - filters - all filters; - filelist - list of files for custom view (implies "loca- tion"); - tree - tree structure for tree view (implies "location"); - all - all of the above. :tabclose :tabc[lose] close current tab, unless it's the only one open at current scope. :tabmove :tabm[ove] [N] without the argument or with `$` as the argument, current tab becomes the last tab. With the argument, current tab is moved after the tab with the specified number. Argument of `0` moves current tab to the first position. :tabname :tabname [name] set, update or reset (when no argument is provided) name of the current tab. :tabnew :tabnew [path] create new tab. Accepts optional path for the new tab. Macros and environment variables are expanded. :tabnext :tabn[ext] switch to the next tab (wrapping around). :tabn[ext] {n} go to the tab number {n}. Tab numeration starts with 1. :tabprevious :tabp[revious] switch to the previous tab (wrapping around). :tabp[revious] {n} go to the {n}-th previous tab. Note that :tabnext handles its argument differently. :touch :[line]touch file... create files at specified paths. Aborts on errors. Doesn't up- date time of existing files. The [line] can be used to pick node in a tree-view. Macros are expanded. :tr :[range]tr/pattern/string/ for each file in range transliterate the characters which appear in pattern to the corresponding character in string. When string is shorter than pattern, it's padded with its last char- acter. :trashes :trashes lists all valid trash directories in a menu. Only non-empty and writable trash directories are shown. This is exactly the list of directories that are cleared when :empty command is executed. :trashes? same as :trashes, but also displays size of each trash direc- tory. :tree :tree turn pane into tree view with current directory as its root. The tree view is implemented on top of a custom view, but is au- tomatically kept in sync with file system state and considers all the filters. Thus the structure corresponds to what one would see on visiting the directories manually. As a special case for trees built out of custom view file-system tracking isn't performed. To leave tree view go up from its root or use gh at any level of the tree. Any command that changes directory will also do, in particular, `:cd ..`. Tree structure is incompatible with alternative representations, so values of 'lsview' and 'millerview' options are ignored. :tree! toggle current view in and out of tree mode. :undolist :undol[ist] display list of latest changes. Use "!" to see actual commands. :unlet :unl[et][!] $ENV_VAR1 $ENV_VAR2 ... remove environment variables. Add ! to omit displaying of warn- ings about nonexistent variables. :unselect :[range]unselect unselect files in the given range (current file if no range is given). :unselect {pattern} unselect files that match specified pattern. Possible {pattern} forms are described in "Patterns" section below. Trailing slash for directories is taken into account, so `:unselect */` unse- lects directories. :unselect !{external command} unselect files from the list supplied by external command. Files are matched by full paths, relative paths are converted to absolute ones beforehand. :unselect //[iI] same as item above, but reuses last search pattern. :version :ve[rsion] show menu with version information. :vifm :vifm same as :version. :view :vie[w] toggle on and off the quick file view. See also 'quickview' op- tion. :vie[w]! turn on quick file view if it's off. :volumes :volumes only for MS-Windows display menu with volume list. Hitting l (or Enter) key opens appropriate volume in the current pane. :vsplit :vs[plit] switch to a two window vertical view. :vs[plit]! toggle window vertical splitting. :vs[plit] path split the window vertically to show both file directories. And changes other pane to path (absolute or relative to current di- rectory of active pane). :wincmd :[count]winc[md] {arg} same as running Ctrl-W [count] {arg}. :windo :windo [command...] execute command for each pane (same as :winrun % command). :winrun :winrun type [command...] execute command for pane(s), which is determined by type argu- ment: - ^ - top-left pane - $ - bottom-right pane - % - all panes - . - current pane - , - other pane :write :w[rite] write vifminfo file. :wq :wq[!] same as :quit, but ! only disables check of backgrounded com- mands. :wqall :wqa[ll][!] same as :qall, but ! only disables check of backgrounded com- mands. :xall :xa[ll][!] same as :qall. :xit :x[it][!] same as :quit. :yank :[range]y[ank] [reg] [count] will yank files to the reg register. :map lhs rhs :map lhs rhs map lhs key sequence to rhs in normal and visual modes. :map! lhs rhs map lhs key sequence to rhs in command line mode. :cmap :dmap :mmap :nmap :qmap :vmap :cm[ap] lhs rhs map lhs to rhs in command line mode. :dm[ap] lhs rhs map lhs to rhs in dialog modes. :mm[ap] lhs rhs map lhs to rhs in menu mode. :nm[ap] lhs rhs map lhs to rhs in normal mode. :qm[ap] lhs rhs map lhs to rhs in view mode. :vm[ap] lhs rhs map lhs to rhs in visual mode. :*map :cm[ap] list all maps in command line mode. :dm[ap] list all maps in dialog modes. :mm[ap] list all maps in menu mode. :nm[ap] list all maps in normal mode. :qm[ap] list all maps in view mode. :vm[ap] list all maps in visual mode. :*map beginning :cm[ap] beginning list all maps in command line mode that start with the begin- ning. :dm[ap] beginning list all maps in dialog modes that start with the beginning. :mm[ap] beginning list all maps in menu mode that start with the beginning. :nm[ap] beginning list all maps in normal mode that start with the beginning. :qm[ap] beginning list all maps in view mode that start with the beginning. :vm[ap] beginning list all maps in visual mode that start with the beginning. :noremap :no[remap] lhs rhs map the key sequence lhs to rhs for normal and visual modes, but disallow mapping of rhs. :no[remap]! lhs rhs map the key sequence lhs to rhs for command line mode, but dis- allow mapping of rhs. :cnoremap :dnoremap :mnoremap :nnoremap :qnoremap :vnoremap :cno[remap] lhs rhs map the key sequence lhs to rhs for command line mode, but dis- allow mapping of rhs. :dn[oremap] lhs rhs map the key sequence lhs to rhs for dialog modes, but disallow mapping of rhs. :mn[oremap] lhs rhs map the key sequence lhs to rhs for menu mode, but disallow map- ping of rhs. :nn[oremap] lhs rhs map the key sequence lhs to rhs for normal mode, but disallow mapping of rhs. :qn[oremap] lhs rhs map the key sequence lhs to rhs for view mode, but disallow map- ping of rhs. :vn[oremap] lhs rhs map the key sequence lhs to rhs for visual mode, but disallow mapping of rhs. :unmap :unm[ap] lhs remove user mapping of lhs from normal and visual modes. :unm[ap]! lhs remove user mapping of lhs from command line mode. :cunmap :dunmap :munmap :nunmap :qunmap :vunmap :cu[nmap] lhs remove user mapping of lhs from command line mode. :du[nmap] lhs remove user mapping of lhs from dialog modes. :mu[nmap] lhs remove user mapping of lhs from menu mode. :nun[map] lhs remove user mapping of lhs from normal mode. :qun[map] lhs remove user mapping of lhs from view mode. :vu[nmap] lhs remove user mapping of lhs from visual mode. Ranges The ranges implemented include: 2,3 - from second to third file in the list (including it) % - the entire directory. . - the current position in the filelist. $ - the end of the filelist. 't - the mark position t. Examples: :%delete would delete all files in the directory. :2,4delete would delete the files in the list positions 2 through 4. :.,$delete would delete the files from the current position to the end of the filelist. :3delete4 would delete the files in the list positions 3, 4, 5, 6. If a backward range is given :4,2delete - an query message is given and user can chose what to do next. The builtin commands that accept a range are :d[elete] and :y[ank]. Command macros The command macros may be used in user commands. %a User arguments. When user arguments contain macros, they are expanded before preforming substitution of %a. %c %"c The current file under the cursor. %C %"C The current file under the cursor in the other directory. %f %"f All of the selected files. %F %"F All of the selected files in the other directory list. %b %"b Same as %f %F. %d %"d Full path to current directory. %D %"D Full path to other file list directory. %rx %"rx Full paths to files in the register {x}. In case of invalid symbol in place of {x}, it's processed with the rest of the line and default register is used. %m Show command output in a menu. %M Same as %m, but l (or Enter) key is handled like for :locate and :find commands. %u Process command output as list of paths and compose custom view out of it. %U Same as %u, but implies less list updates inside vifm, which is absence of sorting at the moment. %Iu same as %u, but gives up terminal before running external com- mand. %IU same as %U, but gives up terminal before running external com- mand. %S Show command output in the status bar. %q redirect command output to quick view, which is activated if disabled. %s Execute command in split window of active terminal multiplexer (ignored if not running inside one). %n Forbid using of terminal multiplexer to run the command. %i Completely ignore command output. %pc Marks the end of the main command and the beginning of the clear command for graphical preview, which is invoked on closing pre- view of a file. %pd Marks a preview command as one that directly communicates with the terminal. Beware that this is for things like sixel which are self-contained sequences that depend only on current cursor position, using this with anything else is likely to mangle ter- minal state. The following dimensions and coordinates are in characters: %px x coordinate of top-left corner of preview area. %py y coordinate of top-left corner of preview area. %pw width of preview area. %ph height of preview area. Use %% if you need to put a percent sign in your command. Note that %m, %M, %s, %S, %i, %u and %U macros are mutually exclusive. Only the last one of them on the command will take effect. You can use file name modifiers after %c, %C, %f, %F, %b, %d and %D macros. Supported modifiers are: - :p - full path - :u - UNC name of path (e.g. "\\server" in "\\server\share"), Windows only. Expands to current computer name for not UNC paths. - :~ - relative to the home directory - :. - relative to current directory - :h - head of the file name - :t - tail of the file name - :r - root of the file name (without last extension) - :e - extension of the file name (last one) - :s?pat?sub? - substitute the first occurrence of pat with sub. You can use any character for '?', but it must not occur in pat or sub. - :gs?pat?sub? - like :s, but substitutes all occurrences of pat with sub. See ':h filename-modifiers' in Vim's documentation for the detailed de- scription. Using %x means expand corresponding macro escaping all characters that have special meaning. And %"x means using of double quotes and escape only backslash and double quote characters, which is more useful on Windows systems. Position and quantity (if there is any) of %m, %M, %S or %s macros in the command is unimportant. All their occurrences are removed from the resulting command. %c and %f macros are expanded to file names only, when %C and %F are expanded to full paths. %f and %F follow this in %b too. :com move mv %f %D set the :move command to move all of the files selected in the current directory to the other directory. The %a macro is replaced with any arguments given to an alias command. All arguments are considered optional. :com lsl !!ls -l %a - set the lsl command to execute ls -l with or without an argument. :lsl will list the directory contents of the current directory. :lsl filename will list only the given filename. The macros can also be used in directly executing commands. ":!mv %f %D" would move the current directory selected files to the other direc- tory. Appending & to the end of a command causes it to be executed in the background. Typically you want to run two kinds of external commands in the background: - GUI applications that doesn't fork thus block vifm (:!sxiv %f &); - console tools that do not work with terminal (:!mv %f %D &). You don't want to run terminal commands, which require terminal input or output something in background because they will mess up vifm's TUI. Anyway, if you did run such a command, you can use Ctrl-L key to update vifm's TUI. Rewriting the example command with macros given above with background- ing: %m, %M, %s, %S, %u and %U macros cannot be combined with background mark (" &") as it doesn't make much sense. Command backgrounding Copy and move operation can take a lot of time to proceed. That's why vifm supports backgrounding of this two operations. To run :copy, :move or :delete command in the background just add " &" at the end of a command. For each background operation a new thread is created. Job cancella- tion can be requested in the :jobs menu via dd shortcut. You can see if command is still running in the :jobs menu. Back- grounded commands have progress instead of process id at the line be- ginning. Background operations cannot be undone. Cancellation Note that cancellation works somewhat different on Windows platform due to different mechanism of break signal propagation. One also might need to use Ctrl-Break shortcut instead of Ctrl-C. There are two types of operations that can be cancelled: - file system operations; - mounting with FUSE (but not unmounting as it can cause loss of data); - calls of external applications. Note that vifm never terminates applications, it sends SIGINT signal and lets the application quit normally. When one of set of operations is cancelled (e.g. copying of 5th file of 10 files), further operations are cancelled too. In this case undo history will contain only actually performed operations. Cancelled operations are indicated by "(cancelled)" suffix appended to information message on statusbar. File system operations Currently the following commands can be cancelled: :alink, :chmod, :chown, :clone, :copy, :delete, :mkdir, :move, :restore, :rlink, :touch. File putting (on p/P key) can be cancelled as well. It's not hard to see that these are mainly long-running operations. Cancelling commands when they are repeated for undo/redo operations is allowed for convenience, but is not recommended as further undo/redo operations might get blocked by side-effects of partially cancelled group of operations. These commands can't be cancelled: :empty, :rename, :substitute, :tr. Mounting with FUSE It's not considered to be an error, so only notification on the status bar is shown. External application calls Each of this operations can be cancelled: :apropos, :find, :grep, :lo- cate. Patterns :highlight, :filetype, :filextype, :fileviewer commands and 'classify' option support globs, regular expressions and mime types to match file names or their paths. There are six possible ways to write a single pattern: 1. [!]{comma-separated-name-globs} 2. [!]{{comma-separated-path-globs}} 3. [!]/name-regular-expression/[iI] 4. [!]//path-regular-expression//[iI] 5. [!] 6. undecorated-pattern First five forms can include leading exclamation mark that negates pat- tern matching. The last form is implicitly refers to one of others. :highlight does not accept undecorated form, while :filetype, :filextype, :fileviewer, :select, :unselect and 'classify' treat it as list of name globs. Path patterns receive absolute path of the file that includes its name component as well. To combine several patterns (AND them), make sure you're using one of the first five forms and write patterns one after another, like this: {*.vifm} Mind that if you make a mistake the whole string will be treated as the sixth form. :filetype, :filextype and :fileviewer commands accept comma-separated list of patterns instead of a single pattern, thus effectively handling OR operation on them: {*.vifm},{*.pdf} Forms that accept comma-separated lists of patterns also process them as lists of alternatives. Patterns with regular expressions Regular expression patterns are case insensitive by default, see de- scription of commands, which might override default behaviour. Flags of regular expressions mean the following: - "i" makes filter case insensitive; - "I" makes filter case sensitive. They can be repeated multiple times, but the later one takes precedence (e.g. "iiiI" is equivalent to "I" and "IiIi" is the same as "i"). There are no implicit `^` or `$`, so make sure to specify them explic- itly if the pattern should match the whole name or path. Patterns with globs "Globs" section below provides short overview of globs and some impor- tant points that one needs to know about them. Patterns with mime-types Mime type matching is essentially globs matching applied to mime type of a file instead of its name/path. Note: mime types aren't detected on Windows. Examples Associate `evince` to PDF-files only inside `/home/user/downloads/` di- rectory (excluding its subdirectories): :filextype //^/home/user/downloads/[^/]*.pdf$// evince %f Globs Globs are always case insensitive as it makes sense in general case. `*`, `?`, `[` and `]` are treated as special symbols in the pattern. E.g. :filetype * less %c matches all files. One can use character classes for escaping, so :filetype [*] less %c matches only one file name, the one which contains only asterisk sym- bol. `*` means any number of any characters (possibly an empty substring), with one exception: asterisk at the pattern beginning doesn't match dot in the first position. E.g. :fileviewer *.zip,*.jar zip -sf %c associates using of `zip` program to preview all files with `zip` or `jar` extensions as listing of their content, but `.file.zip` won't be matched. `?` means any character at this position. E.g. :fileviewer ?.out file %c calls `file` tool for all files which have exactly one character before their extension (e.g. a.out, b.out). Square brackets designate character class, which means that whole char- acter class matches against any of characters listed in it. For exam- ple :fileviewer *.[ch] highlight -O xterm256 -s dante --syntax c %c makes vifm call `highlight` program to colorize source and header files in C language for a 256-color terminal. Equal command would be :fileviewer *.c,*.h highlight -O xterm256 -s dante --syntax c %c Inside square brackets `^` or `!` can be used for symbol class negotia- tion and the `-` symbol to set a range. `^` and `!` should appear right after the opening square bracket. For example :filetype *.[!d]/ inspect_dir associates `inspect_dir` as additional handler for all directories that have one character extension unless it's "d" letter. And :filetype [0-9].jpg sxiv associates `sxiv` picture viewer only for JPEG-files that contain sin- gle digit in their name. :set options Local options These are kind of options that are local to a specific view. So you can set ascending sorting order for left pane and descending order for right pane. In addition to being local to views, each such option also has two values: - local to current directory (value associated with current location); - global to current directory (value associated with the pane). The idea is that current directory can be made a temporary ex- ception to regular configuration of the view, until directory change. Use :setlocal for that. :setglobal changes view value not affecting settings until directory change. :set applies changes immediately to all values. 'aproposprg' type: string default: "apropos %a" Specifies format for an external command to be invoked by the :apropos command. The format supports expanding of macros, spe- cific for a particular *prg option, and %% sequence for insert- ing percent sign literally. This option should include the %a macro to specify placement of arguments passed to the :apropos command. If the macro is not used, it will be implicitly added after a space to the value of this option. 'autochpos' type: boolean default: true When disabled vifm will set cursor to the first line in the view after :cd and :pushd commands instead of saved cursor position. Disabling this will also make vifm clear information about cur- sor position in the view history on :cd and :pushd commands (and on startup if 'autochpos' is disabled in the vifmrc). l key in the ":history ." and ":trashes" menus are treated like :cd com- mand. This option also affects marks so that navigating to a mark doesn't restore cursor position. When this option is enabled, more fine grained control over cur- sor position is available via 'histcursor' option. 'columns' 'co' type: integer default: terminal width on startup Terminal width in characters. 'caseoptions' type: charset default: "" This option gives additional control over case sensitivity by allowing overriding default behaviour to either always be case sensitive or always be case insensitive. Possible values form pairs of lower and upper case letters that configure specific aspect of behaviour: p - always ignore case of paths during completion. P - always match case of paths during completion. g - always ignore case of characters for f/F/;/,. G - always match case of characters for f/F/;/,. At most one item of each pair takes affect, if both or more are present, only the last one matters. When none of pair's ele- ments are present, the behaviour is default (depends on operat- ing system for path completion and on values of 'ignorecase' and 'smartcase' options for file navigation). 'cdpath' 'cd' type: string list default: value of $CDPATH with commas instead of colons Specifies locations to check on changing directory with relative path that doesn't start with "./" or "../". When non-empty, current directory is examined after directories listed in the option. This option doesn't affect completion of :cd command. Example: set cdpath=~ This way ":cd bin" will switch to "~/bin" even if directory named "bin" exists in current directory, while ":cd ./bin" com- mand will ignore value of 'cdpath'. 'chaselinks' type: boolean default: false When enabled path of view is always resolved to real path (with all symbolic links expanded). 'classify' type: string list default: ":dir:/" Specifies file name prefixes and suffixes depending on file type or name. The format is either of: - [{prefix}]:{filetype}:[{suffix}] - [{prefix}]::{pattern}::[{suffix}] Possible {pattern} forms are described in "Patterns" section above. Priority rules: - file name patterns have priority over type patterns - file name patterns are matched in left-to-right order of their appearance in this option Either {prefix} or {suffix} or both can be omitted (which is the default for all unspecified file types), this means empty {pre- fix} and/or {suffix}. {prefix} and {suffix} should consist of at most eight characters. Elements are separated by commas. Neither prefixes nor suffixes are part of file names, so they don't affect commands which operate on file names in any way. Comma (',') character can be inserted by doubling it. List of file type names can be found in the description of filetype() function. 'confirm' 'cf' type: set default: delete,permdelete Defines which operations require confirmation: - delete - moving files to trash (on d or :delete); - permdelete - permanent deletion of files (on D or :delete! command or on undo/redo operation). 'cpoptions' 'cpo' type: charset default: "fst" Contains a sequence of single-character flags. Each flag en- ables behaviour of older versions of vifm. Flags: - f - when included, running :filter command results in not in- verted (matching files are filtered out) and :filter! in in- verted (matching files are left) filter, when omitted, meaning of the exclamation mark changes to the opposite; - s - when included, yy, dd and DD normal mode commands act on selection, otherwise they operate on current file only; - t - when included, (thus ) behave as and switches active pane, otherwise and go forward in the view history. It's possible to make both and to work as expected by setting up the terminal to emit a custom se- quence when is pressed; see :histnext for details. 'cvoptions' type: set default: Specifies whether entering/leaving custom views triggers events that normally happen on entering/leaving directories: - autocmds - trigger autocommands on entering/leaving custom views; - localopts - reset local options on entering/leaving custom views; - localfilter - reset local filter on entering/leaving custom views. 'deleteprg' type: string default: "" Specifies program to run on files that are permanently removed. When empty, files are removed as usual, otherwise this command is invoked on each file by appending its name. If the command doesn't remove files, they will remain on the file system. 'dirsize' type: enumeration default: size Controls how size of directories is displayed in file views. The following values are possible: - size - size of directory (i.e., size used to store list of files) - nitems - number of entries in the directory (excluding . and ..) Size obtained via ga/gA overwrites this setting so seeing count of files and occasionally size of directories is possible. 'dotdirs' type: set default: nonrootparent Controls displaying of dot directories. The following values are possible: - rootparent - show "../" in root directory of file system - nonrootparent - show "../" in non-root directories of file system Note that empty directories always contain "../" entry regard- less of value of this option. "../" disappears at the moment at least one file is created. 'dotfiles' type: boolean default: false Whether dot files are shown in the view. Can be controlled with z* bindings. 'fastrun' type: boolean default: false With this option turned on you can run partially entered com- mands with unambiguous beginning using :! (e.g. :!Te instead of :!Terminal or :!Te). 'fillchars' 'fcs' type: string list default: "" Sets characters used to fill borders. item default used for vborder:c ' ' left, middle and right vertical bor- ders If value is omitted, its default value is used. Example: set fillchars=vborder:. 'findprg' type: string default: "find %s %a -print , -type d \( ! -readable -o ! -exe- cutable \) -prune" Specifies format for an external command to be invoked by the :find command. The format supports expansion of macros specific for this particular option and %% sequence for inserting percent sign literally. The macros are: macro value/meaning %s literal arguments of :find or list of paths to search in %A empty or literal arguments of :find %a empty or literal arguments of :find or predicate followed by escaped arguments of :find %p empty or literal arguments of :find or escaped arguments (parameters) of :find %u redirect output to custom view instead of showing a menu %U redirect output to unsorted custom view instead of showing a menu Predicate in %a is "-name" on *nix and "-iname" on Windows. If both %u and %U are specified, %U is chosen. Some macros can be added implicitly: - if %s isn't present, it's appended - if neither of %a, %A and %p is present, %a is appended - if neither of %s, %a, %A and %p is present, %s and %a are ap- pended in this order The macros slightly change their meaning depending on format of :find's arguments: - if the first argument points to an existing directory, %s is assigned all arguments while %a, %A and %p are left empty - otherwise: - %s is assigned a dot (".") meaning current directory or list of selected file names, if any - %a, %A and %p are assigned literal arguments when first argument starts with a dash ("-"), otherwise %a gets an escaped version of the arguments with a predicate and %p contains es- caped version of the arguments Starting with Windows Server 2003 a `where` command is avail- able. One can configure vifm to use it in the following way: set findprg="where /R %s %A" As the syntax of this command is rather limited, one can't use :find command with selection of more than one item because the command ignores all directory paths except for the last one. When using find port on Windows, another option is to setup 'findprg' like this: set findprg="find %s %a" 'followlinks' type: boolean default: true Follow links on l or Enter. That is navigate to destination file instead of treating the link as if it were target file. Doesn't affects links to directories, which are always entered (use gf key for directories). 'fusehome' type: string default: "($XDG_DATA_HOME/.local/share | $VIFM)/fuse/" Directory to be used as a root dir for FUSE mounts. Value of the option can contain environment variables (in form "$en- vname"), which will be expanded (prepend it with a slash to pre- vent expansion). The value should expand to an absolute path. If you change this option, vifm won't remount anything. It af- fects future mounts only. See "Automatic FUSE mounts" section below for more information. 'gdefault' 'gd' type: boolean default: false When on, 'g' flag is on for :substitute by default. 'grepprg' type: string default: "grep -n -H -I -r %i %a %s" Specifies format for an external command to be invoked by the :grep command. The format supports expanding of macros, spe- cific for a particular *prg option, and %% sequence for insert- ing percent sign literally. This option should include the %i macro to specify placement of "-v" string when inversion of re- sults is requested, %a or %A macro to specify placement of argu- ments passed to the :grep command and the %s macro to specify placement of list of files to search in. If some of the macros are not used, they will be implicitly added after a space to the value of the 'grepprg' option in the following order: %i, %a, %s. Note that when neither %a nor %A are specified, it's %a which is added implicitly. Optional %u or %U macro could be used (if both specified %U is chosen) to force redirection to custom or unsorted custom view respectively. See 'findprg' option for description of difference between %a and %A. Example of setup to use ack (http://beyondgrep.com/) instead of grep: set grepprg='ack -H -r %i %a %s' or The Silver Searcher (https://github.com/ggreer/the_sil- ver_searcher): set grepprg='ag --line-numbers %i %a %s' 'histcursor' type: set default: startup,dirmark,direnter Defines situations when cursor should be moved according to di- rectory history: - startup - on loading file lists during startup - dirmark - after navigating to a mark that doesn't specify file - direnter - on opening directory from a file list This option has no effect when 'autochpos' is disabled. Note that the list is not exhaustive and there are other situa- tions when cursor is positioned automatically. 'history' 'hi' type: integer default: 15 Maximum number of stored items in all histories. 'hlsearch' 'hls' type: boolean default: true Highlight all matches of search pattern. 'iec' type: boolean default: false Use KiB, MiB, ... suffixes instead of K, M, ... when printing size in human-friendly format. 'ignorecase' 'ic' type: boolean default: false Ignore case in search patterns (:substitute, / and ? commands) and characters after f and F commands. It doesn't affect file filtering. 'incsearch' 'is' type: boolean default: false When this option is set, search and view update for local filter is be performed starting from initial cursor position each time search pattern is changed. 'iooptions' type: set default: Controls details of file operations. The following values are available: - fastfilecloning - perform fast file cloning (copy-on-write), when available (available on Linux and btrfs file system). 'laststatus' 'ls' type: boolean default: true Controls if status bar is visible. 'lines' type: integer default: terminal height on startup Terminal height in lines. 'locateprg' type: string default: "locate %a" Specifies format for an external command to be invoked by the :locate command. The format supports expanding of macros, spe- cific for a particular *prg option, and %% sequence for insert- ing percent sign literally. This option should include the %a macro to specify placement of arguments passed to the :locate command. If the macro is not used, it will be implicitly added after a space to the value of this option. Optional %u or %U macro could be used (if both specified %U is chosen) to force redirection to custom or unsorted custom view respectively. 'mediaprg' type: string default: path to bundled script that supports udevil, udisks and udisks2 (using udisks2 requires python with dbus module in- stalled) OS X: path points to a python script that uses diskutil {only for *nix} Specifies command to be used to manage media devices. Used by :media command. The command can be passed the following parameters: - list -- list media - mount {device} -- mount a device - unmount {path} -- unmount given mount point The output of `list` subcommand is parsed in search of lines that start with one of the following prefixes: - device= - specifies device path (e.g., "/dev/sde") - label= - specifies optional device label (e.g., "Memory card") - info= - specifies arbitrary text to display next to device (by default "[label]" is used, if label is pro- vided) - mount-point= - specifies a mount point (can be absent or ap- pear more than once) All other lines are ignored. Each `device=` starts a new sec- tion describing a device which should include two other possible prefixes. `list` subcommand is assumed to always succeed, while exit code of `mount` and `unmount` is taken into account to determine whether operation was performed successfully. 'lsoptions' type: string list default: "" scope: local Configures ls-like view. item used for transposed filling view grid by columns rather than by lines 'lsview' type: boolean default: false scope: local When this option is set, directory view will be displayed in multiple columns with file names similar to output of `ls -x` command. See "ls-like view" section below for format descrip- tion. This option has no effect if 'millerview' is on. 'milleroptions' type: string list default: "lsize:1,csize:1,rsize:1,rpreview:dirs" scope: local Configures miller view. item default used for lsize:num 0 left column csize:num 1 center column (can't be disabled) rsize:num 0 right column rpreview:str dirs right column *size specifies ratios of columns. Each ratio is in the range from 0 to 100 and values are adjusted to fit the limits. Zero disables a column, but central (main) column can't be disabled. rpreview specifies what file-system objects should be previewed in the right column and can take two values: dirs (only directo- ries) or all. Both options don't include parent directory (".."). Example of two-column mode which is useful in combination with :view command: set milleroptions=lsize:1,csize:2 'millerview' type: boolean default: false scope: local When this option is set, directory view will be displayed in multiple cascading columns. Ignores 'lsview'. 'mintimeoutlen' type: integer default: 150 The fracture of 'timeoutlen' in milliseconds that is waited be- tween subsequent input polls, which affects various asynchronous operations (detecting changes made by external applications, monitoring background jobs, redrawing UI). There are no strict guarantees, however the higher this value is, the less is CPU load in idle mode. 'number' 'nu' type: boolean default: false scope: local Print line number in front of each file name when 'lsview' op- tion is turned off. Use 'numberwidth' to control width of line number. Also see 'relativenumber'. 'numberwidth' 'nuw' type: integer default: 4 scope: local Minimal number of characters for line number field. 'previewprg' type: string default: "" scope: local External command to be used instead of preview programs config- ured via :fileviewer command. Example: " always show git log in preview of files inside some repository au DirEnter '~/git-repo/**/*' setl previewprg='git log --color -- %c 2>&1' 'quickview' type: boolean default: false Whether quick view (:view) is currently active or not. 'relativenumber' 'rnu' type: boolean default: false scope: local Print relative line number in front of each file name when 'lsview' option is turned off. Use 'numberwidth' to control width of line number. Various combinations of 'number' and 'relativenumber' lead to such results: nonumber number norelativenumber | first | 1 first | second | 2 second | third | 3 third relativenumber | 1 first | 1 first | 0 second |2 second | 1 third | 1 third 'rulerformat' 'ruf' type: string default: "%l/%S " Determines the content of the ruler. Its minimal width is 13 characters and it's right aligned. Following macros are sup- ported: %= - separation point between left and right aligned halves of the line %l - file number %L - total number of files in view (including filtered out ones) %x - number of files excluded by filters %0- - old name for %x macro %S - number of displayed files %= - separation point between left and right align items %% - percent sign %[ - designates beginning of an optional block %] - designates end of an optional block Percent sign can be followed by optional minimum field width. Add '-' before minimum field width if you want field to be right aligned. Example: set rulerformat='%2l-%S%[ +%x%]' 'runexec' type: boolean default: false Run executable file on Enter or l. 'scrollbind' 'scb' type: boolean default: false When this option is set, vifm will try to keep difference of scrolling positions of two windows constant. 'scrolloff' 'so' type: integer default: 0 Minimal number of screen lines to keep above and below the cur- sor. If you want cursor line to always be in the middle of the view (except at the beginning or end of the file list), set this option to some large value (e.g. 999). 'shell' 'sh' type: string default: $SHELL or "/bin/sh" or "cmd" (on MS-Windows) Full path to the shell to use to run external commands. On *nix a shell argument can be supplied. 'shellcmdflag' 'shcf' type: string default: "-c" or "/C" (for cmd.exe on MS-Windows) Command-line option used to pass a command to 'shell'. It's used in contexts where command comes from the user. 'shortmess' 'shm' type: charset default: "p" Contains a sequence of single-character flags. Each flag en- ables shortening of some message displayed by vifm in the TUI. Flags: - L - display only last directory in tab line instead of full path. - M - shorten titles in windows of terminal multiplexers cre- ated by vifm down to file name instead of using full path. - T - truncate status-bar messages in the middle if they are too long to fit on the command line. "..." will appear in the middle. - p - use tilde shortening in view titles. 'showtabline' 'stal' type: enumeration default: multiple Specifies when tab line should be displayed. Possible values: - never - never display tab line - multiple - show tab line only when there are at least two tabs - always - display tab line always Alternatively 0, 1 and 2 Vim-like values are also accepted and correspond to "never", "multiple" and "always" respectively. 'sizefmt' type: string list default: "units:iec" Configures the way size is formatted in human-friendly way. item value meaning units: iec Use 1024 byte units (K or KiB, etc.). See 'iec' option. si Use 1000 byte units (KB, etc.). precision: i > 0 How many fraction digits to con- sider. {not set} Precision of 1 for integer part < 10, 0 otherwise (provides old behav- iour). space {present} Insert space before unit sym- bols. This is the default. nospace {present} Do not insert space before unit symbols. Numbers are rounded from zero. Trailing zeros are dropped. Example: set sizefmt=units:iec,precision:2,nospace 'slowfs' type: string list default: "" only for *nix A list of mounter fs name beginnings (first column in /etc/mtab or /proc/mounts) or paths prefixes for fs/directories that work too slow for you. This option can be used to stop vifm from making some requests to particular kinds of file systems that can slow down file browsing. Currently this means don't check if directory has changed, skip check if target of symbolic links exists, assume that link target located on slow fs to be a di- rectory (allows entering directories and navigating to files via gf). If you set the option to "*", it means all the systems are considered slow (useful for cygwin, where all the checks might render vifm very slow if there are network mounts). Example for autofs root /mnt/autofs: set slowfs+=/mnt/autofs 'smartcase' 'scs' type: boolean default: false Overrides the ignorecase option if the search pattern contains at least one upper case character. Only used when ignorecase option is enabled. It doesn't affect file filtering. 'sort' type: string list default: +name on *nix and +iname on Windows scope: local Sets list of sorting keys (first item is primary key, second is secondary key, etc.): [+-]ext - extension of files and directories [+-]fileext - extension of files only [+-]name - name (including extension) [+-]iname - name (including extension, ignores case) [+-]type - file type (dir/reg/exe/link/char/block/sock/fifo) [+-]dir - directory grouping (directory < file) [+-]gid - group id (*nix only) [+-]gname - group name (*nix only) [+-]mode - file type derived from its mode (*nix only) [+-]perms - permissions string (*nix only) [+-]uid - owner id (*nix only) [+-]uname - owner name (*nix only) [+-]nlinks - number of hard links (*nix only) [+-]inode - inode number (*nix only) [+-]size - size [+-]nitems - number of items in a directory (zero for files) [+-]groups - groups extracted via regexps from 'sortgroups' [+-]target - symbolic link target (empty for other file types) [+-]atime - time accessed (e.g. read, executed) [+-]ctime - time changed (changes in metadata, e.g. mode) [+-]mtime - time modified (when file contents is changed) Note: look for st_atime, st_ctime and st_mtime in "man 2 stat" for more information on time keys. '+' means ascending sort for this key, and '-' means descending sort. "dir" key is somewhat similar in this regard but it's added im- plicitly: when "dir" is not specified, sorting behaves as if it was the first key in the list. That's why if one wants sorting algorithm to mix directories and files, "dir" should be appended to sorting option, for example like this: set sort+=dir or set sort=-size,dir Value of the option is checked to include dir key and default sorting key (name on *nix, iname on Windows). Here is what hap- pens if one of them is missing: - type key is added at the beginning; - default key is added at the end; all other keys are left untouched (at most they are moved). This option also changes view columns according to primary sort- ing key set, unless 'viewcolumns' option is not empty. 'sortnumbers' type: boolean default: false scope: local Natural sort of (version) numbers within text. 'sortgroups' type: string default: "" scope: local Sets comma-separated list of regular expressions to use for group sorting, double comma is literal comma. Each expression should contain at least one group or its value will be consid- ered to be always empty. Only first match of each regular ex- pression is considered. Groups are considered from right to first similar to 'sort', first group divides list of files into sub-groups, each of which is sorted by the second group and so on. Example: set sortgroups=-(done|todo).* this would put files with "-done" in their names above all files with "-todo". 'sortorder' type: enumeration default: ascending Sets sort order for primary key: ascending, descending. 'statusline' 'stl' type: string default: "" Determines the content of the status line (the line right above command-line). Empty string means use same format like in pre- vious versions. Following macros are supported: - %t - file name (considering value of the 'classify' option) - %T - symbolic link target (empty for other filetypes) - %f - file name relative to current directory (considers 'clas- sify') - %A - file attributes (permissions on *nix or properties on Windows) %u - user name or uid (if it cannot be resolved) - %g - group name or gid (if it cannot be resolved) - %s - file size in human readable format - %E - size of selected files in human readable format, same as %s when no files are selected, except that it will never show size of ../ in visual mode, since it cannot be selected - %d - file modification date (uses 'timefmt' option) - %D - path of the other pane for single-pane layout - %a - amount of free space available at current partition - %z - short tips/tricks/hints that chosen randomly after one minute period - %{} - evaluate arbitrary vifm expression '', e.g. '&sort' - %* - resets or applies one of User1..User9 highlight groups; reset happens when width field is 0 or not specified, one of groups gets picked when width field is in the range from 1 to 9 - all 'rulerformat' macros Percent sign can be followed by optional minimum field width. Add '-' before minimum field width if you want field to be right aligned. On Windows file properties include the following flags (upper case means flag is on): A - archive H - hidden I - content isn't indexed R - readonly S - system C - compressed D - directory E - encrypted P - reparse point (e.g. symbolic link) Z - sparse file Example without colors: set statusline=" %t%= %A %10u:%-7g %15s %20d %{&sort} " Example with colors: highlight User1 ctermbg=yellow highlight User2 ctermbg=blue ctermfg=white cterm=bold set statusline="%1* %-26t %2* %= %1* %A %2* %7u:%-7g %1* %-5s %2* %d " 'suggestoptions' type: string list default: Controls when, for what and how suggestions are displayed. The following values are available: - normal - in normal mode; - visual - in visual mode; - view - in view mode; - otherpane - use other pane to display suggestions, when available; - delay[:num] - display suggestions after a small delay (to do not annoy if you just want to type a fast shortcut consisting of multiple keys), num specifies the delay in ms (500 by de- fault), 'timeoutlen' at most; - keys - include shortcuts (commands and selectors); - foldsubkeys - fold multiple keys with common prefix; - marks - include marks; - registers[:num] - include registers, at most num files (5 by default). 'syncregs' type: string default: Specifies identifier of group of instances that share registers between each other. When several instances of vifm have this option set to identical value, they automatically synchronize contents of their registers on operations which use them. 'syscalls' type: boolean default: false When disabled, vifm will rely on external applications to per- form file-system operations, otherwise system calls are used in- stead (much faster and supports progress tracking). The option should eventually be removed. Mostly *nix-like systems are af- fected. 'tabscope' type: enumeration default: global Picks style of tabs, which defines what a single tab contains. Possible values: - global - tab describes complete UI of two views and how they are arranged - pane - tab is located "inside" a pane and manages it and quick view 'tabstop' 'ts' type: integer default: value from curses library Number of spaces that a Tab in the file counts for. 'timefmt' type: string default: "%m/%d %H:%M" Format of time in file list. See "man 1 date" or "man 3 strf- time" for details. 'timeoutlen' 'tm' type: integer default: 1000 The time in milliseconds that is waited for a mapped key in case of already typed key sequence is ambiguous. 'title' type: boolean default: true when title can be restored, false otherwise When enabled, title of the terminal or terminal multiplexer's window is updated according to current location. Because not all terminals support setting title, this works only if `$TERM` value matches one of the following conditions: - equals "xterm" or starts with "xterm-" - equals "rxvt" or starts with "rxvt-" - equals "screen" or starts with "screen-" - equals "aterm" - equals "Eterm" 'trash' type: boolean default: true Use trash directory. See "Trash directory" section below. 'trashdir' type: string default: on *nix: "%r/.vifm-Trash-%u,$VIFM/Trash,%r/.vifm-Trash" or if $VIFM/Trash doesn't exist "%r/.vifm-Trash-%u,$XDG_DATA_HOME/vifm/Trash,%r/.vifm-Trash" on Windows: "%r/.vifm-Trash,$XDG_DATA_HOME/vifm/Trash" List of trash directory path specifications, separated with com- mas. Each list item either defines an absolute path to trash directory or a path relative to a mount point root when list el- ement starts with "%r/". Value of the option can contain envi- ronment variables (of form "$envname"), which will be expanded (prepend $ with a slash to prevent expansion). Environment variables are expanded when the option is set. On *nix, if element ends with "%u", the mark is replaced with real user ID and permissions are set so that only that only owner is able to use it. Note that even this setup is not completely secure when combined with "%r/" and it's overall safer to keep files in home direc- tory, but that implies cost of copying files between partitions. When new file gets cut (deleted) vifm traverses each element of the option in the order of their appearance and uses first trash directory that it was able to create or that is already writable. Default value tries to use trash directory per mount point and falls back to ~/.vifm/Trash on failure. Will attempt to create the directory if it does not exist. See "Trash directory" section below. 'tuioptions' 'to' type: charset default: "ps" Each flag configures some aspect of TUI appearance. The flags are: p - when included: * file list inside a pane gets additional single character padding on left and right sides; * quick view and view mode get single character padding. s - when included, left and right borders (side borders, hence "s" character) are visible. u - use Unicode characters in the TUI (Unicode ellipsis instead of "..."). 'undolevels' 'ul' type: integer default: 100 Maximum number of changes that can be undone. Note that here single file operation is used as a unit, not operation, i.e. deletion of 101 files will exceed default limit. 'vicmd' type: string default: "vim" Command used to edit files in various contexts. Ampersand sign at the end (regardless whether it's preceded by space or not) means backgrounding of command. Background flag is ignored in certain context where vifm waits for the editor to finish. Such contexts include any command that spawns editor to change list of file names or a command, with :rename being one example. `-f` is also appended to pre- vent forking in such cases, so the command needs to handle the flag. Additionally `+{num}` and `+'call cursor()'` arguments are used to position cursor when location is known. 'viewcolumns' type: string default: "" scope: local Format string containing list of columns in the view. When this option is empty, view columns to show are chosen automatically using sorting keys (see 'sort') as a base. Value of this option is ignored if 'lsview' is set. See "Column view" section below for format description. An example of setting the options for both panes (note :windo command): windo set viewcolumns=-{name}..,6{size},11{perms} 'vixcmd' type: string default: value of 'vicmd' Same as 'vicmd', but takes precedence over it when running in- side a graphical environment. 'vifminfo' type: set default: bookmarks,bmarks Controls what will be saved in the $VIFM/vifminfo file. bmarks - named bookmarks bookmarks - marks, except special ones like '< and '> tui - state of the user interface (sorting, number of windows, quick view state, active view) dhistory - directory history state - file name and dot filters and terminal multiplex- ers integration state cs - primary color scheme savedirs - save last visited directory (requires dhistory) chistory - command line history shistory - search history (/ and ? commands) phistory - prompt history fhistory - history of local filter (see description of the "=" normal mode command) dirstack - directory stack overwrites previous stack, unless stack of current session is empty registers - registers content options - all options that can be set with the :set command (obsolete) filetypes - associated programs and viewers (obsolete) commands - user defined commands (see :command description) (obsolete) 'vimhelp' type: boolean default: false Use vim help format. 'wildmenu' 'wmnu' type: boolean default: false Controls whether possible matches of completion will be shown above the command line. 'wildstyle' type: enumeration default: bar Picks presentation style of wild menu. Possible values: - bar - one-line with left-to-right cursor - popup - multi-line with top-to-bottom cursor 'wordchars' type: string list default: "1-8,14-31,33-255" (that is all non-whitespace charac- ters) Specifies which characters in command-line mode should be con- sidered as part of a word. Value of the option is comma-sepa- rated list of ranges. If both endpoints of a range match, sin- gle endpoint is enough (e.g. "a" = "a-a"). Both endpoints are inclusive. There are two accepted forms: character representing itself or number encoding character according to ASCII table. In case of ambiguous characters (dash, comma, digit) use numeric form. Accepted characters are in the range from 0 to 255. Any Unicode character with code greater than 255 is considered to be part of a word. The option affects Alt-D, Alt-B and Alt-F, but not Ctrl-W. This is intentionally to allow two use cases: - Moving by WORDS and deletion by words. - Moving by words and deletion by WORDS. To get the latter use the following mapping: cnoremap Also used for abbreviations. 'wrap' type: boolean default: true Controls whether to wrap text in quick view. 'wrapscan' 'ws' type: boolean default: true Searches wrap around end of the list. Mappings Map arguments LHS of mappings can be preceded by arguments which take the form of special sequences: Postpone UI updates until RHS is completely processed. In case of builtin mapping causing conflict for a user-defined mapping (e.g., `t` builtin to a partially typed `ta` user-de- fined mapping), ignore the builtin mapping and wait for input indefinitely as opposed to default behaviour of triggering the builtin mapping after a delay defined by 'timeoutlen'. Example: nnoremap tw :set wrap! nnoremap tn :set number! nnoremap tr :set relativenumber! Special sequences Since it's not easy to enter special characters there are several spe- cial sequences that can be used in place of them. They are: Enter key. Escape key. Space key. Less-than character (<). provides a way to disable a mapping (by mapping it to ). Backspace key (see key conflict description below). Tabulation and Shift+Tabulation keys. Home/End. Arrow keys. PageUp/PageDown. Delete key. and mean different codes, but is more common. Insert key. ,,...,,,,,, Control + some key (see key conflict description below). only for *nix Control + Space. ,,..., ,,..., Alt + some key. ,,..., ,,..., only for *nix Alt + Ctrl + some key. - Functional keys. - only for MS-Windows functional keys with Control key pressed. - only for MS-Windows functional keys with Alt key pressed. - only for MS-Windows functional keys with Shift key pressed. Note that due to the way terminals process their input, several key- board keys might be mapped to single key code, for example: - and ; - and ; - and ; - etc. Most of the time they are defined consistently and don't cause sur- prises, but and are treated differently in different envi- ronments (although they match each other all the time), that's why they correspond to different keys in vifm. As a consequence, if you map or be sure to repeat the mapping with the other one so that it works in all environments. Alternatively, provide your mapping in one form and add one of the following: " if mappings with in the LHS work map " if mappings with in the LHS work map Whitespace vifm removes whitespace characters at the beginning and end of com- mands. That's why you may want to use at the end of rhs in mappings. For example: cmap man will put "man " in line when you hit the key in the command line mode. Expression syntax Supported expressions is a subset of what VimL provides. Expression syntax summary, from least to most significant: expr1 expr2 expr2 || expr2 .. logical OR expr2 expr3 expr3 && expr3 .. logical AND expr3 expr4 expr4 == expr4 equal expr4 != expr4 not equal expr4 > expr4 greater than expr4 >= expr4 greater than or equal expr4 < expr4 smaller than expr4 <= expr4 smaller than or equal expr4 expr5 expr5 + expr5 .. number addition expr5 - expr5 .. number subtraction expr5 expr6 expr6 . expr6 .. string concatenation expr6 expr7 - expr6 unary minus + expr6 unary plus ! expr6 logical NOT expr7 number number constant "string" string constant, \ is special 'string' string constant, ' is doubled &option option value $VAR environment variable v:var builtin variable function(expr1, ...) function call (expr1) nested expression ".." indicates that the operations in this level can be concatenated. expr1 ----- expr2 || expr2 Arguments are converted to numbers before evaluation. Result is non-zero if at least one of arguments is non-zero. It's right associative and with short-circuiting, so sub-expressions are evaluated from left to right until result of whole expression is determined (i.e., until first non-zero) or end of the expression. expr2 ----- expr3 && expr3 Arguments are converted to numbers before evaluation. Result is non-zero only if both arguments are non-zero. It's right associative and with short-circuiting, so sub-expressions are evaluated from left to right until result of whole expression is determined (i.e., until first zero) or end of the expression. expr3 ----- expr4 {cmp} expr4 Compare two expr4 expressions, resulting in a 0 if it evaluates to false or 1 if it evaluates to true. equal == not equal != greater than > greater than or equal >= smaller than < smaller than or equal <= Examples: 'a' == 'a' == 1 'a' > 'b' == 1 'a' == 'b' == 0 '2' > 'b' == 0 2 > 'b' == 1 2 > '1b' == 1 2 > '9b' == 0 -1 == -'1' == 1 0 == '--1' == 1 expr4 ----- expr5 + expr5 .. number addition expr5 - expr5 .. number sub- traction Examples: 1 + 3 - 3 == 1 1 + '2' == 3 expr5 ----- expr6 . expr6 .. string concatenation Examples: 'a' . 'b' == 'ab' 'aaa' . '' . 'c' == 'aaac' expr6 ----- - expr6 unary minus + expr6 unary plus ! expr6 logical NOT For '-' the sign of the number is changed. For '+' the number is unchanged. For '!' non-zero becomes zero, zero becomes one. A String will be converted to a Number first. These operations can be repeated and mixed. Examples: --9 == 9 ---9 == -9 -+9 == 9 !-9 == 0 !'' == 1 !'x' == 0 !!9 == 1 expr7 ----- number number constant ----- Decimal number. Examples: 0 == 0 0000 == 0 01 == 1 123 == 123 10000 == 10000 string ------ "string" string constant Note that double quotes are used. A string constant accepts these special characters: \b backspace \e escape \n newline \r return \t tab \\ backslash \" double quote Examples: "\"Hello,\tWorld!\"" "Hi,\nthere!" literal-string -------------- 'string' string constant Note that single quotes are used. This string is taken as it is. No backslashes are removed or have a special meaning. The only exception is that two quotes stand for one quote. Examples: 'All\slashes\are\saved.' 'This string contains doubled single quotes ''here''' option ------ &option option value (local one is preferred, if exists) &g:option global option value &l:option local option value Examples: echo 'Terminal size: '.&columns.'x'.&lines if &columns > 100 Any valid option name can be used here (note that "all" in ":set all" is a pseudo option). See ":set options" section above. environment variable -------------------- $VAR environment variable The String value of any environment variable. When it is not defined, the result is an empty string. Examples: 'This is my $PATH env: ' . $PATH 'vifmrc at ' . $MYVIFMRC . ' is used.' builtin variable -------------------- v:var builtin variable Information exposed by vifm for use in scripting. v:count count passed to : command, 0 by default. Can be used in mappings to pass count to a different command. v:count1 same as v:count, but 1 by default. v:servername See below. function call ------------- function(expr1, ...) function call See "Functions" section below. Examples: "'" . filetype('.') . "'" filetype('.') == 'reg' expression nesting ------------------ (expr1) nested expression Groups any other expression of arbitrary complexity enforcing order in which operators are applied. Functions USAGE RESULT DESCRIPTION chooseopt({opt}) String Queries choose parameters passed on startup. executable({expr}) Integer Checks whether {expr} command avail- able. expand({expr}) String Expands special keywords in {expr}. extcached({cache}, {path}, {extcmd}) String Caches output of {extcmd} per {cache} and {path} combination. filetype({fnum} [, {resolve}]) String Returns file type from position. fnameescape({expr}) String Escapes {expr} for use in a :command. getpanetype() String Returns type of current pane. has({property}) Integer Checks whether instance has {prop- erty}. layoutis({type}) Integer Checks whether layout is of type {type}. paneisat({loc}) Integer Checks whether current pane is at {loc}. system({command}) String Executes shell command and returns its output. tabpagenr([{arg}]) Integer Returns number of current or last tab. term({command}) String Like system(), but for interactive commands. chooseopt({opt}) Retrieves values of options related to file choosing. {opt} can be one of: files returns argument of --choose-files or empty string dir returns argument of --choose-dir or empty string cmd returns argument of --on-choose or empty string delimiter returns argument of --delimiter or the default one (\n) executable({expr}) If {expr} is absolute or relative path, checks whether path destination exists and refers to an executable, otherwise checks whether command named {expr} is present in directories listed in $PATH. Checks for various executable extensions on Windows. Returns boolean value de- scribing result of the check. Example: " use custom default viewer script if it's available and installed " in predefined system directory, otherwise try to find it elsewhere if executable('/usr/local/bin/defviewer') fileview * /usr/local/bin/defviewer %c else if executable('defviewer') fileview * defviewer %c endif endif expand({expr}) Expands environment variables and macros in {expr} just like it's done for command-line commands. Returns a string. See "Command macros" section above. Examples: " percent sign :echo expand('%%') " the last part of directory name of the other pane :echo expand('%D:t') " $PATH environment variable (same as `:echo $PATH`) :echo expand('$PATH') extcached({cache}, {path}, {extcmd}) Caches value of {extcmd} external command automatically updating it as necessary based on monitoring change date of a {path}. The cache is invalidated when file or its meta-data is updated. A single path can have multiple caches associated with it. {path} value is normalized, but symbolic links in it aren't resolved. Example: " display number and size of blocks actually used by a file or directory set statusline+=" Uses: %{ extcached('uses', expand('%c'), expand('stat --format=%%bx%%B %c')) }" filetype({fnum} [, {resolve}]) The result is a string, which represents file type and is one of the list: exe executables reg regular files link symbolic links broken broken symbolic links (appears only when resolving) dir directories char character devices block block devices fifo pipes sock *nix domain sockets ? unknown file type (should not normally appear) The result can also be an empty string in case of invalid argument. Parameter {fnum} can have following values: - '.' to get type of file under the cursor in the active pane - numerical value base 1 to get type of file on specified line num- ber Optional parameter {resolve} is treated as a boolean and specifies whether symbolic links should be resolved. fnameescape({expr}) Escapes parameter to make it suitable for use as an argument of a :com- mand. List of escaped characters includes %, which is doubled. Usage example: " navigate to most recently modified file in current directory execute 'goto' fnameescape(system('ls -t | head -1')) getpanetype() Retrieves string describing type of current pane. Possible return val- ues: regular regular file listing of some directory custom custom file list (%u) very-custom very custom file list (%U) tree tree view has({property}) Allows examining internal parameters from scripts to e.g. figure out environment in which application is running. Returns 1 if property is true/present, otherwise 0 is returned. Currently the following proper- ties are supported (anything else will yield 0): unix runs in *nix-like environment (including Cygwin) win runs on Windows Usage example: " skip user/group on Windows if !has('win') let $RIGHTS = '%10u:%-7g ' endif execute 'set' 'statusline=" %t%= %A '.$RIGHTS.'%15E %20d "' layoutis({type}) Checks whether current interface layout is {type} or not, where {type} can be: only single-pane mode split double-pane mode (either vertical or horizon split) vsplit vertical split (left and right panes) hsplit horizontal split (top and bottom panes) Usage example: " automatically split vertically before enabling preview :nnoremap w :if layoutis('only') | vsplit | endif | view! paneisat({loc}) Checks whether position of active pane in current layout matches one of the following locations: top pane reaches top border bottom pane reaches bottom border left pane reaches left border right pane reaches right border system({command}) Runs the command in shell and returns its output (joined standard out- put and standard error streams). All trailing newline characters are stripped to allow easy appending to command output. Ctrl-C should in- terrupt the command. Use this function to consume output of external commands that don't re- quire user interaction and term() for interactive commands that make use of terminal and are capable of handling stream redirection. Usage example: " command to enter .git/ directory of git-repository (when ran inside one) command! cdgit :execute 'cd' system('git rev-parse --git-dir') tabpagenr([{arg}]) When called without arguments returns number of current tab page base one. When called with "$" as an argument returns number of the last tab page base one, which is the same as number of tabs. term({command}) Same as system() function, but user interface is shutdown during the execution of the command, which makes sure that external interactive applications won't affect the way terminal is used by vifm. Usage example: " command to change directory by picking it via fzf command! fzfcd :execute 'cd' "'".term('find -type d | fzf 2> /dev/tty')."'" Menus and dialogs When navigating to some path from a menu there is a difference in end location depending on whether path has trailing slash or not. Files normally don't have trailing slashes so "file/" won't work and one can only navigate to a file anyway. On the other hand with directories there are two options: navigate to a directory or inside of it. To al- low both use cases, the first one is used on paths like "dir" and the second one for "dir/". Commands :range navigate to a menu line. :exi[t][!] :q[uit][!] :x[it][!] leave menu mode. :noh[lsearch] reset search match highlighting. :w[rite] {dest} write all menu lines into file specified by {dest}. General j, Ctrl-N - move down. k, Ctrl-P - move up. Enter, l - select and exit the menu. Ctrl-L - redraw the menu. Escape, Ctrl-C, ZZ, ZQ, q - quit. In all menus The following set of keys has the same meaning as in normal mode. Ctrl-B, Ctrl-F Ctrl-D, Ctrl-U Ctrl-E, Ctrl-Y /, ? n, N [count]G, [count]gg H, M, L zb, zt, zz zh - scroll menu items [count] characters to the right. zl - scroll menu items [count] characters to the left. zH - scroll menu items half of screen width characters to the right. zL - scroll menu items half of screen width characters to the left. : - enter command line mode for menus (currently only :exi[t], :q[uit], :x[it] and :{range} are supported). b - interpret content of the menu as list of paths and use it to create custom view in place of previously active pane. See "Custom views" section below. B - same as above, but creates unsorted view. v - load menu content into quickfix list of the editor (Vim compatible by assumption) or if list doesn't have separators after file names (colons) open each line as a file name. Below is description of additional commands and reaction on selection in some menus and dialogs. Apropos menu Selecting menu item runs man on a given topic. Menu won't be closed automatically to allow view several pages one by one. Command-line mode abbreviations menu Type dd on an abbreviation to remove it. c leaves menu preserving file selection and inserts right-hand side of selected command into command-line. Color scheme menu Selecting name of a color scheme applies it the same way as if ":col- orscheme " was executed on the command-line. Commands menu Selecting command executes it with empty arguments (%a). dd on a command to remove. Marks menu Selecting mark navigates to it. dd on a mark to remove it. Bookmarks menu Selecting a bookmark navigates to it. Type dd on a bookmark to remove it. gf and e also work to make it more convenient to bookmark files. Trash (:lstrash) menu r on a file name to restore it from trash. dd deletes file under the cursor. Trashes menu dd empties selected trash in background. Directory history and Trashes menus Selecting directory name will change directory of the current view as if :cd command was used. Directory stack menu Selecting directory name will rotate stack to put selected directory pair at the top of the stack. Filetype menu Commands from vifmrc or typed in command-line are displayed above empty line. All commands below empty line are from .desktop files. c leaves menu preserving file selection and inserts command after :! in command-line mode. Grep, find, locate, bookmarks and user menu with navigation (%M macro) gf - navigate previously active view to currently selected item. Leaves menu mode except for grep menu. Pressing Enter key has the same effect. e - open selected path in the editor, stays in menu mode. c - leave menu preserving file selection and insert file name after :! in command-line mode. User menu without navigation (%m macro) c leaves menu preserving file selection and inserts whole line after :! in command-line mode. Grep menu Selecting file (via Enter or l key) opens it in editor set by 'vicmd' at given line number. Menu won't be closed automatically to allow viewing more than one result. See above for "gf" and "e" keys description. Command-line history menu Selecting an item executes it as command-line command, search query or local filter. c leaves menu preserving file selection and inserts line into command- line of appropriate kind. Volumes menu Selecting a drive navigates previously active pane to the root of that drive. Fileinfo dialog Enter, q - close dialog Sort dialog h, Space - switch ascending/descending. q - close dialog One shortcut per sorting key (see the dialog). Attributes (permissions or properties) dialog h, Space - check/uncheck. q - close dialog Item states: - * - checked flag. - X - means that it has different value for files in selection. - d (*nix only) - (only for execute flags) means u-x+X, g-x+X or o-x+X argument for the chmod program. If you're not on OS X and want to remove execute permission bit from all files, but preserve it for di- rectories, set all execute flags to 'd' and check 'Set Recursively' flag. Jobs menu dd requests cancellation of job under cursor. The job won't be removed from the list, but marked as being cancelled (if cancellation was suc- cessfully requested). A message will pop up if the job has already stopped. Note that on Windows cancelling external programs like this might not work, because their parent shell doesn't have any windows. e key displays errors of selected job if any were collected. They are displayed in a new menu, but you can get back to jobs menu by pressing h. Undolist menu r - reset undo position to group under the cursor. Media menu Selecting a device either mounts (if it wasn't mounted yet) or navi- gates to its first mount point. Selecting a mount point navigates to it. Selecting "not mounted" line causes mounting. Selecting any other line does nothing. r - reload the list. m - mount/unmount device (cursor should be positioned on lines under device information). [ - put cursor on the previous device. ] - put cursor on the next device. Custom views Definition Normally file views contain list of files from a single directory, but sometimes it's useful to populate them with list of files that do not belong to the same directory, which is what custom views are for. Presentation Custom views are still related to directory they were in before custom list was loaded. Path to that directory (original directory) can be seen in the title of a custom view. Files in same directory have to be named differently, this doesn't hold for custom views thus seeing just file names might be rather confusing. In order to give an idea where files come from and when possible, rela- tive paths to original directory of the view is displayed, otherwise full path is used instead. Custom views normally don't contain any inexistent files. Navigation Custom views have some differences related to navigation in regular views. gf - acts similar to gf on symbolic links and navigates to the file at its real location. h - go to closes parent node in tree view, otherwise return to the original directory. gh - return to the original directory. Opening ".." entry also causes return to the original directory. History Custom list exists only while it's visible, once left one can't return to it, so there is no appearances of it in any history. Filters Only local filter affects content of the view. This is intentional, presumably if one loads list, precisely that list should be displayed (except for inexistent paths, which are ignored). Search Although directory names are visible in listing, they are not search- able. Only file names are taken into account (might be changed in fu- ture, searching whole lines seems quite reasonable). Sorting Contrary to search sorting by name works on whole visible part of file path. Highlight Whole file name is highlighted as one entity, even if there are direc- tory elements. Updates Reloads can occur, though they are not automatic due to files being scattered among different places. On a reload, inexistent files are removed and meta-data of all other files is updated. Once custom view forgets about the file, it won't add it back even if it's created again. So not seeing file previously affected by an oper- ation, which was undone is normal. Operations All operations that add files are forbidden for custom views. For ex- ample, moving/copying/putting files into a custom view doesn't work, because it doesn't make much sense. On the other hand, operations that use files of a custom view as a source (e.g. yanking, copying, moving file from custom view, deletion) and operations that modify names are all allowed. Compare views Kinds :compare can produce four different results depending on arguments: - single compare view (ofone and either listall or listdups); - single custom view (ofone and listunique); - two compare views (ofboth and either listall or listdups); - two custom views (ofboth and listunique). The first two display files of one file system tree. Here duplicates are files that have at least one copy in the same tree. The other two kinds of operation compare two trees, in which duplicates are files that are found in both trees. Lists of unique files are presented in custom views because there is no file grouping to preserve as all file ids are guaranteed to be dis- tinct. Creation Arguments passed to :compare form four categories each with its own prefix and is responsible for particular property of operation. Which files to compare: - ofboth - compares files of two panes against each other; - ofone - compares files of the same directory. How files are compared: - byname - by their name only; - bysize - only by their size; - bycontents - by combination of size and hash of file contents. Which files to display: - listall - all files; - listunique - unique files only; - listdups - only duplicated files. How results are grouped (has no effect if "ofone" specified): - groupids - files considered identical are always adjacent in out- put; - grouppaths - file system ordering is preferred (this also enables displaying identically named files as mismatches). Which files to omit: - skipempty - ignore empty files. Each argument can appear multiple times, the rightmost one of the group is considered. Arguments alter default behaviour instead of substitut- ing it. Examples The defaults corresponds to probably the most common use case of com- paring files in two trees with grouping by paths, so the following are equivalent: :compare :compare bycontents grouppaths :compare bycontents listall ofboth grouppaths Another use case is to find duplicates in the current sub-tree: :compare listdups ofone The following command lists files that are unique to each pane: :compare listunique Look The view can't switch to ls-like view as it's unable to display diff- like data. Comparison views have second column displaying id of the file, files with same id are considered to be equal. The view columns configura- tion is predefined. Behaviour When two views are being compared against each other the following changes to the regular behaviour apply: - views are scrolled synchronously (as if 'scrollbind' was set); - views' cursors are synchronized; - local filtering is disabled (its results wouldn't be meaningful); - zd excludes groups of adjacent identical files, 1zd gives usual be- haviour; - sorting is permanently disabled (ordering is fixed); - removed files hide their counter pairs; - exiting one of the views terminates the other immediately; - renaming files isn't blocked, but isn't taken into account and might require regeneration of comparison; - entries which indicate absence of equivalent file have empty names and can be matched as such; - when unique files of both views are listed custom views can be empty, this absence of unique files is stated clearly. One compare view has similar properties (those that are applicable for single pane). Files are gathered in this way: - recursively starting at current location of the view; - dot files are excluded if view hides them at the moment of compari- son; - directories are not taken into account; - symbolic links to directories are ignored. Startup On startup vifm determines several variables that are used during the session. They are determined in the order they appear below. On *nix systems $HOME is normally present and used as is. On Windows systems vifm tries to find correct home directory in the following or- der: - $HOME variable; - $USERPROFILE variable (on Windows only); - a combination of $HOMEDRIVE and $HOMEPATH variables (on Windows only). vifm tries to find correct configuration directory by checking the fol- lowing places: - $VIFM variable; - parent directory of the executable file (on Windows only); - $HOME/.vifm directory; - $APPDATA/Vifm directory (on Windows only); - $XDG_CONFIG_HOME/vifm directory; - $HOME/.config/vifm directory. vifm tries to find correct configuration file by checking the following places: - $MYVIFMRC variable; - vifmrc in parent directory of the executable file (on Windows only); - $VIFM/vifmrc file. Configure See "Startup" section above for the explanations on $VIFM and $MYV- IFMRC. The vifmrc file contains commands that will be executed on vifm startup. There are two such files: global and local. Global one is at {prefix}/etc/vifm/vifmrc, see $MYVIFMRC variable description for the search algorithm used to find local vifmrc. Global vifmrc is loaded before the local one, so that the later one can redefine anything con- figured globally. Use vifmrc to set settings, mappings, filetypes etc. To use multi line commands precede each next line with a slash (whitespace before slash is ignored, but all spaces at the end of the lines are saved). For ex- ample: set \smartcase equals "setsmartcase". When set \ smartcase equals "set smartcase". The $VIFM/vifminfo file contains session settings. You may edit it by hand to change the settings, but it's not recommended to do that, edit vifmrc instead. You can control what settings will be saved in vifminfo by setting 'vifminfo' option. Vifm always writes this file on exit unless 'vifminfo' option is empty. Marks, bookmarks, commands, histories, filetypes, fileviewers and registers in the file are merged with vifm configuration (which has bigger priority). Generally, runtime configuration has bigger priority during merging, but there are some exceptions: - directory stack stored in the file is not overwritten unless some- thing is changed in vifm session that performs merge; - each mark or bookmark is marked with a timestamp, so that newer value is not overwritten by older one, thus no matter from where it comes, the newer one wins. The $VIFM/scripts directory can contain shell scripts. vifm modifies its PATH environment variable to let user run those scripts without specifying full path. All subdirectories of the $VIFM/scripts will be added to PATH too. Script in a subdirectory overlaps script with the same name in all its parent directories. The $VIFM/colors/ and {prefix}/etc/vifm/colors/ directories contain color schemes. Available color schemes are searched in that order, so on name conflict the one in $VIFM/colors/ wins. Each color scheme should have ".vifm" extension. This wasn't the case before and for this reason the following rules apply during lookup: - if there is no file with .vifm extension, all regular files are listed; - otherwise only files with .vifm extension are listed (with the ex- tension being truncated). Automatic FUSE mounts vifm has a builtin support of automated FUSE file system mounts. It is implemented using file associations mechanism. To enable automated mounts, one needs to use a specially formatted program line in filetype or filextype commands. These use special macros, which differ from macros in commands unrelated to FUSE. Currently three formats are sup- ported: 1) FUSE_MOUNT This format should be used in case when all information needed for mounting all files of a particular type is the same. E.g. mounting of tar files don't require any file specific options. Format line: FUSE_MOUNT|mounter %SOURCE_FILE %DESTINATION_DIR [%FOREGROUND] Example filetype command: :filetype FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR 2) FUSE_MOUNT2 This format allows one to use specially formatted files to perform mounting and is useful for mounting remotes, for example re- mote file systems over ftp or ssh. Format line: FUSE_MOUNT2|mounter %PARAM %DESTINATION_DIR [%FOREGROUND] Example filetype command: :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR Example file content: root@127.0.0.1:/ 3) FUSE_MOUNT3 This format is equivalent to FUSE_MOUNT, but omits unmounting. It is useful for cases, when unmounting isn't needed, like when using AVFS. Example :filetype command: :filetype *.tar,*.tar.bz2,*.tbz2,*.tgz,*.tar.gz,*.tar.xz,*.txz,*.deb \ {Mount with avfs} \ FUSE_MOUNT3|mount-avfs %DESTINATION_DIR %SOURCE_FILE Example `mount-avfs` helper script: #!/bin/sh dest=$1 file=$2 rmdir "$dest" ln -s "$HOME/.avfs$file#/" "$dest" All % macros are expanded by vifm at runtime and have the following meaning: - %SOURCE_FILE is replaced by full path to selected file; - %DESTINATION_DIR is replaced by full path to mount directory, which is created by vifm basing on the value of 'fusehome' option; - %PARAM value is filled from the first line of file (whole line), though in the future it can be changed to whole file content; - %FOREGROUND means that you want to run mount command as a regular command (required to be able to provide input for communication with mounter in interactive way). %FOREGROUND is an optional macro. Other macros are not mandatory, but mount commands likely won't work without them. %CLEAR is obsolete name of %FOREGROUND, which is still supported, but might be removed in future. Its use is discouraged. Unlike macros elsewhere, these are recognized only if they appear at the end of a command or are followed by a space. There is no way to escape % either. These are historical limitations, which might be ad- dressed in the future. The mounted FUSE file systems will be automatically unmounted in two cases: - when vifm quits (with ZZ, :q, etc. or when killed by signal); - when you explicitly leave mount point going up to its parent direc- tory (with h, Enter on "../" or ":cd ..") and other pane is not in the same directory or its child directories. View look vifm supports displaying of file list view in two different ways: - in a table mode, when multiple columns can be set using 'view- columns' option (see "Column view" section below for details); - in a multicolumn list manner which looks almost like `ls -x` com- mand output (see "ls-like view" section below for details). The look is local for each view and can be chosen by changing value of the 'lsview' boolean option. Depending on view look some of keys change their meaning to allow more natural cursor moving. This concerns mainly h, j, k, l and other simi- lar navigation keys. Also some of options can be ignored if they don't affect view display- ing in selected look. For example value of 'viewcolumns' when 'lsview' is set. ls-like view When this view look is enabled by setting 'lsview' option on, vifm will display files in multiple columns. Number of columns depends on the length of the longest file name present in current directory of the view. Whole file list is automatically reflowed on directory change, terminal or view resize. View looks close to output of `ls -x` command, so files are listed left to right in rows. In this mode file manipulation commands (e.g. d) don't work line-wise like they do in Vim, since such operations would be uncommon for file manipulation tasks. Thus, for example, dd will remove only current file. By default the view is filled by lines, 'lsoptions' can be used to get filling by columns. Note that tree-view and compare view inhibit ls-like view. Column view View columns are described by a comma-separated list of column descrip- tions, each of which has the following format [ '-' ] [ fw ( [ '.' tw ] | '%' ) ] '{' type '}' '.'{0,3} where fw stands for full width and tw stands for text width. So it basically consists of four parts: 1. Optional alignment specifier 2. Optional width specifier 3. Mandatory column name 4. Optional cropping specifier Alignment specifier It's an optional minus or asterisk sign as the first symbol of the string. Specifies type of text alignment within a column. Three types are sup- ported: - left align set viewcolumns=-{name} - right align (default) set viewcolumns={name} - dynamic align It's like left alignment, but when the text is bigger than the col- umn, the alignment is made at the right (so the part of the field is always visible). set viewcolumns=*{name} Width specifier It's a number followed by a percent sign, two numbers (second one should be less than or equal to the first one) separated with a dot or a single number. Specifies column width and its units. There are three size types: - absolute size - column width is specified in characters set viewcolumns=-100{name},20.15{ext} results in two columns with lengths of 100 and 20 and a reserved space of five characters on the left of second column. - relative (percent) size - column width is specified in percents of view width set viewcolumns=-80%{name},15%{ext},5%{mtime} results in three columns with lengths of 80/100, 15/100 and 5/100 of view width. - auto size (default) - column width is automatically determined set viewcolumns=-{name},{ext},{mtime} results in three columns with length of one third of view width. There is no size adjustment to content, since it will slow down ren- dering. Columns of different sizing types can be freely mixed in one view. Though sometimes some of columns can be seen partly or be completely invisible if there is not enough space to display them. Column name This is just a sort key surrounded with curly braces or {root}, e.g. {name},{ext},{mtime} {name} and {iname} keys are the same and present both for consistency with 'sort' option. Following keys don't have corresponding sorting keys: - {root} - display name without extension (as a complement for {ext}) - {fileroot} - display name without extension for anything except for directories and symbolic links to directories (as a complement for {fileext}) Empty curly braces ({}) are replaced with the default secondary column for primary sort key. So after the next command view will be displayed almost as if 'viewcolumns' is empty, but adding ellipsis for long file names: set viewcolumns=-{name}..,6{}. Cropping specifier It's from one to three dots after closing curly brace in column format. Specifies type of text truncation if it doesn't fit in the column. Currently three types are supported: - truncation - text is truncated set viewcolumns=-{name}. results in truncation of names that are too long too fit in the view. - adding of ellipsis - ellipsis on the left or right are added when needed set viewcolumns=-{name}.. results in that ellipsis are added at the end of too long file names. - none (default) - text can pass column boundaries set viewcolumns=-{name}...,{ext} results in that long file names can partially be written on the ext column. Color schemes The color schemes in vifm can be applied in two different ways: - as the primary color scheme; - as local to a pane color scheme. Both types are set using :colorscheme command, but of different forms: - :colorscheme color_scheme_name - for the primary color scheme; - :colorscheme color_scheme_name directory - for local color schemes. Look of different parts of the TUI (Text User Interface) is determined in this way: - Border, TabLine, TabLineSel, TopLineSel, TopLine, CmdLine, Er- rorMsg, StatusLine, JobLine, SuggestBox and WildMenu are always de- termined by the primary color scheme; - CurrLine, Selected, Directory, Link, BrokenLink, Socket, Device, Executable, Fifo, CmpMismatch, Win, AuxWin and OtherWin are deter- mined by primary color scheme and a set of local color schemes, which can be empty. There might be a set of local color schemes because they are structured hierarchically according to file system structure. For example, having the following piece of file system: ~ `-- bin | `-- my Two color schemes: # ~/.vifm/colors/for_bin highlight Win cterm=none ctermfg=white ctermbg=red highlight CurrLine cterm=none ctermfg=red ctermbg=black # ~/.vifm/colors/for_bin_my highlight CurrLine cterm=none ctermfg=green ctermbg=black And these three commands in the vifmrc file: colorscheme Default colorscheme for_bin ~/bin colorscheme for_bin_my ~/bin/my File list will look in the following way for each level: - ~/ - Default color scheme black background cursor with blue background - ~/bin/ - mix of Default and for_bin color schemes red background cursor with black background and red foreground - ~/bin/my/ - mix of Default, for_bin and for_bin_my color schemes red background cursor with black background and green foreground Trash directory vifm has support of trash directory, which is used as temporary storage for deleted files or files that were cut. Using trash is controlled by the 'trash' option, and exact path to the trash can be set with 'trashdir' option. Trash directory in vifm differs from the system- wide one by default, because of possible incompatibilities of storing deleted files among different file managers. But one can set 'trashdir' to "~/.local/share/Trash" to use a "standard" trash direc- tory. There are two scenarios of using trash in vifm: 1. As a place for storing files that were cut by "d" and may be in- serted to some other place in file system. 2. As a storage of files, that are deleted but not purged yet. The first scenario uses deletion ("d") operations to put files to trash and put ("p") operations to restore files from trash directory. Note that such operations move files to and from trash directory, which can be long term operations in case of different partitions or remote drives mounted locally. The second scenario uses deletion ("d") operations for moving files to trash directory and :empty command-line command to purge all previously deleted files. Deletion and put operations depend on registers, which can point to files in trash directory. Normally, there are no nonexistent files in registers, but vifm doesn't keep track of modifications under trash di- rectory, so one shouldn't expect value of registers to be absolutely correct if trash directory was modified not by operation that are meant for it. But this won't lead to any issues with operations, since they ignore nonexistent files. Client-Server vifm supports remote execution of command-line mode commands, remote changing of directories and expression evaluation. This is possible using --remote and --remote-expr command-line arguments. To execute a command remotely combine --remote argument with -c or +. For example: vifm --remote -c 'cd /' vifm --remote '+cd /' To change directory not using command-line mode commands one can spec- ify paths right after --remote argument, like this: vifm --remote / vifm --remote ~ vifm --remote /usr/bin /tmp Evaluating expression remotely might be useful to query information about an instance, for example its location: vifm --remote-expr 'expand("%d")' If there are several running instances, the target can be specified with --server-name option (otherwise, the first one lexicographically is used): vifm --server-name work --remote ~/work/project List of names of running instances can be obtained via --server-list option. Name of the current one is available via v:servername. v:servername server name of the running vifm instance. Empty if client- server feature is disabled. Plugin Plugin for using vifm in vim as a file selector. Commands: :EditVifm select a file or files to open in the current buffer. :Vifm alias for :EditVifm. :SplitVifm split buffer and select a file or files to open. :VsplitVifm vertically split buffer and select a file or files to open. :DiffVifm select a file or files to compare to the current file with :vert diffsplit. :TabVifm select a file or files to open in tabs. Each command accepts up to two arguments: left pane directory and right pane directory. After arguments are checked, vifm process is spawned in a special "file-picker" mode. To pick files just open them either by pressing l, i or Enter keys, or by running :edit command. If no files are selected, file under the cursor is opened, otherwise whole selection is passed to the plugin and opened in vim. The plugin have only two settings. It's a string variable named g:vifm_term to let user specify command to run GUI terminal. By de- fault it's equal to 'xterm -e'. And another string variable named g:vifm_exec, which equals "vifm" by default and specifies path to vifm's executable. To pass arguments to vifm use g:vifm_exec_args, which is empty by default. To use the plugin copy the vifm.vim file to either the system wide vim/plugin directory or into ~/.vim/plugin. If you would prefer not to use the plugin and it is in the system wide plugin directory add let loaded_vifm=1 to your ~/.vimrc file. Reserved The following command names are reserved and shouldn't be used for user commands. g[lobal] v[global] ENVIRONMENT VIFM Points to main configuration directory (usually ~/.vifm/). MYVIFMRC Points to main configuration file (usually ~/.vifm/vifmrc). These environment variables are valid inside vifm and also can be used to configure it by setting some of them before running vifm. When $MYVIFMRC isn't set, it's made as $VIFM/vifmrc (exception for Win- dows: vifmrc in the same directory as vifm.exe has higher priority than $VIFM/vifmrc). See "Startup" section above for more details. VIFM_FUSE_FILE On execution of external commands this variable is set to the full path of file used to initiate FUSE mount of the closes mount point from current pane directory up. It's not set when outside FUSE mount point. When vifm is used inside terminal multiplexer, it tries to set this variable as well (it doesn't work this way on its own). SEE ALSO vifm-convert-dircolors(1), vifm-pause(1) Website: https://vifm.info/ Wiki: https://wiki.vifm.info/ Esperanto translation of the documentation by Sebastian Cyprych: http://cyprych.neostrada.pl/tekstoj/komputiloj/vifm-help.eo.html AUTHOR Vifm was written by ksteen And currently is developed by xaizek vifm 0.10.1 July 29, 2019 VIFM(1) ================================================ FILE: vifm/.config/vifm/vifmrc ================================================ " {{{ General config " This is the actual command used to start vi. The default is vim. " If you would like to use another vi clone such as Elvis or Vile " you will need to change this setting. set vicmd=nvim " This makes vifm perform file operations on its own instead of relying on " standard utilities like `cp`. While using `cp` and alike is a more universal " solution, it's also much slower when processing large amounts of files and " doesn't support progress measuring. set syscalls " Open with preview window view " Trash Directory " The default is to move files that are deleted with dd or :d to " the trash directory. If you change this you will not be able to move " files by deleting them and then using p to put the file in the new location. " I recommend not changing this until you are familiar with vifm. " This probably shouldn't be an option. set trash " This is how many directories to store in the directory history. set history=1000 " Automatically resolve symbolic links on l or Enter. set nofollowlinks " Natural sort of (version) numbers within text. set sortnumbers " Maximum number of changes that can be undone. set undolevels=100 " If you would like to run an executable file when you " press return on the file name set this. set norunexec " Selected color scheme colorscheme minimal " Format for displaying time in file list. For example: " TIME_STAMP_FORMAT=%m/%d-%H:%M " See man date or man strftime for details. set timefmt=%m/%d\ %H:%M " Show list of matches on tab completion in command-line mode set wildmenu " Display completions in a form of popup with descriptions of the matches set wildstyle=popup " Display suggestions in normal, visual and view modes for keys, marks and " registers (at most 5 files). In other view, when available. set suggestoptions=normal,visual,view,otherpane,keys,marks,registers " Ignore case in search patterns unless it contains at least one uppercase " letter set ignorecase set smartcase " Don't highlight search results automatically set nohlsearch " Use increment searching (search while typing) set incsearch " Try to leave some space from cursor to upper/lower border in lists set scrolloff=4 " Don't do too many requests to slow file systems if !has('win') set slowfs=curlftpfs endif " Things that should be stored in vifminfo set vifminfo=dhistory,chistory,state,shistory,phistory,fhistory,dirstack,registers,bookmarks,bmarks " Dont show delete confirmation set confirm-=delete " ------------------------------------------------------------------------------ " :com[mand][!] command_name action " The following macros can be used in a command " %a is replaced with the user arguments. " %c the current file under the cursor. " %C the current file under the cursor in the other directory. " %f the current selected file, or files. " %F the current selected file, or files in the other directory. " %b same as %f %F. " %d the current directory name. " %D the other window directory name. " %m run the command in a menu window command! df df -h %m 2> /dev/null command! diff vim -d %f %F command! zip zip -r %f.zip %f command! run !! ./%f command! make !!make %a command! mkcd :mkdir %a | cd %a command! vgrep vim "+grep %a" command! reload :write | restart " Empty the ruler. By default, it shows the number of directories+files. set rulerformat= " Having a relative numberline makes it very easy navigate to files set relativenumber highlight LineNr ctermbg=NONE ctermfg=243 command! FZFfind : \| let $FZF_PICK = term('find . 2>/dev/null | fzf --reverse 2>/dev/tty') \| if $FZF_PICK != '' \| execute 'goto' fnameescape($FZF_PICK) \| endif " }}} " {{{ File preview & file opening " The file type is for the default programs to be used with " a file extension. " :filetype pattern1,pattern2 defaultprogram,program2 " :fileviewer pattern1,pattern2 consoleviewer " The other programs for the file type can be accessed with the :file command " The command macros %f, %F, %d, %F may be used in the commands. " The %a macro is ignored. To use a % you must put %%. " For automated FUSE mounts, you must register an extension with :file[x]type " in one of following formats: " " :filetype extensions FUSE_MOUNT|some_mount_command using %SOURCE_FILE and %DESTINATION_DIR variables " %SOURCE_FILE and %DESTINATION_DIR are filled in by vifm at runtime. " A sample line might look like this: " :filetype *.zip,*.jar,*.war,*.ear FUSE_MOUNT|fuse-zip %SOURCE_FILE %DESTINATION_DIR " " :filetype extensions FUSE_MOUNT2|some_mount_command using %PARAM and %DESTINATION_DIR variables " %PARAM and %DESTINATION_DIR are filled in by vifm at runtime. " A sample line might look like this: " :filetype *.ssh FUSE_MOUNT2|sshfs %PARAM %DESTINATION_DIR " %PARAM value is filled from the first line of file (whole line). " Example first line for SshMount filetype: root@127.0.0.1:/ " " You can also add %CLEAR if you want to clear screen before running FUSE " program. fileviewer *.pdf \ vifmimg pdf %px %py %pw %ph %c \ %pc \ vifmimg clear fileviewer *.djvu \ vifmimg djvu %px %py %pw %ph %c \ %pc \ vifmimg clear fileviewer *.epub \ vifmimg epub %px %py %pw %ph %c \ %pc \ vifmimg clear fileviewer