From 063a45672f4aea230b869ae3f162ecbea34618e8 Mon Sep 17 00:00:00 2001
From: William Elwood <w.elwood08@gmail.com>
Date: Mon, 13 Feb 2017 22:41:22 +0000
Subject: [PATCH] Make length of `output_padding` in renderer controllable

Defaults to previous behaviour (length 1).
---
 docs/source/configuration/reference.rst |  4 ++++
 powerline/renderer.py                   |  4 ++--
 powerline/theme.py                      |  1 +
 tests/test_configuration.py             | 22 ++++++++++++++++++++++
 4 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/docs/source/configuration/reference.rst b/docs/source/configuration/reference.rst
index 6b622687..2b766116 100644
--- a/docs/source/configuration/reference.rst
+++ b/docs/source/configuration/reference.rst
@@ -361,6 +361,10 @@ ascii                       Theme without any unicode characters at all
        is set in the local themes it will be ignored. This option may also be 
        ignored in some bindings.
 
+``outer_padding``
+    Defines number of spaces at the end of output (on the right side) or at 
+    the start of output (on the left side). Defaults to ``1``.
+
 
 ``dividers``
     Defines the dividers used in all Powerline extensions.
diff --git a/powerline/renderer.py b/powerline/renderer.py
index 147751a8..040b406a 100644
--- a/powerline/renderer.py
+++ b/powerline/renderer.py
@@ -458,7 +458,7 @@ class Renderer(object):
 					segment is first_segment
 					if side == 'left' else
 					segment is last_segment
-				))
+				)) * theme.outer_padding
 
 				draw_divider = segment['draw_' + divider_type + '_divider']
 				segment_len += outer_padding
@@ -519,7 +519,7 @@ class Renderer(object):
 					segment is first_segment
 					if side == 'left' else
 					segment is last_segment
-				)) * ' '
+				)) * theme.outer_padding * ' '
 				divider_type = 'soft' if compare_segment['highlight']['bg'] == segment['highlight']['bg'] else 'hard'
 
 				divider_highlighted = ''
diff --git a/powerline/theme.py b/powerline/theme.py
index 26b67a3b..b3a23a1f 100644
--- a/powerline/theme.py
+++ b/powerline/theme.py
@@ -69,6 +69,7 @@ class Theme(object):
 			self.cursor_space_multiplier = None
 		self.cursor_columns = theme_config.get('cursor_columns')
 		self.spaces = theme_config['spaces']
+		self.outer_padding = int(theme_config.get('outer_padding', 1))
 		self.segments = []
 		self.EMPTY_SEGMENT = {
 			'contents': None,
diff --git a/tests/test_configuration.py b/tests/test_configuration.py
index 56ca0c2b..fd3d4097 100644
--- a/tests/test_configuration.py
+++ b/tests/test_configuration.py
@@ -550,6 +550,28 @@ class TestDisplayCondition(TestRender):
 			self.assertRenderEqual(p, '{56} s1{6-}>>{--}', mode='m1')
 
 
+class TestOuterPadding(TestRender):
+	@add_args
+	def test_outer_padding_left(self, p, config):
+		config['themes/' + UT]['outer_padding'] = 5
+		self.assertRenderEqual(p, '{121}     s{24}>>{344}g{4-}>>{--}', side='left')
+
+	@add_args
+	def test_outer_padding_right(self, p, config):
+		config['themes/' + UT]['outer_padding'] = 5
+		self.assertRenderEqual(p, '{4-}<<{344}f     {--}', side='right')
+
+	@add_args
+	def test_outer_padding_ten(self, p, config):
+		config['themes/' + UT]['outer_padding'] = 10
+		self.assertRenderEqual(p, '{121}          s  {24}>>{344}g{34}>{34}|{344} f          {--}', width=30)
+
+	@add_args
+	def test_outer_padding_zero(self, p, config):
+		config['themes/' + UT]['outer_padding'] = 0
+		self.assertRenderEqual(p, '{121}s            {24}>>{344}g{34}>{34}|{344}           f{--}', width=30)
+
+
 class TestSegmentAttributes(TestRender):
 	@add_args
 	def test_no_attributes(self, p, config):