[QScintilla] Incorrect EOL after copy-pasting
Phil Thompson
phil at riverbankcomputing.com
Sun Oct 2 12:57:18 BST 2011
On Fri, 30 Sep 2011 10:47:22 +0300, Andrei Kopats <hlamer at tut.by> wrote:
> Hi
>
> I have problem with EOLs in QScintilla.
>
> Let's open 2 QScintilla based editors. First is configured to work in CR
> EOL
> mode, and second in LF EOL mode.
> If I copy text from first to second - second contains mix of different
EOL
> modes.
> To see it, activate EOL symbols visibility or check saved file with hex
> editor.
>
> I think, when pasting, QScintilla should automatically convert EOLs of
> pasted text to current EOL mode of the file.
>
> I can not reproduce this bug on SciTE, seems, Qt implementation
specific.
> I also checked SciTE code, it seems, it does not do any conversions when
> pasting, but only calls Scintilla GTK implementation.
>
> This problem was discussed on QScintilla bugtracker
>
https://sourceforge.net/tracker/index.php?func=detail&aid=1216370&group_id=2439&atid=352439
>
> I discovered, that JuffED fixes this problem in its code, but, I think,
it
> would be better, if QScintilla handles it...
>
>
> void JuffScintilla::paste() {
> QString originalText = QApplication::clipboard()->text();
> QString convertedText;
> if ( originalText.contains(LineSeparatorRx) ) {
> QStringList lines = originalText.split(LineSeparatorRx);
> switch ( eolMode() ) {
> case EolWindows : convertedText = lines.join("\r\n"); break;
> case EolUnix : convertedText = lines.join("\n"); break;
> case EolMac : convertedText = lines.join("\r"); break;
> }
> QApplication::clipboard()->setText(convertedText);
> }
>
> if ( SendScintilla(SCI_SELECTIONISRECTANGLE) ) {
> QString text = QApplication::clipboard()->text();
> int line1, col1, line2, col2;
> getOrderedSelection(line1, col1, line2, col2);
>
> beginUndoAction();
> deleteRectSelection(line1, col1, line2, col2);
> for ( int line = line2; line >= line1; --line ) {
> insertAt(text, line, col1);
> }
> endUndoAction();
> }
> else {
> QsciScintilla::paste();
> }
>
> // restore the original clipboard content
> QApplication::clipboard()->setText(originalText);
> }
>
>
> Andrei Kopats
Works fine for me with the current version.
Phil
More information about the QScintilla
mailing list