#
+## open : string -> unit
+##
+## Fork xdg-open so we don't block current terminal session when opening
+## things like pdf files. For example:
+##
+## open book.pdf
+##
+open() {
+ (xdg-open "$1" &) &
+}
+
+## notify_done : unit -> unit
+notify_done() {
+ local -r _status_code="$?"
+ local -r _program="$1"
+ local _timestamp
+ _timestamp="$(timestamp)"
+ local -r _msg="$_timestamp [$_program] done "
+ if [[ "$_status_code" -eq 0 ]]
+ then
+ notify-send -u normal "$_msg OK: $_status_code"
+ else
+ notify-send -u critical "$_msg ERROR: $_status_code"
+ fi
+}
+
## p : string -> unit
p() {
awk \
'
BEGIN {_s = tolower(_s)}
+ # TODO fzf/dmenu select instead of searching:
/^[a-zA-Z]/ && tolower($1) ~ _s && NF >= 2 {
n++
s = $1
printf "%s", p # XXX Intentionally avoiding newline in the result.
}
+
+ END {
+ if (n == 1) {
+ exit 0
+ } else if (n == 0) {
+ printf "[ERROR] Found nothing.\n" > "/dev/stderr"
+ exit 1
+ } else if (n > 1) {
+ # TODO fzf-select which of the records the user (ahem, me) wants.
+ printf "[WARNING] Found more than one record.\n" > "/dev/stderr"
+ exit 0
+ }
+ }
' \
~/._p/p \
| xsel -i -b -t 30000
local -r uri="$2"
local -r opts="$3"
- local -r id=$(youtube-dlc --get-id "$uri")
- local -r title=$(youtube-dlc --get-title "$uri" | sed 's/[^А-Яа-яA-Za-z0-9._-]/_/g')
+ local -r yt=youtube-dl
+ local -r id=$("$yt" --get-id "$uri")
+ local -r title=$("$yt" --get-title "$uri" | sed 's/[^А-Яа-яA-Za-z0-9._-]/_/g')
local -r dir="${base_dir}/${title}--${id}"
mkdir -p "$dir"
cd "$dir" || kill -INT $$
echo "$uri" > 'uri'
- youtube-dlc $opts -c --write-description --write-info-json "$uri"
+ "$yt" $opts -c --write-all-thumbnails --write-description --write-info-json "$uri"
}
yt_audio() {
mkdir -p "$gh_dir"
cd "$gh_dir" || kill -INT $$
gh_fetch_repos "$gh_user_type" "$gh_user_name" \
- | jq --raw-output '.[] | select(.fork | not) | .git_url' \
+ | jq --raw-output '.[] | select(.fork | not) | .clone_url' \
| parallel -j 25 \
git clone {}
}