Hotkeys в wine (можно ли?)
Модератор: Модераторы разделов
-
- Сообщения: 115
- ОС: ArchLinux
Hotkeys в wine
Привет всем. У меня тут назрел вопрос - можно ли использовать глобальніе горячие клавиши в вайн?
-
- Сообщения: 115
- ОС: ArchLinux
Re: Hotkeys в wine
если у вас работает то как? обьясните. к примеру у меня когда foobar свернут то его горячие клавиши не работают...
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Hotkeys в wine
наверное никак. это от программы зависит - если-бы программисты foobar'а использовали-бы стандартный API...
-
- Сообщения: 992
- ОС: openSUSE
Re: Hotkeys в wine
Можно. Через xbindkeys. Где-то находил инструкцию по которой всё делал, но сейчас не найду. Суть в том что фубар понимает аргументы командной строки, например foobar2000.exe /stop и тд.
Создаём исполняемый файлик, например /usr/bin/foobar2000 (чтобы в $PATH было) с примерно таким содержанием
Код:
#!/bin/bash
# set this to what's needed to run foobar.
# for example, if you have binfmt_misc setup
# for wine, something like this will work.
# otherwise, "wine path-to-foobar" is what you want.
fb2k="wine /home/flysnake/.wine/drive_c/foobar2000"
canonicalise () {
filename="${1}"
# prefix replacement
case "${1}" in
/*)
# absolute, nothing to do.
;;
~*)
# home-relative and for some odd reason calling shell
# didnt expand this already (for ex. it was quoted).
filename="${HOME}/${filename}"
;;
*)
# relative path.
filename="$(pwd)/${filename}"
;;
esac
# strip './' elements
filename=$(echo "${filename}" | sed -e 's:/\./:/:g')
# strip 'foo/../' elements
filename=$(echo "${filename}" | sed -e 's:/[^/]\+/\.\./:/:g')
# protect real backslashes
filename=$(echo "${filename}" | sed -e 's/\\/\\\\/g')
file="${filename}"
unset filename
}
case "${1}" in
-add)
[[ -n ${2} ]] && canonicalise "${2}"
${fb2k}/foobar2000.exe /add "z:$file" & &>/dev/null
echo "Action: adding Directory or Files \"${file}\" to foobar2000"
;;
-addfiles)
files=( "${@}" )
for (( i = 1 ; i < ${#} ; ++i )); do
canonicalise "${files[$i]}"
${fb2k}/foobar2000.exe /add "z:${file}" & &>/dev/null
echo "Action: adding $(echo ${file})"
done
echo "Result: added "$(( ${#}-1 ))" files to foobar2000"
;;
-play)
${fb2k}/foobar2000.exe /play & &>/dev/null
echo "Action: play Song in foobar2000"
;;
-pause)
${fb2k}/foobar2000.exe /pause & &>/dev/null
echo "Action: pause Song in foobar2000"
;;
-playpause)
${fb2k}/foobar2000.exe /playpause & &>/dev/null
echo "Action: play or pause Song in foobar2000"
;;
-prev)
${fb2k}/foobar2000.exe /prev & &>/dev/null
echo "Action: play previous Song in foobar2000"
;;
-next)
${fb2k}/foobar2000.exe /next & &>/dev/null
echo "Action: play next Song in foobar2000"
;;
-rand)
${fb2k}/foobar2000.exe /rand & &>/dev/null
echo "Action: play random Song in foobar2000"
;;
-stop)
${fb2k}/foobar2000.exe /stop & &>/dev/null
echo "Action: stop playing a Song in foobar2000"
;;
-mute)
${fb2k}/foobar2000.exe /command:Volume\ mute & &>/dev/null
echo "Action: mute foobar2000"
;;
-volup)
${fb2k}/foobar2000.exe /command:Volume\ up & &>/dev/null
echo "Action: raise Volume in foobar2000"
;;
-voldown)
${fb2k}/foobar2000.exe /command:Volume\ down & &>/dev/null
echo "Action: decrease Volume in foobar2000"
;;
-hide)
${fb2k}/foobar2000.exe /hide & &>/dev/null
echo "Action: hide foobar2000 window"
;;
-show)
${fb2k}/foobar2000.exe /show & &>/dev/null
echo "Action: show foobar2000 window"
;;
-exit)
${fb2k}/foobar2000.exe /exit & &>/dev/null
echo "Action: exit foobar2000"
;;
-rescan)
${fb2k}/foobar2000.exe /command:"Rescan Media Library" & &>/dev/null
echo "Action: Rescan foobar2000 Media Library"
;;
-command-*)
[[ -n ${1} ]] && command=${1##*command-}
${fb2k}/foobar2000.exe /command:"${command}" & &>/dev/null
echo "Action: call foobar2000 with command \"$command\""
;;
-playlist_command-*)
[[ -n ${1} ]] && command=${1##*command-}
${fb2k}/foobar2000.exe /playlist_command:"${command}" & &>/dev/null
echo "Action: call foobar2000 with playlist command \"$command\""
;;
-playing_command-*)
[[ -n ${1} ]] && command=${1##*command-}
${fb2k}/foobar2000.exe /playing_command:"${command}" & &>/dev/null
echo "Action: call foobar2000 with playing command \"$command\""
;;
-help)
echo "Using: foobar2000 [Command]
Where Command can be on of these:
-add -addfiles -play -pause -playpause -stop -next -prev -rand -mute -volup -voldown -hide -show -rescan -command-[fb2k command] -playlist_command-[fb2k playlist command] -playing_command-[fb2k playing command] -help"
;;
*)
if [[ -n ${1} ]]; then
canonicalise "${1}"
${fb2k}/foobar2000.exe "z:${file}" & &>/dev/null
echo "Action: start foobar2000 with file ${file}"
else
${fb2k}/foobar2000.exe & &>/dev/null
echo "Action: start foobar2000"
fi
;;
esac
И для хоткеев в ~/.xbindkeysrc
Код:
"foobar2000 -playpause"
alt + x
"foobar2000 -stop"
alt + z
"foobar2000 -next"
alt + v
"foobar2000 -prev"
alt + c
"foobar2000 -playpause"
XF86AudioPlay
"foobar2000 -stop"
XF86AudioStop
Или любым другим способом повестить эти команды на клавиши.
Всё равботает, только с задержкой, но эта задержка сильно зависит от нагруженности системы и скорее всего на быстрых компах будет нормлаьно.