Merge branch 'develop' into feature/539-position-segment
This commit is contained in:
commit
45e4650d5c
|
@ -91,7 +91,7 @@ segments that you may want to customize right away:
|
||||||
"name": "weather",
|
"name": "weather",
|
||||||
"priority": 50,
|
"priority": 50,
|
||||||
"args": {
|
"args": {
|
||||||
"unit": "f",
|
"unit": "F",
|
||||||
"location_query": "oslo, norway"
|
"location_query": "oslo, norway"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -60,3 +60,15 @@ My vim statusline is not displayed completely and has too much spaces
|
||||||
* Be sure you have ``ambiwidth`` option set to ``single``.
|
* Be sure you have ``ambiwidth`` option set to ``single``.
|
||||||
* Alternative: set :ref:`ambiwidth <config-common-ambiwidth>` to 2, remove fancy
|
* Alternative: set :ref:`ambiwidth <config-common-ambiwidth>` to 2, remove fancy
|
||||||
dividers (they suck when ``ambiwidth`` is set to double).
|
dividers (they suck when ``ambiwidth`` is set to double).
|
||||||
|
|
||||||
|
When using `z <https://github.com/rupa/z>` powerline shows wrong number of jobs
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This happens because `z <https://github.com/rupa/z>` is launching some jobs in
|
||||||
|
the background from ``$POWERLINE_COMMAND`` and these jobs fail to finish before
|
||||||
|
powerline prompt is run.
|
||||||
|
|
||||||
|
Solution to this problem is simple: be sure that :file:`z.sh` is sourced
|
||||||
|
strictly after :file:`powerline/bindings/bash/powerline.sh`. This way background
|
||||||
|
jobs are spawned by `z <https://github.com/rupa/z>` after powerline has done its
|
||||||
|
job.
|
||||||
|
|
|
@ -1,235 +0,0 @@
|
||||||
SplineFontDB: 3.0
|
|
||||||
FontName: PowerlineSymbols
|
|
||||||
FullName: PowerlineSymbols
|
|
||||||
FamilyName: PowerlineSymbols
|
|
||||||
Weight: Medium
|
|
||||||
Copyright: Created with FontForge 2.0 (http://fontforge.sf.net)
|
|
||||||
UComments: "2012-12-17: Created."
|
|
||||||
Version: 001.000
|
|
||||||
ItalicAngle: 0
|
|
||||||
UnderlinePosition: -100
|
|
||||||
UnderlineWidth: 50
|
|
||||||
Ascent: 1638
|
|
||||||
Descent: 410
|
|
||||||
LayerCount: 2
|
|
||||||
Layer: 0 0 "Back" 1
|
|
||||||
Layer: 1 0 "Fore" 0
|
|
||||||
XUID: [1021 211 26716215 11183012]
|
|
||||||
OS2Version: 0
|
|
||||||
OS2_WeightWidthSlopeOnly: 0
|
|
||||||
OS2_UseTypoMetrics: 1
|
|
||||||
CreationTime: 1355758773
|
|
||||||
ModificationTime: 1355865048
|
|
||||||
OS2TypoAscent: 0
|
|
||||||
OS2TypoAOffset: 1
|
|
||||||
OS2TypoDescent: 0
|
|
||||||
OS2TypoDOffset: 1
|
|
||||||
OS2TypoLinegap: 0
|
|
||||||
OS2WinAscent: 0
|
|
||||||
OS2WinAOffset: 1
|
|
||||||
OS2WinDescent: 0
|
|
||||||
OS2WinDOffset: 1
|
|
||||||
HheadAscent: 0
|
|
||||||
HheadAOffset: 1
|
|
||||||
HheadDescent: 0
|
|
||||||
HheadDOffset: 1
|
|
||||||
OS2Vendor: 'PfEd'
|
|
||||||
MarkAttachClasses: 1
|
|
||||||
DEI: 91125
|
|
||||||
Encoding: UnicodeBmp
|
|
||||||
Compacted: 1
|
|
||||||
UnicodeInterp: none
|
|
||||||
NameList: Adobe Glyph List
|
|
||||||
DisplaySize: -24
|
|
||||||
AntiAlias: 1
|
|
||||||
FitToEm: 1
|
|
||||||
WinInfo: 0 31 16
|
|
||||||
BeginPrivate: 0
|
|
||||||
EndPrivate
|
|
||||||
BeginChars: 65536 8
|
|
||||||
|
|
||||||
StartChar: uniE0A0
|
|
||||||
Encoding: 57504 57504 0
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
426 -365 m 1
|
|
||||||
150 -365 l 1
|
|
||||||
150 117 l 2
|
|
||||||
150 236.333333333 176.333333333 333.666666667 229 409 c 1
|
|
||||||
265 461.666666667 321.333333333 513 398 563 c 2
|
|
||||||
550 662 l 2
|
|
||||||
610 701.333333333 652.833333333 747.5 678.5 800.5 c 128
|
|
||||||
704.166666667 853.5 717 923.333333333 717 1010 c 2
|
|
||||||
717 1339 l 1
|
|
||||||
508 1339 l 1
|
|
||||||
800 1681 l 1
|
|
||||||
1092 1339 l 1
|
|
||||||
883 1339 l 1
|
|
||||||
883 954 l 2
|
|
||||||
883 826 865.166666667 727.833333333 829.5 659.5 c 128
|
|
||||||
793.833333333 591.166666667 740.333333333 533.666666667 669 487 c 1
|
|
||||||
594 437 l 2
|
|
||||||
532 396.333333333 489.333333333 355 466 313 c 0
|
|
||||||
439.333333333 265.666666667 426 200.333333333 426 117 c 2
|
|
||||||
426 -365 l 1
|
|
||||||
426 820 m 1
|
|
||||||
150 642 l 1
|
|
||||||
150 1950 l 1
|
|
||||||
426 1950 l 1
|
|
||||||
426 820 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0A1
|
|
||||||
Encoding: 57505 57505 1
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
700 963 m 1
|
|
||||||
700 831 l 1
|
|
||||||
194 831 l 1
|
|
||||||
194 1731 l 1
|
|
||||||
349 1731 l 1
|
|
||||||
349 963 l 1
|
|
||||||
700 963 l 1
|
|
||||||
706 750 m 1
|
|
||||||
865 750 l 1
|
|
||||||
865 -150 l 1
|
|
||||||
698 -150 l 1
|
|
||||||
453 435 l 1
|
|
||||||
472 45 l 1
|
|
||||||
472 -150 l 1
|
|
||||||
315 -150 l 1
|
|
||||||
315 750 l 1
|
|
||||||
480 750 l 1
|
|
||||||
727 163 l 1
|
|
||||||
706 592 l 1
|
|
||||||
706 750 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0A2
|
|
||||||
Encoding: 57506 57506 2
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
265 0 m 2
|
|
||||||
171 0 124 47 124 141 c 2
|
|
||||||
124 830 l 2
|
|
||||||
124 930.666666667 164.333333333 981 245 981 c 1
|
|
||||||
245 1287 l 2
|
|
||||||
245 1378.33333333 273 1454.33333333 329 1515 c 0
|
|
||||||
383 1573 450 1602 530 1602 c 256
|
|
||||||
610 1602 677 1573 731 1515 c 0
|
|
||||||
787 1454.33333333 815 1378.33333333 815 1287 c 2
|
|
||||||
815 981 l 1
|
|
||||||
895.666666667 981 936 930.666666667 936 830 c 2
|
|
||||||
936 141 l 2
|
|
||||||
936 47 889 0 795 0 c 2
|
|
||||||
265 0 l 2
|
|
||||||
530 1472 m 256
|
|
||||||
485.333333333 1472 449.5 1455.33333333 422.5 1422 c 128
|
|
||||||
395.5 1388.66666667 382 1343.66666667 382 1287 c 2
|
|
||||||
382 981 l 1
|
|
||||||
678 981 l 1
|
|
||||||
678 1287 l 2
|
|
||||||
678 1343.66666667 664.5 1388.66666667 637.5 1422 c 128
|
|
||||||
610.5 1455.33333333 574.666666667 1472 530 1472 c 256
|
|
||||||
586 236 m 1
|
|
||||||
586 559 l 1
|
|
||||||
631.333333333 582.333333333 654 619.333333333 654 670 c 0
|
|
||||||
654 704 641.833333333 733.166666667 617.5 757.5 c 128
|
|
||||||
593.166666667 781.833333333 564 794 530 794 c 256
|
|
||||||
496 794 466.833333333 781.833333333 442.5 757.5 c 128
|
|
||||||
418.166666667 733.166666667 406 704 406 670 c 0
|
|
||||||
406 619.333333333 428.666666667 582.333333333 474 559 c 1
|
|
||||||
474 236 l 1
|
|
||||||
586 236 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0B0
|
|
||||||
Encoding: 57520 57520 3
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
0 1950 m 1
|
|
||||||
1060 788 l 1
|
|
||||||
0 -375 l 1
|
|
||||||
0 1950 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0B1
|
|
||||||
Encoding: 57521 57521 4
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
-57 1812 m 1
|
|
||||||
39 1907 l 1
|
|
||||||
1060 788 l 1
|
|
||||||
39 -331 l 1
|
|
||||||
-57 -236 l 1
|
|
||||||
875 788 l 1
|
|
||||||
-57 1812 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0B2
|
|
||||||
Encoding: 57522 57522 5
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
1060 -375 m 1
|
|
||||||
0 788 l 1
|
|
||||||
1060 1950 l 1
|
|
||||||
1060 -375 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: uniE0B3
|
|
||||||
Encoding: 57523 57523 6
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
185 788 m 1
|
|
||||||
1117 -236 l 1
|
|
||||||
1021 -331 l 1
|
|
||||||
0 788 l 1
|
|
||||||
1021 1907 l 1
|
|
||||||
1117 1812 l 1
|
|
||||||
185 788 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
|
|
||||||
StartChar: block
|
|
||||||
Encoding: 9608 9608 7
|
|
||||||
Width: 1060
|
|
||||||
Flags: HW
|
|
||||||
LayerCount: 2
|
|
||||||
Fore
|
|
||||||
SplineSet
|
|
||||||
0 1950 m 1
|
|
||||||
1060 1950 l 1
|
|
||||||
1060 -375 l 1
|
|
||||||
0 -375 l 1
|
|
||||||
0 1950 l 1
|
|
||||||
EndSplineSet
|
|
||||||
EndChar
|
|
||||||
EndChars
|
|
||||||
EndSplineFont
|
|
|
@ -1,115 +0,0 @@
|
||||||
#!/usr/bin/env python2
|
|
||||||
# vim:fileencoding=utf-8:noet
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
import os.path
|
|
||||||
|
|
||||||
try:
|
|
||||||
import fontforge
|
|
||||||
import psMat
|
|
||||||
except ImportError:
|
|
||||||
sys.stderr.write('The required FontForge modules could not be loaded.\n\n')
|
|
||||||
if sys.version_info.major > 2:
|
|
||||||
sys.stderr.write('FontForge only supports Python 2. Please run this script with the Python 2 executable - e.g. "python2 {0}"\n'.format(sys.argv[0]))
|
|
||||||
else:
|
|
||||||
sys.stderr.write('You need FontForge with Python bindings for this script to work.\n')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Handle command-line arguments
|
|
||||||
parser = argparse.ArgumentParser(description='Font patcher for Powerline. Requires FontForge with Python bindings. Stores the patched font as a new, renamed font file by default.')
|
|
||||||
parser.add_argument('target_fonts', help='font files to patch', metavar='font', nargs='+', type=argparse.FileType('rb'))
|
|
||||||
parser.add_argument('--no-rename', help='don\'t add " for Powerline" to the font name', default=True, action='store_false', dest='rename_font')
|
|
||||||
parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='{0}/fontpatcher-symbols.sfd'.format(sys.path[0]), type=argparse.FileType('rb'))
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
|
|
||||||
class FontPatcher(object):
|
|
||||||
def __init__(self, source_font, target_fonts, rename_font=True):
|
|
||||||
self.source_font = fontforge.open(source_font.name)
|
|
||||||
self.target_fonts = (fontforge.open(target_font.name) for target_font in target_fonts)
|
|
||||||
self.rename_font = rename_font
|
|
||||||
|
|
||||||
def patch(self):
|
|
||||||
for target_font in self.target_fonts:
|
|
||||||
source_font = self.source_font
|
|
||||||
target_font_em_original = target_font.em
|
|
||||||
target_font.em = 2048
|
|
||||||
target_font.encoding = 'ISO10646'
|
|
||||||
|
|
||||||
# Rename font
|
|
||||||
if self.rename_font:
|
|
||||||
target_font.familyname += ' for Powerline'
|
|
||||||
target_font.fullname += ' for Powerline'
|
|
||||||
fontname, style = re.match("^([^-]*)(?:(-.*))?$", target_font.fontname).groups()
|
|
||||||
target_font.fontname = fontname + 'ForPowerline'
|
|
||||||
if style is not None:
|
|
||||||
target_font.fontname += style
|
|
||||||
target_font.appendSFNTName('English (US)', 'Preferred Family', target_font.familyname)
|
|
||||||
target_font.appendSFNTName('English (US)', 'Compatible Full', target_font.fullname)
|
|
||||||
|
|
||||||
source_bb = source_font['block'].boundingBox()
|
|
||||||
target_bb = [0, 0, 0, 0]
|
|
||||||
target_font_width = 0
|
|
||||||
|
|
||||||
# Find the biggest char width and height in the Latin-1 extended range and the box drawing range
|
|
||||||
# This isn't ideal, but it works fairly well - some fonts may need tuning after patching
|
|
||||||
for cp in range(0x00, 0x17f) + range(0x2500, 0x2600):
|
|
||||||
try:
|
|
||||||
bbox = target_font[cp].boundingBox()
|
|
||||||
except TypeError:
|
|
||||||
continue
|
|
||||||
if not target_font_width:
|
|
||||||
target_font_width = target_font[cp].width
|
|
||||||
if bbox[0] < target_bb[0]:
|
|
||||||
target_bb[0] = bbox[0]
|
|
||||||
if bbox[1] < target_bb[1]:
|
|
||||||
target_bb[1] = bbox[1]
|
|
||||||
if bbox[2] > target_bb[2]:
|
|
||||||
target_bb[2] = bbox[2]
|
|
||||||
if bbox[3] > target_bb[3]:
|
|
||||||
target_bb[3] = bbox[3]
|
|
||||||
|
|
||||||
# Find source and target size difference for scaling
|
|
||||||
x_ratio = (target_bb[2] - target_bb[0]) / (source_bb[2] - source_bb[0])
|
|
||||||
y_ratio = (target_bb[3] - target_bb[1]) / (source_bb[3] - source_bb[1])
|
|
||||||
scale = psMat.scale(x_ratio, y_ratio)
|
|
||||||
|
|
||||||
# Find source and target midpoints for translating
|
|
||||||
x_diff = target_bb[0] - source_bb[0]
|
|
||||||
y_diff = target_bb[1] - source_bb[1]
|
|
||||||
translate = psMat.translate(x_diff, y_diff)
|
|
||||||
transform = psMat.compose(scale, translate)
|
|
||||||
|
|
||||||
# Create new glyphs from symbol font
|
|
||||||
for source_glyph in source_font.glyphs():
|
|
||||||
if source_glyph == source_font['block']:
|
|
||||||
# Skip the symbol font block glyph
|
|
||||||
continue
|
|
||||||
|
|
||||||
# Select and copy symbol from its encoding point
|
|
||||||
source_font.selection.select(source_glyph.encoding)
|
|
||||||
source_font.copy()
|
|
||||||
|
|
||||||
# Select and paste symbol to its unicode code point
|
|
||||||
target_font.selection.select(source_glyph.unicode)
|
|
||||||
target_font.paste()
|
|
||||||
|
|
||||||
# Transform the glyph
|
|
||||||
target_font.transform(transform)
|
|
||||||
|
|
||||||
# Reset the font's glyph width so it's still considered monospaced
|
|
||||||
target_font[source_glyph.unicode].width = target_font_width
|
|
||||||
|
|
||||||
target_font.em = target_font_em_original
|
|
||||||
|
|
||||||
# Generate patched font
|
|
||||||
extension = os.path.splitext(target_font.path)[1]
|
|
||||||
if extension.lower() not in ['.ttf', '.otf']:
|
|
||||||
# Default to OpenType if input is not TrueType/OpenType
|
|
||||||
extension = '.otf'
|
|
||||||
target_font.generate('{0}{1}'.format(target_font.fullname, extension))
|
|
||||||
|
|
||||||
fp = FontPatcher(args.source_font, args.target_fonts, args.rename_font)
|
|
||||||
fp.patch()
|
|
|
@ -1,5 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
||||||
!PKGBUILD
|
|
||||||
!*.install
|
|
||||||
!*.patch
|
|
|
@ -1,74 +0,0 @@
|
||||||
# Maintainer: Kim Silkebækken <kim.silkebaekken+aur@gmail.com>
|
|
||||||
|
|
||||||
_gitname=powerline
|
|
||||||
_gitbranch=develop
|
|
||||||
pkgname="python-${_gitname}-git" # Workaround for missing split package support in AUR
|
|
||||||
true && pkgname=("python-${_gitname}-git" "${_gitname}-fontpatcher-git")
|
|
||||||
pkgbase=powerline
|
|
||||||
pkgver=822.225ac48
|
|
||||||
pkgrel=1
|
|
||||||
url='https://github.com/Lokaltog/powerline'
|
|
||||||
license=('MIT')
|
|
||||||
arch=('any')
|
|
||||||
makedepends=('git' 'python-distribute')
|
|
||||||
provides=('powerline')
|
|
||||||
conflicts=('python2-powerline-git'
|
|
||||||
'powerline-git')
|
|
||||||
install="${_gitname}.install"
|
|
||||||
source=("${_gitname}::git://github.com/Lokaltog/${_gitname}.git#branch=${_gitbranch}"
|
|
||||||
"fontpatcher.py.patch"
|
|
||||||
"${install}")
|
|
||||||
sha256sums=('SKIP'
|
|
||||||
'85576097662ab4203968b5fba1d59ec2653a390cdd4db9cee8ffa7bd4c5a7253'
|
|
||||||
'7b1257cdacce60e19280f7d918e5f3aa6f13b519dff16ecc6f732c881ef63ca1')
|
|
||||||
|
|
||||||
pkgver() {
|
|
||||||
cd "${_gitname}"
|
|
||||||
echo "$(git rev-list --count ${_gitbranch}).$(git rev-parse --short ${_gitbranch})"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
cd "${srcdir}/${_gitname}"
|
|
||||||
patch -p1 < ../fontpatcher.py.patch
|
|
||||||
}
|
|
||||||
|
|
||||||
package_powerline-fontpatcher-git() {
|
|
||||||
pkgdesc='OTF/TTF font patcher for Powerline symbols'
|
|
||||||
depends=('python2' 'fontforge')
|
|
||||||
|
|
||||||
cd "${_gitname}"
|
|
||||||
|
|
||||||
# Font patcher
|
|
||||||
install -Dm755 "font/fontpatcher.py" "${pkgdir}/usr/bin/powerline-fontpatcher"
|
|
||||||
install -Dm644 "font/fontpatcher-symbols.sfd" "${pkgdir}/usr/share/$_gitname/fontpatcher-symbols.sfd"
|
|
||||||
}
|
|
||||||
|
|
||||||
package_python-powerline-git() {
|
|
||||||
pkgdesc='The ultimate statusline/prompt utility.'
|
|
||||||
depends=('python>=3.2')
|
|
||||||
optdepends=('python-psutil: improved system information'
|
|
||||||
'python-pygit2: improved git support'
|
|
||||||
'zsh: better shell prompt'
|
|
||||||
'gvim: vim compiled with Python support')
|
|
||||||
|
|
||||||
cd "${_gitname}"
|
|
||||||
python setup.py install --root="${pkgdir}" --optimize=1
|
|
||||||
|
|
||||||
# Fonts
|
|
||||||
install -dm755 "${pkgdir}/etc/fonts/conf.d"
|
|
||||||
install -Dm644 "font/PowerlineSymbols.otf" "${pkgdir}/usr/share/fonts/OTF/PowerlineSymbols.otf"
|
|
||||||
install -Dm644 "font/10-powerline-symbols.conf" "${pkgdir}/etc/fonts/conf.avail/10-powerline-symbols.conf"
|
|
||||||
ln -s "../conf.avail/10-powerline-symbols.conf" "${pkgdir}/etc/fonts/conf.d/10-powerline-symbols.conf"
|
|
||||||
|
|
||||||
# Vim Plugin
|
|
||||||
install -Dm644 "powerline/bindings/vim/plugin/powerline.vim" "${pkgdir}/usr/share/vim/vimfiles/plugin/powerline.vim"
|
|
||||||
|
|
||||||
# Zsh Plugin
|
|
||||||
install -Dm644 "powerline/bindings/zsh/powerline.zsh" "${pkgdir}/usr/share/zsh/site-contrib/powerline.zsh"
|
|
||||||
|
|
||||||
# Tmux Configuration
|
|
||||||
install -Dm644 "powerline/bindings/tmux/powerline.conf" "${pkgdir}/usr/share/tmux/powerline.conf"
|
|
||||||
|
|
||||||
# License
|
|
||||||
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
diff --git a/font/fontpatcher.py b/font/fontpatcher.py
|
|
||||||
index e2bbf2a..aa172f6 100755
|
|
||||||
--- a/font/fontpatcher.py
|
|
||||||
+++ b/font/fontpatcher.py
|
|
||||||
@@ -21,7 +21,7 @@ except ImportError:
|
|
||||||
parser = argparse.ArgumentParser(description='Font patcher for Powerline. Requires FontForge with Python bindings. Stores the patched font as a new, renamed font file by default.')
|
|
||||||
parser.add_argument('target_fonts', help='font files to patch', metavar='font', nargs='+', type=argparse.FileType('rb'))
|
|
||||||
parser.add_argument('--no-rename', help='don\'t add " for Powerline" to the font name', default=True, action='store_false', dest='rename_font')
|
|
||||||
-parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='{0}/fontpatcher-symbols.sfd'.format(sys.path[0]), type=argparse.FileType('rb'))
|
|
||||||
+parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='/usr/share/powerline/fontpatcher-symbols.sfd', type=argparse.FileType('rb'))
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
|
|
|
@ -1,48 +0,0 @@
|
||||||
post_install() {
|
|
||||||
echo "Updating font cache..."
|
|
||||||
fc-cache -f
|
|
||||||
|
|
||||||
echo "
|
|
||||||
IMPORTANT
|
|
||||||
=========
|
|
||||||
|
|
||||||
Powerline requires custom glyphs to work properly. A font with these glyphs has
|
|
||||||
been installed along with a fontconfig file which enables the glyphs for many
|
|
||||||
common coding fonts.
|
|
||||||
|
|
||||||
If Powerline doesn't work out of the box on your system, please submit an issue
|
|
||||||
on GitHub: https://github.com/Lokaltog/powerline/issues
|
|
||||||
|
|
||||||
Consult the documentation for detailed installation instructions and
|
|
||||||
troubleshooting information: https://powerline.readthedocs.org/en/latest/
|
|
||||||
|
|
||||||
You may need to update your PYTHONPATH environment variable by adding the
|
|
||||||
following line to your /etc/profile, .zshrc, etc.:
|
|
||||||
|
|
||||||
export PYTHONPATH=/usr/lib/python3.3/site-packages
|
|
||||||
|
|
||||||
Vim installation
|
|
||||||
----------------
|
|
||||||
|
|
||||||
The plugin has been installed and is enabled by default.
|
|
||||||
|
|
||||||
Zsh installation
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Add the following line to your ~/.zshrc:
|
|
||||||
|
|
||||||
. /usr/share/zsh/site-contrib/powerline.zsh
|
|
||||||
|
|
||||||
Tmux installation
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Add the following line to your ~/.tmux.conf:
|
|
||||||
|
|
||||||
source '/usr/share/tmux/powerline.conf'
|
|
||||||
"
|
|
||||||
}
|
|
||||||
|
|
||||||
post_remove() {
|
|
||||||
echo "Updating font cache..."
|
|
||||||
fc-cache -f
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
*
|
|
||||||
!.gitignore
|
|
||||||
!PKGBUILD
|
|
||||||
!*.install
|
|
||||||
!*.patch
|
|
|
@ -1,75 +0,0 @@
|
||||||
# Maintainer: Kim Silkebækken <kim.silkebaekken+aur@gmail.com>
|
|
||||||
|
|
||||||
_gitname=powerline
|
|
||||||
_gitbranch=develop
|
|
||||||
pkgname="python2-${_gitname}-git" # Workaround for missing split package support in AUR
|
|
||||||
true && pkgname=("python2-${_gitname}-git" "${_gitname}-fontpatcher-git")
|
|
||||||
pkgbase=powerline
|
|
||||||
pkgver=822.225ac48
|
|
||||||
pkgrel=1
|
|
||||||
url='https://github.com/Lokaltog/powerline'
|
|
||||||
license=('MIT')
|
|
||||||
arch=('any')
|
|
||||||
makedepends=('git' 'python2-distribute')
|
|
||||||
provides=('powerline')
|
|
||||||
conflicts=('python-powerline-git')
|
|
||||||
replaces=('powerline-git')
|
|
||||||
install="${_gitname}.install"
|
|
||||||
source=("${_gitname}::git://github.com/Lokaltog/${_gitname}.git#branch=${_gitbranch}"
|
|
||||||
"fontpatcher.py.patch"
|
|
||||||
"${install}")
|
|
||||||
sha256sums=('SKIP'
|
|
||||||
'85576097662ab4203968b5fba1d59ec2653a390cdd4db9cee8ffa7bd4c5a7253'
|
|
||||||
'e8ab7fb51ac7244bfad973a999c9333ba4334fa391aa890489cf8c8f1211c94f')
|
|
||||||
|
|
||||||
pkgver() {
|
|
||||||
cd "${_gitname}"
|
|
||||||
echo "$(git rev-list --count ${_gitbranch}).$(git rev-parse --short ${_gitbranch})"
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare() {
|
|
||||||
cd "${srcdir}/${_gitname}"
|
|
||||||
patch -p1 < ../fontpatcher.py.patch
|
|
||||||
}
|
|
||||||
|
|
||||||
package_powerline-fontpatcher-git() {
|
|
||||||
pkgdesc='OTF/TTF font patcher for Powerline symbols'
|
|
||||||
depends=('python2' 'fontforge')
|
|
||||||
|
|
||||||
cd "${_gitname}"
|
|
||||||
|
|
||||||
# Font patcher
|
|
||||||
install -Dm755 "font/fontpatcher.py" "${pkgdir}/usr/bin/powerline-fontpatcher"
|
|
||||||
install -Dm644 "font/fontpatcher-symbols.sfd" "${pkgdir}/usr/share/${_gitname}/fontpatcher-symbols.sfd"
|
|
||||||
}
|
|
||||||
|
|
||||||
package_python2-powerline-git() {
|
|
||||||
pkgdesc='The ultimate statusline/prompt utility.'
|
|
||||||
depends=('python2>=2.6')
|
|
||||||
optdepends=('python2-psutil: improved system information'
|
|
||||||
'python2-pygit2: improved git support'
|
|
||||||
'mercurial: improved mercurial support'
|
|
||||||
'zsh: better shell prompt'
|
|
||||||
'gvim: vim compiled with Python support')
|
|
||||||
|
|
||||||
cd "${_gitname}"
|
|
||||||
python2 setup.py install --root="${pkgdir}" --optimize=1
|
|
||||||
|
|
||||||
# Fonts
|
|
||||||
install -dm755 "${pkgdir}/etc/fonts/conf.d"
|
|
||||||
install -Dm644 "font/PowerlineSymbols.otf" "${pkgdir}/usr/share/fonts/OTF/PowerlineSymbols.otf"
|
|
||||||
install -Dm644 "font/10-powerline-symbols.conf" "${pkgdir}/etc/fonts/conf.avail/10-powerline-symbols.conf"
|
|
||||||
ln -s "../conf.avail/10-powerline-symbols.conf" "${pkgdir}/etc/fonts/conf.d/10-powerline-symbols.conf"
|
|
||||||
|
|
||||||
# Vim Plugin
|
|
||||||
install -Dm644 "powerline/bindings/vim/plugin/powerline.vim" "${pkgdir}/usr/share/vim/vimfiles/plugin/powerline.vim"
|
|
||||||
|
|
||||||
# Zsh Plugin
|
|
||||||
install -Dm644 "powerline/bindings/zsh/powerline.zsh" "${pkgdir}/usr/share/zsh/site-contrib/powerline.zsh"
|
|
||||||
|
|
||||||
# Tmux Configuration
|
|
||||||
install -Dm644 "powerline/bindings/tmux/powerline.conf" "${pkgdir}/usr/share/tmux/powerline.conf"
|
|
||||||
|
|
||||||
# License
|
|
||||||
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
diff --git a/font/fontpatcher.py b/font/fontpatcher.py
|
|
||||||
index e2bbf2a..aa172f6 100755
|
|
||||||
--- a/font/fontpatcher.py
|
|
||||||
+++ b/font/fontpatcher.py
|
|
||||||
@@ -21,7 +21,7 @@ except ImportError:
|
|
||||||
parser = argparse.ArgumentParser(description='Font patcher for Powerline. Requires FontForge with Python bindings. Stores the patched font as a new, renamed font file by default.')
|
|
||||||
parser.add_argument('target_fonts', help='font files to patch', metavar='font', nargs='+', type=argparse.FileType('rb'))
|
|
||||||
parser.add_argument('--no-rename', help='don\'t add " for Powerline" to the font name', default=True, action='store_false', dest='rename_font')
|
|
||||||
-parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='{0}/fontpatcher-symbols.sfd'.format(sys.path[0]), type=argparse.FileType('rb'))
|
|
||||||
+parser.add_argument('--source-font', help='source symbol font', metavar='font', dest='source_font', default='/usr/share/powerline/fontpatcher-symbols.sfd', type=argparse.FileType('rb'))
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
post_install() {
|
|
||||||
echo "Updating font cache..."
|
|
||||||
fc-cache -f
|
|
||||||
|
|
||||||
echo "
|
|
||||||
IMPORTANT
|
|
||||||
=========
|
|
||||||
|
|
||||||
Powerline requires custom glyphs to work properly. A font with these glyphs has
|
|
||||||
been installed along with a fontconfig file which enables the glyphs for many
|
|
||||||
common coding fonts.
|
|
||||||
|
|
||||||
If Powerline doesn't work out of the box on your system, please submit an issue
|
|
||||||
on GitHub: https://github.com/Lokaltog/powerline/issues
|
|
||||||
|
|
||||||
Consult the documentation for detailed installation instructions and
|
|
||||||
troubleshooting information: https://powerline.readthedocs.org/en/latest/
|
|
||||||
|
|
||||||
Vim installation
|
|
||||||
----------------
|
|
||||||
|
|
||||||
The plugin has been installed and is enabled by default.
|
|
||||||
|
|
||||||
Zsh installation
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Add the following line to your ~/.zshrc:
|
|
||||||
|
|
||||||
. /usr/share/zsh/site-contrib/powerline.zsh
|
|
||||||
|
|
||||||
Tmux installation
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Add the following line to your ~/.tmux.conf:
|
|
||||||
|
|
||||||
source '/usr/share/tmux/powerline.conf'
|
|
||||||
"
|
|
||||||
}
|
|
||||||
|
|
||||||
post_remove() {
|
|
||||||
echo "Updating font cache..."
|
|
||||||
fc-cache -f
|
|
||||||
}
|
|
|
@ -31,9 +31,7 @@ _powerline_tmux_set_columns() {
|
||||||
|
|
||||||
_powerline_prompt() {
|
_powerline_prompt() {
|
||||||
local last_exit_code=$?
|
local last_exit_code=$?
|
||||||
[[ -z "$POWERLINE_OLD_PROMPT_COMMAND" ]] ||
|
PS1="$($POWERLINE_COMMAND shell left -r bash_prompt --last_exit_code=$last_exit_code --jobnum="$(jobs -p|wc -l)")"
|
||||||
eval $POWERLINE_OLD_PROMPT_COMMAND
|
|
||||||
PS1="$($POWERLINE_COMMAND shell left -r bash_prompt --last_exit_code=$last_exit_code --jobnum="$(jobs|wc -l)")"
|
|
||||||
_powerline_tmux_set_pwd
|
_powerline_tmux_set_pwd
|
||||||
return $last_exit_code
|
return $last_exit_code
|
||||||
}
|
}
|
||||||
|
@ -42,5 +40,4 @@ trap "_powerline_tmux_set_columns" SIGWINCH
|
||||||
_powerline_tmux_set_columns
|
_powerline_tmux_set_columns
|
||||||
|
|
||||||
[[ "$PROMPT_COMMAND" != "${PROMPT_COMMAND/_powerline_prompt/}" ]] ||
|
[[ "$PROMPT_COMMAND" != "${PROMPT_COMMAND/_powerline_prompt/}" ]] ||
|
||||||
POWERLINE_OLD_PROMPT_COMMAND="$PROMPT_COMMAND"
|
export PROMPT_COMMAND="${PROMPT_COMMAND}"$'\n'"_powerline_prompt;"
|
||||||
export PROMPT_COMMAND="_powerline_prompt"
|
|
||||||
|
|
|
@ -54,7 +54,24 @@ class INotifyWatch(INotify):
|
||||||
self.modified.pop(path, None)
|
self.modified.pop(path, None)
|
||||||
self.last_query.pop(path, None)
|
self.last_query.pop(path, None)
|
||||||
else:
|
else:
|
||||||
self.modified[path] = True
|
if mask & self.ATTRIB:
|
||||||
|
# The watched file could have had its inode changed, in
|
||||||
|
# which case we will not get any more events for this
|
||||||
|
# file, so re-register the watch. For example by some
|
||||||
|
# other file being renamed as this file.
|
||||||
|
try:
|
||||||
|
self.unwatch(path)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
try:
|
||||||
|
self.watch(path)
|
||||||
|
except OSError as e:
|
||||||
|
if getattr(e, 'errno', None) != errno.ENOENT:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
self.modified[path] = True
|
||||||
|
else:
|
||||||
|
self.modified[path] = True
|
||||||
|
|
||||||
def unwatch(self, path):
|
def unwatch(self, path):
|
||||||
''' Remove the watch for path. Raises an OSError if removing the watch
|
''' Remove the watch for path. Raises an OSError if removing the watch
|
||||||
|
|
|
@ -33,6 +33,15 @@ def file_watcher():
|
||||||
_file_watcher = create_file_watcher()
|
_file_watcher = create_file_watcher()
|
||||||
return _file_watcher
|
return _file_watcher
|
||||||
|
|
||||||
|
_branch_watcher = None
|
||||||
|
|
||||||
|
def branch_watcher():
|
||||||
|
global _branch_watcher
|
||||||
|
if _branch_watcher is None:
|
||||||
|
from powerline.lib.file_watcher import create_file_watcher
|
||||||
|
_branch_watcher = create_file_watcher()
|
||||||
|
return _branch_watcher
|
||||||
|
|
||||||
branch_name_cache = {}
|
branch_name_cache = {}
|
||||||
branch_lock = Lock()
|
branch_lock = Lock()
|
||||||
file_status_lock = Lock()
|
file_status_lock = Lock()
|
||||||
|
@ -41,7 +50,7 @@ def get_branch_name(directory, config_file, get_func):
|
||||||
global branch_name_cache
|
global branch_name_cache
|
||||||
with branch_lock:
|
with branch_lock:
|
||||||
# Check if the repo directory was moved/deleted
|
# Check if the repo directory was moved/deleted
|
||||||
fw = file_watcher()
|
fw = branch_watcher()
|
||||||
is_watched = fw.is_watched(directory)
|
is_watched = fw.is_watched(directory)
|
||||||
try:
|
try:
|
||||||
changed = fw(directory)
|
changed = fw(directory)
|
||||||
|
|
|
@ -76,23 +76,29 @@ def new_module(name, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
class AttrReplace(object):
|
class AttrReplace(object):
|
||||||
def __init__(self, obj, attr, new):
|
def __init__(self, obj, *args):
|
||||||
self.obj = obj
|
self.obj = obj
|
||||||
self.attr = attr
|
self.attrs = args[::2]
|
||||||
self.new = new
|
self.new = args[1::2]
|
||||||
|
|
||||||
def __enter__(self):
|
def __enter__(self):
|
||||||
try:
|
self.old = {}
|
||||||
self.old = getattr(self.obj, self.attr)
|
for i, attr in enumerate(self.attrs):
|
||||||
except AttributeError:
|
try:
|
||||||
pass
|
self.old[i] = getattr(self.obj, attr)
|
||||||
setattr(self.obj, self.attr, self.new)
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
for attr, new in zip(self.attrs, self.new):
|
||||||
|
setattr(self.obj, attr, new)
|
||||||
|
|
||||||
def __exit__(self, *args):
|
def __exit__(self, *args):
|
||||||
try:
|
for i, attr in enumerate(self.attrs):
|
||||||
setattr(self.obj, self.attr, self.old)
|
try:
|
||||||
except AttributeError:
|
old = self.old[i]
|
||||||
delattr(self.obj, self.attr)
|
except KeyError:
|
||||||
|
delattr(self.obj, attr)
|
||||||
|
else:
|
||||||
|
setattr(self.obj, attr, old)
|
||||||
|
|
||||||
|
|
||||||
replace_attr = AttrReplace
|
replace_attr = AttrReplace
|
||||||
|
|
|
@ -0,0 +1,123 @@
|
||||||
|
# vim:fileencoding=utf-8:noet
|
||||||
|
|
||||||
|
'''Tests for shell.py parser'''
|
||||||
|
|
||||||
|
|
||||||
|
from powerline.shell import get_argparser, finish_args
|
||||||
|
from tests import TestCase
|
||||||
|
from tests.lib import replace_attr
|
||||||
|
import sys
|
||||||
|
if sys.version_info < (3,):
|
||||||
|
from io import BytesIO as StrIO
|
||||||
|
else:
|
||||||
|
from io import StringIO as StrIO # NOQA
|
||||||
|
|
||||||
|
|
||||||
|
class TestParser(TestCase):
|
||||||
|
def test_main_err(self):
|
||||||
|
parser = get_argparser()
|
||||||
|
out = StrIO()
|
||||||
|
err = StrIO()
|
||||||
|
def flush():
|
||||||
|
out.truncate(0)
|
||||||
|
err.truncate(0)
|
||||||
|
with replace_attr(sys, 'stdout', out, 'stderr', err):
|
||||||
|
for raising_args, raising_reg in [
|
||||||
|
([], 'too few arguments|the following arguments are required: ext'),
|
||||||
|
(['-r'], 'expected one argument'),
|
||||||
|
(['shell', '-r'], 'expected one argument'),
|
||||||
|
(['shell', '-w'], 'expected one argument'),
|
||||||
|
(['shell', '-c'], 'expected one argument'),
|
||||||
|
(['shell', '-t'], 'expected one argument'),
|
||||||
|
(['shell', '-p'], 'expected one argument'),
|
||||||
|
(['shell', '-R'], 'expected one argument'),
|
||||||
|
(['shell', '--renderer_module'], 'expected one argument'),
|
||||||
|
(['shell', '--width'], 'expected one argument'),
|
||||||
|
(['shell', '--last_exit_code'], 'expected one argument'),
|
||||||
|
(['shell', '--last_pipe_status'], 'expected one argument'),
|
||||||
|
(['shell', '--config'], 'expected one argument'),
|
||||||
|
(['shell', '--theme_option'], 'expected one argument'),
|
||||||
|
(['shell', '--config_path'], 'expected one argument'),
|
||||||
|
(['shell', '--renderer_arg'], 'expected one argument'),
|
||||||
|
(['shell', '--jobnum'], 'expected one argument'),
|
||||||
|
(['-r', 'zsh_prompt'], 'too few arguments|the following arguments are required: ext'),
|
||||||
|
(['shell', '--last_exit_code', 'i'], 'invalid int value'),
|
||||||
|
(['shell', '--last_pipe_status', '1 i'], 'invalid <lambda> value'),
|
||||||
|
(['shell', '-R', 'abc'], 'invalid <lambda> value'),
|
||||||
|
]:
|
||||||
|
self.assertRaises(SystemExit, parser.parse_args, raising_args)
|
||||||
|
self.assertFalse(out.getvalue())
|
||||||
|
self.assertRegexpMatches(err.getvalue(), raising_reg)
|
||||||
|
flush()
|
||||||
|
|
||||||
|
def test_main_normal(self):
|
||||||
|
parser = get_argparser()
|
||||||
|
out = StrIO()
|
||||||
|
err = StrIO()
|
||||||
|
with replace_attr(sys, 'stdout', out, 'stderr', err):
|
||||||
|
for argv, expargs in [
|
||||||
|
(['shell'], {'ext': ['shell']}),
|
||||||
|
(['shell', '-r', 'zsh_prompt'], {'ext': ['shell'], 'renderer_module': 'zsh_prompt'}),
|
||||||
|
([
|
||||||
|
'shell',
|
||||||
|
'left',
|
||||||
|
'-r', 'zsh_prompt',
|
||||||
|
'--last_exit_code', '10',
|
||||||
|
'--last_pipe_status', '10 20 30',
|
||||||
|
'--jobnum=10',
|
||||||
|
'-w', '100',
|
||||||
|
'-c', 'common.term_truecolor=true',
|
||||||
|
'-c', 'common.spaces=4',
|
||||||
|
'-t', 'default.segment_data.hostname.before=H:',
|
||||||
|
'-p', '.',
|
||||||
|
'-R', 'smth={"abc":"def"}'
|
||||||
|
], {
|
||||||
|
'ext': ['shell'],
|
||||||
|
'side': 'left',
|
||||||
|
'renderer_module': 'zsh_prompt',
|
||||||
|
'last_exit_code': 10,
|
||||||
|
'last_pipe_status': [10, 20, 30],
|
||||||
|
'jobnum': 10,
|
||||||
|
'width': 100,
|
||||||
|
'config': {'common': {'term_truecolor': True, 'spaces': 4}},
|
||||||
|
'theme_option': {
|
||||||
|
'default': {
|
||||||
|
'segment_data': {
|
||||||
|
'hostname': {
|
||||||
|
'before': 'H:'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'config_path': '.',
|
||||||
|
'renderer_arg': {'smth': {'abc': 'def'}},
|
||||||
|
}),
|
||||||
|
(['shell', '-R', 'arg=true'], {'ext': ['shell'], 'renderer_arg': {'arg': True}}),
|
||||||
|
(['shell', '-t', 'default.segment_info={"hostname": {}}'], {
|
||||||
|
'ext': ['shell'],
|
||||||
|
'theme_option': {
|
||||||
|
'default': {
|
||||||
|
'segment_info': {
|
||||||
|
'hostname': {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
(['shell', '-c', 'common={ }'], {'ext': ['shell'], 'config': {'common': {}}}),
|
||||||
|
]:
|
||||||
|
args = parser.parse_args(argv)
|
||||||
|
finish_args(args)
|
||||||
|
for key, val in expargs.items():
|
||||||
|
self.assertEqual(getattr(args, key), val)
|
||||||
|
for key, val in args.__dict__.items():
|
||||||
|
if key not in expargs:
|
||||||
|
self.assertFalse(val, msg='key {0} is {1} while it should be something false'.format(key, val))
|
||||||
|
self.assertFalse(err.getvalue() + out.getvalue(), msg='unexpected output: {0!r} {1!r}'.format(
|
||||||
|
err.getvalue(),
|
||||||
|
out.getvalue(),
|
||||||
|
))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
from tests import main
|
||||||
|
main()
|
|
@ -54,10 +54,11 @@ class TestFilesystemWatchers(TestCase):
|
||||||
w = create_file_watcher(use_stat=False)
|
w = create_file_watcher(use_stat=False)
|
||||||
if w.is_stat_based:
|
if w.is_stat_based:
|
||||||
raise SkipTest('This test is not suitable for a stat based file watcher')
|
raise SkipTest('This test is not suitable for a stat based file watcher')
|
||||||
f1, f2 = os.path.join(INOTIFY_DIR, 'file1'), os.path.join(INOTIFY_DIR, 'file2')
|
f1, f2, f3 = map(lambda x: os.path.join(INOTIFY_DIR, 'file%d' % x), (1, 2, 3))
|
||||||
with open(f1, 'wb'):
|
with open(f1, 'wb'):
|
||||||
with open(f2, 'wb'):
|
with open(f2, 'wb'):
|
||||||
pass
|
with open(f3, 'wb'):
|
||||||
|
pass
|
||||||
ne = os.path.join(INOTIFY_DIR, 'notexists')
|
ne = os.path.join(INOTIFY_DIR, 'notexists')
|
||||||
self.assertRaises(OSError, w, ne)
|
self.assertRaises(OSError, w, ne)
|
||||||
self.assertTrue(w(f1))
|
self.assertTrue(w(f1))
|
||||||
|
@ -85,6 +86,13 @@ class TestFilesystemWatchers(TestCase):
|
||||||
# Check that deleting a file registers as a change
|
# Check that deleting a file registers as a change
|
||||||
os.unlink(f1)
|
os.unlink(f1)
|
||||||
self.do_test_for_change(w, f1)
|
self.do_test_for_change(w, f1)
|
||||||
|
# Test that changing the inode of a file does not cause it to stop
|
||||||
|
# being watched
|
||||||
|
os.rename(f3, f2)
|
||||||
|
self.do_test_for_change(w, f2)
|
||||||
|
self.assertFalse(w(f2), 'Spurious change detected')
|
||||||
|
os.utime(f2, None)
|
||||||
|
self.do_test_for_change(w, f2)
|
||||||
|
|
||||||
def test_tree_watcher(self):
|
def test_tree_watcher(self):
|
||||||
from powerline.lib.tree_watcher import TreeWatcher
|
from powerline.lib.tree_watcher import TreeWatcher
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mcd .git
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mcd .git
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240m3rd [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m.git [0;38;5;240;49;22m [0mcd ..
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240m3rd [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m.git [0;38;5;240;49;22m [0mcd ..
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV="$HOME/.virtenvs/some-virtual-environment"
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV="$HOME/.virtenvs/some-virtual-environment"
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;74;22m [0;38;5;231;48;5;74mⓔ some-virtual-environment [0;38;5;74;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV=
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;74;22m [0;38;5;231;48;5;74mⓔ some-virtual-environment [0;38;5;74;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV=
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mbash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mbash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
||||||
[1] PID
|
[1] PID
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;49;22m [0mfalse
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;49;22m [0mfalse
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mkill `cat pid` ; sleep 1s
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mkill `cat pid` ; sleep 1s
|
||||||
[1]+ Terminated bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done"
|
[1]+ Terminated bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done"
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mfalse
|
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mfalse
|
||||||
[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mexit
|
|
||||||
exit
|
|
||||||
|
|
|
@ -11,4 +11,5 @@ bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
||||||
false
|
false
|
||||||
kill `cat pid` ; sleep 1s
|
kill `cat pid` ; sleep 1s
|
||||||
false
|
false
|
||||||
|
true is the last line
|
||||||
exit
|
exit
|
||||||
|
|
|
@ -12,4 +12,5 @@ bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
||||||
false
|
false
|
||||||
kill `cat pid` ; sleep 1s
|
kill `cat pid` ; sleep 1s
|
||||||
false
|
false
|
||||||
|
true is the last line
|
||||||
exit
|
exit
|
||||||
|
|
|
@ -24,9 +24,14 @@ with codecs.open(fname, 'r', encoding='utf-8') as R:
|
||||||
if not found_cd:
|
if not found_cd:
|
||||||
found_cd = ('cd tests/shell/3rd' in line)
|
found_cd = ('cd tests/shell/3rd' in line)
|
||||||
continue
|
continue
|
||||||
line = line.replace(pid, 'PID')
|
if 'true is the last line' in line:
|
||||||
|
break
|
||||||
|
line = line.translate({
|
||||||
|
ord('\r'): None
|
||||||
|
})
|
||||||
line = line.replace(hostname, 'HOSTNAME')
|
line = line.replace(hostname, 'HOSTNAME')
|
||||||
line = line.replace(user, 'USER')
|
line = line.replace(user, 'USER')
|
||||||
|
line = line.replace(pid, 'PID')
|
||||||
W.write(line)
|
W.write(line)
|
||||||
|
|
||||||
os.rename(new_fname, fname)
|
os.rename(new_fname, fname)
|
||||||
|
|
|
@ -11,21 +11,32 @@ else
|
||||||
}
|
}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
check_screen_log() {
|
||||||
|
diff -u tests/test_shells/${1}.ok tests/shell/screen.log
|
||||||
|
# Explicit is better then implicit
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
run_test() {
|
run_test() {
|
||||||
SH="$1"
|
SH="$1"
|
||||||
SESNAME="powerline-shell-test-$$"
|
SESNAME="powerline-shell-test-$$"
|
||||||
screen -L -c tests/test_shells/screenrc -d -m -S "$SESNAME" \
|
screen -L -c tests/test_shells/screenrc -d -m -S "$SESNAME" \
|
||||||
env LANG=en_US.UTF-8 BINDFILE="$BINDFILE" "$@"
|
env LANG=en_US.UTF-8 BINDFILE="$BINDFILE" "$@"
|
||||||
screen -S "$SESNAME" -X readreg a tests/test_shells/input.$SH
|
screen -S "$SESNAME" -X readreg a tests/test_shells/input.$SH
|
||||||
|
# Wait for screen to initialize
|
||||||
sleep 0.3s
|
sleep 0.3s
|
||||||
screen -S "$SESNAME" -p 0 -X width 300 1
|
screen -S "$SESNAME" -p 0 -X width 300 1
|
||||||
screen -S "$SESNAME" -p 0 -X logfile tests/shell/screen.log
|
screen -S "$SESNAME" -p 0 -X logfile tests/shell/screen.log
|
||||||
screen -S "$SESNAME" -p 0 -X paste a
|
screen -S "$SESNAME" -p 0 -X paste a
|
||||||
|
# Wait for screen to exit (sending command to non-existing screen session
|
||||||
|
# fails; when launched instance exits corresponding session is deleted)
|
||||||
while screen -S "$SESNAME" -X blankerprg "" > /dev/null ; do
|
while screen -S "$SESNAME" -X blankerprg "" > /dev/null ; do
|
||||||
sleep 1s
|
sleep 0.1s
|
||||||
done
|
done
|
||||||
./tests/test_shells/postproc.py tests/shell/screen.log
|
./tests/test_shells/postproc.py tests/shell/screen.log
|
||||||
if ! diff -u tests/test_shells/${SH}.ok tests/shell/screen.log | cat -v ; then
|
if ! check_screen_log ${SH} ; then
|
||||||
|
# Repeat the diff to make it better viewable in travis output
|
||||||
|
check_screen_log ${SH} | cat -v
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
|
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mcd .git
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mcd .git
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240m3rd [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m.git [0;38;5;240;49;22m [0mcd ..
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240m3rd [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m.git [0;38;5;240;49;22m [0mcd ..
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV="$HOME/.virtenvs/some-virtual-environment"
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV="$HOME/.virtenvs/some-virtual-environment"
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;74;22m [0;38;5;231;48;5;74mⓔ some-virtual-environment [0;38;5;74;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV=
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;74;22m [0;38;5;231;48;5;74mⓔ some-virtual-environment [0;38;5;74;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mVIRTUAL_ENV=
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mbash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mbash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done" &
|
||||||
[1] PID
|
[1] PID
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;49;22m [0mfalse
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;49;22m [0mfalse
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mkill `cat pid` ; sleep 1s
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;166;22m [0;38;5;220;48;5;166m1 [0;38;5;166;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mkill `cat pid` ; sleep 1s
|
||||||
[1] + terminated bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done"
|
[1] + terminated bash -c "echo \$\$>pid ; while true ; do sleep 0.1s ; done"
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mfalse
|
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;49;22m [0mfalse
|
||||||
[0m[23m[24m[J[0;38;5;220;48;5;166m HOSTNAME [0;38;5;166;48;5;31;22m [0;38;5;231;48;5;31;1mUSER [0;38;5;31;48;5;236;22m [0;38;5;250;48;5;236m BRANCH [0;38;5;236;48;5;240;22m [0;38;5;250;48;5;240m⋯ [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mtests [0;38;5;245;48;5;240;22m [0;38;5;250;48;5;240mshell [0;38;5;245;48;5;240;22m [0;38;5;252;48;5;240;1m3rd [0;38;5;240;48;5;52;22m [0;38;5;231;48;5;52m1 [0;38;5;52;49;22m [0mexit
|
|
||||||
|
|
Loading…
Reference in New Issue