在 Emacs 中控制 Spotify 应用
Smudge 允许您从您喜爱的文本编辑器中控制 Spotify 应用。如果您使用的是 Mac OS X 或 Linux,可以控制本地运行的实例。如果您在任何具有网络连接的平台上运行(包括 Windows - 甚至是无头设备!)并拥有 Spotify 高级订阅,您可以通过 Spotify Connect 功能控制 Spotify 实例。
Smudge 需要 Emacs 27.1+。
package.el
是 Emacs 内置的包管理器。
Smudge 可在两个主要的社区维护的 package.el 仓库 MELPA Stable 和 MELPA 中获得。
您可以使用以下命令安装 Smudge:
<kbd>M-x</kbd> package-install <kbd>[RET]</kbd> smudge <kbd>[RET]</kbd>
或将以下代码片段添加到您的 Emacs 配置中:
(use-package smudge :bind-keymap ("C-c ." . smudge-command-map) :config (setq smudge-oauth2-client-secret "..." smudge-oauth2-client-id "..."))
将以下内容添加到 packages.el
文件中:
;; 从 MELPA 获取 (package! smudge) ;; 从 GitHub 获取 (package! smudge :recipe (:host github :repo "danielfm/smudge"))
将以下内容添加到 config.el
文件中:
(use-package! smudge :bind-keymap ("C-c ." . smudge-command-map) :custom (smudge-oauth2-client-secret "...") (smudge-oauth2-client-id "...") ;; 可选:为常用命令启用临时映射 (smudge-player-use-transient-map t))
(setq smudge-oauth2-client-secret "<spotify-app-client-secret>") (setq smudge-oauth2-client-id "<spotify-app-client-id>") (define-key smudge-mode-map (kbd "C-c .") 'smudge-command-map)
<kbd>C-c .</kbd> 键映射前缀只是一个建议,遵循 Emacs 手册中为次要模式定义的约定键绑定约定。此包的早期版本使用 <kbd>M-p</kbd>。
可以启用临时映射以允许重复常用命令(在 smudge-transient-command-map
中定义),而无需重复 smudge-command-map
的前缀键。
(setq smudge-player-use-transient-map t)
要获取客户端 ID 和客户端密钥,您需要创建一个 Spotify 应用,将 http://localhost:8080/smudge-api-callback 指定为重定向 URI(或通过自定义指定的任何端口)。OAuth2 交换由 simple-httpd
处理。如果您没有将此包用于其他用途,则无需自定义此端口。否则,您需要将其设置为您正在运行的端口。
要使用 "Spotify Connect" 传输(而不是仅控制本地实例 - 尽管您也可以控制本地实例),请按如下方式将 smudge-transport
设置为 'connect
。此功能需要 Spotify 高级订阅。
(setq smudge-transport 'connect)
转到 创建应用程序 并为您的应用程序命名和描述:
创建新应用后,点击 编辑设置,向下滚动一点,将 http://localhost:8080/smudge-api-callback 输入为应用程序的重定向 URI,然后点击 添加。最后,点击 保存。
此时,客户端 ID 和客户端密钥可用,因此将这些值分别设置为 smudge-oauth2-client-id
和 smudge-oauth2-client-secret
。
当您启用 global-smudge-remote-mode
次要模式时,您将获得以下键绑定:
按键 | 功能 | 描述 |
---|---|---|
<kbd>[前缀键] M-s</kbd> | smudge-controller-toggle-shuffle | 开启/关闭随机播放 [1] |
<kbd>[前缀键] M-r</kbd> | smudge-controller-toggle-repeat | 开启/关闭重复播放 [1] |
<kbd>[前缀键] M-p</kbd> | smudge-controller-toggle-play | 播放/暂停 |
<kbd>[前缀键] M-f</kbd> | smudge-controller-next-track | 下一曲 |
<kbd>[前缀键] M-b</kbd> | smudge-controller-previous-track | 上一曲 |
<kbd>[前缀键] p m</kbd> | smudge-my-playlists | 显示你的播放列表 |
<kbd>[前缀键] p f</kbd> | smudge-featured-playlists | 显示精选播放列表 |
<kbd>[前缀键] p s</kbd> | smudge-playlist-search | 搜索播放列表 |
<kbd>[前缀键] p u</kbd> | smudge-user-playlists | 显示指定用户的播放列表 |
<kbd>[前缀键] p c</kbd> | smudge-create-playlist | 创建新的播放列表 |
<kbd>[前缀键] t r</kbd> | smudge-recently-played | 最近播放的曲目列表 |
<kbd>[前缀键] t s</kbd> | smudge-track-search | 搜索曲目 |
<kbd>[前缀键] v u</kbd> | smudge-controller-volume-up | 增加音量 [2] |
<kbd>[前缀键] v d</kbd> | smudge-controller-volume-down | 降低音量 [2] |
<kbd>[前缀键] v m</kbd> | smudge-controller-volume-mute-unmute | 在 0 和 100 之间切换音量 [2] |
<kbd>[前缀键] d</kbd> | smudge-select-device | 选择播放设备 [2] |
Smudge 当前正在播放的歌曲会在模式行中显示,包括播放器状态(播放中、暂停)。可以通过 smudge-player-status-refresh-interval
变量配置播放器状态更新的时间间隔:
;; 每 10 秒更新一次播放器状态(默认为 5 秒) ;; 注意:设置为 0 可禁用此功能,使用 'connect transport 时避免将值设为 1 到 4 之间 (setq smudge-player-status-refresh-interval 10)
[1] GNU/Linux 的 D-Bus 实现中没有对此提供适当的支持
[2] 此功能使用 Spotify Connect,需要高级会员订阅
使用 hydra 包的用户可能会发现以下代码更方便管理 Spotify:
;; 用于控制 Spotify 的 hydra (defhydra hydra-spotify (:hint nil) " ^搜索^ ^控制^ ^管理^ ^^^^^^^^----------------------------------------------------------------- _t_: 曲目 _SPC_: 播放/暂停 _+_: 增加音量 _m_: 我的播放列表 _n_ : 下一曲 _-_: 降低音量 _f_: 精 选播放列表 _p_ : 上一曲 _x_: 静音 _u_: 用户播放列表 _r_ : 重复 _d_: 设备 ^^ _s_ : 随机 _q_: 退出 " ("t" smudge-track-search :exit t) ("m" smudge-my-playlists :exit t) ("f" smudge-featured-playlists :exit t) ("u" smudge-user-playlists :exit t) ("SPC" smudge-controller-toggle-play :exit nil) ("n" smudge-controller-next-track :exit nil) ("p" smudge-controller-previous-track :exit nil) ("r" smudge-controller-toggle-repeat :exit nil) ("s" smudge-controller-toggle-shuffle :exit nil) ("+" smudge-controller-volume-up :exit nil) ("-" smudge-controller-volume-down :exit nil) ("x" smudge-controller-volume-mute-unmute :exit nil) ("d" smudge-select-device :exit nil) ("q" quit-window "退出" :color blue)) (bind-key "a" #'hydra-spotify/body some-map)
可以通过设置 smudge-player-status-format
中的所需格式来自定义播放器状态中显示的信息。支持以下占位符:
符号 | 描述 | 示例 |
---|---|---|
%u | 曲目 URI | spotify:track:<id> |
%a | 艺术家名称(截断) | Pink Floyd |
%t | 曲目名称(截断) | Us and Them |
%n | 曲目编号 | 7 |
%l | 曲目时长(分钟) | 7:49 |
%r | 播放器重复状态 | R , - |
%s | 播放器随机状态 | S , - |
%p | 播放器播放状态 | Playing , Paused , Stopped |
默认格式为 "[%p: %a - %t ◷ %l %r%s]"
。
可以通过 smudge-player-status-truncate-length
变量配置截断字段显示的字符数。
(setq smudge-player-status-truncate-length 10) ; 默认值:15
以下播放器状态的文本指示符可以通过相应的变量进行配置:
播放器状态 | 变量 | 默认值 |
---|---|---|
播放中 | smudge-player-status-playing-text | "Playing" |
已暂停 | smudge-player-status-paused-text | "Paused" |
已停止 | smudge-player-status-stopped-text | "Stopped" |
重复开启 | smudge-player-status-repeating-text | "R" |
重复关闭 | smudge-player-status-not-repeating-text | "-" |
随机开启 | smudge-player-status-shuffling-text | "S" |
随机关闭 | smudge-player-status-not-shuffling-text | "-" |
可以通过运行 <kbd>M-x global-smudge-remote-mode</kbd> 在全局范围内启用此模式。
要搜索曲目,运行 <kbd>M-x smudge-track-search</kbd> 并输入你的查询。结果将显示在一个单独的缓冲区中,带有以下键绑定:
按键 | 描述 |
---|---|
<kbd>a</kbd> | 将歌曲添加到播放列表 |
<kbd>l</kbd> | 加载下一页结果(分页) |
<kbd>g</kbd> | 清除结果并重新加载第一页结果 |
<kbd>k</kbd> | 将光标下(或选中区域内)的歌曲添加到队列 |
<kbd>M-RET</kbd> | 在专辑上下文中播放光标下的歌曲 [1] |
[1] GNU/Linux 的 D-Bus 实现不支持传递上下文,所以只会播放光标下的歌曲
结果缓冲区默认加载 global-smudge-remote-mode
。
提示: 要自定义每页获取的项目数,只需更改变量 smudge-api-search-limit
:
;; 为了更好地兼容各个端点,不要使用大于 50 的值 (setq smudge-api-search-limit 50)
要让 Smudge 通过 URI 播放资源,运行 <kbd>M-x smudge-play-uri</kbd> 并输入资源 URI。
要创建新的播放列表,运行 <kbd>M-x smudge-create-playlist</kbd> 并按照提示操作。
目前无法向你拥有的播放列表添加歌曲,或从中删除歌曲。
要返回当前用户的播放列表,运行 <kbd>M-x smudge-my-playlists</kbd>,或运行 <kbd>M-x smudge-user-playlists</kbd> 列出指定用户的公开播放列表。要搜索匹配给定搜索条件的播放列表,运行 <kbd>M-x smudge-playlist-search 条件</kbd>。此外,运行 <kbd>M-x smudge-featured-playlists</kbd> 可以浏览 Spotify en_US 的精选播放列表。
更改以下变量以自定义精选播放列表端点的区域设置和地区:
;; 西班牙语(墨西哥) (setq smudge-api-locale "es_MX") (setq smudge-api-country "MX")
所有这些命令都会在单独的缓冲区中显示结果,并具有以下按键绑定:
按键 | 描述 |
---|---|
<kbd>l</kbd> | 加载下一页结果(分页) |
<kbd>g</kbd> | 清除结果并重新加载第一页结果 |
<kbd>f</kbd> | 关注光标下的播放列表 |
<kbd>u</kbd> | 取消关注光标下的播放列表 |
<kbd>t</kbd> | 列出光标下播放列表的歌曲 |
<kbd>M-RET</kbd> | 播放光标下的播放列表 |
打开播放列表的歌曲列表后,结果缓冲区中会有以下按键绑定:
按键 | 描述 |
---|---|
<kbd>a</kbd> | 将歌曲添加到播放列表 |
<kbd>r</kbd> | 从当前播放列表中删除歌曲 |
<kbd>l</kbd> | 加载下一页结果(分页) |
<kbd>g</kbd> | 清除结果并重新加载第一页结果 |
<kbd>f</kbd> | 关注当前播放列表 |
<kbd>u</kbd> | 取消关注当前播放列表 |
<kbd>k</kbd> | 将光标下(或选中区域内)的歌曲添加到队列 |
<kbd>M-RET</kbd> | 在播放列表上下文中播放光标下的歌曲 [1] |
两个缓冲区默认加载 global-smudge-remote-mode
。
[1] GNU/Linux 的 D-Bus 实现不支持传递上下文,所以只会播放光标下的歌曲
<kbd>M-x smudge-select-device</kbd> 将在单独的缓冲区中显示可用于播放的设备列表。
注意:使用此功能需要 Spotify 高级订阅。
打开设备列表后,结果缓冲区中会有以下按键绑定:
按键 | 描述 |
---|---|
<kbd>RET</kbd> | 将播放转移到光标下的设备 |
<kbd>g</kbd> | 重新加载设备列 表 |
默认情况下,播放器状态(播放、暂停、歌曲名称、时间、随机播放、重复等)显示在模式行中。如果你想在图形显示时将状态显示在标题栏中,可以设置以下内容:
(setq smudge-status-location 'title-bar)
有效值包括 'title-bar
、'modeline
和 nil
,其中 nil 完全关闭播放器状态显示。如果值设置为 title-bar
但你没有使用图形显示,播放器状态将显示在模式行中。
如果你想自定义现有标题栏文本和播放器状态之间的分隔符,可以设置以下内容,例如:
(setq smudge-title-bar-separator "----")
否则,默认为 4 个空格。
版权所有 (C) Daniel Fernandes Martins
根据 GPL v3 许可证分发。有关更多详细信息,请参阅 COPYING 文件。
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。