We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Unexpected exception while updating completions
<!--- Provide a general summary of the issue in the Title above -->
When I set $UPDATE_COMPLETIONS_ON_KEYPRESS = True and type for instance /usr/bin/ls -a in terminal, following exception is thrown: "Exception [Errno 13] Permission denied: '/usr/bin/ls.json'"
<!--- If you have a question along the lines of "How do I do this Bash command in xonsh"
please first look over the Bash to Xonsh translation guide: https://xon.sh/bash_to_xsh.html
If you don't find an answer there, please do open an issue! -->

## xonfig

<details>

```
+------------------+----------------------+
| xonsh            | 0.13.4               |
| Python           | 3.8.10               |
| PLY              | 3.11                 |
| have readline    | True                 |
| prompt toolkit   | 3.0.36               |
| shell type       | prompt_toolkit       |
| history backend  | json                 |
| pygments         | 2.14.0               |
| on posix         | True                 |
| on linux         | True                 |
| distro           | ubuntu               |
| on wsl           | False                |
| on darwin        | False                |
| on windows       | False                |
| on cygwin        | False                |
| on msys2         | False                |
| is superuser     | False                |
| default encoding | utf-8                |
| xonsh encoding   | utf-8                |
| encoding errors  | surrogateescape      |
| xontrib          | []                   |
| RC file 1        | /home/ralis/.xonshrc |
+------------------+----------------------+

```

</details>

## Expected Behavior
<!--- Tell us what should happen -->
The warning should be either more subtle or no completion suggestions should be shown.
## Current Behavior
<!--- Tell us what happens instead of the expected behavior -->
Huge multi-line error is printed.
<!--- If part of your bug report is a traceback, please first enter debug mode before triggering the error
To enter debug mode, set the environment variable `XONSH_DEBUG=1` _before_ starting `xonsh`.
On Linux and OSX, an easy way to to do this is to run `env XONSH_DEBUG=1 xonsh` -->

### Traceback (if applicable)

<details>

```

Unhandled exception in event loop:
  File "/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/buffer.py", line 1939, in new_coroutine
    await coroutine(*a, **kw)
  File "/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/buffer.py", line 1763, in async_completer
    async for completion in async_generator:
  File "/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/completion/base.py", line 326, in get_completions_async
    async for completion in completer.get_completions_async(
  File "/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/completion/base.py", line 202, in get_completions_async
    for item in self.get_completions(document, complete_event):
  File "/usr/local/lib/python3.8/dist-packages/xonsh/ptk_shell/completer.py", line 58, in get_completions
    completions, plen = self.completer.complete(
  File "/usr/local/lib/python3.8/dist-packages/xonsh/completer.py", line 121, in complete
    return self.complete_from_context(
  File "/usr/local/lib/python3.8/dist-packages/xonsh/completer.py", line 272, in complete_from_context
    for comp in self.generate_completions(
  File "/usr/local/lib/python3.8/dist-packages/xonsh/completer.py", line 233, in generate_completions
    for comp in res:
  File "/usr/local/lib/python3.8/dist-packages/xonsh/completers/man.py", line 137, in completions
    for desc, opts in _parse_man_page_options(cmd).items():
  File "/usr/local/lib/python3.8/dist-packages/xonsh/completers/man.py", line 121, in _parse_man_page_options
    path.write_text(json.dumps(options))
  File "/usr/lib/python3.8/pathlib.py", line 1255, in write_text
    with self.open(mode='w', encoding=encoding, errors=errors) as f:
  File "/usr/lib/python3.8/pathlib.py", line 1222, in open
    return io.open(self, mode, buffering, encoding, errors, newline,
  File "/usr/lib/python3.8/pathlib.py", line 1078, in _opener
    return self._accessor.open(self, flags, mode)

Exception [Errno 13] Permission denied: '/usr/bin/ls.json'

```

</details>

## Steps to Reproduce
<!--- Please try to write out a minimal reproducible snippet to trigger the bug, it will help us fix it! -->
```xsh
$UPDATE_COMPLETIONS_ON_KEYPRESS = True
/usr/bin/ls -  # exception after typing
```
## For community
⬇️  **Please click the 👍 reaction instead of leaving a `+1` or 👍  comment**


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `xonsh/completers/man.py`
Content:
```
1 import functools
2 import json
3 import re
4 import shutil
5 import subprocess
6 import textwrap
7 from pathlib import Path
8 
9 from xonsh.built_ins import XSH
10 from xonsh.completers.tools import RichCompletion, contextual_command_completer
11 from xonsh.parsers.completion_context import CommandContext
12 
13 
14 @functools.cache
15 def get_man_completions_path() -> Path:
16     env = XSH.env or {}
17     datadir = Path(env["XONSH_DATA_DIR"]) / "generated_completions" / "man"
18     if datadir.exists() and (not datadir.is_dir()):
19         shutil.move(datadir, datadir.with_suffix(".bkp"))
20     if not datadir.exists():
21         datadir.mkdir(exist_ok=True, parents=True)
22     return datadir
23 
24 
25 def _get_man_page(cmd: str):
26     """without control characters"""
27     env = XSH.env.detype()
28     manpage = subprocess.Popen(
29         ["man", cmd], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, env=env
30     )
31     # This is a trick to get rid of reverse line feeds
32     return subprocess.check_output(["col", "-b"], stdin=manpage.stdout, env=env)
33 
34 
35 @functools.cache
36 def _man_option_string_regex():
37     return re.compile(
38         r"(?:(,\s?)|^|(\sor\s))(?P<option>-[\w]|--[\w-]+)(?=\[?(\s|,|=\w+|$))"
39     )
40 
41 
42 def generate_options_of(cmd: str):
43     out = _get_man_page(cmd)
44     if not out:
45         return
46 
47     def get_headers(text: str):
48         """split as header-body based on indent"""
49         if not text:
50             return
51         header = ""
52         body = []
53         for line in textwrap.dedent(text.replace("\n\t", "\n    ")).splitlines():
54             if not line.strip():
55                 continue
56             if line.startswith((" ", "\t")):
57                 body.append(line)
58             else:
59                 if header or body:
60                     yield header, body
61 
62                 # found new section
63                 header = line.strip()
64                 body = []
65         if header or body:
66             yield header, body
67 
68     def split_options_string(text: str):
69         text = text.strip()
70         regex = _man_option_string_regex()
71 
72         regex.findall(text)
73         options = []
74         for match in regex.finditer(text):
75             option = match.groupdict().pop("option", None)
76             if option:
77                 options.append(option)
78             text = text[match.end() :]
79         return options, text.strip()
80 
81     def get_option_section():
82         option_sect = dict(get_headers(out.decode()))
83         small_names = {k.lower(): k for k in option_sect}
84         for head in (
85             "options",
86             "command options",
87             "description",
88         ):  # prefer sections in this order
89             if head in small_names:
90                 title = small_names[head]
91                 return "\n".join(option_sect[title])
92 
93     def get_options(text):
94         """finally get the options"""
95         # return old section if
96         for opt, lines in get_headers(text):
97             # todo: some have [+-] or such vague notations
98             if opt.startswith("-"):
99                 # sometime a single line will have both desc and options
100                 option_strings, rest = split_options_string(opt)
101                 descs = []
102                 if rest:
103                     descs.append(rest)
104                 if lines:
105                     descs.append(textwrap.dedent("\n".join(lines)))
106                 if option_strings:
107                     yield ". ".join(descs), tuple(option_strings)
108             elif lines:
109                 # sometimes the options are nested inside subheaders
110                 yield from get_options("\n".join(lines))
111 
112     yield from get_options(get_option_section())
113 
114 
115 @functools.lru_cache(maxsize=10)
116 def _parse_man_page_options(cmd: str) -> "dict[str, tuple[str, ...]]":
117     path = get_man_completions_path() / f"{cmd}.json"
118     if path.exists():
119         return json.loads(path.read_text())
120     options = dict(generate_options_of(cmd))
121     path.write_text(json.dumps(options))
122     return options
123 
124 
125 @contextual_command_completer
126 def complete_from_man(context: CommandContext):
127     """
128     Completes an option name, based on the contents of the associated man
129     page.
130     """
131 
132     if context.arg_index == 0 or not context.prefix.startswith("-"):
133         return
134     cmd = context.args[0].value
135 
136     def completions():
137         for desc, opts in _parse_man_page_options(cmd).items():
138             yield RichCompletion(
139                 value=opts[-1], display=", ".join(opts), description=desc
140             )
141 
142     return completions(), False
143
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/xonsh/completers/man.py b/xonsh/completers/man.py
--- a/xonsh/completers/man.py
+++ b/xonsh/completers/man.py
@@ -114,7 +114,7 @@
 
 @functools.lru_cache(maxsize=10)
 def _parse_man_page_options(cmd: str) -> "dict[str, tuple[str, ...]]":
-    path = get_man_completions_path() / f"{cmd}.json"
+    path = get_man_completions_path() / Path(cmd).with_suffix(".json").name
     if path.exists():
         return json.loads(path.read_text())
     options = dict(generate_options_of(cmd))

{"golden_diff": "diff --git a/xonsh/completers/man.py b/xonsh/completers/man.py\n--- a/xonsh/completers/man.py\n+++ b/xonsh/completers/man.py\n@@ -114,7 +114,7 @@\n \n @functools.lru_cache(maxsize=10)\n def _parse_man_page_options(cmd: str) -> \"dict[str, tuple[str, ...]]\":\n-    path = get_man_completions_path() / f\"{cmd}.json\"\n+    path = get_man_completions_path() / Path(cmd).with_suffix(\".json\").name\n     if path.exists():\n         return json.loads(path.read_text())\n     options = dict(generate_options_of(cmd))\n", "issue": "Unexpected exception while updating completions\n<!--- Provide a general summary of the issue in the Title above -->\r\nWhen I set $UPDATE_COMPLETIONS_ON_KEYPRESS = True and type for instance /usr/bin/ls -a in terminal, following exception is thrown: \"Exception [Errno 13] Permission denied: '/usr/bin/ls.json'\"\r\n<!--- If you have a question along the lines of \"How do I do this Bash command in xonsh\"\r\nplease first look over the Bash to Xonsh translation guide: https://xon.sh/bash_to_xsh.html\r\nIf you don't find an answer there, please do open an issue! -->\r\n\r\n## xonfig\r\n\r\n<details>\r\n\r\n```\r\n+------------------+----------------------+\r\n| xonsh            | 0.13.4               |\r\n| Python           | 3.8.10               |\r\n| PLY              | 3.11                 |\r\n| have readline    | True                 |\r\n| prompt toolkit   | 3.0.36               |\r\n| shell type       | prompt_toolkit       |\r\n| history backend  | json                 |\r\n| pygments         | 2.14.0               |\r\n| on posix         | True                 |\r\n| on linux         | True                 |\r\n| distro           | ubuntu               |\r\n| on wsl           | False                |\r\n| on darwin        | False                |\r\n| on windows       | False                |\r\n| on cygwin        | False                |\r\n| on msys2         | False                |\r\n| is superuser     | False                |\r\n| default encoding | utf-8                |\r\n| xonsh encoding   | utf-8                |\r\n| encoding errors  | surrogateescape      |\r\n| xontrib          | []                   |\r\n| RC file 1        | /home/ralis/.xonshrc |\r\n+------------------+----------------------+\r\n\r\n```\r\n\r\n</details>\r\n\r\n## Expected Behavior\r\n<!--- Tell us what should happen -->\r\nThe warning should be either more subtle or no completion suggestions should be shown.\r\n## Current Behavior\r\n<!--- Tell us what happens instead of the expected behavior -->\r\nHuge multi-line error is printed.\r\n<!--- If part of your bug report is a traceback, please first enter debug mode before triggering the error\r\nTo enter debug mode, set the environment variable `XONSH_DEBUG=1` _before_ starting `xonsh`.\r\nOn Linux and OSX, an easy way to to do this is to run `env XONSH_DEBUG=1 xonsh` -->\r\n\r\n### Traceback (if applicable)\r\n\r\n<details>\r\n\r\n```\r\n\r\nUnhandled exception in event loop:\r\n  File \"/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/buffer.py\", line 1939, in new_coroutine\r\n    await coroutine(*a, **kw)\r\n  File \"/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/buffer.py\", line 1763, in async_completer\r\n    async for completion in async_generator:\r\n  File \"/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/completion/base.py\", line 326, in get_completions_async\r\n    async for completion in completer.get_completions_async(\r\n  File \"/home/ralis/.local/lib/python3.8/site-packages/prompt_toolkit/completion/base.py\", line 202, in get_completions_async\r\n    for item in self.get_completions(document, complete_event):\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/ptk_shell/completer.py\", line 58, in get_completions\r\n    completions, plen = self.completer.complete(\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/completer.py\", line 121, in complete\r\n    return self.complete_from_context(\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/completer.py\", line 272, in complete_from_context\r\n    for comp in self.generate_completions(\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/completer.py\", line 233, in generate_completions\r\n    for comp in res:\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/completers/man.py\", line 137, in completions\r\n    for desc, opts in _parse_man_page_options(cmd).items():\r\n  File \"/usr/local/lib/python3.8/dist-packages/xonsh/completers/man.py\", line 121, in _parse_man_page_options\r\n    path.write_text(json.dumps(options))\r\n  File \"/usr/lib/python3.8/pathlib.py\", line 1255, in write_text\r\n    with self.open(mode='w', encoding=encoding, errors=errors) as f:\r\n  File \"/usr/lib/python3.8/pathlib.py\", line 1222, in open\r\n    return io.open(self, mode, buffering, encoding, errors, newline,\r\n  File \"/usr/lib/python3.8/pathlib.py\", line 1078, in _opener\r\n    return self._accessor.open(self, flags, mode)\r\n\r\nException [Errno 13] Permission denied: '/usr/bin/ls.json'\r\n\r\n```\r\n\r\n</details>\r\n\r\n## Steps to Reproduce\r\n<!--- Please try to write out a minimal reproducible snippet to trigger the bug, it will help us fix it! -->\r\n```xsh\r\n$UPDATE_COMPLETIONS_ON_KEYPRESS = True\r\n/usr/bin/ls -  # exception after typing\r\n```\r\n## For community\r\n\u2b07\ufe0f  **Please click the \ud83d\udc4d reaction instead of leaving a `+1` or \ud83d\udc4d  comment**\r\n\n", "before_files": [{"content": "import functools\nimport json\nimport re\nimport shutil\nimport subprocess\nimport textwrap\nfrom pathlib import Path\n\nfrom xonsh.built_ins import XSH\nfrom xonsh.completers.tools import RichCompletion, contextual_command_completer\nfrom xonsh.parsers.completion_context import CommandContext\n\n\n@functools.cache\ndef get_man_completions_path() -> Path:\n    env = XSH.env or {}\n    datadir = Path(env[\"XONSH_DATA_DIR\"]) / \"generated_completions\" / \"man\"\n    if datadir.exists() and (not datadir.is_dir()):\n        shutil.move(datadir, datadir.with_suffix(\".bkp\"))\n    if not datadir.exists():\n        datadir.mkdir(exist_ok=True, parents=True)\n    return datadir\n\n\ndef _get_man_page(cmd: str):\n    \"\"\"without control characters\"\"\"\n    env = XSH.env.detype()\n    manpage = subprocess.Popen(\n        [\"man\", cmd], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, env=env\n    )\n    # This is a trick to get rid of reverse line feeds\n    return subprocess.check_output([\"col\", \"-b\"], stdin=manpage.stdout, env=env)\n\n\n@functools.cache\ndef _man_option_string_regex():\n    return re.compile(\n        r\"(?:(,\\s?)|^|(\\sor\\s))(?P<option>-[\\w]|--[\\w-]+)(?=\\[?(\\s|,|=\\w+|$))\"\n    )\n\n\ndef generate_options_of(cmd: str):\n    out = _get_man_page(cmd)\n    if not out:\n        return\n\n    def get_headers(text: str):\n        \"\"\"split as header-body based on indent\"\"\"\n        if not text:\n            return\n        header = \"\"\n        body = []\n        for line in textwrap.dedent(text.replace(\"\\n\\t\", \"\\n    \")).splitlines():\n            if not line.strip():\n                continue\n            if line.startswith((\" \", \"\\t\")):\n                body.append(line)\n            else:\n                if header or body:\n                    yield header, body\n\n                # found new section\n                header = line.strip()\n                body = []\n        if header or body:\n            yield header, body\n\n    def split_options_string(text: str):\n        text = text.strip()\n        regex = _man_option_string_regex()\n\n        regex.findall(text)\n        options = []\n        for match in regex.finditer(text):\n            option = match.groupdict().pop(\"option\", None)\n            if option:\n                options.append(option)\n            text = text[match.end() :]\n        return options, text.strip()\n\n    def get_option_section():\n        option_sect = dict(get_headers(out.decode()))\n        small_names = {k.lower(): k for k in option_sect}\n        for head in (\n            \"options\",\n            \"command options\",\n            \"description\",\n        ):  # prefer sections in this order\n            if head in small_names:\n                title = small_names[head]\n                return \"\\n\".join(option_sect[title])\n\n    def get_options(text):\n        \"\"\"finally get the options\"\"\"\n        # return old section if\n        for opt, lines in get_headers(text):\n            # todo: some have [+-] or such vague notations\n            if opt.startswith(\"-\"):\n                # sometime a single line will have both desc and options\n                option_strings, rest = split_options_string(opt)\n                descs = []\n                if rest:\n                    descs.append(rest)\n                if lines:\n                    descs.append(textwrap.dedent(\"\\n\".join(lines)))\n                if option_strings:\n                    yield \". \".join(descs), tuple(option_strings)\n            elif lines:\n                # sometimes the options are nested inside subheaders\n                yield from get_options(\"\\n\".join(lines))\n\n    yield from get_options(get_option_section())\n\n\n@functools.lru_cache(maxsize=10)\ndef _parse_man_page_options(cmd: str) -> \"dict[str, tuple[str, ...]]\":\n    path = get_man_completions_path() / f\"{cmd}.json\"\n    if path.exists():\n        return json.loads(path.read_text())\n    options = dict(generate_options_of(cmd))\n    path.write_text(json.dumps(options))\n    return options\n\n\n@contextual_command_completer\ndef complete_from_man(context: CommandContext):\n    \"\"\"\n    Completes an option name, based on the contents of the associated man\n    page.\n    \"\"\"\n\n    if context.arg_index == 0 or not context.prefix.startswith(\"-\"):\n        return\n    cmd = context.args[0].value\n\n    def completions():\n        for desc, opts in _parse_man_page_options(cmd).items():\n            yield RichCompletion(\n                value=opts[-1], display=\", \".join(opts), description=desc\n            )\n\n    return completions(), False\n", "path": "xonsh/completers/man.py"}], "after_files": [{"content": "import functools\nimport json\nimport re\nimport shutil\nimport subprocess\nimport textwrap\nfrom pathlib import Path\n\nfrom xonsh.built_ins import XSH\nfrom xonsh.completers.tools import RichCompletion, contextual_command_completer\nfrom xonsh.parsers.completion_context import CommandContext\n\n\n@functools.cache\ndef get_man_completions_path() -> Path:\n    env = XSH.env or {}\n    datadir = Path(env[\"XONSH_DATA_DIR\"]) / \"generated_completions\" / \"man\"\n    if datadir.exists() and (not datadir.is_dir()):\n        shutil.move(datadir, datadir.with_suffix(\".bkp\"))\n    if not datadir.exists():\n        datadir.mkdir(exist_ok=True, parents=True)\n    return datadir\n\n\ndef _get_man_page(cmd: str):\n    \"\"\"without control characters\"\"\"\n    env = XSH.env.detype()\n    manpage = subprocess.Popen(\n        [\"man\", cmd], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL, env=env\n    )\n    # This is a trick to get rid of reverse line feeds\n    return subprocess.check_output([\"col\", \"-b\"], stdin=manpage.stdout, env=env)\n\n\n@functools.cache\ndef _man_option_string_regex():\n    return re.compile(\n        r\"(?:(,\\s?)|^|(\\sor\\s))(?P<option>-[\\w]|--[\\w-]+)(?=\\[?(\\s|,|=\\w+|$))\"\n    )\n\n\ndef generate_options_of(cmd: str):\n    out = _get_man_page(cmd)\n    if not out:\n        return\n\n    def get_headers(text: str):\n        \"\"\"split as header-body based on indent\"\"\"\n        if not text:\n            return\n        header = \"\"\n        body = []\n        for line in textwrap.dedent(text.replace(\"\\n\\t\", \"\\n    \")).splitlines():\n            if not line.strip():\n                continue\n            if line.startswith((\" \", \"\\t\")):\n                body.append(line)\n            else:\n                if header or body:\n                    yield header, body\n\n                # found new section\n                header = line.strip()\n                body = []\n        if header or body:\n            yield header, body\n\n    def split_options_string(text: str):\n        text = text.strip()\n        regex = _man_option_string_regex()\n\n        regex.findall(text)\n        options = []\n        for match in regex.finditer(text):\n            option = match.groupdict().pop(\"option\", None)\n            if option:\n                options.append(option)\n            text = text[match.end() :]\n        return options, text.strip()\n\n    def get_option_section():\n        option_sect = dict(get_headers(out.decode()))\n        small_names = {k.lower(): k for k in option_sect}\n        for head in (\n            \"options\",\n            \"command options\",\n            \"description\",\n        ):  # prefer sections in this order\n            if head in small_names:\n                title = small_names[head]\n                return \"\\n\".join(option_sect[title])\n\n    def get_options(text):\n        \"\"\"finally get the options\"\"\"\n        # return old section if\n        for opt, lines in get_headers(text):\n            # todo: some have [+-] or such vague notations\n            if opt.startswith(\"-\"):\n                # sometime a single line will have both desc and options\n                option_strings, rest = split_options_string(opt)\n                descs = []\n                if rest:\n                    descs.append(rest)\n                if lines:\n                    descs.append(textwrap.dedent(\"\\n\".join(lines)))\n                if option_strings:\n                    yield \". \".join(descs), tuple(option_strings)\n            elif lines:\n                # sometimes the options are nested inside subheaders\n                yield from get_options(\"\\n\".join(lines))\n\n    yield from get_options(get_option_section())\n\n\n@functools.lru_cache(maxsize=10)\ndef _parse_man_page_options(cmd: str) -> \"dict[str, tuple[str, ...]]\":\n    path = get_man_completions_path() / Path(cmd).with_suffix(\".json\").name\n    if path.exists():\n        return json.loads(path.read_text())\n    options = dict(generate_options_of(cmd))\n    path.write_text(json.dumps(options))\n    return options\n\n\n@contextual_command_completer\ndef complete_from_man(context: CommandContext):\n    \"\"\"\n    Completes an option name, based on the contents of the associated man\n    page.\n    \"\"\"\n\n    if context.arg_index == 0 or not context.prefix.startswith(\"-\"):\n        return\n    cmd = context.args[0].value\n\n    def completions():\n        for desc, opts in _parse_man_page_options(cmd).items():\n            yield RichCompletion(\n                value=opts[-1], display=\", \".join(opts), description=desc\n            )\n\n    return completions(), False\n", "path": "xonsh/completers/man.py"}]}