Merge remote-tracking branch 'zyx-i/colors' into develop
This commit is contained in:
commit
7a096f6c9d
|
@ -77,6 +77,22 @@
|
|||
"green_yellow_red": [
|
||||
[190, 184, 178, 172, 166, 160],
|
||||
["8ae71c", "8ce71c", "8fe71c", "92e71c", "95e71d", "98e71d", "9ae71d", "9de71d", "a0e71e", "a3e71e", "a6e71e", "a8e71e", "abe71f", "aee71f", "b1e71f", "b4e71f", "b6e720", "b9e720", "bce720", "bfe720", "c2e821", "c3e721", "c5e621", "c7e521", "c9e522", "cbe422", "cde322", "cfe222", "d1e223", "d3e123", "d5e023", "d7df23", "d9df24", "dbde24", "dddd24", "dfdc24", "e1dc25", "e3db25", "e5da25", "e7d925", "e9d926", "e9d626", "e9d426", "e9d126", "e9cf27", "e9cc27", "e9ca27", "e9c727", "e9c528", "e9c228", "e9c028", "e9bd28", "e9bb29", "e9b829", "e9b629", "e9b329", "e9b12a", "e9ae2a", "e9ac2a", "e9a92a", "eaa72b", "eaa42b", "eaa22b", "ea9f2b", "ea9d2c", "ea9b2c", "ea982c", "ea962c", "ea942d", "ea912d", "ea8f2d", "ea8d2d", "ea8a2e", "ea882e", "ea862e", "ea832e", "ea812f", "ea7f2f", "ea7c2f", "ea7a2f", "eb7830", "eb7530", "eb7330", "eb7130", "eb6f31", "eb6c31", "eb6a31", "eb6831", "eb6632", "eb6332", "eb6132", "eb5f32", "eb5d33", "eb5a33", "eb5833", "eb5633", "eb5434", "eb5134", "eb4f34", "eb4d34", "ec4b35"]
|
||||
],
|
||||
"green_yellow_orange_red": [
|
||||
[2, 3, 9, 1],
|
||||
["719e07", "739d06", "759c06", "779c06", "799b06", "7b9a05", "7d9a05", "7f9905", "819805", "839805", "859704", "879704", "899604", "8b9504", "8d9504", "8f9403", "919303", "949303", "969203", "989102", "9a9102", "9c9002", "9e9002", "a08f02", "a28e01", "a48e01", "a68d01", "a88c01", "aa8c01", "ac8b00", "ae8a00", "b08a00", "b28900", "b58900", "b58700", "b68501", "b78302", "b78102", "b87f03", "b97d04", "b97b04", "ba7905", "bb7806", "bb7606", "bc7407", "bd7208", "bd7008", "be6e09", "bf6c0a", "bf6a0a", "c0690b", "c1670c", "c1650c", "c2630d", "c3610e", "c35f0e", "c45d0f", "c55b10", "c55a10", "c65811", "c75612", "c75412", "c85213", "c95014", "c94e14", "ca4c15", "cb4b16", "cb4a16", "cc4917", "cc4818", "cd4719", "cd4719", "ce461a", "ce451b", "cf441c", "cf441c", "d0431d", "d0421e", "d1411f", "d1411f", "d24020", "d23f21", "d33e22", "d33e22", "d43d23", "d43c24", "d53b25", "d53b25", "d63a26", "d63927", "d73828", "d73828", "d83729", "d8362a", "d9352b", "d9352b", "da342c", "da332d", "db322e", "dc322f"]
|
||||
],
|
||||
"yellow_red": [
|
||||
[220, 178, 172, 166, 160],
|
||||
["ffd700", "fdd500", "fbd300", "fad200", "f8d000", "f7cf00", "f5cd00", "f3cb00", "f2ca00", "f0c800", "efc700", "edc500", "ebc300", "eac200", "e8c000", "e7bf00", "e5bd00", "e3bb00", "e2ba00", "e0b800", "dfb700", "ddb500", "dbb300", "dab200", "d8b000", "d7af00", "d7ad00", "d7ab00", "d7aa00", "d7a800", "d7a700", "d7a500", "d7a300", "d7a200", "d7a000", "d79f00", "d79d00", "d79b00", "d79a00", "d79800", "d79700", "d79500", "d79300", "d79200", "d79000", "d78f00", "d78d00", "d78b00", "d78a00", "d78800", "d78700", "d78500", "d78300", "d78200", "d78000", "d77f00", "d77d00", "d77b00", "d77a00", "d77800", "d77700", "d77500", "d77300", "d77200", "d77000", "d76f00", "d76d00", "d76b00", "d76a00", "d76800", "d76700", "d76500", "d76300", "d76200", "d76000", "d75f00", "d75b00", "d75700", "d75300", "d74f00", "d74c00", "d74800", "d74400", "d74000", "d73c00", "d73900", "d73500", "d73100", "d72d00", "d72900", "d72600", "d72200", "d71e00", "d71a00", "d71600", "d71300", "d70f00", "d70b00", "d70700"]
|
||||
],
|
||||
"yellow_orange_red": [
|
||||
[3, 9, 1],
|
||||
["b58900", "b58700", "b58600", "b68501", "b68401", "b78202", "b78102", "b88003", "b87f03", "b87d03", "b97c04", "b97b04", "ba7a05", "ba7805", "bb7706", "bb7606", "bc7507", "bc7307", "bc7207", "bd7108", "bd7008", "be6e09", "be6d09", "bf6c0a", "bf6b0a", "c06a0b", "c0680b", "c0670b", "c1660c", "c1650c", "c2630d", "c2620d", "c3610e", "c3600e", "c35e0e", "c45d0f", "c45c0f", "c55b10", "c55910", "c65811", "c65711", "c75612", "c75412", "c75312", "c85213", "c85113", "c94f14", "c94e14", "ca4d15", "ca4c15", "cb4b16", "cb4a16", "cb4a17", "cc4917", "cc4918", "cc4818", "cd4819", "cd4719", "cd471a", "ce461a", "ce461b", "ce451b", "cf451c", "cf441c", "cf441d", "d0431d", "d0431e", "d0421e", "d1421f", "d1411f", "d14120", "d24020", "d24021", "d23f21", "d33f22", "d33e22", "d33e23", "d43d23", "d43d24", "d43c24", "d53c25", "d53b25", "d53b26", "d63a26", "d63a27", "d63927", "d73928", "d73828", "d73829", "d83729", "d8372a", "d8362a", "d9362b", "d9352b", "d9352c", "da342c", "da342d", "da332d", "db332e"]
|
||||
],
|
||||
"blue_red": [
|
||||
[39, 74, 68, 67, 103, 97, 96, 132, 131, 167, 203, 197],
|
||||
["19b4fe", "1bb2fc", "1db1fa", "1faff8", "22aef6", "24adf4", "26abf2", "29aaf0", "2ba9ee", "2da7ec", "30a6ea", "32a5e8", "34a3e6", "36a2e4", "39a0e2", "3b9fe1", "3d9edf", "409cdd", "429bdb", "449ad9", "4798d7", "4997d5", "4b96d3", "4d94d1", "5093cf", "5292cd", "5490cb", "578fc9", "598dc7", "5b8cc6", "5e8bc4", "6089c2", "6288c0", "6487be", "6785bc", "6984ba", "6b83b8", "6e81b6", "7080b4", "727eb2", "757db0", "777cae", "797aac", "7b79ab", "7e78a9", "8076a7", "8275a5", "8574a3", "8772a1", "89719f", "8c709d", "8e6e9b", "906d99", "926b97", "956a95", "976993", "996791", "9c668f", "9e658e", "a0638c", "a3628a", "a56188", "a75f86", "a95e84", "ac5c82", "ae5b80", "b05a7e", "b3587c", "b5577a", "b75678", "ba5476", "bc5374", "be5273", "c05071", "c34f6f", "c54e6d", "c74c6b", "ca4b69", "cc4967", "ce4865", "d14763", "d34561", "d5445f", "d7435d", "da415b", "dc4059", "de3f58", "e13d56", "e33c54", "e53a52", "e83950", "ea384e", "ec364c", "ee354a", "f13448", "f33246", "f53144", "f83042", "fa2e40"]
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,19 +7,18 @@
|
|||
"time": { "fg": "gray10", "bg": "gray2", "attr": ["bold"] },
|
||||
"time:divider": { "fg": "gray5", "bg": "gray2" },
|
||||
"email_alert": { "fg": "white", "bg": "brightred", "attr": ["bold"] },
|
||||
"email_alert_gradient": { "fg": "white", "bg": "yellow_orange_red", "attr": ["bold"] },
|
||||
"hostname": { "fg": "black", "bg": "gray10", "attr": ["bold"] },
|
||||
"weather": { "fg": "gray8", "bg": "gray0" },
|
||||
"weather_temp_cold": { "fg": "steelblue", "bg": "gray0" },
|
||||
"weather_temp_hot": { "fg": "darkorange3", "bg": "gray0" },
|
||||
"weather_temp_gradient": { "fg": "blue_red", "bg": "gray0" },
|
||||
"weather_condition_hot": { "fg": "khaki1", "bg": "gray0" },
|
||||
"weather_condition_snowy": { "fg": "skyblue1", "bg": "gray0" },
|
||||
"weather_condition_rainy": { "fg": "skyblue1", "bg": "gray0" },
|
||||
"uptime": { "fg": "gray8", "bg": "gray0" },
|
||||
"external_ip": { "fg": "gray8", "bg": "gray0" },
|
||||
"network_load": { "fg": "gray8", "bg": "gray0" },
|
||||
"network_load_gradient": { "fg": "green_yellow_orange_red", "bg": "gray0" },
|
||||
"system_load": { "fg": "gray8", "bg": "gray0" },
|
||||
"system_load_good": { "fg": "lightyellowgreen", "bg": "gray0" },
|
||||
"system_load_bad": { "fg": "gold3", "bg": "gray0" },
|
||||
"system_load_ugly": { "fg": "orangered", "bg": "gray0" }
|
||||
"system_load_gradient": { "fg": "green_yellow_orange_red", "bg": "gray0" }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
"file_vcs_status_M": { "fg": "yellow", "bg": "darkgreencopper" },
|
||||
"file_vcs_status_A": { "fg": "green", "bg": "darkgreencopper" },
|
||||
"line_percent": { "fg": "oldlace", "bg": "lightskyblue4" },
|
||||
"line_percent_gradient": { "fg": "green_yellow_orange_red", "bg": "lightskyblue4" },
|
||||
"line_current": { "fg": "gray13", "bg": "lightyellow", "attr": ["bold"] },
|
||||
"line_current_symbol": { "fg": "gray13", "bg": "lightyellow" },
|
||||
"col_current": { "fg": "azure4", "bg": "lightyellow" }
|
||||
|
@ -60,6 +61,7 @@
|
|||
"file_vcs_status_M": { "fg": "yellow", "bg": "lightyellow" },
|
||||
"file_vcs_status_A": { "fg": "green", "bg": "lightyellow" },
|
||||
"line_percent": { "fg": "oldlace", "bg": "gray61" },
|
||||
"line_percent_gradient": { "fg": "oldlace", "bg": "gray61" },
|
||||
"line_current": { "fg": "gray13", "bg": "oldlace", "attr": ["bold"] },
|
||||
"line_current_symbol": { "fg": "gray13", "bg": "oldlace" },
|
||||
"col_current": { "fg": "azure4", "bg": "oldlace" }
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
"time": { "fg": "gray10", "bg": "gray2", "attr": ["bold"] },
|
||||
"time:divider": { "fg": "gray5", "bg": "gray2" },
|
||||
"email_alert": { "fg": "white", "bg": "brightred", "attr": ["bold"] },
|
||||
"email_alert_gradient": { "fg": "white", "bg": "yellow_orange_red", "attr": ["bold"] },
|
||||
"hostname": { "fg": "black", "bg": "gray10", "attr": ["bold"] },
|
||||
"weather": { "fg": "gray8", "bg": "gray0" },
|
||||
"weather_temp_cold": { "fg": "steelblue", "bg": "gray0" },
|
||||
"weather_temp_hot": { "fg": "darkorange3", "bg": "gray0" },
|
||||
"weather_temp_gradient": { "fg": "blue_red", "bg": "gray0" },
|
||||
"weather_condition_hot": { "fg": "khaki1", "bg": "gray0" },
|
||||
"weather_condition_snowy": { "fg": "skyblue1", "bg": "gray0" },
|
||||
"weather_condition_rainy": { "fg": "skyblue1", "bg": "gray0" },
|
||||
|
|
|
@ -687,7 +687,7 @@ def hl_exists(hl_group, data, context, echoerr, allow_gradients=False):
|
|||
for colorscheme, cconfig in data['colorscheme_configs'][ext].items():
|
||||
if hl_group not in cconfig.get('groups', {}):
|
||||
r.append(colorscheme)
|
||||
elif not allow_gradients:
|
||||
elif not allow_gradients or allow_gradients == 'force':
|
||||
group_config = cconfig['groups'][hl_group]
|
||||
hadgradient = False
|
||||
for ckey in ('fg', 'bg'):
|
||||
|
@ -704,14 +704,14 @@ def hl_exists(hl_group, data, context, echoerr, allow_gradients=False):
|
|||
hadgradient = True
|
||||
if allow_gradients is False and not hascolor and hasgradient:
|
||||
echoerr(context='Error while checking highlight group in theme (key {key})'.format(key=context_key(context)),
|
||||
context_mark=hl_group.mark,
|
||||
context_mark=getattr(hl_group, 'mark', None),
|
||||
problem='group {0} is using gradient {1} instead of a color'.format(hl_group, color),
|
||||
problem_mark=color.mark)
|
||||
r.append(colorscheme)
|
||||
continue
|
||||
if allow_gradients == 'force' and not hadgradient:
|
||||
echoerr(context='Error while checking highlight group in theme (key {key})'.format(key=context_key(context)),
|
||||
context_mark=hl_group.mark,
|
||||
context_mark=getattr(hl_group, 'mark', None),
|
||||
problem='group {0} should have at least one gradient color, but it has no'.format(hl_group),
|
||||
problem_mark=group_config.mark)
|
||||
r.append(colorscheme)
|
||||
|
|
|
@ -342,7 +342,7 @@ class WeatherSegment(ThreadedSegment):
|
|||
self.temp = temp
|
||||
self.icon_names = icon_names
|
||||
|
||||
def render(self, icons=None, unit='C', temperature_format=None, **kwargs):
|
||||
def render(self, icons=None, unit='C', temp_format=None, temp_coldest=-30, temp_hottest=40, **kwargs):
|
||||
if not hasattr(self, 'icon_names'):
|
||||
return None
|
||||
|
||||
|
@ -354,8 +354,14 @@ class WeatherSegment(ThreadedSegment):
|
|||
else:
|
||||
icon = weather_conditions_icons[self.icon_names[-1]]
|
||||
|
||||
temperature_format = temperature_format or ('{temp:.0f}' + temp_units[unit])
|
||||
temp_format = temp_format or ('{temp:.0f}' + temp_units[unit])
|
||||
temp = temp_conversions[unit](self.temp)
|
||||
if self.temp <= temp_coldest:
|
||||
gradient_level = 0
|
||||
elif self.temp >= temp_hottest:
|
||||
gradient_level = 100
|
||||
else:
|
||||
gradient_level = (self.temp - temp_coldest) * 100.0 / (temp_hottest - temp_coldest)
|
||||
groups = ['weather_condition_' + icon_name for icon_name in self.icon_names] + ['weather_conditions', 'weather']
|
||||
return [
|
||||
{
|
||||
|
@ -364,10 +370,11 @@ class WeatherSegment(ThreadedSegment):
|
|||
'divider_highlight_group': 'background:divider',
|
||||
},
|
||||
{
|
||||
'contents': temperature_format.format(temp=temp),
|
||||
'highlight_group': ['weather_temp_cold' if int(self.temp) < 0 else 'weather_temp_hot', 'weather_temp', 'weather'],
|
||||
'contents': temp_format.format(temp=temp),
|
||||
'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'],
|
||||
'draw_divider': False,
|
||||
'divider_highlight_group': 'background:divider',
|
||||
'gradient_level': gradient_level,
|
||||
},
|
||||
]
|
||||
|
||||
|
@ -388,18 +395,26 @@ weather conditions.
|
|||
location query for your current location, e.g. ``oslo, norway``
|
||||
:param dict icons:
|
||||
dict for overriding default icons, e.g. ``{'heavy_snow' : u'❆'}``
|
||||
:param str temperature_format:
|
||||
:param str temp_format:
|
||||
format string, receives ``temp`` as an argument. Should also hold unit.
|
||||
:param float temp_coldest:
|
||||
coldest temperature. Any temperature below it will have gradient level equal
|
||||
to zero.
|
||||
:param float temp_hottest:
|
||||
hottest temperature. Any temperature above it will have gradient level equal
|
||||
to 100. Temperatures between ``temp_coldest`` and ``temp_hottest`` receive
|
||||
gradient level that indicates relative position in this interval
|
||||
(``100 * (cur-coldest) / (hottest-coldest)``).
|
||||
|
||||
Divider highlight group used: ``background:divider``.
|
||||
|
||||
Highlight groups used: ``weather_conditions`` or ``weather``, ``weather_temp_cold`` or ``weather_temp_hot`` or ``weather_temp`` or ``weather``.
|
||||
Highlight groups used: ``weather_conditions`` or ``weather``, ``weather_temp_gradient`` (gradient) or ``weather``.
|
||||
Also uses ``weather_conditions_{condition}`` for all weather conditions supported by Yahoo.
|
||||
''')
|
||||
|
||||
|
||||
def system_load(format='{avg:.1f}', threshold_good=1, threshold_bad=2):
|
||||
'''Return normalized system load average.
|
||||
'''Return system load average.
|
||||
|
||||
Highlights using ``system_load_good``, ``system_load_bad`` and
|
||||
``system_load_ugly`` highlighting groups, depending on the thresholds
|
||||
|
@ -408,13 +423,19 @@ def system_load(format='{avg:.1f}', threshold_good=1, threshold_bad=2):
|
|||
:param str format:
|
||||
format string, receives ``avg`` as an argument
|
||||
:param float threshold_good:
|
||||
threshold for "good load" highlighting
|
||||
threshold for gradient level 0: any normalized load average below this
|
||||
value will have this gradient level.
|
||||
:param float threshold_bad:
|
||||
threshold for "bad load" highlighting
|
||||
threshold for gradient level 100: any normalized load average above this
|
||||
value will have this gradient level. Load averages between
|
||||
``threshold_good`` and ``threshold_bad`` receive gradient level that
|
||||
indicates relative position in this interval:
|
||||
(``100 * (cur-good) / (bad-good)``).
|
||||
Note: both parameters are checked against normalized load averages.
|
||||
|
||||
Divider highlight group used: ``background:divider``.
|
||||
|
||||
Highlight groups used: ``system_load_good`` or ``system_load``, ``system_load_bad`` or ``system_load``, ``system_load_ugly`` or ``system_load``. It is recommended to define all highlight groups.
|
||||
Highlight groups used: ``system_load_gradient`` (gradient) or ``system_load``.
|
||||
'''
|
||||
global cpu_count
|
||||
try:
|
||||
|
@ -425,16 +446,17 @@ def system_load(format='{avg:.1f}', threshold_good=1, threshold_bad=2):
|
|||
for avg in os.getloadavg():
|
||||
normalized = avg / cpu_num
|
||||
if normalized < threshold_good:
|
||||
hl = 'system_load_good'
|
||||
gradient_level = 0
|
||||
elif normalized < threshold_bad:
|
||||
hl = 'system_load_bad'
|
||||
gradient_level = (normalized - threshold_good) * 100.0 / (threshold_bad - threshold_good)
|
||||
else:
|
||||
hl = 'system_load_ugly'
|
||||
gradient_level = 100
|
||||
ret.append({
|
||||
'contents': format.format(avg=avg),
|
||||
'highlight_group': [hl, 'system_load'],
|
||||
'highlight_group': ['system_load_gradient', 'system_load'],
|
||||
'draw_divider': False,
|
||||
'divider_highlight_group': 'background:divider',
|
||||
'gradient_level': gradient_level,
|
||||
})
|
||||
ret[0]['draw_divider'] = True
|
||||
ret[0]['contents'] += ' '
|
||||
|
@ -616,7 +638,7 @@ class NetworkLoadSegment(KwThreadedSegment):
|
|||
idata['last'] = (monotonic(), _get_bytes(interface))
|
||||
return idata
|
||||
|
||||
def render_one(self, idata, format='⬇ {recv:>8} ⬆ {sent:>8}', suffix='B/s', si_prefix=False, **kwargs):
|
||||
def render_one(self, idata, recv_format='⬇ {value:>8}', sent_format='⬆ {value:>8}', suffix='B/s', si_prefix=False, **kwargs):
|
||||
if not idata or 'prev' not in idata:
|
||||
return None
|
||||
|
||||
|
@ -627,13 +649,28 @@ class NetworkLoadSegment(KwThreadedSegment):
|
|||
if None in (b1, b2) or measure_interval == 0:
|
||||
return None
|
||||
|
||||
return [{
|
||||
'contents': format.format(
|
||||
recv=humanize_bytes((b2[0] - b1[0]) / measure_interval, suffix, si_prefix),
|
||||
sent=humanize_bytes((b2[1] - b1[1]) / measure_interval, suffix, si_prefix),
|
||||
),
|
||||
r = []
|
||||
for i, key in zip((0, 1), ('recv', 'sent')):
|
||||
format = locals()[key + '_format']
|
||||
value = (b2[i] - b1[i]) / measure_interval
|
||||
max_key = key + '_max'
|
||||
is_gradient = max_key in kwargs
|
||||
hl_groups = ['network_load_' + key, 'network_load']
|
||||
if is_gradient:
|
||||
hl_groups[:0] = (group + '_gradient' for group in hl_groups)
|
||||
r.append({
|
||||
'contents': format.format(value=humanize_bytes(value, suffix, si_prefix)),
|
||||
'divider_highlight_group': 'background:divider',
|
||||
}]
|
||||
'highlight_group': hl_groups,
|
||||
})
|
||||
if is_gradient:
|
||||
max = kwargs[max_key]
|
||||
if value >= max:
|
||||
r[-1]['gradient_level'] = 100
|
||||
else:
|
||||
r[-1]['gradient_level'] = value * 100.0 / max
|
||||
|
||||
return r
|
||||
|
||||
|
||||
network_load = with_docstring(NetworkLoadSegment(),
|
||||
|
@ -649,8 +686,20 @@ falls back to reading
|
|||
string appended to each load string
|
||||
:param bool si_prefix:
|
||||
use SI prefix, e.g. MB instead of MiB
|
||||
:param str format:
|
||||
format string, receives ``recv`` and ``sent`` as arguments
|
||||
:param str recv_format:
|
||||
format string, receives ``value`` as argument
|
||||
:param str sent_format:
|
||||
format string, receives ``value`` as argument
|
||||
:param float recv_max:
|
||||
maximum number of received bytes per second. Is only used to compute
|
||||
gradient level
|
||||
:param float sent_max:
|
||||
maximum number of sent bytes per second. Is only used to compute gradient
|
||||
level
|
||||
|
||||
Divider highlight group used: ``background:divider``.
|
||||
|
||||
Highlight groups used: ``network_load_sent_gradient`` (gradient) or ``network_load_recv_gradient`` (gradient) or ``network_load_gradient`` (gradient), ``network_load_sent`` or ``network_load_recv`` or ``network_load``.
|
||||
''')
|
||||
|
||||
|
||||
|
@ -685,12 +734,23 @@ class EmailIMAPSegment(KwThreadedSegment):
|
|||
return None
|
||||
except imaplib.IMAP4.error as e:
|
||||
unread_count = str(e)
|
||||
return unread_count
|
||||
|
||||
@staticmethod
|
||||
def render_one(unread_count, max_msgs=None, **kwargs):
|
||||
if not unread_count:
|
||||
return None
|
||||
return [{
|
||||
'highlight_group': 'email_alert',
|
||||
'contents': str(unread_count),
|
||||
}]
|
||||
elif type(unread_count) != int or not max_msgs:
|
||||
return [{
|
||||
'contents': str(unread_count),
|
||||
'highlight_group': 'email_alert',
|
||||
}]
|
||||
else:
|
||||
return [{
|
||||
'contents': str(unread_count),
|
||||
'highlight_group': ['email_alert_gradient', 'email_alert'],
|
||||
'gradient_level': unread_count * 100.0 / max_msgs,
|
||||
}]
|
||||
|
||||
|
||||
email_imap_alert = with_docstring(EmailIMAPSegment(),
|
||||
|
@ -706,8 +766,12 @@ email_imap_alert = with_docstring(EmailIMAPSegment(),
|
|||
e-mail server port
|
||||
:param str folder:
|
||||
folder to check for e-mails
|
||||
:param int max_msgs:
|
||||
Maximum number of messages. If there are more messages then max_msgs then it
|
||||
will use gradient level equal to 100, otherwise gradient level is equal to
|
||||
``100 * msgs_num / max_msgs``. If not present gradient is not computed.
|
||||
|
||||
Highlight groups used: ``email_alert``.
|
||||
Highlight groups used: ``email_alert_gradient`` (gradient), ``email_alert``.
|
||||
''')
|
||||
|
||||
|
||||
|
|
|
@ -247,15 +247,15 @@ def line_percent(segment_info, gradient=False):
|
|||
:param bool gradient:
|
||||
highlight the percentage with a color gradient (by default a green to red gradient)
|
||||
|
||||
Highlight groups used: ``line_percent_gradient`` (gradient) or ``line_percent``.
|
||||
Highlight groups used: ``line_percent_gradient`` (gradient), ``line_percent``.
|
||||
'''
|
||||
line_current = segment_info['window'].cursor[0]
|
||||
line_last = len(segment_info['buffer'])
|
||||
percentage = int(line_current * 100 // line_last)
|
||||
percentage = line_current * 100.0 / line_last
|
||||
if not gradient:
|
||||
return str(percentage)
|
||||
return str(int(round(percentage)))
|
||||
return [{
|
||||
'contents': str(percentage),
|
||||
'contents': str(int(round(percentage))),
|
||||
'highlight_group': ['line_percent_gradient', 'line_percent'],
|
||||
'gradient_level': percentage,
|
||||
}]
|
||||
|
|
|
@ -24,7 +24,7 @@ def urllib_read(query_url):
|
|||
elif query_url.startswith('http://freegeoip.net/json/'):
|
||||
return '{"city": "Meppen", "region_code": "06", "region_name": "Niedersachsen", "areacode": "", "ip": "82.145.55.16", "zipcode": "49716", "longitude": 7.3167, "country_name": "Germany", "country_code": "DE", "metrocode": "", "latitude": 52.6833}'
|
||||
elif query_url.startswith('http://query.yahooapis.com/v1/public/'):
|
||||
return r'{"query":{"count":1,"created":"2013-03-02T13:20:22Z","lang":"en-US","results":{"weather":{"rss":{"version":"2.0","geo":"http://www.w3.org/2003/01/geo/wgs84_pos#","yweather":"http://xml.weather.yahoo.com/ns/rss/1.0","channel":{"title":"Yahoo! Weather - Russia, RU","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html","description":"Yahoo! Weather for Russia, RU","language":"en-us","lastBuildDate":"Sat, 02 Mar 2013 4:58 pm MSK","ttl":"60","location":{"city":"Russia","country":"Russia","region":""},"units":{"distance":"km","pressure":"mb","speed":"km/h","temperature":"C"},"wind":{"chill":"-11","direction":"0","speed":""},"atmosphere":{"humidity":"94","pressure":"1006.1","rising":"0","visibility":""},"astronomy":{"sunrise":"10:04 am","sunset":"7:57 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Russia, RU at 4:58 pm MSK","lat":"59.45","long":"108.83","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html","pubDate":"Sat, 02 Mar 2013 4:58 pm MSK","condition":{"code":"30","date":"Sat, 02 Mar 2013 4:58 pm MSK","temp":"-11","text":"Partly Cloudy"},"description":"<img src=\"http://l.yimg.com/a/i/us/we/52/30.gif\"/><br />\n<b>Current Conditions:</b><br />\nPartly Cloudy, -11 C<BR />\n<BR /><b>Forecast:</b><BR />\nSat - Partly Cloudy. High: -9 Low: -19<br />\nSun - Partly Cloudy. High: -12 Low: -18<br />\n<br />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html\">Full Forecast at Yahoo! Weather</a><BR/><BR/>\n(provided by <a href=\"http://www.weather.com\" >The Weather Channel</a>)<br/>","forecast":[{"code":"29","date":"2 Mar 2013","day":"Sat","high":"-9","low":"-19","text":"Partly Cloudy"},{"code":"30","date":"3 Mar 2013","day":"Sun","high":"-12","low":"-18","text":"Partly Cloudy"}],"guid":{"isPermaLink":"false","content":"RSXX1511_2013_03_03_7_00_MSK"}}}}}}}}'
|
||||
return r'{"query":{"count":1,"created":"2013-03-02T13:20:22Z","lang":"en-US","results":{"weather":{"rss":{"version":"2.0","geo":"http://www.w3.org/2003/01/geo/wgs84_pos#","yweather":"http://xml.weather.yahoo.com/ns/rss/1.0","channel":{"title":"Yahoo! Weather - Russia, RU","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html","description":"Yahoo! Weather for Russia, RU","language":"en-us","lastBuildDate":"Sat, 02 Mar 2013 4:58 pm MSK","ttl":"60","location":{"city":"Russia","country":"Russia","region":""},"units":{"distance":"km","pressure":"mb","speed":"km/h","temperature":"C"},"wind":{"chill":"-9","direction":"0","speed":""},"atmosphere":{"humidity":"94","pressure":"1006.1","rising":"0","visibility":""},"astronomy":{"sunrise":"10:04 am","sunset":"7:57 pm"},"image":{"title":"Yahoo! Weather","width":"142","height":"18","link":"http://weather.yahoo.com","url":"http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif"},"item":{"title":"Conditions for Russia, RU at 4:58 pm MSK","lat":"59.45","long":"108.83","link":"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html","pubDate":"Sat, 02 Mar 2013 4:58 pm MSK","condition":{"code":"30","date":"Sat, 02 Mar 2013 4:58 pm MSK","temp":"-9","text":"Partly Cloudy"},"description":"<img src=\"http://l.yimg.com/a/i/us/we/52/30.gif\"/><br />\n<b>Current Conditions:</b><br />\nPartly Cloudy, -9 C<BR />\n<BR /><b>Forecast:</b><BR />\nSat - Partly Cloudy. High: -9 Low: -19<br />\nSun - Partly Cloudy. High: -12 Low: -18<br />\n<br />\n<a href=\"http://us.rd.yahoo.com/dailynews/rss/weather/Russia__RU/*http://weather.yahoo.com/forecast/RSXX1511_c.html\">Full Forecast at Yahoo! Weather</a><BR/><BR/>\n(provided by <a href=\"http://www.weather.com\" >The Weather Channel</a>)<br/>","forecast":[{"code":"29","date":"2 Mar 2013","day":"Sat","high":"-9","low":"-19","text":"Partly Cloudy"},{"code":"30","date":"3 Mar 2013","day":"Sun","high":"-12","low":"-18","text":"Partly Cloudy"}],"guid":{"isPermaLink":"false","content":"RSXX1511_2013_03_03_7_00_MSK"}}}}}}}}'
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ for file in tests/test_*.py ; do
|
|||
FAILED=1
|
||||
fi
|
||||
done
|
||||
if ! ${PYTHON} scripts/powerline-lint ; then
|
||||
if ! ${PYTHON} scripts/powerline-lint -p powerline/config_files ; then
|
||||
FAILED=1
|
||||
fi
|
||||
exit $FAILED
|
||||
|
|
|
@ -143,40 +143,48 @@ class TestCommon(TestCase):
|
|||
with replace_module_attr(common, 'urllib_read', urllib_read):
|
||||
self.assertEqual(common.weather(), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '-11°C'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9°C', 'gradient_level': 30.0}
|
||||
])
|
||||
self.assertEqual(common.weather(temp_coldest=0, temp_hottest=100), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9°C', 'gradient_level': 0}
|
||||
])
|
||||
self.assertEqual(common.weather(temp_coldest=-100, temp_hottest=-50), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9°C', 'gradient_level': 100}
|
||||
])
|
||||
self.assertEqual(common.weather(icons={'cloudy': 'o'}), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': 'o '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '-11°C'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9°C', 'gradient_level': 30.0}
|
||||
])
|
||||
self.assertEqual(common.weather(icons={'partly_cloudy_day': 'x'}), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': 'x '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '-11°C'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9°C', 'gradient_level': 30.0}
|
||||
])
|
||||
self.assertEqual(common.weather(unit='F'), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '12°F'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '16°F', 'gradient_level': 30.0}
|
||||
])
|
||||
self.assertEqual(common.weather(unit='K'), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '262K'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '264K', 'gradient_level': 30.0}
|
||||
])
|
||||
self.assertEqual(common.weather(temperature_format='{temp:.1e}C'), [
|
||||
self.assertEqual(common.weather(temp_format='{temp:.1e}C'), [
|
||||
{'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_condition_partly_cloudy_day', 'weather_condition_cloudy', 'weather_conditions', 'weather'], 'contents': '☁ '},
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_cold', 'weather_temp', 'weather'], 'contents': '-1.1e+01C'}
|
||||
{'draw_divider': False, 'divider_highlight_group': 'background:divider', 'highlight_group': ['weather_temp_gradient', 'weather_temp', 'weather'], 'contents': '-9.0e+00C', 'gradient_level': 30.0}
|
||||
])
|
||||
|
||||
def test_system_load(self):
|
||||
with replace_module_module(common, 'os', getloadavg=lambda: (7.5, 3.5, 1.5)):
|
||||
with replace_module_attr(common, 'cpu_count', lambda: 2):
|
||||
self.assertEqual(common.system_load(),
|
||||
[{'contents': '7.5 ', 'highlight_group': ['system_load_ugly', 'system_load'], 'draw_divider': True, 'divider_highlight_group': 'background:divider'},
|
||||
{'contents': '3.5 ', 'highlight_group': ['system_load_bad', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider'},
|
||||
{'contents': '1.5', 'highlight_group': ['system_load_good', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider'}])
|
||||
[{'contents': '7.5 ', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': True, 'divider_highlight_group': 'background:divider', 'gradient_level': 100},
|
||||
{'contents': '3.5 ', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider', 'gradient_level': 75.0},
|
||||
{'contents': '1.5', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider', 'gradient_level': 0}])
|
||||
self.assertEqual(common.system_load(format='{avg:.0f}', threshold_good=0, threshold_bad=1),
|
||||
[{'contents': '8 ', 'highlight_group': ['system_load_ugly', 'system_load'], 'draw_divider': True, 'divider_highlight_group': 'background:divider'},
|
||||
{'contents': '4 ', 'highlight_group': ['system_load_ugly', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider'},
|
||||
{'contents': '2', 'highlight_group': ['system_load_bad', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider'}])
|
||||
[{'contents': '8 ', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': True, 'divider_highlight_group': 'background:divider', 'gradient_level': 100},
|
||||
{'contents': '4 ', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider', 'gradient_level': 100},
|
||||
{'contents': '2', 'highlight_group': ['system_load_gradient', 'system_load'], 'draw_divider': False, 'divider_highlight_group': 'background:divider', 'gradient_level': 75.0}])
|
||||
|
||||
def test_cpu_load_percent(self):
|
||||
with replace_module_module(common, 'psutil', cpu_percent=lambda **kwargs: 52.3):
|
||||
|
@ -201,16 +209,31 @@ class TestCommon(TestCase):
|
|||
common.network_load.sleep(0)
|
||||
common.network_load.sleep(0)
|
||||
self.assertEqual(common.network_load(), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': '⬇ 1 KiB/s ⬆ 2 KiB/s'}
|
||||
{'divider_highlight_group': 'background:divider', 'contents': '⬇ 1 KiB/s', 'highlight_group': ['network_load_recv', 'network_load']},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': '⬆ 2 KiB/s', 'highlight_group': ['network_load_sent', 'network_load']},
|
||||
])
|
||||
self.assertEqual(common.network_load(format='r {recv} s {sent}'), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 KiB/s s 2 KiB/s'}
|
||||
self.assertEqual(common.network_load(recv_format='r {value}', sent_format='s {value}'), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 KiB/s', 'highlight_group': ['network_load_recv', 'network_load']},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 's 2 KiB/s', 'highlight_group': ['network_load_sent', 'network_load']},
|
||||
])
|
||||
self.assertEqual(common.network_load(format='r {recv} s {sent}', suffix='bps'), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 Kibps s 2 Kibps'}
|
||||
self.assertEqual(common.network_load(recv_format='r {value}', sent_format='s {value}', suffix='bps'), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 Kibps', 'highlight_group': ['network_load_recv', 'network_load']},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 's 2 Kibps', 'highlight_group': ['network_load_sent', 'network_load']},
|
||||
])
|
||||
self.assertEqual(common.network_load(format='r {recv} s {sent}', si_prefix=True), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 kB/s s 2 kB/s'}
|
||||
self.assertEqual(common.network_load(recv_format='r {value}', sent_format='s {value}', si_prefix=True), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 kB/s', 'highlight_group': ['network_load_recv', 'network_load']},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 's 2 kB/s', 'highlight_group': ['network_load_sent', 'network_load']},
|
||||
])
|
||||
self.assertEqual(common.network_load(recv_format='r {value}', sent_format='s {value}', recv_max=0), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 KiB/s', 'highlight_group': ['network_load_recv_gradient', 'network_load_gradient', 'network_load_recv', 'network_load'], 'gradient_level': 100},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 's 2 KiB/s', 'highlight_group': ['network_load_sent', 'network_load']},
|
||||
])
|
||||
class ApproxEqual(object):
|
||||
def __eq__(self, i):
|
||||
return abs(i - 50.0) < 1
|
||||
self.assertEqual(common.network_load(recv_format='r {value}', sent_format='s {value}', sent_max=4800), [
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 'r 1 KiB/s', 'highlight_group': ['network_load_recv', 'network_load']},
|
||||
{'divider_highlight_group': 'background:divider', 'contents': 's 2 KiB/s', 'highlight_group': ['network_load_sent_gradient', 'network_load_gradient', 'network_load_sent', 'network_load'], 'gradient_level': ApproxEqual()},
|
||||
])
|
||||
|
||||
def test_virtualenv(self):
|
||||
|
@ -306,11 +329,11 @@ class TestVim(TestCase):
|
|||
segment_info = vim_module._get_segment_info()
|
||||
segment_info['buffer'][0:-1] = [str(i) for i in range(100)]
|
||||
try:
|
||||
self.assertEqual(vim.line_percent(segment_info=segment_info), '0')
|
||||
self.assertEqual(vim.line_percent(segment_info=segment_info), '1')
|
||||
vim_module._set_cursor(50, 0)
|
||||
self.assertEqual(vim.line_percent(segment_info=segment_info), '49')
|
||||
self.assertEqual(vim.line_percent(segment_info=segment_info), '50')
|
||||
self.assertEqual(vim.line_percent(segment_info=segment_info, gradient=True),
|
||||
[{'contents': '49', 'highlight_group': ['line_percent_gradient', 'line_percent'], 'gradient_level': 49}])
|
||||
[{'contents': '50', 'highlight_group': ['line_percent_gradient', 'line_percent'], 'gradient_level': 50 * 100.0 / 101}])
|
||||
finally:
|
||||
vim_module._bw(segment_info['bufnr'])
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#!/usr/bin/env python
|
||||
import sys
|
||||
import os
|
||||
|
||||
|
|
|
@ -1,12 +1,18 @@
|
|||
#!/usr/bin/env python
|
||||
import sys
|
||||
import json
|
||||
from powerline.colorscheme import cterm_to_hex
|
||||
from itertools import groupby
|
||||
|
||||
try:
|
||||
from __builtin__ import unicode
|
||||
except ImportError:
|
||||
unicode = str
|
||||
|
||||
if len(sys.argv) == 1:
|
||||
|
||||
if len(sys.argv) == 1 or sys.argv[1] == '--help':
|
||||
sys.stderr.write('''
|
||||
Usage: generate_gradients.py colors itemnum[ "show"]
|
||||
Usage: generate_gradients.py colors itemnum[ "show" [ min max num]]
|
||||
|
||||
colors: JSON list with either cterm ([200, 42, 6]) or RGB (["abcdef",
|
||||
"feffef"]) colors.
|
||||
|
@ -15,7 +21,16 @@ if len(sys.argv) == 1:
|
|||
|
||||
"show": static string, determines whether gradient sample should be
|
||||
printed to stdout as well.
|
||||
|
||||
min, max: floating point values.
|
||||
num: integer
|
||||
|
||||
all of the above are used to generate sample gradient for given
|
||||
range (just like the above gradients shown with "show", but with
|
||||
different scale (controlled by min and max) and, possibly,
|
||||
different length (controlled by num)).
|
||||
''')
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def linear_gradient(start_value, stop_value, start_offset, stop_offset, offset):
|
||||
|
@ -69,13 +84,13 @@ def print_color(color):
|
|||
if type(color) is int:
|
||||
colstr = '5;' + str(color)
|
||||
else:
|
||||
colstr = '2;' + ';'.join((str(i) for i in color))
|
||||
colstr = '2;' + ';'.join((str(int(round(i))) for i in color))
|
||||
sys.stdout.write('\033[48;' + colstr + 'm ')
|
||||
|
||||
|
||||
def print_colors(colors):
|
||||
for i in range(101):
|
||||
color = colors[int(round(i * (len(colors) - 1) / 100))]
|
||||
def print_colors(colors, num=100):
|
||||
for i in range(num + 1):
|
||||
color = colors[int(round(i * (len(colors) - 1) / num))]
|
||||
print_color(color)
|
||||
sys.stdout.write('\033[0m\n')
|
||||
|
||||
|
@ -90,9 +105,9 @@ gradient = [gr_func(y) for y in range(0, m - 1)]
|
|||
r = [get_rgb(*color) for color in gradient]
|
||||
r2 = [find_color(color, cterm_to_hex)[0] for color in gradient]
|
||||
r3 = [i[0] for i in groupby(r2)]
|
||||
print json.dumps(r)
|
||||
print json.dumps(r2)
|
||||
print json.dumps(r3)
|
||||
print(json.dumps(r))
|
||||
print(json.dumps(r2))
|
||||
print(json.dumps(r3))
|
||||
if len(sys.argv) > 3 and sys.argv[3] == 'show':
|
||||
print_colors(gradient)
|
||||
print_colors(r2)
|
||||
|
@ -103,3 +118,14 @@ if len(sys.argv) > 3 and sys.argv[3] == 'show':
|
|||
nums = (''.join((str(i) for i in range(10))))
|
||||
sys.stdout.write(''.join(((('\033[1m' if j % 2 else '\033[0m') + nums) for j in range(10))))
|
||||
sys.stdout.write('\033[0m0\n')
|
||||
if len(sys.argv) > 6:
|
||||
vmin = float(sys.argv[4])
|
||||
vmax = float(sys.argv[5])
|
||||
num = int(sys.argv[6])
|
||||
print_colors(gradient, num)
|
||||
s = ''
|
||||
while len(s) < num:
|
||||
curpc = len(s) + 1 if s else 0
|
||||
curval = vmin + curpc * (vmax - vmin) / 100.0
|
||||
s += str(curval) + ' '
|
||||
print(s)
|
||||
|
|
Loading…
Reference in New Issue