Krolyxon
Commit 11182a7

Branches

Refs →

aurora.localbindefine_word

37 lines · 1.5 KB · Bourne Again Shell (bash)

1#!/usr/bin/env bash
2
3word=${1:-$(xclip -o -selection primary 2>/dev/null || wl-paste 2>/dev/null)}
4
5# Check for empty word or special characters
6[[ -z "$word" || "$word" =~ [\/] ]] && notify-send -h string:bgcolor:#bf616a -t 3000 "Invalid input." && exit 0
7
8query=$(curl -s --connect-timeout 5 --max-time 10 "https://api.dictionaryapi.dev/api/v2/entries/en_US/$word")
9
10# Check for connection error (curl exit status stored in $?)
11[ $? -ne 0 ] && notify-send -h string:bgcolor:#bf616a -t 3000 "Connection error." && exit 1
12
13# Check for invalid word response
14[[ "$query" == *"No Definitions Found"* ]] && notify-send -h string:bgcolor:#bf616a -t 3000 "Invalid word." && exit 0
15
16# Show only first 3 definitions
17def=$(echo "$query" | jq -r '[.[].meanings[] | {pos: .partOfSpeech, def: .definitions[].definition}] | .[:3].[] | "\n\(.pos). \(.def)"')
18
19# Requires a notification daemon to be installed
20notify-send -t 60000 "$word -" "$def"
21
22
23### MORE OPTIONS :)
24
25# Show first definition for each part of speech (thanks @morgengabe1 on youtube)
26# def=$(echo "$query" | jq -r '.[0].meanings[] | "\(.partOfSpeech): \(.definitions[0].definition)\n"')
27
28# Show all definitions
29# def=$(echo "$query" | jq -r '.[].meanings[] | "\n\(.partOfSpeech). \(.definitions[].definition)"')
30
31# Regex + grep for just definition, if anyone prefers that to jq
32# def=$(grep -Po '"definition":"\K(.*?)(?=")' <<< "$query")
33
34# bold=$(tput bold) # Print text bold with echo, for visual clarity
35# normal=$(tput sgr0) # Reset text to normal
36# echo "${bold}Definition of $word"
37# echo "${normal}$def"