Pasirinktinio teksto įterpimo įrankis. Tik vienas shortcut!

 

Vieną ramų kažkurios dienos rytą, gurkšnodamas kavą ir be tikslo naršydamas Mastodon tinkle, užtikau diskusiją. Žmonės dalinosi savo produktyvumo patarimais, ir viena tema patraukė mano dėmesį: dažnai naudojamų teksto fragmentų valdymas. Daug kas skundėsi, kad nuolat rašo tuos pačius sakinius ar frazes – ar tai būtų mandagūs el. laiškų užbaigimo žodžiai, ar dažnai naudojamos kodo eilutės.

Staiga supratau, kad ir pats susidūriu su šia problema. Kiek kartų per dieną rašau “Pagarbiai“ arba “Su geriausiais linkėjimais“ el. laiškuose? O kiek kartų įvedu savo kontaktinius duomenis ar tam tikras SQL užklausas? Per daug, kad skaičiuočiau.

Būdamas Linux entuziastas ir mėgėjas automatizuoti viską, kas juda, nusprendžiau: reikia tai išspręsti. Ir taip gimė mano mažas, bet galingas įrankis – pasirinktinio teksto įterpimo scenarijus.

Problemos esmė

Prieš nerdamas į techninę dalį, apibrėžkime problemą:

  1. Dažnai naudojame tuos pačius teksto fragmentus.
  2. Šių fragmentų perrašinėjimas atima laiką ir kelia įtampą riešo sąnariui.
  3. Kartais apsirenkame ar pamirštame, ką tiksliai rašėme anksčiau.

Mums reikia įrankio, kuris leistų:

  • Saugoti dažnai naudojamus tekstus.
  • Greitai pasiekti ir įterpti šiuos tekstus vienu klavišų paspaudimu.
  • Lanksčiai pasirinkti iš kelių variantų pagal situaciją.

Sprendimas: Bash magija

Čia į pagalbą ateina mano sukurtas Bash scenarijus. Jo idėja paprasta:

  1. Sukuriame katalogą su įvairiais tekstiniais failais.
  2. Kai mums reikia teksto, paspaudžiame klavišų kombinaciją.
  3. Pasirodo langas, kuriame galime pasirinkti norimą tekstą.
  4. Pasirinktas tekstas automatiškai nukopijuojamas į iškarpinę.
  5. Įklijuojame tekstą ten, kur reikia, naudodami Ctrl+V.

Įsivaizduokite: jokio daugiau kartojimo, jokių klaidų ieškant senų laiškų. Tiesiog pasirenkate ir įklijuojate.





Kaip pradėti?

Dar aptarkime, kokių papildomų paketų reikia (beveik visi ir taip jau yra įdiegti), kad viskas veiktų sklandžiai, ir kaip juos įdiegti įvairiose Linux distribucijose.

  1. xclip – Įrankis darbui su X11 iškarpine
    • Paskirtis: Leidžia manipuliuoti X Window sistemos iškarpine iš komandinės eilutės. Mūsų atveju naudojamas tekstui įdėti į iškarpinę, kad vėliau galėtumėte jį įklijuoti bet kurioje programoje.
    • Funkcijos:
      • -selection clipboard: Nurodo naudoti pagrindinę iškarpinę (tą, kurią naudoja Ctrl+C ir Ctrl+V).
      • Gali ir nuskaityti tekstą iš iškarpinės, ir įrašyti į ją.
  2. zenity – GTK dialogo įrankis
    • Paskirtis: Leidžia rodyti grafinius dialogo langus ir pranešimus iš komandinės eilutės ar scenarijų. Tai daro jūsų scenarijus interaktyvesniu ir vartotojui draugiškesniu.
    • Funkcijos:
      • --list: Rodo sąrašo pasirinkimo dialogo langą.
      • --info, --error: Rodo informacinius ar klaidos pranešimus.
      • --text-info: Leidžia peržiūrėti ir redaguoti tekstą grafiniame lange.
      • Daug kitų funkcijų: kalendoriai, spalvų pasirinkimai, progreso juostos ir t.t.
  3. find – Failų paieškos įrankis
    • Paskirtis: Naudojamas failams ir katalogams ieškoti pagal įvairius kriterijus. Mūsų scenarijuje jis naudojamas surasti visus .txt failus nurodytame kataloge.
    • Funkcijos:
      • -maxdepth 1: Ieško tik nurodytame kataloge, neikia gilyn į pakatalogius.
      • -type f: Ieško tik failų (ne katalogų).
      • -name "*.txt": Ieško failų, kurių pavadinimai baigiasi .txt.
  4. cat – Failo turinio rodymo įrankis
    • Paskirtis: Skaito failo turinį ir išveda jį į standartinę išvestį. Mūsų atveju naudojamas nuskaityti tekstui iš pasirinkto failo.
    • Funkcijos: Paprastas įrankis, kuris tiesiog parodo failo turinį.
  5. basename – Failo pavadinimo ištraukimo įrankis
    • Paskirtis: Grąžina failo pavadinimą be kelio. Mūsų scenarijuje naudojamas išgauti failo pavadinimą be .txt plėtinio, kad būtų gražiau rodoma pasirinkimo sąraše.
    • Funkcijos:
      • basename "$file" .txt: Grąžina failo pavadinimą be kelio ir be .txt plėtinio.

Dabar pažiūrėkime, kaip įdiegti šiuos paketus įvairiose Linux distribucijose:

Debian/Ubuntu (apt paketų tvarkytuvas)

 

sudo apt update
sudo apt install xclip zenity findutils coreutils
  • Pastaba: findutils ir coreutils paprastai jau būna įdiegti, bet įtraukiau juos dėl pilnumo.

Arch Linux (pacman paketų tvarkytuvas)

 


sudo pacman -Sy
sudo pacman -S xclip zenity findutils coreutils
  • Arch paprastai turi naujausias paketų versijas.

Fedora (dnf paketų tvarkytuvas)


sudo dnf update
sudo dnf install xclip zenity findutils coreutils
  • Fedora orientuota į naujausias technologijas ir griežtą laikymąsi atvirojo kodo principų.

openSUSE (zypper paketų tvarkytuvas)


sudo zypper refresh
sudo zypper install xclip zenity findutils coreutils
  • openSUSE žinomas dėl savo stabilumo ir YaST konfigūravimo įrankio.

Papildomos pastabos:

  1. KDE priklausomybės:
    • Jei naudojate KDE Plasma darbalaukio aplinką (kaip aš), dauguma reikalingų bibliotekų jau bus įdiegtos, nes zenity naudoja GTK, o KDE naudoja Qt. Tačiau zenity vis tiek veiks puikiai.
  2. xclip alternatyvos:
    • xsel: Kitas populiarus įrankis darbui su X11 iškarpine. Kai kurie jį mėgsta labiau.
      • Debian/Ubuntu: sudo apt install xsel
      • Arch: sudo pacman -S xsel
      • Fedora: sudo dnf install xsel
      • openSUSE: sudo zypper install xsel
  3. zenity alternatyvos KDE aplinkoje:
    • kdialog: KDE analogas zenity, naudojantis Qt bibliotekas.
      • Debian/Ubuntu: sudo apt install kde-baseapps-bin arba kdialog
      • Arch: sudo pacman -S kde-baseapps
      • Fedora: sudo dnf install kde-baseapps
      • openSUSE: Turėtų būti jau įdiegta su KDE.
    • Norėdami naudoti kdialog, tiesiog pakeiskite zenity komandas į atitinkamas kdialog komandas scenarijuje.
  4. Kiti naudingi paketai:
    • xdotool: Leidžia simuliuoti klaviatūros ir pelės įvestį. Galėtumėte jį naudoti, jei norėtumėte, kad scenarijus ne tik nukopijuotų tekstą, bet ir automatiškai įklijuotų jį.
    • yad: Dar viena zenity alternatyva su daugiau funkcijų.
  5. Versijų skirtumai:
    • Dauguma šių įrankių yra labai stabili ir ilgai egzistuojanti programinė įranga, todėl net jei skirtingose distribucijose bus šiek tiek skirtingos versijos, jūsų scenarijus turėtų veikti vienodai gerai visur.
  6. Jei trūksta paketų:
    • Retai, bet gali pasitaikyti, kad kai kuriose distribucijose (ypač minimalistinėse) šių paketų gali nebūti standartinėse saugyklose. Tokiu atveju galite:
      • Ieškoti alternatyvių saugyklų (pvz., Arch Linux atveju – AUR).
      • Kompiliuoti iš išeitinio kodo (paskutinė išeitis).

Įdiegę šiuos paketus bet kurioje iš šių populiarių Linux distribucijų, turėsite visus reikalingus įrankius, kad jūsų pasirinktinio teksto įterpimo sprendimas veiktų sklandžiai ir efektyviai. Kiekvienas įrankis atlieka savo specifinę funkciją, ir kartu jie sukuria patogią ir interaktyvią vartotojo patirtį.

Taigi, pradedam

Sukurkite tekstų katalogą

Pirmiausia, sukurkite katalogą savo dažnai naudojamiems tekstams:


mkdir ~/git/custom_texts

Tada sukurkite keletą .txt failų šiame kataloge. Pavyzdžiui:
~/git/custom_texts/sveikinimas.txt su tekstu "Labas, kaip sekasi?"
~/git/
custom_texts/atsisveikinimas.txt su tekstu "Viso gero, gražios dienos!"
~/git/
custom_texts/padeka.txt su tekstu "Ačiū už pagalbą!"

Sukurkite Bash scenarijų, pavadinkime jį select_and_paste.sh:


#!/bin/bash
 
# Katalogas su tekstiniais failais
TEXT_DIR="$HOME/git/custom_texts"
 
# Patikrinti, ar katalogas egzistuoja
if [ ! -d "$TEXT_DIR" ]; then
    zenity --error --title="Klaida" --text="Katalogas $TEXT_DIR nerastas."
    exit 1
fi
 
# Gauti visų .txt failų sąrašą kataloge
text_files=($(find "$TEXT_DIR" -maxdepth 1 -type f -name "*.txt"))
 
# Patikrinti, ar yra .txt failų
if [ ${#text_files[@]} -eq 0 ]; then
    zenity --error --title="Klaida" --text="Kataloge $TEXT_DIR nerasta .txt failų."
    exit 1
fi
 
# Sukurti masyvą su failų pavadinimais be kelio ir .txt plėtinio
options=()
for file in "${text_files[@]}"; do
    filename=$(basename "$file" .txt)
    options+=("$filename")
done
 
# Rodyti pasirinkimo dialogą
selected=$(zenity --list --title="Pasirinkite tekstą" --column="Tekstai" "${options[@]}" --width=300 --height=450)
 
# Jei vartotojas nieko nepasirinko arba uždarė langą
if [ -z "$selected" ]; then
    exit 0
fi
 
# Pilnas kelias iki pasirinkto failo
selected_file="$TEXT_DIR/$selected.txt"
 
# Nuskaityti tekstą iš failo
text=$(cat "$selected_file")
 
# Įdėti tekstą į iškarpinę
echo -n "$text" | xclip -selection clipboard
 
# Rodyti patvirtinimo pranešimą
zenity --info --title="Sėkmė" --text="Tekstas iš failo '$selected' sėkmingai įdėtas į iškarpinę."
Padarykite scenarijų vykdomu:

chmod +x ~/scripts/select_and_paste.sh

Nustatykite sparčiojo klavišo veiksmą

Šis žingsnis priklausys nuo jūsų darbalaukio aplinkos. Aš naudoju KDE, bet procesas panašus GNOME, XFCE ar kitose aplinkose.

KDE vartotojams:

  1. Eikite į Nustatymai > Spartieji klavišai ir gestai > Pasirinktiniai spartieji klavišai.
  2. Pasirinkite “Edit“ > “New“ > “Global Shortcut“ > “Command/URL“.
  3. Nustatykite:
    • Pavadinimas: “Pasirinkti ir įterpti tekstą“
    • Trigger: Ctrl+Shift+Y (ar kita jūsų pasirinkta kombinacija)
    • Action: /home/JUSU_VARDAS/scripts/select_and_paste.sh (pas mane ~/git/select_and_paste.sh)
  4. Spauskite “Apply“.

GNOME vartotojams: eikite į Nustatymai > Klaviatūra > Spartieji klavišai ir atlikite panašius veiksmus.

Kaip tai veikia?

Kai paspaudžiate Ctrl+Shift+Y (ar kitą pasirinktą kombinaciją), įvyksta tokia seka:

  1. Paleidžiamas jūsų Bash scenarijus.
  2. Scenarijus ieško .txt failų jūsų ~/git/custom_texts kataloge.
  3. Suradęs failus, jis sukuria sąrašą su jų pavadinimais ir pirmosiomis eilutėmis.
  4. Atsidaro gražus pasirinkimo langas, kuriame matote savo tekstų pavadinimus ir jų peržiūras.
  5. Pasirenkate norimą tekstą ir spaudžiate OK.
  6. Pasirinktas tekstas nuskaitomas iš failo ir įdedamas į iškarpinę.
  7. Jūs matote patvirtinimo pranešimą, kad viskas pavyko.
  8. Dabar einate į bet kurią programą – teksto redaktorių, el. paštą, pokalbių programą – ir spaudžiate Ctrl+V. Magiška! Jūsų pasirinktas tekstas įklijuotas.

Kodėl tai šaunu?

  1. Taupomas laikas: Nebereikia iš naujo rašyti tų pačių frazių.
  2. Mažiau klaidų: Tekstai visada tikslūs, nes jie iš failo.
  3. Organizuotumas: Visi jūsų dažni tekstai vienoje vietoje.
  4. Lankstumas: Galite turėti dešimtis ar net šimtus tekstų, lengvai pasirenkamų.
  5. Pritaikomumas: Lengvai galite pridėti, redaguoti ar ištrinti tekstus.
  6. Veikia bet kurioje programoje, bet kurioje Linux aplinkoje.

Galimos plėtotės

Žinoma, kaip ir su bet kuriuo projektu, idėjų plėtotei netrūksta:

  • Automatinis teksto formatavimas pagal kontekstą.
  • Saugojimas debesyje sinchronizavimui tarp įrenginių.
  • GUI programa tekstams valdyti.

    Papildomi patarimai:
    Galite pridėti daugiau informacijos į pasirinkimo langą, pvz., rodyti teksto pradžią:

options=()
for file in "${text_files[@]}"; do
    filename=$(basename "$file" .txt)
    preview=$(head -n 1 "$file")
    options+=("$filename" "$preview")
done
 
selected=$(zenity --list --title="Pasirinkite tekstą" --column="Pavadinimas" --column="Peržiūra" "${options[@]}" --width=500 --height=450)
Galite pridėti galimybę redaguoti tekstą prieš įdėjimą:

text=$(zenity --text-info --title="Redaguoti tekstą" --filename="$selected_file" --editable)

Jei turite daug tekstų, galite juos organizuoti į pakatalogius pagal kategorijas (pvz., sveikinimas/, verslas/, asmeniniai/) ir modifikuoti scenarijų, kad jis ieškotų rekursyviai.
Galite pridėti mygtuką “Pridėti naują tekstą“, kuris atvertų tekstinį redaktorių naujo failo sukūrimui.

Išvada

Tai, kas prasidėjo kaip atsitiktinis pastebėjimas Mastodon tinkle, virto praktiniu įrankiu, kuris dabar taupo man valandas kiekvieną savaitę. Linux grožis ir yra tas, kad su keliais eilučių Bash kodu galite išspręsti realias, kasdienes problemas.

Nesvarbu, ar esate profesionalus programuotojas, ar tik mėgėjas – tokie maži automatizavimo projektai gali drastiškai pagerinti jūsų darbo eigą. Tikiuosi, kad šis įrankis įkvėps jus ne tik jį naudoti, bet ir kurti savo sprendimus. Juk Linux pasaulyje, jei galite tai įsivaizduoti, beveik visada galite tai ir padaryti.

O dabar, jei man reikia baigti šį įrašą… Ctrl+Shift+Y, pasirinkti “blog_ending.txt“, Ctrl+V:

Iki kito karto, kai vėl kalbėsime apie tai, kaip paversti Linux ne tik operacine sistema, bet ir asmeniniu asistentu!

Komentarai

Populiarūs šio tinklaraščio įrašai

Configuring a NixOS firewall for everyday use

Setting up syncthing as a service on openSUSE and other Linux distributions

Monitoring SFTP server updates with Python