From c310c7d875c8aa871180de130e820ed19a2489f5 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Fri, 12 Dec 2014 16:39:46 +0100 Subject: implemented automatic EOL translation support * activated via bit 4 of the ED flag (enabled by default) * automatic EOL guessing on file loading and translation to LFs. * works with files that have inconsistent EOL sequences. * automatic translation to original EOL sequences on file saving * works with inconsistent EOL sequences in the buffer. This should usually not happen if the file was read in with automatic EOL translation enabled. * also works with the EC and EG commands * performance is OK, depending on the file being translated. When reading files with UNIX EOLs, the overhead is minimal typically-sized files. For DOS EOLs the overhead is larger but still acceptable. * Return (line feed) is now an immediate editing command. This centralizes EOL sequence insertion. Later, other features like auto-indent could be added to the editing command. * get_eol() has been moved to main.cpp (now called get_eol_seq() * Warn if file ownership could not be preserved when saving files. * IOView has been almost completely rewritten based on GIOChannels. The EOL translation code is also in IOView. --- src/main.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp index 79cb78b..7ad4d80 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -71,7 +71,7 @@ QRegisterTable QRegisters::globals; Ring ring; namespace Flags { - tecoInt ed = 0; + tecoInt ed = ED_AUTOEOL; } static gchar *eval_macro = NULL; @@ -88,6 +88,20 @@ static gpointer g_realloc_exception(gpointer mem, gsize n_bytes); static void sigint_handler(int signal); } +const gchar * +get_eol_seq(gint eol_mode) +{ + switch (eol_mode) { + case SC_EOL_CRLF: + return "\r\n"; + case SC_EOL_CR: + return "\r"; + case SC_EOL_LF: + default: + return "\n"; + } +} + #ifdef G_OS_WIN32 /* -- cgit v1.2.3