[ plus_minus @ 04.03.2017. 10:59 ] @
Juče mi bilo poprilično dosadno. Baš nisam imao šta d radim i rekoh sebi: "E, sad ću!"
I otvorim duha i krenem d čukam...

Ima dakle mnogo varijanti sticky notes-a za linux. Svako okruženje ima svoje + mali milion nezavisnih. Nekako mi xfce4-notes naj-kul, al' malo, malo, pa neće da sluša i po startovanju sistema automatski se pojavi na ekranu (iako je podešeno da se samo smesti u tray) .. i to mi je bio okidač da napravim nešto slično.

Doduše, ovo nema veze sa system tray-om, niti bilo kakvim demončićima, već se radi o jednoj prostoj i malenoj bash skripti preko koje se vrši interakcija sa zenity dialog-box frejmworkom.

Skriptu sam krstio znotes i ima samo jedan argument koji može da bude `new` ili `list`

1) znotes new - otvara mali --forms dijalog gde se upisuje naziv fajla koji će kasnije da se pojavi u listi. Čisto da se znade, razmaci u nazivu fajlova će biti zamenjeni sa _.

2) znotes list - izbacuje listu (--list) prethodno kreiranih znotes fajlova. Znotes fajlovi su inače, obični tekst/fajlovi bez ekstenzije.
Onda kada se selektuje fajl iz liste pa se klikne na LOAD SELECTED, otvara se --text-info dijalog gde se piše/edituje podsetnik. Oba dugmeta BACK/MEMORIZE će vas baciti nazad na listu s' tom razlikom što će MEMORIZE snimiti promene a BACK - neće ( koja logika, a? D: ) Izlaz iz znotes-a se dakle vrši iz list dijaloga klikom na dugme EXIT. No, ako se ništa ne selektuje sa liste i LOAD SELECTED će učiniti isto - exit. I to mu dođe ne moj propust, već nemogućnost da određeno dugme bude zaključano dok se ne izabere stavka sa liste (zenity izgleda nema to implementirano ili ja nisam dovoljno obratio pažnju).

Što se tiče same konfiguracije, u pitanju su linije 19, 20, 21 u samoj skripti.

19 - Direktorijum gde se smeštaju fajlovi. Podrazumevani je ~/.local/share/znotes. Kome ne odgovara, neka menja.
20 i 21 su podrazumevana širina i visina dijaloga.

Dakle, prekopirati sve iz code taga dole u novi fajl pod imenom znotes (a može i bio koje drugo ime ako vam ovo nije kako treba) u $HOME/bin (ili bilo koji `vaš` primarni bin),
ondak chmod a+x ~/bin/znotes i to mu dođe to.

Nakon toga, komande znotes new i znotes list treba da dadnu rezultat na ekranu.

Evo i koda pa probajte :

Code (bash):


#!/bin/bash

## Memos and notes based on Zenity; aka - `znotes`
#
# Licence: This file is restricted as much as openbox is. Go figure that.
# Author: Srđan Vukić <tux.lector@gmail.com>
# Date: 03.03.2017
#
# Program name
declare -r bsn=$(basename $0)

# Allow only one instance of znotes
bsnrun=$(ps h -C $bsn | grep -v $$ | wc -l);
[[ $bsnrun > 1 ]] && exit;

## Basic config
# Directory where znote files reside
# $bsn is this very script name
declare -r zn_work_loc=$HOME/.local/share/$bsn
declare -r zn_lw=400; # Default width
declare -r zn_lh=600; # Default height
## End of basic config

[[ -d $zn_work_loc ]] || mkdir -p $zn_work_loc
declare -a all_notes="$(ls -i ${zn_work_loc})"

# Display list of memo/notes
function zn_list
{
     local note;
     if [[ -z $all_notes ]]
     then zenity --info \
          --text="There are no memo/notes to view/edit.\
          \nYou may want to try with <b>$bsn new</b> command."
2> /dev/null

     else
          local zty=$(zenity --list \
          --radiolist --width=$zn_lw --height=$zn_lh \
          --title="Choose the note/memo to view/edit" \
          --column="Select" --column="Existing memo/note" $all_notes \
          --cancel-label="EXIT" --ok-label="LOAD SELECTED" 2> /dev/null)

          if [[ -z $zty ]]
          then
               if pgrep -x "$bsn" > /dev/null
               then pkill -f "$bsn"; fi
          else
               zn_view_edit $zty 2> /dev/null
          fi
     fi

}

# Make new znote
function _new
{
     local fnpath
     zty=$(zenity --forms \
     --show-header --width=400 \
     --title="Create new note" \
     --text="Provide a name for your note" \
     --add-entry="Name:" 2> /dev/null)

     case $? in
          0)
               if [[ -z $zty ]]
               then
                    notify-send \
                    --icon=face-worried \
                    --expire-time=500 'Name for new memo/note cannot be empty'
               else
                    zty=${zty// /_}; fnpath="$zn_work_loc/$zty"
                    if [[ -f $fnpath ]]
                    then
                         notify-send \
                         --icon=face-monkey \
                         --expire-time=500 'This memo/note already exists. Nothing happened.'
                    else
                         touch $fnpath
                         notify-send --icon=face-cool 'New memo/note successfully added!'
                    fi
               fi
          ;;
          1)
               notify-send \
                    --icon=face-sad \
                    --expire-time=500 "No memo/note has been added." ;;
          -1)
               notify-send \
                    --icon=face-devilish \
                    --expire-time=500 "Kung-fu error has occurred!" ;;
     esac
}

# View/edit selected note
function zn_view_edit
{
     local file=$zn_work_loc/$1
     local t_file="$file.$(date +%s%N).tmp"
     local act="--text-info \
     --title=$1 --filename=$file \
     --width=$zn_lw --height=$zn_lh \
     --editable --ok-label=MEMORIZE \
     --cancel-label=BACK"


     [[ ! -f $t_file ]] || rm -f $t_file
     zenity $act > $t_file

     if [[ $? -eq 0 ]]
     then
          cat $t_file > $file
          notify-send \
               --icon=face-smile-big \
               --expire-time=1000 "Memo/note '$1' saved"
          rm -f $t_file && sleep 0.1s
          zn_list
     elif [[ $? -eq 1 ]]
          then
          rm -f $t_file && sleep 0.1s
          zn_list
     else
          sleep 0.1s && rm -f $t_file
          fi

}

# Do `this` or `that`
case $1 in
     new)_new; ;;
     list) zn_list; ;;
     *)
          zenity --info \
          --text="Unknown parameter <b>'$1'</b>.\
          \n\nYou may want to try with\
          \n<b>$bsn new</b> or <b>$bsn list</b>\ncommands."
2> /dev/null
     ;;
esac
 


[Ovu poruku je menjao plus_minus dana 04.03.2017. u 12:54 GMT+1]
[ plus_minus @ 04.03.2017. 11:11 ] @
Zaboravih da dodam ... Pored zenity komande, tu je još i notify-send (libnotify), dakle, bez to dvoje, ovo gore neće d radi.
Oba su jako mala i to ne bi trebalo da brine bilo koga.. :) libnotify je verovatno već prisutan kod svakog.