tobes: IMHO this breaks the formatter, because the original tests fail.

With #1095 I do not actually understand what the issue is that you are describing.  Maybe if I understood that then this would make more sense.

Now maybe the current behaviour of the formatter is incorrect.  Then we should have a clear discussion about  that and how to improve it.
lasers: Brief explanation. Apply the git patch. I included some examples. Test each as you go.
```
+    # format = 'A, B, C // {true}'    # IS OK     | A, B, C // True
+    # format = 'A, B, C // {false}'   # IS NOT OK |
+    # format = 'A, B, C // {none}'    # IS NOT OK |
+    # format = 'A, B, C // {false} '  # IS OK     | A, B, C // False
+    # format = 'A, B, C // {none} '   # IS OK     | A, B, C // None
```

Different examples.
* `'Repeat: {repeat}'` -- Expected -- `'Repeat: False'` -- Got `''`.
* `'Hi. Long string. {none}'` -- Expected -- `Hi. Long string. None` -- Got `''`.

First, I never knew about this `{false}` --> `''` and `{none}` --> `''` until I made a pull request... and failed the tests here. Color me surprised. I think few tests may be wrong (fixed now) because it prints `True` on `{true}` and just disappear on `{false}`, `{none}`.
tobes: > First, I never knew about this {false} --> '' and {none} --> '' until I made a pull request

That is intentional.  Now whether it is a good idea is a different issue. 

The main issue is that the formatter still lacks documentation.
lasers: >That is intentional. Now whether it is a good idea is a different issue.

I amended two tests in this commit. Check them out and decide.

And we can have many `{False}`, `{None}` as we want... and still get nothing.
```
diff --git a/py3status/modules/static_string.py b/py3status/modules/static_string.py
index dbcec8c6..e15b30a4 100644
--- a/py3status/modules/static_string.py
+++ b/py3status/modules/static_string.py
@@ -16,12 +16,15 @@ class Py3status:
     """
     """
     # available configuration parameters
-    format = 'Hello, world!'
+    format = ' '.join(['{false} {none}' for x in range(5)])
+    # format += ' '
+    # format += ' {true}'
 
     def static_string(self):
         return {
             'cached_until': self.py3.CACHE_FOREVER,
-            'full_text': self.py3.safe_format(self.format),
+            'full_text': self.py3.safe_format(
+                self.format, {'true': True, 'false': False, 'none': None}),
         }
```
```
$ python3 static_string.py
[]
```
```
$ python3 static_string.py    # add space
{'full_text': 'False None False None False None False None False None ', 'cached_until': -1}
```
```
$ python3 static_string.py    # add {true}
{'cached_until': -1, 'full_text': 'False None False None False None False None False None True'}
```
It's been said many times that the truth will set you free. I guess it was really true.
ultrabug: @tobes bump plz?
diff --git a/py3status/formatter.py b/py3status/formatter.py
index e265819e..db2875de 100644
--- a/py3status/formatter.py
+++ b/py3status/formatter.py
@@ -268,7 +268,9 @@ class Placeholder:
                 output = u'{%s%s}' % (self.key, self.format)
                 value = value_ = output.format(**{self.key: value})
 
-            if block.commands.not_zero:
+            if block.parent is None:
+                valid = True
+            elif block.commands.not_zero:
                 valid = value_ not in ['', 'None', None, False, '0', '0.0', 0, 0.0]
             else:
                 # '', None, and False are ignored

Formatting returns empty when closing with a False or None placeholder
Formatting returns empty when closing with a `False` or `None` placeholder.
```diff
diff --git a/py3status/modules/static_string.py b/py3status/modules/static_string.py
index dbcec8c6..593b3740 100644
--- a/py3status/modules/static_string.py
+++ b/py3status/modules/static_string.py
@@ -18,10 +18,17 @@ class Py3status:
     # available configuration parameters
     format = 'Hello, world!'
 
+    # format = 'A, B, C // {true}'    # IS OK     | A, B, C // True
+    # format = 'A, B, C // {false}'   # IS NOT OK |
+    # format = 'A, B, C // {none}'    # IS NOT OK |
+    # format = 'A, B, C // {false} '  # IS OK     | A, B, C // False
+    # format = 'A, B, C // {none} '   # IS OK     | A, B, C // None
+
     def static_string(self):
+        new_dict = {'true': True, 'false': False, 'none': None}
         return {
             'cached_until': self.py3.CACHE_FOREVER,
-            'full_text': self.py3.safe_format(self.format),
+            'full_text': self.py3.safe_format(self.format, new_dict),
         }
```
diff --git a/tests/test_formatter.py b/tests/test_formatter.py
index 0d1bf9b5..76febab4 100644
--- a/tests/test_formatter.py
+++ b/tests/test_formatter.py
@@ -296,10 +296,18 @@ def test_26():
 
 
 def test_27():
-    run_formatter({'format': '{None}', 'expected': '', })
+    run_formatter({'format': '{None}', 'expected': 'None', })
 
 
 def test_27a():
+    run_formatter({'format': '{None} {no}', 'expected': 'None False', })
+
+
+def test_27b():
+    run_formatter({'format': '[Hello {None}] {no}', 'expected': ' False', })
+
+
+def test_27c():
     run_formatter({'format': '[Hi, my name is {None_str}]', 'expected': '', })
 
 
@@ -312,7 +320,7 @@ def test_29():
 
 
 def test_30():
-    run_formatter({'format': '{no}', 'expected': '', })
+    run_formatter({'format': '{no}', 'expected': 'False', })
 
 
 def test_31():
@@ -1134,7 +1142,7 @@ def test_module_true_value():
 
 
 def test_module_false_value():
-    run_formatter({'format': '{module_false}', 'expected': ''})
+    run_formatter({'format': '{module_false}', 'expected': 'False'})
 
 
 def test_zero_format_1():

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-flake8
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
flake8==5.0.4
importlib-metadata==4.2.0
iniconfig==1.1.1
mccabe==0.7.0
packaging==21.3
pluggy==1.0.0
py==1.11.0
-e git+https://github.com/ultrabug/py3status.git@dcd3dda64b82e536cfd0233691d374a22e96aeac#egg=py3status
pycodestyle==2.9.1
pyflakes==2.5.0
pyparsing==3.1.4
pytest==7.0.1
pytest-flake8==1.1.1
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: py3status
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - flake8==5.0.4
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - mccabe==0.7.0
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-flake8==1.1.1
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/py3status

tests/test_formatter.py::test_27 tests/test_formatter.py::test_27a tests/test_formatter.py::test_27b tests/test_formatter.py::test_30 tests/test_formatter.py::test_module_false_value
tests/test_formatter.py::test_1 tests/test_formatter.py::test_2 tests/test_formatter.py::test_3 tests/test_formatter.py::test_4 tests/test_formatter.py::test_5 tests/test_formatter.py::test_6 tests/test_formatter.py::test_7 tests/test_formatter.py::test_8 tests/test_formatter.py::test_9 tests/test_formatter.py::test_10 tests/test_formatter.py::test_11 tests/test_formatter.py::test_12 tests/test_formatter.py::test_13 tests/test_formatter.py::test_14 tests/test_formatter.py::test_15 tests/test_formatter.py::test_16 tests/test_formatter.py::test_16a tests/test_formatter.py::test_16b tests/test_formatter.py::test_17 tests/test_formatter.py::test_18 tests/test_formatter.py::test_19 tests/test_formatter.py::test_20 tests/test_formatter.py::test_21 tests/test_formatter.py::test_22 tests/test_formatter.py::test_23 tests/test_formatter.py::test_24 tests/test_formatter.py::test_24a tests/test_formatter.py::test_24b tests/test_formatter.py::test_25 tests/test_formatter.py::test_26 tests/test_formatter.py::test_27c tests/test_formatter.py::test_28 tests/test_formatter.py::test_29 tests/test_formatter.py::test_31 tests/test_formatter.py::test_32 tests/test_formatter.py::test_33 tests/test_formatter.py::test_34 tests/test_formatter.py::test_35 tests/test_formatter.py::test_36 tests/test_formatter.py::test_37 tests/test_formatter.py::test_38 tests/test_formatter.py::test_39 tests/test_formatter.py::test_40 tests/test_formatter.py::test_41 tests/test_formatter.py::test_42 tests/test_formatter.py::test_43 tests/test_formatter.py::test_44 tests/test_formatter.py::test_45 tests/test_formatter.py::test_46 tests/test_formatter.py::test_47 tests/test_formatter.py::test_48 tests/test_formatter.py::test_49 tests/test_formatter.py::test_50 tests/test_formatter.py::test_51 tests/test_formatter.py::test_52 tests/test_formatter.py::test_53 tests/test_formatter.py::test_54 tests/test_formatter.py::test_55 tests/test_formatter.py::test_56 tests/test_formatter.py::test_57 tests/test_formatter.py::test_58 tests/test_formatter.py::test_58a tests/test_formatter.py::test_59 tests/test_formatter.py::test_59a tests/test_formatter.py::test_60 tests/test_formatter.py::test_61 tests/test_formatter.py::test_62 tests/test_formatter.py::test_63 tests/test_formatter.py::test_64 tests/test_formatter.py::test_65 tests/test_formatter.py::test_66 tests/test_formatter.py::test_67 tests/test_formatter.py::test_68 tests/test_formatter.py::test_69 tests/test_formatter.py::test_70 tests/test_formatter.py::test_70a tests/test_formatter.py::test_71 tests/test_formatter.py::test_72 tests/test_formatter.py::test_73 tests/test_formatter.py::test_74 tests/test_formatter.py::test_75 tests/test_formatter.py::test_76 tests/test_formatter.py::test_77 tests/test_formatter.py::test_78 tests/test_formatter.py::test_else_true tests/test_formatter.py::test_else_false tests/test_formatter.py::test_color_name_1 tests/test_formatter.py::test_color_name_2 tests/test_formatter.py::test_color_name_3 tests/test_formatter.py::test_color_name_4 tests/test_formatter.py::test_color_name_4a tests/test_formatter.py::test_color_name_5 tests/test_formatter.py::test_color_name_5a tests/test_formatter.py::test_color_name_6 tests/test_formatter.py::test_color_name_7 tests/test_formatter.py::test_color_name_7a tests/test_formatter.py::test_color_1 tests/test_formatter.py::test_color_1a tests/test_formatter.py::test_color_2 tests/test_formatter.py::test_color_3 tests/test_formatter.py::test_color_4 tests/test_formatter.py::test_color_5 tests/test_formatter.py::test_color_6 tests/test_formatter.py::test_color_7 tests/test_formatter.py::test_color_7a tests/test_formatter.py::test_color_8 tests/test_formatter.py::test_color_8a tests/test_formatter.py::test_color_9 tests/test_formatter.py::test_color_9a tests/test_formatter.py::test_composite_1 tests/test_formatter.py::test_composite_2 tests/test_formatter.py::test_composite_3 tests/test_formatter.py::test_composite_4 tests/test_formatter.py::test_composite_5 tests/test_formatter.py::test_composite_6 tests/test_formatter.py::test_attr_getter tests/test_formatter.py::test_min_length_1 tests/test_formatter.py::test_min_length_2 tests/test_formatter.py::test_min_length_3 tests/test_formatter.py::test_min_length_4 tests/test_formatter.py::test_min_length_5 tests/test_formatter.py::test_min_length_6 tests/test_formatter.py::test_numeric_strings_1 tests/test_formatter.py::test_numeric_strings_2 tests/test_formatter.py::test_numeric_strings_3 tests/test_formatter.py::test_numeric_strings_4 tests/test_formatter.py::test_numeric_strings_5 tests/test_formatter.py::test_numeric_strings_6 tests/test_formatter.py::test_not_zero_1 tests/test_formatter.py::test_not_zero_2 tests/test_formatter.py::test_not_zero_3 tests/test_formatter.py::test_not_zero_4 tests/test_formatter.py::test_not_zero_5 tests/test_formatter.py::test_not_zero_6 tests/test_formatter.py::test_not_zero_7 tests/test_formatter.py::test_not_zero_8 tests/test_formatter.py::test_not_zero_9 tests/test_formatter.py::test_not_zero_10 tests/test_formatter.py::test_not_zero_11 tests/test_formatter.py::test_bad_composite_color tests/test_formatter.py::test_soft_1 tests/test_formatter.py::test_soft_2 tests/test_formatter.py::test_soft_3 tests/test_formatter.py::test_soft_4 tests/test_formatter.py::test_soft_5 tests/test_formatter.py::test_soft_6 tests/test_formatter.py::test_soft_7 tests/test_formatter.py::test_module_true tests/test_formatter.py::test_module_false tests/test_formatter.py::test_module_true_value tests/test_formatter.py::test_zero_format_1 tests/test_formatter.py::test_zero_format_2 tests/test_formatter.py::test_zero_format_3 tests/test_formatter.py::test_zero_format_4 tests/test_formatter.py::test_inherit_not_zero_1 tests/test_formatter.py::test_inherit_not_zero_2 tests/test_formatter.py::test_inherit_not_zero_3 tests/test_formatter.py::test_inherit_show_1 tests/test_formatter.py::test_inherit_color_1 tests/test_formatter.py::test_inherit_color_2 tests/test_formatter.py::test_conditions_1 tests/test_formatter.py::test_conditions_2 tests/test_formatter.py::test_conditions_3 tests/test_formatter.py::test_conditions_4 tests/test_formatter.py::test_conditions_5 tests/test_formatter.py::test_conditions_6 tests/test_formatter.py::test_conditions_7 tests/test_formatter.py::test_conditions_8 tests/test_formatter.py::test_conditions_9 tests/test_formatter.py::test_conditions_10 tests/test_formatter.py::test_conditions_11 tests/test_formatter.py::test_conditions_12 tests/test_formatter.py::test_conditions_13 tests/test_formatter.py::test_conditions_14 tests/test_formatter.py::test_conditions_15 tests/test_formatter.py::test_conditions_16 tests/test_formatter.py::test_conditions_17 tests/test_formatter.py::test_conditions_18 tests/test_formatter.py::test_conditions_19 tests/test_formatter.py::test_conditions_20 tests/test_formatter.py::test_conditions_21 tests/test_formatter.py::test_conditions_22 tests/test_formatter.py::test_conditions_23 tests/test_formatter.py::test_trailing_zeroes_1 tests/test_formatter.py::test_trailing_zeroes_2 tests/test_formatter.py::test_ceiling_numbers_1 tests/test_formatter.py::test_ceiling_numbers_2
py3status/formatter.py
py3status/formatter.py