Files
neovim/runtime/ftplugin
Matthew Chen 410ba8374d fix(tutor): open a temporary copy instead of original file #38522
Problem:
`:Tutor` should open a copy of the tutor file instead of the original. This is
because edits modify the original file buffer, and crashes or other misuse could
potentially corrupt the original file even if it's WO.

Solution:
Copy the tutor file to a temp path before opening. Store the original path in
`b:tutor_file` so metadata json loading still works.

- `tutor#TutorCmd` will now copy the tutor file to a temp path via `tempname()`
  before opening with `drop`. Store the original path in `b:tutor_file` only
  after the buffer is created.
- `tutor#LoadMetadata` now uses `b:tutor_file` to resolve the JSON path instead
  of `expand('%')`, which now points to the temp copy buffer
- `ftplugin/tutor.vim` does not make the `tutor#LoadMetadata` call anymore. It
  was guarded by `filereadable(expand('%').'.json')` which fails for the new
  temp copy path logic . Instead, `tutor#LoadMetadata` is already called
  directly inside `tutor#TutorCmd` since we are already assumed to enable
  interactive.

Co-authored-by: Phạm Bình An <111893501+brianhuster@users.noreply.github.com>
2026-03-31 15:27:06 -04:00
..
2021-09-22 06:12:06 -07:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2023-08-23 20:36:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2014-07-29 02:12:31 +00:00
2023-08-13 13:25:10 +01:00
2023-08-29 11:32:46 +02:00
2017-11-06 05:26:16 +01:00
2019-07-29 20:50:07 +02:00
2023-11-05 21:52:02 +01:00
2024-11-21 06:50:30 +08:00
2024-04-21 00:09:48 +02:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2023-06-11 12:40:22 +01:00
2017-11-06 05:26:16 +01:00
2022-09-18 15:20:20 +02:00
2017-04-28 21:13:55 +02:00
2017-11-06 05:26:16 +01:00
2024-05-20 00:13:40 +02:00
2023-10-27 10:06:52 +02:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2023-12-28 10:42:09 +01:00
2022-04-27 17:48:35 +02:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2022-07-02 11:06:03 +02:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2021-05-01 23:19:58 -04:00
2024-01-15 11:40:44 +01:00
2023-12-29 00:54:09 +01:00
2023-12-29 00:54:09 +01:00
2022-01-11 14:14:17 +01:00
2021-09-22 06:12:06 -07:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2024-01-27 12:02:59 +01:00
2021-12-16 21:46:13 +01:00
2024-01-15 11:40:44 +01:00
2021-04-27 09:21:31 -04:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2015-10-11 18:07:58 -04:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-04-23 15:22:55 +02:00
2023-02-03 09:18:18 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2018-10-29 10:01:44 +01:00
2023-05-15 09:38:32 +02:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-08-13 13:25:10 +01:00
2017-11-06 05:26:16 +01:00
2021-09-13 16:33:41 +02:00
2024-01-15 11:40:44 +01:00
2017-04-29 01:01:51 +02:00
2017-04-29 01:01:51 +02:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-07 23:07:03 +01:00
2023-04-23 15:22:55 +02:00
2023-08-29 11:32:46 +02:00
2024-05-20 14:43:12 +02:00
2023-08-13 13:25:10 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-08-29 11:32:46 +02:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2024-05-20 14:43:12 +02:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2024-03-03 10:38:58 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2024-03-03 10:38:58 +01:00
2017-11-06 05:26:16 +01:00
2024-03-03 10:38:58 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2023-12-29 00:54:09 +01:00
2023-12-15 10:30:13 +01:00
2023-08-29 11:32:46 +02:00
2017-11-06 05:26:16 +01:00
2017-04-28 21:13:55 +02:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-08-29 11:32:46 +02:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-08-24 11:33:06 +09:00
2024-01-15 11:40:44 +01:00
2024-05-18 08:57:07 +02:00
2024-01-15 11:40:44 +01:00
2021-05-01 23:19:57 -04:00
2021-04-27 09:21:34 -04:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2019-07-29 20:50:07 +02:00
2024-01-15 11:40:44 +01:00
2021-10-16 18:03:51 +02:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2023-08-09 22:34:02 +02:00
2017-11-06 05:26:16 +01:00
2023-08-29 11:32:46 +02:00
2024-05-20 14:43:12 +02:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2014-12-30 13:51:39 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2017-11-06 05:26:16 +01:00
2017-11-06 05:26:16 +01:00
2024-01-15 11:40:44 +01:00
2024-01-15 11:40:44 +01:00

The ftplugin directory is for Vim plugin scripts that are only used for a
specific filetype.

All files ending in .vim in this directory and subdirectories will be sourced
by Vim when it detects the filetype that matches the name of the file or
subdirectory.
For example, these are all loaded for the "c" filetype:

	c.vim
	c_extra.vim
	c/settings.vim

Note that the "_" in "c_extra.vim" is required to separate the filetype name
from the following arbitrary name.

The filetype plugins are only loaded when the ":filetype plugin" command has
been used.

The default filetype plugin files contain settings that 95% of the users will
want to use.  They do not contain personal preferences, like the value of
'shiftwidth'.

If you want to do additional settings, or overrule the default filetype
plugin, you can create your own plugin file.  See ":help ftplugin" in Vim.