mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2026-03-27 03:14:56 +01:00
Add Spotify CLI
This commit is contained in:
parent
192de6bcff
commit
37c82833f1
2 changed files with 216 additions and 0 deletions
65
plugins/spotify/README.md
Executable file
65
plugins/spotify/README.md
Executable file
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Control Spotify at OS X Terminal
|
||||||
|
|
||||||
|
An AppleScript for controlling Spotify through a terminal:
|
||||||
|
|
||||||
|
```
|
||||||
|
The scenario for which it was originally designed is controlling Spotify,
|
||||||
|
which is playing on a Mac, via ssh, while working on a Linux machine
|
||||||
|
on the other side of the room.
|
||||||
|
```
|
||||||
|
|
||||||
|
Currently supported functions are: play/pause, next/previous
|
||||||
|
track, jumping in time, toggling shuffle/repeat and changing volume.
|
||||||
|
This pretty much covers everything the AppleScript hooks of Spotify
|
||||||
|
allow.
|
||||||
|
|
||||||
|
### Tested Platforms (Spotify 1.0.4.90)
|
||||||
|
* OS X Yosemite (10.10)
|
||||||
|
* OS X Mavericks (10.9)
|
||||||
|
* OS X Mountain Lion (10.8)
|
||||||
|
* OS X Lion (10.7)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The simplest way to install the script is to `clone` the repository,
|
||||||
|
`cd` into repository's directory, and run this command below
|
||||||
|
to make a symbolic link into `/usr/local/bin/`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ln -s $(pwd)/spotify /usr/local/bin/spotify
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
* To start Spotify playback, type `spotify start` or `spotify play`.
|
||||||
|
If you do this locally and Spotify is not running, it will start.
|
||||||
|
Remotely, Spotify will not start properly. Optionally, pass a Spotify URI as a second argument.
|
||||||
|
* To pause Spotify playback, type `spotify stop` or `spotify pause`.
|
||||||
|
* To toggle playback, type `spotify play/pause`.
|
||||||
|
* To go to the next track, type `spotify next`.
|
||||||
|
* To go to the previous track, type `spotify previous` or `spotify
|
||||||
|
prev`.
|
||||||
|
* To print information about the currently playing track,
|
||||||
|
type `spotify info`
|
||||||
|
* To jump to a particular time in the track, type `spotify jump N`,
|
||||||
|
where N is the track position in seconds.
|
||||||
|
* To fast forward, type `spotify forward N` where N is the number of
|
||||||
|
seconds to jump ahead.
|
||||||
|
* To rewind, type `spotify rewind N` where N is the number of
|
||||||
|
seconds to jump backwards.
|
||||||
|
* To change volume, type `spotify volume N` where N is a number between
|
||||||
|
0 and 100.
|
||||||
|
* To toggle shuffle, type `spotify shuffle`.
|
||||||
|
* To toggle repeat, type `spotify repeat`.
|
||||||
|
* To show a list of these commands, just type `spotify`.
|
||||||
|
|
||||||
|
### Over SSH
|
||||||
|
|
||||||
|
To enable the SSH server on OS X, go to Sharing in the System Preferences
|
||||||
|
and enable Remote Login. The Sharing screen will also then tell you the
|
||||||
|
command to use to connect to your Mac in the local network.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
You may use, adapt, modify, and etc. Any way you want.
|
||||||
151
plugins/spotify/spotify
Executable file
151
plugins/spotify/spotify
Executable file
|
|
@ -0,0 +1,151 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue