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.