Forum Programmation.autre recevoir des événements clavier dans un script bash en tâche de fond

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
0
5
nov.
2014

Bonjour,

j'ai un script bash qui me rend bien des services : il récupère la sélection X (xsel -o) et la renvoie après transformation dans le presse papier et la zone de notification. Les transformations possibles sont :
passage en majuscules
passage en minuscules
passage en casse inverse
remplacement des . (points) par des , (virgule) ou inverse
traduction de auto vers anglais ou vers français (via google traduction)

J'appelle ce script via des raccourcis clavier, autant de raccourcis qu'il y a d'options. Cela ne pose pas de problème sous openbox grâce aux raccourcis doubles lames mais cela devient vite encombrant d'en d'autre environnements, notamment sur le PC de ma douce sous KDE.

J'ai tenté 'read -st 2 -N 1' mais sans surprise cela ne fonctionne pas quand le script tourne en tâche de fond. Cela fonctionne si je le lance dans xterm mais cela n'est pas bien élégant.

Mes recherches sur le web me laissent bien peu d'espoir mais peut-être ai-je mal posé la question.

Quelqu'un de cette noble assemblée aurait-il une piste à me proposer ?

Merci d'avance

le script :

#! /bin/bash 
# dépendance xsel xclip html2text libnotify

IFS=$'\n'

traduction ()
{
# fonction provenant d'un script de Johnraff sur le forum de crunchbang
# http://crunchbang.org/forums/viewtopic.php?id=17034
    result=$(curl -s -i --user-agent "" -d "sl=auto" -d "tl=$1" --data-urlencode "text=$selection" https://translate.google.com)
        encoding=$(awk '/Content-Type: .* charset=/ {sub(/^.*charset=["'\'']?/,""); sub(/[ "'\''].*$/,""); print}' <<<"$result")
        trad=$(iconv -f $encoding <<<"$result" |  awk 'BEGIN {RS="</div>"};/<span[^>]* id=["'\'']?result_box["'\'']?/' | html2text | tr "\n" " ")
}

selection=$(xsel -o | tr "\n" " ")

#read -st 2 -N 1 key
#if [ -z $key ]; then exit 1;fi

case $1 in
    u) # tout en majuscule
        echo ${selection^^}  | xclip -i -selection clipboard;;
    l) # tout en minuscule
        echo ${selection,,}  | xclip -i -selection clipboard;;
    i) # casse inverse
        echo ${selection~~}  | xclip -i -selection clipboard;;
    v) # remplace le point par une virgule
        echo $selection |  sed "s/\./,/g" | xclip -i -selection clipboard;;
    p) # remplace la virgule par un point
        echo $selection | sed 's/,/\./g' | xclip -i -selection clipboard;;
    a) # traduit de auto en anglais
        traduction "en"
        NotifyTime=15000
        echo $trad | xclip -i -selection clipboard;;
    f) # traduit de auto en français
        traduction "fr"
        NotifyTime=15000
        echo $trad | xclip -i -selection clipboard;;
    *) # cas non prévus
        echo "usage inattendu" | xclip -i -selection clipboard
esac

notify-send --icon=dialog-information -t 10000 'scopy' $(xclip -o -selection clipboard)
  • # xev

    Posté par  (site web personnel) . Évalué à 2.

    xev est une piste pour toi, je crois.

    Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html

    • [^] # Re: xev

      Posté par  (site web personnel) . Évalué à 2.

      Merci pour cet avis. Toutefois cela ne me semble pas très évident à mettre en œuvre et pas plus élégant qu'une fenêtre xterm

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.