We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Feature request: Provide command `reopen-closed-sheet` like Chrome's Ctrl-Shift-T
It often happens that I close a sheet by mistake and immediately curse because I've already done a bunch of manipulations on this tab that I'll now have to repeat. (I know I can guard a sheet but that doesn't fit my workflow.)

I wish VisiData had a feature like Chrome's Ctrl-Shift-T. Basically a command that just opens that sheet that was closed most recently, with all the manipulations that I've done to it. 

Of course, this command is challenging because it means VisiData has to keep this information around. Maybe limit it to last 3 sheets.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `visidata/_open.py`
Content:
```
1 import os
2 import os.path
3 
4 from visidata import VisiData, vd, Path, BaseSheet, TableSheet, TextSheet, SettableColumn
5 
6 
7 vd.option('filetype', '', 'specify file type', replay=True)
8 
9 
10 @VisiData.api
11 def inputFilename(vd, prompt, *args, **kwargs):
12     return vd.input(prompt, type="filename", *args, completer=_completeFilename, **kwargs).strip()
13 
14 
15 @VisiData.api
16 def inputPath(vd, *args, **kwargs):
17     return Path(vd.inputFilename(*args, **kwargs))
18 
19 
20 def _completeFilename(val, state):
21     i = val.rfind('/')
22     if i < 0:  # no /
23         base = ''
24         partial = val
25     elif i == 0: # root /
26         base = '/'
27         partial = val[1:]
28     else:
29         base = val[:i]
30         partial = val[i+1:]
31 
32     files = []
33     for f in os.listdir(Path(base or '.')):
34         if f.startswith(partial):
35             files.append(os.path.join(base, f))
36 
37     files.sort()
38     return files[state%len(files)]
39 
40 @VisiData.api
41 def guessFiletype(vd, p):
42     '''Call all vd.guess_<filetype>(p) functions and return best candidate sheet based on file contents.'''
43 
44     guessfuncs = [getattr(vd, x) for x in dir(vd) if x.startswith('guess_')]
45     filetypes = []
46     for f in guessfuncs:
47         try:
48             filetype = f(p)
49             if filetype:
50                 filetype['_guesser'] = f.__name__
51                 filetypes.append(filetype)
52         except FileNotFoundError:
53             pass
54         except Exception as e:
55             vd.debug(f'{f.__name__}: {e}')
56 
57     if filetypes:
58         return sorted(filetypes, key=lambda r: -r.get('_likelihood', 1))[0]
59 
60 
61 @VisiData.api
62 def guess_extension(vd, path):
63     # try auto-detect from extension
64     ext = path.suffix[1:].lower()
65     openfunc = getattr(vd, f'open_{ext}', vd.getGlobals().get(f'open_{ext}'))
66     if openfunc:
67         return dict(filetype=ext, _likelihood=3)
68 
69 
70 @VisiData.api
71 def openPath(vd, p, filetype=None, create=False):
72     '''Call ``open_<filetype>(p)`` or ``openurl_<p.scheme>(p, filetype)``.  Return constructed but unloaded sheet of appropriate type.
73     If True, *create* will return a new, blank **Sheet** if file does not exist.'''
74     if p.scheme and not p.has_fp():
75         schemes = p.scheme.split('+')
76         openfuncname = 'openurl_' + schemes[-1]
77 
78         openfunc = getattr(vd, openfuncname, None) or vd.getGlobals().get(openfuncname, None)
79         if not openfunc:
80             vd.fail(f'no loader for url scheme: {p.scheme}')
81 
82         return openfunc(p, filetype=filetype)
83 
84     if not p.exists() and not create:
85         return None
86 
87     if not filetype:
88         filetype = p.ext or vd.options.filetype
89 
90     filetype = filetype.lower()
91 
92     if not p.exists():
93         if not create:
94             return None
95         newfunc = getattr(vd, 'new_' + filetype, vd.getGlobals().get('new_' + filetype))
96         if not newfunc:
97             vd.warning('%s does not exist, creating new sheet' % p)
98             return vd.newSheet(p.name, 1, source=p)
99 
100         vd.status('creating blank %s' % (p.given))
101         return newfunc(p)
102 
103     openfuncname = 'open_' + filetype
104     openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))
105     if not openfunc:
106         opts = vd.guessFiletype(p)
107         if opts and 'filetype' in opts:
108             filetype = opts['filetype']
109             openfuncname = 'open_' + filetype
110             openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))
111             if not openfunc:
112                 vd.error(f'guessed {filetype} but no {openfuncname}')
113 
114             vs = openfunc(p)
115             for k, v in opts.items():
116                 if k != 'filetype' and not k.startswith('_'):
117                     setattr(vs.options, k, v)
118             vd.warning('guessed "%s" filetype based on contents' % opts['filetype'])
119             return vs
120 
121         vd.warning('unknown "%s" filetype' % filetype)
122 
123         filetype = 'txt'
124         openfunc = vd.open_txt
125 
126     vd.status('opening %s as %s' % (p.given, filetype))
127 
128     return openfunc(p)
129 
130 
131 @VisiData.api
132 def openSource(vd, p, filetype=None, create=False, **kwargs):
133     '''Return unloaded sheet object for *p* opened as the given *filetype* and with *kwargs* as option overrides. *p* can be a Path or a string (filename, url, or "-" for stdin).
134     when true, *create* will return a blank sheet, if file does not exist.'''
135 
136     if isinstance(p, BaseSheet):
137         return p
138 
139     filetype = filetype or vd.options.getonly('filetype', str(p), '')  #1710
140     filetype = filetype or vd.options.getonly('filetype', 'global', '')
141 
142     vs = None
143     if isinstance(p, str):
144         if '://' in p:
145             vs = vd.openPath(Path(p), filetype=filetype)  # convert to Path and recurse
146         elif p == '-':
147             vs = vd.openPath(vd.stdinSource, filetype=filetype)
148         else:
149             vs = vd.openPath(Path(p), filetype=filetype, create=create)  # convert to Path and recurse
150     else:
151         vs = vd.openPath(p, filetype=filetype, create=create)
152 
153     for optname, optval in kwargs.items():
154         vs.options[optname] = optval
155 
156     return vs
157 
158 
159 #### enable external addons
160 @VisiData.api
161 def open_txt(vd, p):
162     'Create sheet from `.txt` file at Path `p`, checking whether it is TSV.'
163     if p.exists(): #1611
164         with p.open_text(encoding=vd.options.encoding) as fp:
165             delimiter = vd.options.delimiter
166             try:
167                 if delimiter and delimiter in next(fp):    # peek at the first line
168                     return vd.open_tsv(p)  # TSV often have .txt extension
169             except StopIteration:
170                 return TableSheet(p.name, columns=[SettableColumn()], source=p)
171     return TextSheet(p.name, source=p)
172 
173 
174 @VisiData.api
175 def loadInternalSheet(vd, cls, p, **kwargs):
176     'Load internal sheet of given class.'
177     vs = cls(p.name, source=p, **kwargs)
178     vd.options._set('encoding', 'utf8', vs)
179     if p.exists():
180 #        vd.sheets.insert(0, vs) # broke replay with macros.reload()
181         vs.reload.__wrapped__(vs)
182 #        vd.sheets.pop(0)
183     return vs
184 
185 
186 BaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename("open: "), create=True))', 'Open file or URL')
187 TableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f"file {cursorDisplay} does not exist"))', 'Open file or URL from path in current cell')
188 
189 vd.addMenuItems('''
190     File > Open file/url > open-file
191 ''')
192
```
--- 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/visidata/_open.py b/visidata/_open.py
--- a/visidata/_open.py
+++ b/visidata/_open.py
@@ -185,7 +185,9 @@
 
 BaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename("open: "), create=True))', 'Open file or URL')
 TableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f"file {cursorDisplay} does not exist"))', 'Open file or URL from path in current cell')
+BaseSheet.addCommand('gU', 'undo-last-quit', 'push(allSheets[-1])', 'reopen most recently closed sheet')
 
 vd.addMenuItems('''
     File > Open file/url > open-file
+    File > Reopen last closed > undo-last-quit
 ''')

{"golden_diff": "diff --git a/visidata/_open.py b/visidata/_open.py\n--- a/visidata/_open.py\n+++ b/visidata/_open.py\n@@ -185,7 +185,9 @@\n \n BaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename(\"open: \"), create=True))', 'Open file or URL')\n TableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f\"file {cursorDisplay} does not exist\"))', 'Open file or URL from path in current cell')\n+BaseSheet.addCommand('gU', 'undo-last-quit', 'push(allSheets[-1])', 'reopen most recently closed sheet')\n \n vd.addMenuItems('''\n     File > Open file/url > open-file\n+    File > Reopen last closed > undo-last-quit\n ''')\n", "issue": "Feature request: Provide command `reopen-closed-sheet` like Chrome's Ctrl-Shift-T\nIt often happens that I close a sheet by mistake and immediately curse because I've already done a bunch of manipulations on this tab that I'll now have to repeat. (I know I can guard a sheet but that doesn't fit my workflow.)\r\n\r\nI wish VisiData had a feature like Chrome's Ctrl-Shift-T. Basically a command that just opens that sheet that was closed most recently, with all the manipulations that I've done to it. \r\n\r\nOf course, this command is challenging because it means VisiData has to keep this information around. Maybe limit it to last 3 sheets.\n", "before_files": [{"content": "import os\nimport os.path\n\nfrom visidata import VisiData, vd, Path, BaseSheet, TableSheet, TextSheet, SettableColumn\n\n\nvd.option('filetype', '', 'specify file type', replay=True)\n\n\n@VisiData.api\ndef inputFilename(vd, prompt, *args, **kwargs):\n    return vd.input(prompt, type=\"filename\", *args, completer=_completeFilename, **kwargs).strip()\n\n\n@VisiData.api\ndef inputPath(vd, *args, **kwargs):\n    return Path(vd.inputFilename(*args, **kwargs))\n\n\ndef _completeFilename(val, state):\n    i = val.rfind('/')\n    if i < 0:  # no /\n        base = ''\n        partial = val\n    elif i == 0: # root /\n        base = '/'\n        partial = val[1:]\n    else:\n        base = val[:i]\n        partial = val[i+1:]\n\n    files = []\n    for f in os.listdir(Path(base or '.')):\n        if f.startswith(partial):\n            files.append(os.path.join(base, f))\n\n    files.sort()\n    return files[state%len(files)]\n\n@VisiData.api\ndef guessFiletype(vd, p):\n    '''Call all vd.guess_<filetype>(p) functions and return best candidate sheet based on file contents.'''\n\n    guessfuncs = [getattr(vd, x) for x in dir(vd) if x.startswith('guess_')]\n    filetypes = []\n    for f in guessfuncs:\n        try:\n            filetype = f(p)\n            if filetype:\n                filetype['_guesser'] = f.__name__\n                filetypes.append(filetype)\n        except FileNotFoundError:\n            pass\n        except Exception as e:\n            vd.debug(f'{f.__name__}: {e}')\n\n    if filetypes:\n        return sorted(filetypes, key=lambda r: -r.get('_likelihood', 1))[0]\n\n\n@VisiData.api\ndef guess_extension(vd, path):\n    # try auto-detect from extension\n    ext = path.suffix[1:].lower()\n    openfunc = getattr(vd, f'open_{ext}', vd.getGlobals().get(f'open_{ext}'))\n    if openfunc:\n        return dict(filetype=ext, _likelihood=3)\n\n\n@VisiData.api\ndef openPath(vd, p, filetype=None, create=False):\n    '''Call ``open_<filetype>(p)`` or ``openurl_<p.scheme>(p, filetype)``.  Return constructed but unloaded sheet of appropriate type.\n    If True, *create* will return a new, blank **Sheet** if file does not exist.'''\n    if p.scheme and not p.has_fp():\n        schemes = p.scheme.split('+')\n        openfuncname = 'openurl_' + schemes[-1]\n\n        openfunc = getattr(vd, openfuncname, None) or vd.getGlobals().get(openfuncname, None)\n        if not openfunc:\n            vd.fail(f'no loader for url scheme: {p.scheme}')\n\n        return openfunc(p, filetype=filetype)\n\n    if not p.exists() and not create:\n        return None\n\n    if not filetype:\n        filetype = p.ext or vd.options.filetype\n\n    filetype = filetype.lower()\n\n    if not p.exists():\n        if not create:\n            return None\n        newfunc = getattr(vd, 'new_' + filetype, vd.getGlobals().get('new_' + filetype))\n        if not newfunc:\n            vd.warning('%s does not exist, creating new sheet' % p)\n            return vd.newSheet(p.name, 1, source=p)\n\n        vd.status('creating blank %s' % (p.given))\n        return newfunc(p)\n\n    openfuncname = 'open_' + filetype\n    openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n    if not openfunc:\n        opts = vd.guessFiletype(p)\n        if opts and 'filetype' in opts:\n            filetype = opts['filetype']\n            openfuncname = 'open_' + filetype\n            openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n            if not openfunc:\n                vd.error(f'guessed {filetype} but no {openfuncname}')\n\n            vs = openfunc(p)\n            for k, v in opts.items():\n                if k != 'filetype' and not k.startswith('_'):\n                    setattr(vs.options, k, v)\n            vd.warning('guessed \"%s\" filetype based on contents' % opts['filetype'])\n            return vs\n\n        vd.warning('unknown \"%s\" filetype' % filetype)\n\n        filetype = 'txt'\n        openfunc = vd.open_txt\n\n    vd.status('opening %s as %s' % (p.given, filetype))\n\n    return openfunc(p)\n\n\n@VisiData.api\ndef openSource(vd, p, filetype=None, create=False, **kwargs):\n    '''Return unloaded sheet object for *p* opened as the given *filetype* and with *kwargs* as option overrides. *p* can be a Path or a string (filename, url, or \"-\" for stdin).\n    when true, *create* will return a blank sheet, if file does not exist.'''\n\n    if isinstance(p, BaseSheet):\n        return p\n\n    filetype = filetype or vd.options.getonly('filetype', str(p), '')  #1710\n    filetype = filetype or vd.options.getonly('filetype', 'global', '')\n\n    vs = None\n    if isinstance(p, str):\n        if '://' in p:\n            vs = vd.openPath(Path(p), filetype=filetype)  # convert to Path and recurse\n        elif p == '-':\n            vs = vd.openPath(vd.stdinSource, filetype=filetype)\n        else:\n            vs = vd.openPath(Path(p), filetype=filetype, create=create)  # convert to Path and recurse\n    else:\n        vs = vd.openPath(p, filetype=filetype, create=create)\n\n    for optname, optval in kwargs.items():\n        vs.options[optname] = optval\n\n    return vs\n\n\n#### enable external addons\n@VisiData.api\ndef open_txt(vd, p):\n    'Create sheet from `.txt` file at Path `p`, checking whether it is TSV.'\n    if p.exists(): #1611\n        with p.open_text(encoding=vd.options.encoding) as fp:\n            delimiter = vd.options.delimiter\n            try:\n                if delimiter and delimiter in next(fp):    # peek at the first line\n                    return vd.open_tsv(p)  # TSV often have .txt extension\n            except StopIteration:\n                return TableSheet(p.name, columns=[SettableColumn()], source=p)\n    return TextSheet(p.name, source=p)\n\n\n@VisiData.api\ndef loadInternalSheet(vd, cls, p, **kwargs):\n    'Load internal sheet of given class.'\n    vs = cls(p.name, source=p, **kwargs)\n    vd.options._set('encoding', 'utf8', vs)\n    if p.exists():\n#        vd.sheets.insert(0, vs) # broke replay with macros.reload()\n        vs.reload.__wrapped__(vs)\n#        vd.sheets.pop(0)\n    return vs\n\n\nBaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename(\"open: \"), create=True))', 'Open file or URL')\nTableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f\"file {cursorDisplay} does not exist\"))', 'Open file or URL from path in current cell')\n\nvd.addMenuItems('''\n    File > Open file/url > open-file\n''')\n", "path": "visidata/_open.py"}], "after_files": [{"content": "import os\nimport os.path\n\nfrom visidata import VisiData, vd, Path, BaseSheet, TableSheet, TextSheet, SettableColumn\n\n\nvd.option('filetype', '', 'specify file type', replay=True)\n\n\n@VisiData.api\ndef inputFilename(vd, prompt, *args, **kwargs):\n    return vd.input(prompt, type=\"filename\", *args, completer=_completeFilename, **kwargs).strip()\n\n\n@VisiData.api\ndef inputPath(vd, *args, **kwargs):\n    return Path(vd.inputFilename(*args, **kwargs))\n\n\ndef _completeFilename(val, state):\n    i = val.rfind('/')\n    if i < 0:  # no /\n        base = ''\n        partial = val\n    elif i == 0: # root /\n        base = '/'\n        partial = val[1:]\n    else:\n        base = val[:i]\n        partial = val[i+1:]\n\n    files = []\n    for f in os.listdir(Path(base or '.')):\n        if f.startswith(partial):\n            files.append(os.path.join(base, f))\n\n    files.sort()\n    return files[state%len(files)]\n\n@VisiData.api\ndef guessFiletype(vd, p):\n    '''Call all vd.guess_<filetype>(p) functions and return best candidate sheet based on file contents.'''\n\n    guessfuncs = [getattr(vd, x) for x in dir(vd) if x.startswith('guess_')]\n    filetypes = []\n    for f in guessfuncs:\n        try:\n            filetype = f(p)\n            if filetype:\n                filetype['_guesser'] = f.__name__\n                filetypes.append(filetype)\n        except FileNotFoundError:\n            pass\n        except Exception as e:\n            vd.debug(f'{f.__name__}: {e}')\n\n    if filetypes:\n        return sorted(filetypes, key=lambda r: -r.get('_likelihood', 1))[0]\n\n\n@VisiData.api\ndef guess_extension(vd, path):\n    # try auto-detect from extension\n    ext = path.suffix[1:].lower()\n    openfunc = getattr(vd, f'open_{ext}', vd.getGlobals().get(f'open_{ext}'))\n    if openfunc:\n        return dict(filetype=ext, _likelihood=3)\n\n\n@VisiData.api\ndef openPath(vd, p, filetype=None, create=False):\n    '''Call ``open_<filetype>(p)`` or ``openurl_<p.scheme>(p, filetype)``.  Return constructed but unloaded sheet of appropriate type.\n    If True, *create* will return a new, blank **Sheet** if file does not exist.'''\n    if p.scheme and not p.has_fp():\n        schemes = p.scheme.split('+')\n        openfuncname = 'openurl_' + schemes[-1]\n\n        openfunc = getattr(vd, openfuncname, None) or vd.getGlobals().get(openfuncname, None)\n        if not openfunc:\n            vd.fail(f'no loader for url scheme: {p.scheme}')\n\n        return openfunc(p, filetype=filetype)\n\n    if not p.exists() and not create:\n        return None\n\n    if not filetype:\n        filetype = p.ext or vd.options.filetype\n\n    filetype = filetype.lower()\n\n    if not p.exists():\n        if not create:\n            return None\n        newfunc = getattr(vd, 'new_' + filetype, vd.getGlobals().get('new_' + filetype))\n        if not newfunc:\n            vd.warning('%s does not exist, creating new sheet' % p)\n            return vd.newSheet(p.name, 1, source=p)\n\n        vd.status('creating blank %s' % (p.given))\n        return newfunc(p)\n\n    openfuncname = 'open_' + filetype\n    openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n    if not openfunc:\n        opts = vd.guessFiletype(p)\n        if opts and 'filetype' in opts:\n            filetype = opts['filetype']\n            openfuncname = 'open_' + filetype\n            openfunc = getattr(vd, openfuncname, vd.getGlobals().get(openfuncname))\n            if not openfunc:\n                vd.error(f'guessed {filetype} but no {openfuncname}')\n\n            vs = openfunc(p)\n            for k, v in opts.items():\n                if k != 'filetype' and not k.startswith('_'):\n                    setattr(vs.options, k, v)\n            vd.warning('guessed \"%s\" filetype based on contents' % opts['filetype'])\n            return vs\n\n        vd.warning('unknown \"%s\" filetype' % filetype)\n\n        filetype = 'txt'\n        openfunc = vd.open_txt\n\n    vd.status('opening %s as %s' % (p.given, filetype))\n\n    return openfunc(p)\n\n\n@VisiData.api\ndef openSource(vd, p, filetype=None, create=False, **kwargs):\n    '''Return unloaded sheet object for *p* opened as the given *filetype* and with *kwargs* as option overrides. *p* can be a Path or a string (filename, url, or \"-\" for stdin).\n    when true, *create* will return a blank sheet, if file does not exist.'''\n\n    if isinstance(p, BaseSheet):\n        return p\n\n    filetype = filetype or vd.options.getonly('filetype', str(p), '')  #1710\n    filetype = filetype or vd.options.getonly('filetype', 'global', '')\n\n    vs = None\n    if isinstance(p, str):\n        if '://' in p:\n            vs = vd.openPath(Path(p), filetype=filetype)  # convert to Path and recurse\n        elif p == '-':\n            vs = vd.openPath(vd.stdinSource, filetype=filetype)\n        else:\n            vs = vd.openPath(Path(p), filetype=filetype, create=create)  # convert to Path and recurse\n    else:\n        vs = vd.openPath(p, filetype=filetype, create=create)\n\n    for optname, optval in kwargs.items():\n        vs.options[optname] = optval\n\n    return vs\n\n\n#### enable external addons\n@VisiData.api\ndef open_txt(vd, p):\n    'Create sheet from `.txt` file at Path `p`, checking whether it is TSV.'\n    if p.exists(): #1611\n        with p.open_text(encoding=vd.options.encoding) as fp:\n            delimiter = vd.options.delimiter\n            try:\n                if delimiter and delimiter in next(fp):    # peek at the first line\n                    return vd.open_tsv(p)  # TSV often have .txt extension\n            except StopIteration:\n                return TableSheet(p.name, columns=[SettableColumn()], source=p)\n    return TextSheet(p.name, source=p)\n\n\n@VisiData.api\ndef loadInternalSheet(vd, cls, p, **kwargs):\n    'Load internal sheet of given class.'\n    vs = cls(p.name, source=p, **kwargs)\n    vd.options._set('encoding', 'utf8', vs)\n    if p.exists():\n#        vd.sheets.insert(0, vs) # broke replay with macros.reload()\n        vs.reload.__wrapped__(vs)\n#        vd.sheets.pop(0)\n    return vs\n\n\nBaseSheet.addCommand('o', 'open-file', 'vd.push(openSource(inputFilename(\"open: \"), create=True))', 'Open file or URL')\nTableSheet.addCommand('zo', 'open-cell-file', 'vd.push(openSource(cursorDisplay) or fail(f\"file {cursorDisplay} does not exist\"))', 'Open file or URL from path in current cell')\nBaseSheet.addCommand('gU', 'undo-last-quit', 'push(allSheets[-1])', 'reopen most recently closed sheet')\n\nvd.addMenuItems('''\n    File > Open file/url > open-file\n    File > Reopen last closed > undo-last-quit\n''')\n", "path": "visidata/_open.py"}]}