linux Map媒体键以在Spotify中向前和向后搜索

fcy6dtqo  于 2023-02-11  发布在  Linux
关注(0)|答案(1)|浏览(135)

我正在运行Ubuntu,我喜欢使用键盘上的媒体键来控制Spotify,对于播放、暂停、跳到下一个和跳到上一个等基本功能来说,这很容易,因为我可以使用dbus [1]。
不过,我也希望能够在一首歌中向前和向后搜索。Spotify不能处理dbus命令。Spotify确实有内置的键盘快捷键,但这需要窗口有焦点,而dbus命令不需要。我试着摆弄各种选项来切换到Spotify,运行快捷键,并切换回上一个窗口。我最终使用以下脚本确定了AutoKey [3]:

# and xdotool doesn't seem to be working, 
# so we have do do seeking this way

spotifyClass = "spotify.Spotify"
thisWindowTitle = window.get_active_title()
thisWindowClass = window.get_active_class()

#Switch to spotify if it's not already active
if thisWindowClass != spotifyClass:
    window.activate(spotifyClass, False, True)
    window.wait_for_focus("^Spotify")
    time.sleep(0.1)  # Necessary or else Spotify sometimes doesn't register the shortcut  
    
keyboard.send_keys("<shift>+<right>")

# Switch back to the previous window
window.activate(thisWindowTitle)

不幸的是,它有缺陷,特别是当我连续多次向前/向后搜索时,因为我会由于重叠调用而丢失“最后一个窗口”状态。
我希望有一个更可靠和优雅的解决方案在那里。我欢迎社区可能有任何想法。谢谢!
[1]例如https://blomsmail.medium.com/take-the-bus-how-to-control-spotify-with-the-terminal-43f7bd44aed1
[2][https://community.spotify.com/t5/Desktop-Linux/Basic-controls-via-command-line/td-p/4295625](https://community.spotify.com/t5/Desktop-Linux/Basic-controls-via-command-line/td-p/4295625)
[3][https://github.com/autokey/autokey](https://github.com/autokey/autokey)

svmlkihl

svmlkihl1#

我不知道关于Spotify的任何事情,但是我可以让你的脚本在继续之前等待任何其他示例终止,这有点棘手,所以我只打算详细说明这种方法,而不是尝试在运行中编写它。
诀窍是创建一个AutoKey全局变量。首先尝试:读取变量。如果它〈1(或者不存在,因此try:块)递增并存储它,然后继续脚本的其余部分。当脚本完成时,递减并保存它。
如果大于0,则进入while循环,周期性地获取它,直到它变为0,然后递增它并继续执行脚本的其余部分,完成后递减它。
这几乎是对的,我搞砸了增量逻辑,但你明白我的意思。
我本可以使用AutoKey本地存储值来代替全局值,但为了防止它陷入循环,您可以编写另一个脚本,将全局存储值设置为零等,以手动中断循环。
显然,关于何时何地递增/递减变量以及如何避免退出中断/阻塞循环的问题需要处理,但这只是一个普通的编码问题。

相关问题