#!/bin/bash 
# parhaan kuvauksen valikonkäsittelystä saat funktiosta: poista_pikavalittavista. PetteriIII 30.5.2016   35 41

echo -e "funktiot paikasta:"$kanta/OMATSKRIPTIT/FUNKTIOKIRJASTO/valikkonäppäimille liitetään koodiin 

function LopetaSkriptiJaPalaaSkriptiajuriin () { $kanta/OMATSKRIPTIT/Skriptiajuri; } # "Skriptiajuri"
 
function ValitseValittavistaYksi () {   

function AsetaPaate () {  # yritetään tehdä päätteen ja geditin asetukset
# gnome-terminal --window --maximize -x bash /home/petteri/OMATSKRIPTIT/Skriptiajuri->Desktop # echo -e "\e[49m" # taustaväri normaali
# stty sane # Joskus pääte saa järjettömiä asetuksia ohjelmien sivuvaikutuksena ja tämä palauttaa arvot järkeviksi. Onko parempi: <ctrl+j>stty sane<ctrl+j> 


[[ $(apt-cache policy gconf-editor | grep "(ei mitään)") ]] && sudo apt-get install gconf-editor # lisää testi onko paketti jo että toimisi ilman verkkoakin
apu=$(gconftool-2 -g /apps/gnome-terminal/profiles/Default/default_size_columns)
gconftool-2 -s /apps/gnome-terminal/profiles/Default/use_custom_default_size --type bool true
gconftool-2 -s /apps/gnome-terminal/profiles/Default/default_size_columns --type integer 240 # nayttorivin maximi pituus
gconftool-2 -s /apps/gnome-terminal/profiles/Default/default_size_rows --type integer 60     # nayttorivien maximi määrä
gconftool-2 -s /apps/gnome-terminal/profiles/Default/scrollback_unlimited --type bool true
gsettings set org.gnome.gedit.preferences.editor display-line-numbers true

RivienLuku=$(($(tput lines)-6)) # näytön riviluku. 6 on otsikon+yläpalkin viemä tila # 6->7
RivinPituus=$(tput cols)        # nayttorivin merkkiluku.
RiviValilyonteja=$(printf "%$(tput cols)s")    
echo -e 'valikkonäppäimille kirjastoa kutsuva ohjelma: ' $(basename "$0")'\nnäytön riviluku:'$RivienLuku'   rivinpituus:'$RivinPituus 
#[[ "$apu" = 240 ]] || (echo 'asetuksia tehty. käynnistä skriptiajuri uudelleen'; sleep 3; killall gnome-terminal)
raja=112\101\116\116\101\114\105\73\73\73
}

function MuutaValittuPunaiseksi () {
tput cup 2 $(($RivinPituus-38)); tput el # kursorin asettaminen ja loppurivin tyhjääminen oli "cup 0"
apu=$kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"${Valittavat[ValitunNumero-1]}" # dokumenttien määrää ei pitäisikään näyttää
TiedostoTyyppi=$(file $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" | sed 's/.*script.*/skripti:/g;/skripti:/!s/.*/teksti:/g' )
[[ -f $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" ]] && Tiedostonaika=$(stat --printf %y $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}"  | awk '{ print $1" "$2"  "}' | tr -d '\n') && echo -n ${Tiedostonaika:0:16}  && echo -n " "$TiedostoTyyppi && [[ -d "$apu" ]] && echo $(ls "$apu" | sort -g | tail -n 1)" " 
[[ -d $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" ]] && echo "kansiossa tiedostoja:"$(ls $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" | wc -l)'/'$(du -h ~/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" | tail -n1 | awk {'print $1'})    
Xkoordinaatti=$(((ValitunNumero - 1 - $(((ValitunNumero - 1) / RivienLuku))) / RivienLuku)); Ykoordinaatti=$((ValitunNumero - $((RivienLuku * Xkoordinaatti -1))+3));tput cup $((Ykoordinaatti - Xkoordinaatti - 2)) $((Xkoordinaatti * SarakkeenPituus)); tput rev; echo -n "${Valittavat[$ValitunNumero-1]}"; tput sgr0  
}

function MuutaKaikkiValintarivitVihreiksi () {
tput clear; TulostaOtsikot 
[[ -f $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/naytto ]] && cat $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/naytto # ehto uusi 
}

function TulostaOtsikot () {
tput clear # tput clear # tput sgr0
echo -n 'enter=valitse   ' 
echo -e "$avaimet"'\n'$otsikko'\n'  
}

function TulostaValittavat () {
TulostaOtsikot 
rm -f $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/naytto # oli rm -f                    
SarakkeidenLuku=$(($((ValittavienLuku-3))/RivienLuku+1))  
SarakkeenPituus=$((RivinPituus/SarakkeidenLuku))
for (( Rivi=0; Rivi<=RivienLuku; Rivi++ ))
do
  for (( Sarake=0; Sarake<=SarakkeidenLuku-1; Sarake++ ))   
  do 
    naytettava=${Valittavat[Sarake*RivienLuku+Sarake+Rivi]}$RiviValilyonteja
    nayttoRivi="$nayttoRivi"${naytettava:0:$SarakkeenPituus}  # mitä sarakkeita nayttorivillä ennestään onkin ja uusi sarake lisää
  done
  echo "${nayttoRivi}"; echo -e "${nayttoRivi}" >> $kanta/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/naytto; nayttoRivi=''  
done 
}

function lisää_pikavalittaviin () { apu=$ValitunTeksti
IFS=$'\n'; Valittavat=($(ls $kanta/OMATSKRIPTIT/OHJEITA --group-directories-first --hide=*~ )); unset IFS
avaimet="home=palaa Skriptiajuriin"
ValitseValittavistaYksi "valitse minkä haluat siirrettäväsi PIKAVALITTAVIIN" "$avaimet"
[[ $Tapahtuma = home ]] && $kanta/OMATSKRIPTIT/Skriptiajuri # palaa skriptiajuriin
mv $kanta/OMATSKRIPTIT/OHJEITA/$ValitunTeksti $kanta/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT/$ValitunTeksti 
ValitunTeksti=$apu ;}

function poista_pikavalittavista () { apu=$ValitunTeksti
IFS=$'\n'; Valittavat=($(ls $kanta/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT --group-directories-first --hide=*~ )); unset IFS
avaimet="home=palaa Skriptiajuriin"
ValitseValittavistaYksi "valitse minkä haluat palauttaa ohjeisiin" "$avaimet"
[[ $Tapahtuma = home ]] && $kanta/OMATSKRIPTIT/Skriptiajuri # palaa skriptiajuriin.
mv $kanta/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT/$ValitunTeksti $kanta/OMATSKRIPTIT/OHJEITA/$ValitunTeksti
ValitunTeksti=$apu ;}

function MuutaValittuNuolinappaimilla () {
MuutaValittuPunaiseksi 
# stty echo # koe
read -sn 1 key # stsekkaa bacupin status ja jos se on päällä niin inversoi joku näytön kenttä
[[ -z $key ]] && Tapahtuma='enter' && valintatehty=1 && return  
# set +e
case $key in # 74 nyt voi taas lisätä plottauksen - sen kehittyneemmän mallin
  [ABCD]) MuutaKaikkiValintarivitVihreiksi ; tput cup 0,0 ; ${avain[$key]} ;; # painettu jotainnuolinäppäimistä
  §)  mc ~/OMATSKRIPTIT/OHJEITA ~/OMATSKRIPTIT/OHJEITA/PIKAVALITTAVAT ; $kanta/OMATSKRIPTIT/Skriptiajuri ;;
  [PQRSHF23]) echo joo;Tapahtuma=${avain[$key]} && valintatehty=${valintasallittu[$key]} ;; # painettu jotakuta: f1,f2,f3,f4,home,end,insert tai delete 
  [a-z]) HyppaaAakkosissa ;;
esac
stty -echo # koe
read -sn 1 -t .001 # tuntuu auttavan 
key=''   
# set -e
}

function HyppaaAakkosissa () {
MuutaKaikkiValintarivitVihreiksi
for (( n=1; n<=$ValittavienLuku; n++ )); do apu=$(echo ${Valittavat[$n]} | tr '[:upper:]' '[:lower:]') ; [[ ${apu:0:1} = $key ]] && ValitunNumero=$((n+1)) && break ; done
echo
} 

function MuutaValittua () {
ValitunNumero=$(($ValitunNumero+$1)) 
[[ $ValitunNumero -lt 1 ]] && ValitunNumero=1
apu=${#Valittavat[*]} 
[[ $ValitunNumero -gt $apu ]] && ValitunNumero=$apu
} 
 
# function ValitseValittavistaYksi () {
read -s -t .001 # koe
ValittavienLuku=${#Valittavat[@]}; [[ $ValittavienLuku = 0 ]] && echo "ei valittavia" && Tapahtuma="end" && sleep 2 && return
AsetaPaate 
[[ $3 ]] && ValitunNumero=$3 
avaimet=$2
declare -A valintasallittu avain
avain['A']='MuutaValittua -1'  
avain['B']='MuutaValittua 1' 
avain['C']='MuutaValittua '$((RivienLuku+1))
avain['D']='MuutaValittua -'$((RivienLuku+1)) 
[[ ! $(echo $avaimet | grep f1) ]] && valintasallittu['P']=0 || valintasallittu['P']=1 && avain['P']='f1' 
[[ ! $(echo $avaimet | grep f2) ]] && valintasallittu['Q']=0 || valintasallittu['Q']=1 && avain['Q']='f2' 
[[ ! $(echo $avaimet | grep f3) ]] && valintasallittu['R']=0 || valintasallittu['R']=1 && avain['R']='f3' 
[[ ! $(echo $avaimet | grep f4) ]] && valintasallittu['S']=0 || valintasallittu['S']=1 && avain['S']='f4' 
[[ ! $(echo $avaimet | grep home) ]] && valintasallittu['H']=0 || valintasallittu['H']=1 && avain['H']='home' 
[[ ! $(echo $avaimet | grep end) ]] && valintasallittu['F']=0 || valintasallittu['F']=1  && avain['F']='end' 
[[ ! $(echo $avaimet | grep insert) ]] && valintasallittu['2']=0 || valintasallittu['2']=1 && avain['2']='insert'  
[[ ! $(echo $avaimet | grep delete) ]] && valintasallittu['3']=0 || valintasallittu['3']=1 && avain['3']='delete' 
local otsikko key valintatehty=0 Xkoordinaatti Ykoordinaatti   
[[ ! $ValitunNumero || $ValitunNumero -lt 1 || $ValitunNumero -gt ${#Valittavat[@]} ]] && ValitunNumero=1
setterm -cursor off ; stty -echo # koe  
otsikko="$1"; [[ ! "$otsikko" ]] && otsikko='Ohjelma: '$0' pyytää valitsemaan näistä'
crc=$(echo $otsikko | cksum | awk {'print $1'}) # cksum=32bittinen crc, sha1sum ->160bittinen ...
TulostaValittavat
valintatehty=0
Tapahtuma='' 
while [ $valintatehty -lt 1 ] ; do MuutaValittuNuolinappaimilla;  done
tput clear; tput sgr0; stty echo ; setterm -cursor on # koe setterm -reset 
ValitunTeksti=${Valittavat[ValitunNumero-1]}
[[ ! ${ValitunArvo[ValitunNumero-1]} ]] && ValitunArvo='ei määritelty' || ValitunArvo=${ValitunArvo[ValitunNumero-1]}
read -t 0.1 -N 255 # wait #echo -en "\e[3J" # koe
}

