Inleiding
Een behoorlijke tijd geleden werkte ik samen met een aantal andere programmeurs.
Eén van hen had een klein programmaatje gemaakt dat met een druk op de knop een
geluidje afspeelde. Het was in AutoIt geschreven, heette WavRunner.exe
en zorgde voor de nodige hilariteit tijdens onze werkdag. Met name
Homer Simpson was akoestisch goed vertegenwoordigd.
GNOME
Omdat ik GNU/Linux als besturingssysteem gebruik, kan ik onder Ubuntu (zonder al
te grote omwegen) geen .exe
bestanden uitvoeren. Ik ging op zoek naar een
vergelijkbaar alternatief voor gebruik met de GNOME desktop.
Ik zag het niet zitten om een programma te schrijven dat continu op de
achtergrond zou luisteren naar bepaalde toetscombinaties. In plaats daarvan
bedacht ik, dat ik voor elke toets (en bijbehorend wav
-bestand) een sneltoets
zou kunnen toevoegen. Ik vond het commandline programma play
dat een
wav
-geluidsbestand kan afspelen. Nu nog de sneltoets toevoegen…
dconf en dan?
Was het vroeger nog redelijk eenvoudig om via bepaalde XML
-bestanden
instellingen van GNOME te wijzigen, moet dit tegenwoordig via een binair
opgeslagen database genaamd dconf. Gelukkig zijn er mensen die de moeite
nemen om hier tegenaan te programmeren en ziedaar: een Perl
-script dat
alle bestaande sneltoetsen kan exporteren en importeren.
Script
Met bovengenoemd script als werkpaard heb ik onderstaande wrapper geschreven
die voor alle wav
-bestanden in een opgegeven map een sneltoets toevoegt. Als
eerste worden alle bestaande sneltoetsen geëxporteerd. Al eerder door het script
toegevoegde shortcuts worden weggefilterd. Dan volgt het toevoegen per
wav
-bestand. Tot slot wordt de volledige lijst opniieuw geïmporteerd.
Ik heb gekozen voor de toetscombinatie Ctrl + Shift + Alt + letter of cijfer. Je zou ook de Super-toets kunnen gebruiken, maar dat zorgde voor onvoorspelbaar gedrag in combinatie met het openen van programma's en vensters (Super + 1, Super + 2 etc.).
#!/bin/bash
GNOMESCRIPT='/path/to/keybindings.pl';
WAVFOLDER='/path/to/folder/containing/wav-files';
if [ ! -f "${GNOMESCRIPT}" ]; then
echo "The GNOME-keys script could not be found.";
exit 1;
fi
if [ ! -x "${GNOMESCRIPT}" ]; then
echo "The GNOME-keys script is not executable.";
exit 2;
fi
# Create a temporary file for exporting
EXPORTFILE="$( mktemp --suffix=.csv )";
# Export existing keyboard shortcuts
"${GNOMESCRIPT}" -e "${EXPORTFILE}";
# Create a temporary file for importing
IMPORTFILE="$( mktemp --suffix=.csv )";
# Filter out existing wavplay-shortcuts
grep -v 'wavplay' "${EXPORTFILE}" > "${IMPORTFILE}";
# Loop through folder
find "${WAVFOLDER%/}/" -maxdepth 1 -iname "?.wav" -print | while read i
do
F="$( basename ${i} )";
# Add a shortcut for each wav-file
echo -e \
"custom\t'wavplay-${F%%.wav}'\t'play ${i}'\t'<Primary><Shift><Alt>${F%%.wav}'" \
>> "${IMPORTFILE}";
done
# Import existing and new keyboard shortcuts
"${GNOMESCRIPT}" -i "${IMPORTFILE}";
# Clean up
rm "${EXPORTFILE}" "${IMPORTFILE}"
# Exit normally
exit 0;
Let op
De namen van de geluidsbestanden mogen uit slechts één letter of cijfer bestaan. Deze aanpak werkt dus alleen voor de toetsen A-Z en 0-9, maar dat mag de pret niet drukken. Met 36 verschillende geluiden kom je een heel eind :-)