diff options
| author | Camil Staps | 2019-12-11 18:06:38 +0100 | 
|---|---|---|
| committer | Camil Staps | 2019-12-11 18:13:48 +0100 | 
| commit | 4a066a06f6052be083e37c74222c442c7a33bfa3 (patch) | |
| tree | a5dccc00c93f136cdaa36338a6d605a33f7424b6 | |
| parent | Use a locally built code generator in install_clean (diff) | |
Move cmus-remote handling from i3status fork to i3status.py, to remove dependency on fork
| -rw-r--r-- | i3/.i3status.conf | 5 | ||||
| -rwxr-xr-x | i3/bin/i3status.py | 51 | 
2 files changed, 48 insertions, 8 deletions
| diff --git a/i3/.i3status.conf b/i3/.i3status.conf index 1163e40..0b7c09f 100644 --- a/i3/.i3status.conf +++ b/i3/.i3status.conf @@ -4,7 +4,6 @@ general {      output_format = "i3bar"  } -order += "cmd nowplaying"  order += "volume master"  order += "wireless wlp2s0"  order += "battery 0" @@ -20,10 +19,6 @@ volume master {      mixer_idx = 0  } -cmd nowplaying { -    cmd = "cmus-remote -Q | grep '^tag \\(artist\\|album\\|title\\) ' | sort | cut -d' ' -f 3- | tr '\\n' '\t' | awk 'BEGIN { FS = \"\\t\" } ; { print \"♪: \" $3 \" (\" $1 \", \" $2 \")\" }'; echo -n ' '" -} -  wireless wlp2s0 {      format_up = "%essid: %quality, %bitrate (%ip)"      format_down = "wlan0 down" diff --git a/i3/bin/i3status.py b/i3/bin/i3status.py index ce562b1..1a2d166 100755 --- a/i3/bin/i3status.py +++ b/i3/bin/i3status.py @@ -1,7 +1,7 @@  #!/usr/bin/env python  import json  from select import select -from subprocess import Popen, PIPE +from subprocess import check_output, Popen, PIPE  import sys  def remove_empty_outputs(obj): @@ -33,6 +33,46 @@ def parse_kbdlayout(s):          color = '#cccccc'      return [{'full_text': s, 'color': color}] +def print_album_and_artist(info, parentheses): +    if 'album' in info: +        if 'artist' in info: +            if parentheses: +                return info['album'] + ' (' + info['artist'] + ')' +            else: +                return info['album'] + ', ' + info['artist'] +        else: +            return info['album'] +    elif 'artist' in info: +        return info['artist'] +    else: +        return None + +def get_cmus_song(): +    result = check_output(['cmus-remote', '-Q']) +    info = {} +    for line in result.split('\n'): +        if line[:10] == 'tag title ': +            info['title'] = line[10:] +        elif line[:10] == 'tag album ': +            info['album'] = line[10:] +        elif line[:11] == 'tag artist ': +            info['artist'] = line[11:] + +    album_and_artist = print_album_and_artist(info, 'title' not in info) +    text = None +    if album_and_artist is None: +        if 'title' in info: +            text = info['title'] +    elif 'title' in info: +        text = info['title'] + ' (' + album_and_artist + ')' +    else: +        text = album_and_artist + +    if text is None: +        return [] +    else: +        return [{'full_text': text}] +  def merge_status_items(*args):      return [item for sublist in args for item in sublist] @@ -47,7 +87,7 @@ if __name__ == '__main__':      sys.stdout.write(i3stat.stdout.readline())      sys.stdout.write(i3stat.stdout.readline()) -    stat, kbd, clg = [], [], [] +    stat, kbd, cmus = [], [], []      try:          stdouts = [p.stdout for p in [i3stat, kbdlayout]]          while True: @@ -58,8 +98,13 @@ if __name__ == '__main__':                      kbd = parse_kbdlayout(line)                  elif f == i3stat.stdout:                      stat = parse_i3stat(line) + +            try: +                cmus = get_cmus_song() +            except: +                cmus = [] -            print_i3stat(merge_status_items(kbd, clg, stat)) +            print_i3stat(merge_status_items(kbd, cmus, stat))      except Exception, e:          print(e) | 
