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 的應該都會,我就不水了。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。