commit 00d4a06cc7e321f232e3e2420f70eac542a170b5
parent 2aec478ea69b25f045e8906886798c4439eb1b30
Author: Benno Schulenberg <bensberg@telfort.nl>
Date: Fri, 5 Jun 2020 19:05:29 +0200
tweaks: group the exiting routines together, and condense the comments
Diffstat:
M | src/nano.c | | | 127 | +++++++++++++++++++++++++++++++++++++------------------------------------------ |
M | src/proto.h | | | 4 | ++-- |
2 files changed, 61 insertions(+), 70 deletions(-)
diff --git a/src/nano.c b/src/nano.c
@@ -247,7 +247,7 @@ void restore_terminal(void)
tcsetattr(0, TCSANOW, &original_state);
}
-/* Exit normally: restore the terminal state and save history files. */
+/* Exit normally: restore terminal state and report any startup errors. */
void finish(void)
{
/* Blank the status bar and (if applicable) the shortcut list. */
@@ -273,6 +273,64 @@ void finish(void)
exit(0);
}
+/* Close the current buffer, and terminate nano if it is the only buffer. */
+void close_and_go(void)
+{
+#ifndef NANO_TINY
+ if (openfile->lock_filename)
+ delete_lockfile(openfile->lock_filename);
+#endif
+#ifdef ENABLE_HISTORIES
+ if (ISSET(POSITIONLOG))
+ update_poshistory();
+#endif
+#ifdef ENABLE_MULTIBUFFER
+ /* If there is another buffer, close this one; otherwise just terminate. */
+ if (openfile != openfile->next) {
+ switch_to_next_buffer();
+ openfile = openfile->prev;
+ close_buffer();
+ openfile = openfile->next;
+ /* Adjust the count in the top bar. */
+ titlebar(NULL);
+ } else
+#endif
+ {
+#ifdef ENABLE_HISTORIES
+ if (ISSET(HISTORYLOG))
+ save_history();
+#endif
+ finish();
+ }
+}
+
+/* Close the current buffer if it is unmodified; otherwise (when not doing
+ * automatic saving), ask the user whether to save it, then close it and
+ * exit, or return when the user cancelled. */
+void do_exit(void)
+{
+ int choice;
+
+ /* When unmodified, simply close. Else, when doing automatic saving
+ * and the file has a name, simply save. Otherwise, ask the user. */
+ if (!openfile->modified)
+ choice = 0;
+ else if (ISSET(SAVE_ON_EXIT) && openfile->filename[0] != '\0')
+ choice = 1;
+ else {
+ if (ISSET(SAVE_ON_EXIT))
+ warn_and_briefly_pause(_("No file name"));
+
+ choice = do_yesno_prompt(FALSE, _("Save modified buffer? "));
+ }
+
+ /* When not saving, or the save succeeds, close the buffer. */
+ if (choice == 0 || (choice == 1 && do_writeout(TRUE, TRUE) > 0))
+ close_and_go();
+ else if (choice != 1)
+ statusbar(_("Cancelled"));
+}
+
/* Save the current buffer under the given name (or under the name "nano"
* for a nameless buffer). If needed, the name is modified to be unique. */
void emergency_save(const char *plainname)
@@ -729,73 +787,6 @@ void version(void)
printf("\n");
}
-/* If the current file buffer has been modified, and the SAVE_ON_EXIT
- * flag isn't set, ask whether or not to save the file buffer. If the
- * SAVE_ON_EXIT flag is set and the current file has a name, save it
- * unconditionally. Then, if more than one file buffer is open, close
- * the current file buffer and switch to the next one. If only one file
- * buffer is open, exit from nano. */
-void do_exit(void)
-{
- int choice;
-
- /* If the file hasn't been modified, pretend the user chose not to
- * save. */
- if (!openfile->modified)
- choice = 0;
- /* If the SAVE_ON_EXIT flag is set and the current file has a name,
- * pretend the user chose to save. */
- else if (openfile->filename[0] != '\0' && ISSET(SAVE_ON_EXIT))
- choice = 1;
- /* Otherwise, ask the user whether or not to save. */
- else {
- /* If the SAVE_ON_EXIT flag is set, and the current file doesn't
- * have a name, warn the user before prompting for a name. */
- if (ISSET(SAVE_ON_EXIT))
- warn_and_briefly_pause(_("No file name"));
-
- choice = do_yesno_prompt(FALSE, _("Save modified buffer? "));
- }
-
- /* If the user chose not to save, or if the user chose to save and
- * the save succeeded, we're ready to exit. */
- if (choice == 0 || (choice == 1 && do_writeout(TRUE, TRUE) > 0))
- close_and_go();
- else if (choice != 1)
- statusbar(_("Cancelled"));
-}
-
-/* Close the current buffer, or terminate nano if it is the only buffer. */
-void close_and_go(void)
-{
-#ifndef NANO_TINY
- if (openfile->lock_filename)
- delete_lockfile(openfile->lock_filename);
-#endif
-#ifdef ENABLE_HISTORIES
- if (ISSET(POSITIONLOG))
- update_poshistory();
-#endif
-#ifdef ENABLE_MULTIBUFFER
- /* If there is another buffer, just close this one; otherwise terminate. */
- if (openfile != openfile->next) {
- switch_to_next_buffer();
- openfile = openfile->prev;
- close_buffer();
- openfile = openfile->next;
- /* Adjust the count in the top bar. */
- titlebar(NULL);
- } else
-#endif
- {
-#ifdef ENABLE_HISTORIES
- if (ISSET(HISTORYLOG))
- save_history();
-#endif
- finish();
- }
-}
-
/* Register that Ctrl+C was pressed during some system call. */
RETSIGTYPE make_a_note(int signal)
{
diff --git a/src/proto.h b/src/proto.h
@@ -410,10 +410,10 @@ bool in_restricted_mode(void);
void say_there_is_no_help(void);
#endif
void finish(void);
+void close_and_go(void);
+void do_exit(void);
void die(const char *msg, ...);
void window_init(void);
-void do_exit(void);
-void close_and_go(void);
void install_handler_for_Ctrl_C(void);
void restore_handler_for_Ctrl_C(void);
void reconnect_and_store_state(void);