mirror of
https://github.com/powerline/powerline.git
synced 2025-07-26 23:35:04 +02:00
Merge branch 'feature/tmux' into develop
Closes #41. Closes #43. Closes #44.
This commit is contained in:
commit
28aaed0c77
@ -4,12 +4,22 @@
|
|||||||
|
|
||||||
Run with `tmux -f tmux.conf`.
|
Run with `tmux -f tmux.conf`.
|
||||||
'''
|
'''
|
||||||
|
import argparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
|
||||||
|
|
||||||
from powerline.core import Powerline
|
from powerline.core import Powerline
|
||||||
|
|
||||||
pl = Powerline('tmux')
|
parser = argparse.ArgumentParser(description='powerline outputter')
|
||||||
print(pl.renderer.render('n').encode('utf-8'))
|
parser.add_argument('side', nargs='?', default='all', choices=('all', 'left', 'right'))
|
||||||
|
parser.add_argument('--ext', default='tmux')
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
args = parser.parse_args()
|
||||||
|
pl = Powerline(args.ext)
|
||||||
|
segments = pl.renderer.get_theme().get_segments()
|
||||||
|
if args.side != 'all':
|
||||||
|
segments = [s for s in segments if s['side'] == args.side]
|
||||||
|
print(pl.renderer.render('n', segments=segments).encode('utf-8'))
|
||||||
|
@ -2,4 +2,9 @@ set-option -g status on
|
|||||||
set-option -g status-interval 2
|
set-option -g status-interval 2
|
||||||
set-option -g status-utf8 on
|
set-option -g status-utf8 on
|
||||||
set-option -g status-left-length 100
|
set-option -g status-left-length 100
|
||||||
set-option -g status-left "#(./pl.py)"
|
set-option -g status-left "#(./pl.py left)"
|
||||||
|
set-option -g status-right-length 100
|
||||||
|
set-option -g status-right "#(./pl.py right)"
|
||||||
|
set-option -g status-justify "centre"
|
||||||
|
set-option -g status-bg "colour235"
|
||||||
|
set-option -g status-fg "colour249"
|
||||||
|
29
powerline/colorschemes/tmux_default.json
Normal file
29
powerline/colorschemes/tmux_default.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "Default color scheme for terminal prompts",
|
||||||
|
"colors": {
|
||||||
|
"black": 16,
|
||||||
|
"white": 231,
|
||||||
|
|
||||||
|
"darkestblue": 24,
|
||||||
|
"darkblue": 31,
|
||||||
|
"mediumblue": 38,
|
||||||
|
"brightblue": 117,
|
||||||
|
"brightestblue": 153,
|
||||||
|
|
||||||
|
"green": 148,
|
||||||
|
"yellow": 220,
|
||||||
|
"red": 202
|
||||||
|
},
|
||||||
|
"groups": {
|
||||||
|
"user": { "fg": "white", "bg": "mediumblue", "attr": ["bold"] },
|
||||||
|
"date": { "fg": "white", "bg": "mediumblue" },
|
||||||
|
"forecast": { "fg": "brightestblue", "bg": "darkblue" },
|
||||||
|
"external_ip": { "fg": "brightestblue", "bg": "darkblue" },
|
||||||
|
"system_load": { "fg": "brightblue", "bg": "darkestblue" },
|
||||||
|
"system_load_good": { "fg": "green", "bg": "darkestblue" },
|
||||||
|
"system_load_bad": { "fg": "yellow", "bg": "darkestblue" },
|
||||||
|
"system_load_ugly": { "fg": "red", "bg": "darkestblue" },
|
||||||
|
"uptime": { "fg": "brightblue", "bg": "darkestblue" }
|
||||||
|
},
|
||||||
|
"mode_translations": { }
|
||||||
|
}
|
@ -17,11 +17,11 @@
|
|||||||
"theme": "default"
|
"theme": "default"
|
||||||
},
|
},
|
||||||
"tmux": {
|
"tmux": {
|
||||||
"colorscheme": "default",
|
"colorscheme": "tmux_default",
|
||||||
"theme": "default"
|
"theme": "default"
|
||||||
},
|
},
|
||||||
"vim": {
|
"vim": {
|
||||||
"colorscheme": "default",
|
"colorscheme": "vim_default",
|
||||||
"theme": "default",
|
"theme": "default",
|
||||||
"local_themes": {
|
"local_themes": {
|
||||||
"help": "help"
|
"help": "help"
|
||||||
|
@ -2,10 +2,94 @@
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from powerline.lib.memoize import memoize
|
||||||
|
|
||||||
def user_name():
|
# Weather condition code descriptions available at http://developer.yahoo.com/weather/#codes
|
||||||
user_name = os.environ.get('USER')
|
weather_conditions_codes = {
|
||||||
return {
|
u'〇': [25, 34],
|
||||||
'contents': user_name,
|
u'⚑': [24],
|
||||||
'highlight': 'user_name' if user_name != 'root' else ['user_name_root', 'user_name'],
|
u'☔': [5, 6, 8, 9, 10, 11, 12, 35, 40, 45, 47],
|
||||||
|
u'☁': range(26, 30) + [44],
|
||||||
|
u'❅': [7] + range(13, 18) + [41, 42, 43, 46],
|
||||||
|
u'☈': range(0, 4) + range(37, 39),
|
||||||
|
u'〰': range(19, 23),
|
||||||
|
u'☼': [32, 36],
|
||||||
|
u'☾': [31, 33],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def date(format='%Y-%m-%d'):
|
||||||
|
from datetime import datetime
|
||||||
|
return datetime.now().strftime(format)
|
||||||
|
|
||||||
|
|
||||||
|
@memoize(600, persistent=True)
|
||||||
|
def external_ip(query_url='http://icanhazip.com/'):
|
||||||
|
import urllib2
|
||||||
|
try:
|
||||||
|
return urllib2.urlopen(query_url).read().strip()
|
||||||
|
except urllib2.HTTPError:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
def system_load(format='{avg[0]:.1f}, {avg[1]:.1f}, {avg[2]:.1f}'):
|
||||||
|
from multiprocessing import cpu_count
|
||||||
|
averages = os.getloadavg()
|
||||||
|
normalized = averages[1] / cpu_count()
|
||||||
|
if normalized < 1:
|
||||||
|
gradient = 'system_load_good'
|
||||||
|
elif normalized < 2:
|
||||||
|
gradient = 'system_load_bad'
|
||||||
|
else:
|
||||||
|
gradient = 'system_load_ugly'
|
||||||
|
return {
|
||||||
|
'contents': format.format(avg=averages),
|
||||||
|
'highlight': [gradient, 'system_load']
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def uptime(format='{days:02d}d {hours:02d}h {minutes:02d}m'):
|
||||||
|
# TODO: make this work with operating systems without /proc/uptime
|
||||||
|
try:
|
||||||
|
with open('/proc/uptime', 'r') as f:
|
||||||
|
seconds = int(float(f.readline().split()[0]))
|
||||||
|
minutes, seconds = divmod(seconds, 60)
|
||||||
|
hours, minutes = divmod(minutes, 60)
|
||||||
|
days, hours = divmod(hours, 24)
|
||||||
|
|
||||||
|
return format.format(days=int(days), hours=hours, minutes=minutes)
|
||||||
|
except IOError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
@memoize(600, persistent=True)
|
||||||
|
def forecast(unit='c', location_query=None):
|
||||||
|
import json
|
||||||
|
import urllib
|
||||||
|
import urllib2
|
||||||
|
|
||||||
|
if not location_query:
|
||||||
|
try:
|
||||||
|
location = json.loads(urllib2.urlopen('http://freegeoip.net/json/' + external_ip()).read())
|
||||||
|
location_query = ','.join([location['city'], location['region_name'], location['country_name']])
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
query_data = {
|
||||||
|
'q':
|
||||||
|
'use "http://github.com/yql/yql-tables/raw/master/weather/weather.bylocation.xml" as we;'
|
||||||
|
'select * from we where location="{0}" and unit="{1}"'.format(location_query, unit),
|
||||||
|
'format': 'json'
|
||||||
|
}
|
||||||
|
url = 'http://query.yahooapis.com/v1/public/yql?' + urllib.urlencode(query_data)
|
||||||
|
response = json.loads(urllib2.urlopen(url).read())
|
||||||
|
|
||||||
|
condition = response['query']['results']['weather']['rss']['channel']['item']['condition']
|
||||||
|
condition_code = int(condition['code'])
|
||||||
|
icon = u'〇'
|
||||||
|
|
||||||
|
for icon, codes in weather_conditions_codes.items():
|
||||||
|
if condition_code in codes:
|
||||||
|
break
|
||||||
|
|
||||||
|
return u'{0} {1}°{2}'.format(icon, condition['temp'], unit.upper())
|
||||||
|
@ -2,7 +2,35 @@
|
|||||||
"segments": {
|
"segments": {
|
||||||
"left": [
|
"left": [
|
||||||
{
|
{
|
||||||
"name": "user_name"
|
"module": "powerline.ext.terminal.segments",
|
||||||
|
"name": "user"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "external_ip",
|
||||||
|
"before": "ⓦ "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "uptime",
|
||||||
|
"before": "⇑ "
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"right": [
|
||||||
|
{
|
||||||
|
"name": "system_load"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "forecast"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "date",
|
||||||
|
"args": {"format": "%a"}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "date"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "date",
|
||||||
|
"args": {"format": "%H:%M"}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user