

#!/bin/bash   
# Valikkohiirelle (rullahiirelle)  petteriIII 2.4.2013 
# Selostus tunnetuista funktioista ja niiden parametreista:
# 1. ValitseValittavistaYksi: [otsikko [avaimet [ValitunNumero]]] . Erittely:
# otsikko=vapaata tekstiä koko toinen rivi näytöllä. Jos se on annettu sitä käytetään mutta jos ei ole niin otsikko muodostetaan automaattisesti. otsikko:sta otetaan CRC-32 muuttujaan crc ja se yksilöikin kutsujan hyvin. Ulkopuolinen ohjelma saattaa käyttää sitä. 
# avaimet= merkit 38-157 rivillä 1. Valikkohiirelle ohjelmassa ne eivät ole varsinaisia avaimia, vaan lisä-otsikko 
# ValitunNumero= valittuna olevan järjestysnumero. 

# 2. ohjeet: kaikki ~/OMATSKRIPTIT/OHJEITA/"Skriptiajuri, hiiriversio tai: Skriptiajuri, näppäinversio" ohje-kansion tiedostot viedään editoriin. Tiedostoja voi lisätä tai poistaa ja Skriptiajuri ottaa muutoksen automaattisesti huomioon.
# ohjeista ei voi esittää akrkistokappaleita editorissa. Arkistokappaleet kuitenkin tehdään paikkaan: ~/OMATSKRIPTIT/OHJEITA/ARKISTO/SKRIPTIT/tiedoston nimi/monotonisesti kasvava arkistonumero 

# 3. etsiä_missä_skripti_on_kun_muistaa_sen_nimestä_jotakin                  
# 4. etsiä_kysyttävää_ilmaisua_skriptien_tekstistä
# 5. etsiä_esimerkkirivejä_kuinka_jotakin_käskyä_käytetään
# 6. ajaa_valitun_skriptin

echo -e "funktiot paikasta:"${0%/OMATSKRIPTIT*}"/OMATSKRIPTIT/FUNKTIOKIRJASTO/valikkohiirelle  liitetään koodiin" 

function LopetaSkriptiJaPalaaSkriptiajuriin () { $kanta/OMATSKRIPTIT/Skriptiajurihiirelle; }

function ValitseValittavistaYksi () {
function AsetaPaate {  
RivienLuku=$(($(tput lines)-6)) # näytön riviluku. 6 on otsikon+yläpalkin viemä tila
RivinPituus=$(tput cols)        # näyttörivin merkkiluku.
echo -e 'Näyttö-funktio kirjastoa kutsuva ohjelma: ' $(basename "$0")'\nnäytön riviluku:'$RivienLuku'   rivinpituus:'$RivinPituus
# gconftool ja gnome-terminal ovat gnomessa, mate:ssa on mateconftool-2 ja mate-terminal. Seuraava on testi onko mate vai joku muu 
[[ $(cat /var/lib/dpkg/status  | grep \ mate-terminal) ]] && (
apu=$(mateconftool-2 -g /apps/mate-terminal/profiles/Default/default_size_columns)
mateconftool-2 -s /apps/mate-terminal/profiles/Default/use_custom_default_size --type bool true
mateconftool-2 -s /apps/mate-terminal/profiles/Default/default_size_columns --type integer 240 
mateconftool-2 -s /apps/mate-terminal/profiles/Default/default_size_rows --type integer 60     
mateconftool-2 -s /apps/mate-terminal/profiles/Default/scrollback_unlimited --type bool true # rajoittamaton vieritys  
mateconftool-2 -s /apps/gedit-2/preferences/editor/line_numbers/display_line_numbers --type bool true 
[[ $apu = 240 ]] || (echo 'avaa uusi pääte ja käynnistä siinä uudelleen'; sleep 3; killall mate-terminal)
)

[[ $(cat /var/lib/dpkg/status  | grep \ gnome-terminal) ]] && (
apu=$(gconftool -g /apps/gnome-terminal/profiles/Default/default_size_columns)
gconftool -s /apps/gnome-terminal/profiles/Default/use_custom_default_size --type bool true
gconftool -s /apps/gnome-terminal/profiles/Default/default_size_columns --type integer 240 # Näyttörivin maximi pituus
gconftool -s /apps/gnome-terminal/profiles/Default/default_size_rows --type integer 60     # Näyttörivien maximi määrä
gconftool -s /apps/gnome-terminal/profiles/Default/scrollback_unlimited --type bool true
gconftool -s /apps/gedit-2/preferences/editor/line_numbers/display_line_numbers --type bool true
[[ "$apu" = 240 ]] || (echo 'avaa uusi pääte ja käynnistä siinä uudelleen'; sleep 3; killall gnome-terminal)
)
valintalukko=1 # negatiivinen logiikka, valinta on nyt mahdollista suorittaa
# avaimet=''     # ohjelma perisi muuten avaimet edelliseltä ohjelmalta
raja=112\101\116\116\101\114\105\73\73\73
}

function MuutaValittuPunaiseksi { 
tput cup 2 $(($RivinPituus-115)) 
tput sgr0; echo "aikaisemmin editoidut  näpäytä_tästä_käyttöohjeet erikoistoimet  dokumentoi koodaa"
tput cup 0 $(($RivinPituus-45)) #; tput el tyhjää loppurivi 
apu=$kanta/"$KansionNimi"/'ARKISTO/SKRIPTIT/'"${Valittavat[ValitunNumero-1]}" # dokumenttien määrää ei pitäisikään näyttää 
[[ $ValitunNumero>1 ]] && Tiedostonaika="" && [[ -a $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" ]] && Tiedostonaika=$(stat --printf %y $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}"  | awk '{ print $1" "$2"  "}' | tr -d '\n')           
[[ -f $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" ]] && echo -n ${Tiedostonaika:0:16} && [[ -d $apu ]] && echo -n " Koodeja:"$(ls "$apu" | sort -g | tail -n 1) && tput el
[[ -d $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" ]] && echo "kansiossa tiedostoja:"$(ls $kanta/"$KansionNimi"/"${Valittavat[ValitunNumero-1]}" | wc -l)"          "  
[[ ${Valittavat[ValitunNumero-1]} = .edellinen_kansio. ]] && tput el
Xkoordinaatti=$(((ValitunNumero - 1 - $(((ValitunNumero - 1) / RivienLuku))) / RivienLuku)); Ykoordinaatti=$((ValitunNumero - $((RivienLuku * Xkoordinaatti -1))+3));tput cup $((Ykoordinaatti - Xkoordinaatti - 2)) $((Xkoordinaatti * SarakkeenPituus));  tput setf 4; echo "${Valittavat[ValitunNumero-1])}"
}

function MuutaKaikkiValintarivitVihreiksi {
tput cup 3 0 ; tput setf 3
cat /home/petteri/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/näyttö
}

function TulostaValittavat {
tput clear 
rm /home/petteri/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/näyttö
tput sgr0 
echo -e 'Skriptiajurin hiiriversio\n'$otsikko'\n'                      
ValittavienLuku=${#Valittavat[@]}
SarakkeidenLuku=$(($((ValittavienLuku-3))/RivienLuku+1))  # oli:SarakkeidenLuku=$(($((ValittavienLuku-2))/RivienLuku+1))
SarakkeenPituus=$((RivinPituus/SarakkeidenLuku))
tput setf 3
for (( Rivi=0; Rivi<=RivienLuku; Rivi++ )) # -1 ei vissiin onnistunut
do
  for (( Sarake=0; Sarake<=SarakkeidenLuku-1; Sarake++ ))   
  do 
    naytettava=${Valittavat[Sarake*RivienLuku+Sarake+Rivi]}"                                                                                                  " 
    nayttoRivi="$nayttoRivi"${naytettava:0:$SarakkeenPituus}  # mitä sarakkeita näyttörivillä ennestään onkin ja uusi sarake lisää
  done
  echo "${nayttoRivi}"; echo -e "${nayttoRivi}" >> /home/petteri/OMATSKRIPTIT/ARKISTO/APUTIEDOSTOT/näyttö; naytto[$Rivi]=${nayttoRivi:0:$RivinPituus}; nayttoRivi=''  
done  
}

function MuutaValittuNuolinappaimilla {
MuutaValittuPunaiseksi 
 echo -en "\e[?1000h"; read -n6 -s -t0.02 key ; echo -en "\e[?1001h" 
stty -echo
[[ ${key:3:1} = "a" ]] && MuutaValittua -1  # rullaus ylös
[[ ${key:3:1} = "\`" ]] && MuutaValittua 1  # rullaus alas
if [[ ${key:3:1} = "#" ]]; then valintatehty=1; x=$(LC_CTYPE=C printf '%d' "'${key:4:1}"); y=$(LC_CTYPE=C printf '%d' "'${key:5:1}")
  [[ $y = 33 ]] && [[ $x < 40 ]] && Tapahtuma=palaa && valintatehty=1 && return
  [[ $y = 33 ]] && [[ $x < 70 ]] && Tapahtuma=uusi && valintatehty=1 && return
  [[ $y = 35 ]] && [[ $x > $(($RivinPituus-10)) ]] && Tapahtuma=koodaa && valintatehty=1 && return
  [[ $y = 35 ]] && [[ $x > $(($RivinPituus-18)) ]] && Tapahtuma=dokumentoi && valintatehty=1 && return
  [[ $y = 35 ]] && [[ $x > $(($RivinPituus-36)) ]] && Tapahtuma=erikoistoimet && valintatehty=1 && return
  [[ $y = 35 ]] && [[ $x > $(($RivinPituus-57)) ]] && Tapahtuma=käyttöohjeet && valintatehty=1 && return 
  [[ $y = 35 ]] && [[ $x > $(($RivinPituus-87)) ]] && Tapahtuma=home && valintatehty=1 && return
  [[ $y > 35 ]] && MuutaKaikkiValintarivitVihreiksi && ValitunNumero=$((y-34+(((RivienLuku+1)*((x-34)/SarakkeenPituus)))-1)) && MuutaValittuPunaiseksi && return
valintatehty=0
fi                                                          
}

function MuutaValittua () {
MuutaKaikkiValintarivitVihreiksi
ValitunNumero=$(($ValitunNumero+$1)) 
[[ $ValitunNumero -lt 1 ]] && TulostaValittavat && ValitunNumero=1 # TulostaValittavat lisätty
[[ $ValitunNumero -gt $ValittavienLuku ]] && ValitunNumero=$ValittavienLuku # apu->ValittavienLuku; -2 lisätty poistettu
} 
 
# function ValitseValittavistaYksi () {
[[ $3 ]] && ValitunNumero=$3 
[[ ${#Valittavat} == 0 ]] && echo 'ei ole valittavaa' && sleep 2 && valintatehty=1 && break 
AsetaPaate 
local otsikko key valintatehty=0 Xkoordinaatti Ykoordinaatti   
[[ ! $ValitunNumero || $ValitunNumero -lt 1 || $ValitunNumero -gt ${#Valittavat[@]} ]] && ValitunNumero=1
setterm -cursor off  
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 -reset # värit normaaleiksi # clear lisätty
ValitunTeksti=${Valittavat[ValitunNumero-1]}
[[ ! ${ValitunArvo[ValitunNumero-1]} ]] && ValitunArvo='ei määritelty' || ValitunArvo=${ValitunArvo[ValitunNumero-1]}
}
 
