👉 [[https://github.com/sponsors/xenodium][通过GitHub Sponsors支持这项工作]]
- Ready Player模式
一个轻量级的主要模式,用于在Emacs缓冲区中打开媒体(音频/视频)文件。
#+HTML:
#+HTML:
- 安装 / 设置
这个包可在MELPA上获得:
#+begin_src emacs-lisp :lexical no (use-package ready-player :ensure t :config (ready-player-mode +1)) #+end_src
要自定义支持的媒体文件,请在切换ready-player-mode之前设置ready-player-supported-media。
- 切换识别
您可以通过M-x ready-player-mode交互式地打开或关闭媒体识别。
- 外部依赖
** 播放
ready-player-mode依赖命令行工具来播放媒体。
默认情况下,ready-player-mode会尝试使用mpv、vlc、ffplay或mplayer(按此顺序)。可以根据您的偏好自定义ready-player-open-playback-commands。
使用您喜欢的方法安装其中任何一个。
在macOS上:
#+begin_src sh brew install mpv #+end_src
** 元数据
元数据使用ffprobe提取,它与ffmpeg捆绑在一起。
使用您喜欢的方法安装。
在macOS上:
#+begin_src sh brew install ffmpeg #+end_src
** 缩略图
ready-player-mode优先使用ffmpegthumbnailer生成缩略图,但如果没有它则会回退到ffmpeg。
使用您喜欢的方法安装。
在macOS上:
#+begin_src sh brew install ffmpegthumbnailer #+end_src
- 自定义
** 视频与音频
如果您想使用不同的工具来播放视频和音频,可以使用ready-player-open-playback-commands来实现,例如:
#+begin_src emacs-lisp :lexical no (setq ready-player-open-playback-commands '((ready-player-is-audio-p "mpg123") (ready-player-is-video-p "mpv"))) #+end_src
#+BEGIN_SRC emacs-lisp :results table :colnames '("自定义变量" "描述") :exports results
(let ((rows))
(mapatoms
(lambda (symbol)
(when (and (string-match "^ready-player"
(symbol-name symbol))
(not (string-match "--" (symbol-name symbol)))
(or (custom-variable-p symbol)
(boundp symbol)))
(push (,symbol ,(car (split-string (or (get (indirect-variable symbol) 'variable-documentation) (get symbol 'variable-documentation) "") "\n"))) rows)))) rows) #+END_SRC #+RESULTS: | 自定义变量 | 描述 | |-----------------------------------------------------------+-------------------------------------------------------| | ready-player-supported-media | 支持的媒体类型。 | | ready-player-thumbnail-max-pixel-height | 缩略图最大像素高度。 | | ready-player-supported-video | 支持的视频媒体。 | | ready-player-shuffle | 在当前目录内随机选择下一个媒体项目。 | | ready-player-mode-hook | 进入或离开
ready-player-mode'时运行的钩子。 |
| ready-player-play-icon | 播放按钮图标字符串,例如:"⏵"。 |
| ready-player-previous-icon | 上一个按钮图标字符串,例如:"<<"。 |
| ready-player-multi-buffer | 非空时,启用打开多个缓冲区进行并行播放。 |
| ready-player-cache-metadata | 非空时,缓存元数据。 |
| ready-player-cache-thumbnails | 非空时,缓存缩略图。 |
| ready-player-major-mode-hook | 进入Ready Player模式后运行的钩子。 |
| ready-player-supported-audio | 支持的音频媒体。 |
| ready-player-mode | 如果Ready-Player模式启用,则为非空。 |
| ready-player-stop-icon | 停止图标字符串,例如:"■"。 |
| ready-player-shuffle-icon | 随机播放图标字符串,例如:"⤮"。 |
| ready-player-repeat | 如果当前目录中还有更多媒体,则继续播放。 |
| ready-player-autoplay | 非空时,媒体文件打开时自动开始播放。 |
| ready-player-open-externally-icon | 外部打开按钮图标字符串,例如:"➦"。 |
| ready-player-show-thumbnail | 非空时,如果可用则显示文件的缩略图。 |
| ready-player-hide-modeline | 如果非空,则隐藏缓冲区中的模式行。 |
| ready-player-next-icon | 下一个按钮图标字符串,例如:">>"。 |
| ready-player-major-mode-map | ready-player'的键盘映射。 | | ready-player-autoplay-icon | 自动播放图标字符串,例如:"⚡"。 | | ready-player-open-playback-commands | 尝试用于播放的命令行工具。 | | ready-player-major-mode-syntax-table |
ready-player-major-mode'的语法表。 |
| ready-player-display-dired-playback-buffer-display-action | 选择如何显示关联的播放`dired'缓冲区。 |
| ready-player-repeat-icon | 重复播放图标字符串,例如:"⇆"。 |
** 按钮(macOS SF Symbols)
默认情况下,如果可用,=ready-player-mode= 将尝试使用 macOS [[https://developer.apple.com/sf-symbols/][SF Symbols]] 作为 =ready-player-play-icon=、=ready-player-stop-icon= 和 =ready-player-open-externally-icon=。
你需要在 Emacs 中[[https://lmno.lol/alvaro/emacs-insert-and-render-sf-symbols][启用 SF 符号渲染]] /(在加载 =ready-player.el= 之前)/。
#+begin_src emacs-lisp :lexical no (when (memq system-type '(darwin)) (set-fontset-font t nil "SF Pro Display" nil 'append)) #+end_src
** 按钮(Linux)
如果 macOS SF Symbols 不可用,则使用 =<< ⏵ ■ >> ➦ ⇆= 作为备选。这些可以自定义(参见所有图标变量),但可能不是最佳选择。欢迎提供建议!
- 命令
#+BEGIN_SRC emacs-lisp :results table :colnames '("命令" "描述") :exports results
(let ((rows))
(mapatoms
(lambda (symbol)
(when (and (string-match "^ready-player"
(symbol-name symbol))
(commandp symbol))
(push (,(string-join (seq-filter (lambda (symbol) (not (string-match "menu" symbol))) (mapcar (lambda (keys) (key-description keys)) (or (where-is-internal (symbol-function symbol) comint-mode-map nil nil (command-remapping 'comint-next-input)) (where-is-internal symbol ready-player-major-mode-map nil nil (command-remapping symbol)) (where-is-internal (symbol-function symbol) ready-player-major-mode-map nil nil (command-remapping symbol))))) " 或 ") ,(symbol-name symbol) ,(car (split-string (or (documentation symbol t) "") "\n"))) rows)))) rows) #+END_SRC #+结果: | d | ready-player-view-dired-playback-buffer | 查看关联的
dired' 播放缓冲区。 |
| | ready-player-set-album-artwork | 选择图片并设置为专辑封面。 |
| | ready-player-lookup-song | 在 Discogs 上查找当前歌曲。 |
| u | ready-player-unmark-dired-file | 在相应的 dired' 缓冲区中取消标记当前文件。 | | | ready-player-stop | 停止媒体播放。 | | SPC | ready-player-toggle-play-stop | 切换媒体播放/停止。 | | | ready-player-play | 开始媒体播放。 | | g | ready-player-reload-buffer | 从文件重新加载媒体。 | | o 或 e | ready-player-open-externally | 在默认外部程序中打开访问的文件。 | | | ready-player-toggle-autoplay | 切换自动播放设置。 | | | ready-player-toggle-modeline | 切换显示模式行。 | | | ready-player-mode | 切换 Ready Player 模式媒体文件识别。 | | | ready-player-version | 显示 Ready Player Mode 版本。 | | | ready-player-toggle-shuffle | 切换随机播放设置。 | | n | ready-player-next | 打开同一目录中的下一个媒体文件。 | | p | ready-player-previous | 打开同一目录中的上一个媒体文件。 | | q | ready-player-quit | 退出
ready-player-major-mode' 窗口并关闭缓冲区。 |
| | ready-player-major-mode | 预览和播放媒体文件的主要模式。 |
| | ready-player-toggle-repeat | 切换重复播放设置。 |
| TAB | ready-player-next-button | 导航到下一个按钮。 |
| dired' 缓冲区中标记当前文件。 | | | ready-player-load-dired-playback-buffer | 打开
dired' 缓冲区。如果 DIRED-BUFFER 为空,则提供选择选项。 |
👉 [[https://github.com/sponsors/xenodium][通过 GitHub Sponsors 支持这项工作]]