From 00ab4e59a8e812986c17fbc09275cfe0583286dc Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 16 Nov 2012 15:16:48 +0100 Subject: support EF and EX arguments. FALSE (>= 0) means to refuse closing/exiting if the current file / any file is dirty (modified) -EF and -EX may be used to enforce a close/quit without saving --- parser.cpp | 10 ++++++++++ qbuffers.cpp | 12 ++++++++++++ qbuffers.h | 2 ++ 3 files changed, 24 insertions(+) diff --git a/parser.cpp b/parser.cpp index 103ae66..59c5df2 100644 --- a/parser.cpp +++ b/parser.cpp @@ -1058,11 +1058,21 @@ StateECommand::custom(gchar chr) BEGIN_EXEC(&States::start); if (!ring.current) return NULL; /* FIXME */ + + if (IS_FAILURE(expressions.pop_num_calc()) && + ring.current->dirty) + return NULL; /* FIXME */ + ring.close(); break; case 'X': BEGIN_EXEC(&States::start); + + if (IS_FAILURE(expressions.pop_num_calc()) && + ring.is_any_dirty()) + return NULL; /* FIXME */ + undo.push_var(quit_requested); quit_requested = true; break; diff --git a/qbuffers.cpp b/qbuffers.cpp index 51bf65f..28b54dc 100644 --- a/qbuffers.cpp +++ b/qbuffers.cpp @@ -226,6 +226,18 @@ Ring::find(const gchar *filename) return cur; } +bool +Ring::is_any_dirty(void) +{ + Buffer *cur; + + LIST_FOREACH(cur, &head, buffers) + if (cur->dirty) + return true; + + return false; +} + bool Ring::edit(const gchar *filename) { diff --git a/qbuffers.h b/qbuffers.h index 8ceaffa..01e7ae7 100644 --- a/qbuffers.h +++ b/qbuffers.h @@ -275,6 +275,8 @@ public: Buffer *find(const gchar *filename); + bool is_any_dirty(void); + bool edit(const gchar *filename); inline void undo_edit(void) -- cgit v1.2.3