mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-03-27 03:14:56 +01:00
158 lines
6.2 KiB
Bash
Executable file
158 lines
6.2 KiB
Bash
Executable file
# ------------------------------------------------------------------------------
|
|
# FILE: spotify.plugin.zsh
|
|
# DESCRIPTION: oh-my-zsh Spotify plugin file. Spotify controls at OS X Terminal.
|
|
# AUTHOR: Rafael Corrêa Gomes (rafaelcgstz at gmail dot com)
|
|
# FORK: https://github.com/dronir/SpotifyControl
|
|
# VERSION: 1.0.0
|
|
# ------------------------------------------------------------------------------
|
|
|
|
#!/usr/bin/env osascript
|
|
on run argv
|
|
if count of argv is equal to 0 then
|
|
set msg to "Use the following commands:\n"
|
|
set msg to msg & " start, play [uri] - Start playback / play uri\n"
|
|
set msg to msg & " pause, stop - Stop playback\n"
|
|
set msg to msg & " play/pause - Toggle playback\n"
|
|
set msg to msg & " next - Next track\n"
|
|
set msg to msg & " previous, prev - Previous track\n"
|
|
set msg to msg & " info - Print track info\n"
|
|
set msg to msg & " jump N - Jump to N seconds in the song\n"
|
|
set msg to msg & " forward N - Jump N seconds forwards\n"
|
|
set msg to msg & " rewind N - Jump N seconds backwards\n"
|
|
set msg to msg & " shuffle - Toggle shuffle\n"
|
|
set msg to msg & " repeat - Toggle repeat\n"
|
|
set msg to msg & " volume N - Set Volume to N (0...100)\n"
|
|
return msg
|
|
end if
|
|
set command to item 1 of argv
|
|
using terms from application "Spotify"
|
|
set info to "Error."
|
|
if command is equal to "play" or command is equal to "start" then
|
|
if count of argv is equal to 1 then
|
|
tell application "Spotify" to play
|
|
else
|
|
set uri to item 2 of argv
|
|
tell application "Spotify" to play track uri
|
|
end if
|
|
else if command is equal to "play/pause" then
|
|
tell application "Spotify" to playpause
|
|
return "Toggled."
|
|
|
|
else if command is equal to "pause" or command is equal to "stop" then
|
|
tell application "Spotify" to pause
|
|
return "Paused."
|
|
|
|
else if command is equal to "next" then
|
|
tell application "Spotify" to next track
|
|
|
|
else if command is equal to "previous" or command is equal to "prev" then
|
|
tell application "Spotify" to previous track
|
|
|
|
else if command is equal to "jump"
|
|
set jumpTo to item 2 of argv as real
|
|
tell application "Spotify"
|
|
set tMax to duration of current track
|
|
if jumpTo > tMax
|
|
return "Can't jump past end of track."
|
|
else if jumpTo < 0
|
|
return "Can't jump past start of track."
|
|
end if
|
|
set nM to round (jumpTo / 60) rounding down
|
|
set nS to round (jumpTo mod 60) rounding down
|
|
set newTime to nM as text & "min " & nS as text & "s"
|
|
set player position to jumpTo
|
|
return "Jumped to " & newTime
|
|
end tell
|
|
|
|
else if command is equal to "forward"
|
|
set jump to item 2 of argv as real
|
|
tell application "Spotify"
|
|
set now to player position / 1000
|
|
set tMax to duration of current track
|
|
set jumpTo to now + jump
|
|
if jumpTo > tMax
|
|
return "Can't jump past end of track."
|
|
else if jumpTo < 0
|
|
set jumpTo to 0
|
|
end if
|
|
set nM to round (jumpTo / 60) rounding down
|
|
set nS to round (jumpTo mod 60) rounding down
|
|
set newTime to nM as text & "min " & nS as text & "s"
|
|
set player position to jumpTo
|
|
return "Jumped to " & newTime
|
|
end tell
|
|
|
|
else if command is equal to "rewind"
|
|
set jump to item 2 of argv as real
|
|
tell application "Spotify"
|
|
set now to player position / 1000
|
|
set tMax to duration of current track
|
|
set jumpTo to now - jump
|
|
if jumpTo > tMax
|
|
return "Can't jump past end of track."
|
|
else if jumpTo < 0
|
|
set jumpTo to 0
|
|
end if
|
|
set nM to round (jumpTo / 60) rounding down
|
|
set nS to round (jumpTo mod 60) rounding down
|
|
set newTime to nM as text & "min " & nS as text & "s"
|
|
set player position to jumpTo
|
|
return "Jumped to " & newTime
|
|
end tell
|
|
|
|
else if command is equal to "volume" then
|
|
set newVolume to item 2 of argv as real
|
|
if newVolume < 0 then set newVolume to 0
|
|
if newVolume > 100 then set newVolume to 100
|
|
tell application "Spotify"
|
|
set sound volume to newVolume
|
|
end tell
|
|
return "Changed volume to " & newVolume
|
|
|
|
else if command is equal to "shuffle" then
|
|
tell application "Spotify"
|
|
set shuffling to not shuffling
|
|
return "Shuffle is now " & shuffling
|
|
end tell
|
|
|
|
else if command is equal to "repeat" then
|
|
tell application "Spotify"
|
|
set repeating to not repeating
|
|
return "Repeat is now " & repeating
|
|
end tell
|
|
|
|
else if command is equal to "info" then
|
|
tell application "Spotify"
|
|
set myTrack to name of current track
|
|
set myArtist to artist of current track
|
|
set myAlbum to album of current track
|
|
set tM to round (duration of current track / 60) rounding down
|
|
set tS to duration of current track mod 60
|
|
set myTime to tM as text & "min " & tS as text & "s"
|
|
set nM to round (player position / 60) rounding down
|
|
set nS to round (player position mod 60) rounding down
|
|
set nowAt to nM as text & "min " & nS as text & "s"
|
|
set info to "Current track:"
|
|
set info to info & "\n Artist: " & myArtist
|
|
set info to info & "\n Track: " & myTrack
|
|
set info to info & "\n Album: " & myAlbum
|
|
set info to info & "\n URI: " & spotify url of current track
|
|
set info to info & "\n Duration: " & mytime & " ("& duration of current track & " seconds)"
|
|
set info to info & "\n Now at: " & nowAt
|
|
set info to info & "\n Player: " & player state
|
|
set info to info & "\n Volume: " & sound volume
|
|
if shuffling then set info to info & "\n Shuffle is on."
|
|
if repeating then set info to info & "\n Repeat is on."
|
|
end tell
|
|
return info
|
|
end if
|
|
|
|
tell application "Spotify"
|
|
set shuf to ""
|
|
if shuffling then set shuf to "\n[shuffle on]"
|
|
if player state as text is equal to "playing"
|
|
return "Now playing: " & artist of current track & " - " & name of current track & shuf
|
|
end if
|
|
end tell
|
|
end using terms from
|
|
end run
|