diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2014-12-12 16:39:46 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2015-03-16 07:20:05 +0100 |
commit | c310c7d875c8aa871180de130e820ed19a2489f5 (patch) | |
tree | a42eacf47ba714c99af5ec04ff2ce1b4e9f87765 /src/qregisters.cpp | |
parent | eee4f1ae84bcbb18a9ac0f5f450510533014dd40 (diff) | |
download | sciteco-c310c7d875c8aa871180de130e820ed19a2489f5.tar.gz |
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.
Diffstat (limited to 'src/qregisters.cpp')
-rw-r--r-- | src/qregisters.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/qregisters.cpp b/src/qregisters.cpp index acb12cf..e792fc0 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -252,6 +252,40 @@ QRegister::execute(bool locals) } void +QRegister::undo_set_eol_mode(void) +{ + if (!must_undo) + return; + + /* + * Necessary, so that upon rubout the + * string's parameters are restored. + */ + string.update(QRegisters::view); + + if (QRegisters::current && QRegisters::current->must_undo) + QRegisters::current->string.undo_edit(QRegisters::view); + + QRegisters::view.undo_ssm(SCI_SETEOLMODE, + QRegisters::view.ssm(SCI_GETEOLMODE)); + + string.undo_edit(QRegisters::view); +} + +void +QRegister::set_eol_mode(gint mode) +{ + if (QRegisters::current) + QRegisters::current->string.update(QRegisters::view); + + string.edit(QRegisters::view); + QRegisters::view.ssm(SCI_SETEOLMODE, mode); + + if (QRegisters::current) + QRegisters::current->string.edit(QRegisters::view); +} + +void QRegister::load(const gchar *filename) { undo_set_string(); @@ -263,6 +297,11 @@ QRegister::load(const gchar *filename) string.reset(); /* + * IOView::load() might change the EOL style. + */ + undo_set_eol_mode(); + + /* * undo_set_string() pushes undo tokens that restore * the previous document in the view. * So if loading fails, QRegisters::current will be |