Rewrite

Rewrite

努力学习的前端小菜鸡(:з」∠)_
github
telegram

在dwm下使用自定义快捷键后台控制Cmus终端音乐播放器

自从发现Cmus这个终端下的音乐播放器后,就很少使用 GUI 的音乐播放器了.

通过cmus-remote还能远程控制,但是使用cmus-remote仍然需要先启动Cmus, 否则会提示cmus-remote: cmus is not running.
而启动 cmus 就需要打开终端,这不就和 GUI 的音乐播放器差不多了嘛,这对一个懒人来说是不能忍的,那么有什么办法能在启动Cmus的时候给放到后台去呢?
答案是tmux!
tmux是一个终端复用器,类似的还有screen等.

怎么做?#

我们先整理下思路
首先我们想用cmus-remote来控制Cmus, 但是需要先启动Cmus, 那么我们就需要想一个办法让Cmus在后台启动,因为我们不需要看它的界面操作,这个过程我们可以用tmux来完成.

流程如下:

  1. tmux创建一个会话
  2. 在会话中启动Cmus
  3. 把会话放到后台

按照正常思路是行不通的,因为我们需要整个过程不可感知,完全后台操作.

那么我们需要:

  1. 后台创建一个tmux会话
  2. 把命令传给这个后台会话用来启动Cmus

tmux创建后台会话的命令如下:

tmux new -s 会话名 -d

tmux传递命令的命令如下:

tmux send-keys -t 会话名 "传递的命令"

那么整个过程写到脚本里就是两行代码:

tmux new -s cmus -d			# 创建一个名为cmus的tmux会话
tmux send-keys -t cmus "cmus" C-m	# 向名为cmus的tmux会话发送cmus命令并回车

# 注意发送的命令如果需要回车执行, 需要在后面加一个 C-m ,表示一个回车

启动后自然需要播放,那么我们可以在启动后再用cmus-remote控制Cmus播放就行:

tmux new -s cmus -d
tmux send-keys -t cmus "cmus" C-m
sleep 1s
cmus-remote --play

这里加sleep是为了防止 cmus 还没有启动完,cmus-remote就执行了,导致音乐没有播放.

能启动了自然要能关闭,这里就直接上代码:

tmux send-keys -t cmus "cqy"		#向名为cmus的tmux会话发送cqy用来退出cmus
# c代表暂停,q代表退出,y是确认, 因为不需要回车所以不用加 C-m
tmux kill-session -t cmus		#干掉名为cmus的tmux会话

当然也可以简单粗暴的直接干掉tmux会话...

成品#

把上面两个部分写成函数,同时用 if 判断传入的参数就可以决定触发哪个了,成品如下:

play() {
  tmux new -s cmus -d
  tmux send-keys -t cmus "cmus" C-m
  sleep 1s
  cmus-remote --play
}

quit() {
  tmux send-keys -t cmus "cqy"
  tmux kill-session -t cmus
}

if [ $1 == "play" ];then
  play
elif [ $1 == "quit" ];then
  quit
else
  echo "指令错误!"
fi

cmus-remote 命令#

cmus-remote --help可以查看帮助,或者直接man也可以.
这里列一些常用的命令:

# 播放
cmus-remote --play

cmus-remote -p
# 暂停
cmus-remote --pause

cmus-remote --u
# 上一首
cmus-remote --prev

cmus-remote -r
# 下一首
cmus-remote --next

cmus-remote -n

dwm 按键绑定#

用 dwm 的应该都会,我就不水了.

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。