aboutsummaryrefslogtreecommitdiff
path: root/vis.c
diff options
context:
space:
mode:
authorMarc André Tanner <mat@brain-dump.org>2015-07-06 21:49:19 +0200
committerMarc André Tanner <mat@brain-dump.org>2015-07-06 21:49:19 +0200
commit22d843e6719c025bf6d711bfdd3644e442ee8966 (patch)
tree67a52cf274e92759696d99d1a1dd932e5e369394 /vis.c
parent071b5f3c94c4b157a153586b087229f9e6b465d3 (diff)
downloadvis-22d843e6719c025bf6d711bfdd3644e442ee8966.tar.gz
vis-22d843e6719c025bf6d711bfdd3644e442ee8966.tar.xz
Warn when saving a file which has been changed outside the editor
Diffstat (limited to 'vis.c')
-rw-r--r--vis.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/vis.c b/vis.c
index 076f0c7..4520fe3 100644
--- a/vis.c
+++ b/vis.c
@@ -1683,12 +1683,20 @@ static bool cmd_write(Filerange *range, enum CmdOpt opt, const char *argv[]) {
return false;
}
for (const char **name = &argv[1]; *name; name++) {
+ struct stat meta;
+ if (!(opt & CMD_OPT_FORCE) && file->stat.st_mtime && stat(*name, &meta) == 0 &&
+ file->stat.st_mtime < meta.st_mtime) {
+ editor_info_show(vis, "WARNING: file has been changed since reading it");
+ return false;
+ }
if (!text_range_save(text, range, *name)) {
editor_info_show(vis, "Can't write `%s'", *name);
return false;
}
- if (!file->name)
+ if (!file->name) {
editor_window_name(vis->win, *name);
+ file->stat = text_stat(text);
+ }
}
return true;
}
@@ -1696,6 +1704,7 @@ static bool cmd_write(Filerange *range, enum CmdOpt opt, const char *argv[]) {
static bool cmd_saveas(Filerange *range, enum CmdOpt opt, const char *argv[]) {
if (cmd_write(range, opt, argv)) {
editor_window_name(vis->win, argv[1]);
+ vis->win->file->stat = text_stat(vis->win->file->text);
return true;
}
return false;