mirror of https://github.com/helix-editor/helix
Add ability to configure atomic saving (#13656)
Co-authored-by: Łukasz Langa <lukasz@langa.pl>pull/13933/head
parent
de898460b8
commit
242353b2ba
|
@ -53,6 +53,7 @@
|
|||
| `workspace-lsp-roots` | Directories relative to the workspace root that are treated as LSP roots. Should only be set in `.helix/config.toml` | `[]` |
|
||||
| `default-line-ending` | The line ending to use for new documents. Can be `native`, `lf`, `crlf`, `ff`, `cr` or `nel`. `native` uses the platform's native line ending (`crlf` on Windows, otherwise `lf`). | `native` |
|
||||
| `insert-final-newline` | Whether to automatically insert a trailing line-ending on write if missing | `true` |
|
||||
| `atomic-save` | Whether to use atomic operations to write documents to disk. This prevents data loss if the editor is interrupted while writing the file, but may confuse some file watching/hot reloading programs. | `true` |
|
||||
| `trim-final-newlines` | Whether to automatically remove line-endings after the final one on write | `false` |
|
||||
| `trim-trailing-whitespace` | Whether to automatically remove whitespace preceding line endings on write | `false` |
|
||||
| `popup-border` | Draw border around `popup`, `menu`, `all`, or `none` | `none` |
|
||||
|
|
|
@ -980,6 +980,7 @@ impl Document {
|
|||
// mark changes up to now as saved
|
||||
let current_rev = self.get_current_revision();
|
||||
let doc_id = self.id();
|
||||
let atomic_save = self.config.load().atomic_save;
|
||||
|
||||
let encoding_with_bom_info = (self.encoding, self.has_bom);
|
||||
let last_saved_time = self.last_saved_time;
|
||||
|
@ -1029,7 +1030,7 @@ impl Document {
|
|||
|
||||
// Assume it is a hardlink to prevent data loss if the metadata cant be read (e.g. on certain Windows configurations)
|
||||
let is_hardlink = helix_stdx::faccess::hardlink_count(&write_path).unwrap_or(2) > 1;
|
||||
let backup = if path.exists() {
|
||||
let backup = if path.exists() && atomic_save {
|
||||
let path_ = write_path.clone();
|
||||
// hacks: we use tempfile to handle the complex task of creating
|
||||
// non clobbered temporary path for us we don't want
|
||||
|
|
|
@ -345,6 +345,10 @@ pub struct Config {
|
|||
pub default_line_ending: LineEndingConfig,
|
||||
/// Whether to automatically insert a trailing line-ending on write if missing. Defaults to `true`.
|
||||
pub insert_final_newline: bool,
|
||||
/// Whether to use atomic operations to write documents to disk.
|
||||
/// This prevents data loss if the editor is interrupted while writing the file, but may
|
||||
/// confuse some file watching/hot reloading programs. Defaults to `true`.
|
||||
pub atomic_save: bool,
|
||||
/// Whether to automatically remove all trailing line-endings after the final one on write.
|
||||
/// Defaults to `false`.
|
||||
pub trim_final_newlines: bool,
|
||||
|
@ -1020,6 +1024,7 @@ impl Default for Config {
|
|||
workspace_lsp_roots: Vec::new(),
|
||||
default_line_ending: LineEndingConfig::default(),
|
||||
insert_final_newline: true,
|
||||
atomic_save: true,
|
||||
trim_final_newlines: false,
|
||||
trim_trailing_whitespace: false,
|
||||
smart_tab: Some(SmartTabConfig::default()),
|
||||
|
|
Loading…
Reference in New Issue