parent
51a4ced5b9
commit
473ef08109
@ -1,5 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
Instring="$@" |
|
||||||
Command=$(echo "$Instring" | sed 's/ (/./g' | sed 's/)//g' | sed 's/:man:/:man -Pcat:/g' | awk -F ':' '{print $2 " " $1}') |
|
||||||
eval "$Command" |
|
@ -1,140 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
#Strongly inspired by [macho](https://hiphish.github.io/blog/2020/05/31/macho-man-command-on-steroids/) |
|
||||||
|
|
||||||
CacheFile=$HOME/.config/mansearch_cachefile |
|
||||||
TempFile=$(mktemp) |
|
||||||
Long=0 |
|
||||||
NumResults=0 |
|
||||||
declare -a ManName |
|
||||||
declare -a ManDescription |
|
||||||
declare -a TldrName |
|
||||||
declare -a TldrDescription |
|
||||||
declare -a CheatName |
|
||||||
declare -a CheatDescription |
|
||||||
SearchTerm="$@" |
|
||||||
CliOnly="true" |
|
||||||
Rebuild="false" |
|
||||||
Run="true" |
|
||||||
SCRIPTDIR="$( cd "$(dirname "$0")" ; pwd -P )" |
|
||||||
|
|
||||||
building_our_database (){ |
|
||||||
#do this first |
|
||||||
RawResults="" |
|
||||||
echo "§ Reading in manpages" |
|
||||||
RawResults=$(apropos . | grep -v -E '^.+ \(0\)') |
|
||||||
#zsoelim (1) - satisfy .so requests in roff input |
|
||||||
mapfile -t ManName < <(echo "$RawResults" | awk -F ' - ' '{print $1 }' | sed 's/[[:space:]]*$//') |
|
||||||
mapfile -t ManDescription < <(echo "$RawResults" | awk -F ' - ' '{print $2 }' | sed 's/[[:space:]]*$//') |
|
||||||
|
|
||||||
#Now for cheatsheets |
|
||||||
#Follow the same template for any other |
|
||||||
echo "§ Reading in cheatsheets" |
|
||||||
mapfile -t CheatName < <(cheat -l | cat | awk '{print $1 }'| sed 's/[[:space:]]*$//') |
|
||||||
echo "§ Reading in tldr" |
|
||||||
mapfile -t TldrName < <(tldr -l 2>/dev/null | awk '{print $1 }'| sed 's/[[:space:]]*$//') |
|
||||||
echo "§ Adding descriptions to cheats" |
|
||||||
# Now we're going to add descriptions to the cheatsheets... |
|
||||||
for ((i = 0; i < ${#CheatName[@]}; i++));do |
|
||||||
CheatDescription[$i]=$(echo "$RawResults" | rg -e "^${CheatName[$i]} "| awk -F '-' '{print $2 }'|head -1) |
|
||||||
done |
|
||||||
echo "§ Adding descriptions to tldr" |
|
||||||
for ((i = 0; i < ${#TldrName[@]}; i++));do |
|
||||||
TldrDescription[$i]=$(echo "$RawResults" | rg -e "^${TldrName[$i]} "| awk -F '-' '{print $2 }'|head -1) |
|
||||||
done |
|
||||||
echo "§ Finished supplementing cheatsheets and tldr" |
|
||||||
} |
|
||||||
|
|
||||||
make_choices () { |
|
||||||
echo "§ Compiling options" |
|
||||||
for ((i = 0; i < ${#TldrName[@]}; i++));do |
|
||||||
echo -e "${TldrName[$i]} :tldr: ${TldrDescription[$i]}" >> "$TempFile" |
|
||||||
done |
|
||||||
for ((i = 0; i < ${#CheatName[@]}; i++));do |
|
||||||
echo -e "${CheatName[$i]} :cheats: ${CheatDescription[$i]}" >> "$TempFile" |
|
||||||
done |
|
||||||
for ((i = 0; i < ${#ManName[@]}; i++));do |
|
||||||
echo -e "${ManName[$i]} :man: ${ManDescription[$i]}" >> "$TempFile" |
|
||||||
done |
|
||||||
echo "§ Sorting options" |
|
||||||
cat "$TempFile" | sort | uniq -u > "$CacheFile" |
|
||||||
rm -rf "$TempFile" |
|
||||||
} |
|
||||||
|
|
||||||
############################################################################## |
|
||||||
# Show the Help |
|
||||||
############################################################################## |
|
||||||
display_help(){ |
|
||||||
echo "###################################################################" |
|
||||||
echo "# mansearch.sh [-h|-c]" |
|
||||||
echo "# -h show help " |
|
||||||
echo "# -g GUI interface only. Default is CLI/TUI. " |
|
||||||
echo "# NOTE: gui display is a bit wonky for some reason. " |
|
||||||
echo "# -p Prefetch and compile options. " |
|
||||||
echo "# -r Rebuild available options and run (raw mode). " |
|
||||||
echo "###################################################################" |
|
||||||
} |
|
||||||
|
|
||||||
choose_page (){ |
|
||||||
|
|
||||||
#cat mansearch_cachefile | fzf --no-hscroll -m --height 60% --border --ansi --no-bold --preview="/home/steven/documents/programming/multiple_scripts/mansearch-fzf-preview {}" |
|
||||||
if [ "$CliOnly" == "true" ];then |
|
||||||
#No Preview |
|
||||||
#SelectedFile=$(cat "$CacheFile" | fzf --no-hscroll -m --height 60% --border --ansi --no-bold) |
|
||||||
#With Preview |
|
||||||
SelectedFile=$(cat "$CacheFile" | fzf --no-hscroll -m --height 60% --border --ansi --no-bold --preview="$SCRIPTDIR/mansearch-fzf-preview {}" | sed 's/ (/./g' | sed 's/)//g' | sed 's/:man:/:man -Pcat:/g' | awk -F ':' '{print $2 " " $1}') |
|
||||||
if [ -z "$SelectedFile" ];then |
|
||||||
exit 0 |
|
||||||
else |
|
||||||
eval "$SelectedFile" |
|
||||||
fi |
|
||||||
else |
|
||||||
#use ROFI, not zenity |
|
||||||
SelectedFile=$(cat "$CacheFile" | rofi -i -dmenu -p "Which manual?" -theme DarkBlue | sed 's/ (/./g' | sed 's/)//g' | sed 's/:man:/:man -Pcat:/g' | awk -F ':' '{print $2 " " $1}') |
|
||||||
if [ -z "$SelectedFile" ];then |
|
||||||
exit 0 |
|
||||||
else |
|
||||||
OutPut=$(eval "$SelectedFile") |
|
||||||
rofi -location 1 -click-to-exit -lines 15 -fixed-num-lines -theme DarkBlue -e "$OutPut" |
|
||||||
fi |
|
||||||
fi |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
#TODO: Have some way to annotate cheatsheets yourself? |
|
||||||
#TODO: have preview helper put in with the rest of this file |
|
||||||
#TODO: GUI output formatted properly |
|
||||||
############################################################################## |
|
||||||
# Get options |
|
||||||
############################################################################## |
|
||||||
while [ $# -gt 0 ]; do |
|
||||||
option="$1" |
|
||||||
case $option in |
|
||||||
-h) display_help |
|
||||||
exit |
|
||||||
shift ;; |
|
||||||
-r) echo "§ Rebuilding cache before run; please be patient." |
|
||||||
Rebuild="true" |
|
||||||
Run="true" |
|
||||||
shift ;; |
|
||||||
-p) echo "§ Rebuilding cache only." |
|
||||||
Rebuild="true" |
|
||||||
Run="false" |
|
||||||
shift ;; |
|
||||||
-g) CliOnly="false" |
|
||||||
shift ;; |
|
||||||
esac |
|
||||||
done |
|
||||||
if [ ! -f "$CacheFile" ];then |
|
||||||
echo "§ Cachefile not found; rebuilding." |
|
||||||
Rebuild="true" |
|
||||||
fi |
|
||||||
if [ "$Rebuild" == "true" ];then |
|
||||||
building_our_database |
|
||||||
make_choices |
|
||||||
fi |
|
||||||
if [ "$Run" == "true" ];then |
|
||||||
choose_page |
|
||||||
else |
|
||||||
exit 0 |
|
||||||
fi |
|
@ -1,77 +0,0 @@ |
|||||||
#!/bin/bash |
|
||||||
|
|
||||||
Long=0 |
|
||||||
NumResults=0 |
|
||||||
declare -a short_array |
|
||||||
SearchTerm="$@" |
|
||||||
|
|
||||||
function print_header { |
|
||||||
printf "%s" "<html><head></head><body>" |
|
||||||
printf "%s%s%s" "<h2>" "$SearchTerm" "</h2><table><tr>" |
|
||||||
} |
|
||||||
|
|
||||||
function print_first_short { |
|
||||||
printf "%s%s%s" "<td width=50% style=\"vertical-align: top;\">" "${short_array[0]}" "</td>" |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
function print_long { |
|
||||||
if [ "${#short_array[@]}" -gt 0 ];then |
|
||||||
ColSpanning="${#short_array[@]}" |
|
||||||
((ColSpanning++)) |
|
||||||
printf "%s%s%s" "<td rowspan=\"" "$ColSpanning" "\">" |
|
||||||
else |
|
||||||
printf "%s" "<td>" |
|
||||||
fi |
|
||||||
printf "%s%s" "$ManResult" "</td></tr>" |
|
||||||
} |
|
||||||
|
|
||||||
function print_rest_short { |
|
||||||
|
|
||||||
for ((i = 1; i < ${#short_array[@]}; i++));do |
|
||||||
printf "%s%s%s" "<tr><td style=\"vertical-align: top;\">" "${short_array[$i]}" "</td></tr>" |
|
||||||
done |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
function print_end { |
|
||||||
printf "%s" "</table></body></html>" |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
#yes, I could do this in an array as well, I guess. |
|
||||||
CheatResult=$(cheat "$@" 2> /dev/null) |
|
||||||
if [ "$?" != "0" ];then |
|
||||||
CheatResult="" |
|
||||||
else |
|
||||||
short_array[${#short_array[@]}]="$CheatResult" |
|
||||||
fi |
|
||||||
TldrResult=$(tldr "$@" 2> /dev/null) |
|
||||||
if [ "$?" != "0" ];then |
|
||||||
TldrResult="" |
|
||||||
else |
|
||||||
short_array[${#short_array[@]}]="$TldrResult" |
|
||||||
fi |
|
||||||
HelpResult=$(help "$@" 2> /dev/null) |
|
||||||
if [ "$?" != "0" ];then |
|
||||||
HelpResult="" |
|
||||||
else |
|
||||||
short_array[${#short_array[@]}]="$HelpResult" |
|
||||||
fi |
|
||||||
ManResult=$(/usr/bin/man $@ | mandoc -T html -O fragment 2> /dev/null) |
|
||||||
if [ "$?" != "0" ];then |
|
||||||
ManResult="" |
|
||||||
else |
|
||||||
((Long++)) |
|
||||||
fi |
|
||||||
|
|
||||||
|
|
||||||
print_header |
|
||||||
if [ "${#short_array[@]}" -gt 0 ];then |
|
||||||
print_first_short |
|
||||||
fi |
|
||||||
if [ "$Long" -gt 0 ];then |
|
||||||
print_long |
|
||||||
fi |
|
||||||
print_rest_short |
|
||||||
print_end |
|
Loading…
Reference in new issue