mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-02-16 09:53:53 +00:00
65 lines
2.2 KiB
Bash
Executable File
65 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#===============================================================================
|
|
# Author: Wenxuan
|
|
# Email: wenxuangm@gmail.com
|
|
# Created: 2018-04-06 12:12
|
|
#===============================================================================
|
|
get_fzf_options()
|
|
{
|
|
local fzf_options
|
|
local fzf_default_options='-w 100% -h 50% --multi -0 --no-preview'
|
|
fzf_options="$(tmux show -gqv '@fzf-url-fzf-options')"
|
|
[ -n "$fzf_options" ] && echo "$fzf_options" || echo "$fzf_default_options"
|
|
}
|
|
|
|
fzf_filter()
|
|
{
|
|
eval "fzf-tmux $(get_fzf_options)"
|
|
}
|
|
|
|
custom_open=$3
|
|
open_url()
|
|
{
|
|
if [[ -n $custom_open ]]; then
|
|
$custom_open "$@"
|
|
elif hash xdg-open &> /dev/null; then
|
|
nohup xdg-open "$@"
|
|
elif hash open &> /dev/null; then
|
|
nohup open "$@"
|
|
elif [[ -n $BROWSER ]]; then
|
|
nohup "$BROWSER" "$@"
|
|
fi
|
|
}
|
|
|
|
limit='screen'
|
|
[[ $# -ge 2 ]] && limit=$2
|
|
|
|
if [[ $limit == 'screen' ]]; then
|
|
content="$(tmux capture-pane -J -p -e | sed -r 's/\x1B\[[0-9;]*[mK]//g'))"
|
|
else
|
|
content="$(tmux capture-pane -J -p -e -S -"$limit" | sed -r 's/\x1B\[[0-9;]*[mK]//g'))"
|
|
fi
|
|
|
|
urls=$(echo "$content" | grep -oE '(https?|ftp|file):/?//[-A-Za-z0-9+&@#/%?=~_|!:,.;]*[-A-Za-z0-9+&@#/%=~_|]')
|
|
wwws=$(echo "$content" | grep -oE '(http?s://)?www\.[a-zA-Z](-?[a-zA-Z0-9])+\.[a-zA-Z]{2,}(/\S+)*' | grep -vE '^https?://' | sed 's/^\(.*\)$/http:\/\/\1/')
|
|
ips=$(echo "$content" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}(:[0-9]{1,5})?(/\S+)*' | sed 's/^\(.*\)$/http:\/\/\1/')
|
|
gits=$(echo "$content" | grep -oE '(ssh://)?git@\S*' | sed 's/:/\//g' | sed 's/^\(ssh\/\/\/\)\{0,1\}git@\(.*\)$/https:\/\/\2/')
|
|
gh=$(echo "$content" | grep -oE "['\"]([_A-Za-z0-9-]*/[_.A-Za-z0-9-]*)['\"]" | sed "s/['\"]//g" | sed 's#.#https://github.com/&#')
|
|
|
|
if [[ $# -ge 1 && $1 != '' ]]; then
|
|
extras=$(echo "$content" | eval "$1")
|
|
fi
|
|
|
|
items=$(
|
|
printf '%s\n' "${urls[@]}" "${wwws[@]}" "${gh[@]}" "${ips[@]}" "${gits[@]}" "${extras[@]}" \
|
|
| grep -v '^$' \
|
|
| sort -u \
|
|
| nl -w3 -s ' '
|
|
)
|
|
[ -z "$items" ] && tmux display 'tmux-fzf-url: no URLs found' && exit
|
|
|
|
fzf_filter <<< "$items" | awk '{print $2}' \
|
|
| while read -r chosen; do
|
|
open_url "$chosen" &> "/tmp/tmux-$(id -u)-fzf-url.log"
|
|
done
|