Version: 2.4 (using KDE 3.4.0 Level "a" , SUSE 9.2 UNSUPPORTED) Compiler: gcc version 3.3.4 (pre 3.3.5 20040809) OS: Linux (i686) release 2.6.8-24.11-default It is impossible to use search&replace to erase a pattern. If you delete the replace field, Kate remembers what was in it for the previous search&replace and uses it instead of an empty string. It only works as expected when Kate just started because she has no replace text to remember.
I'll fix it for 3.4.1. In the meantime, you can use the commandline replace as a work around (press F7 and enter 'replace PATTERN' will replace with nothing)
CVS commit by alund: allow to replace with nothing. BUG: 101895 Could someone please backport? M +18 -11 katesearch.cpp 1.87 --- kdelibs/kate/part/katesearch.cpp #1.86:1.87 @@ -38,4 +38,5 @@ #include <kfinddialog.h> #include <kreplacedialog.h> +#include <knotifyclient.h> #include <qlayout.h> @@ -111,5 +112,5 @@ void KateSearch::find() } -void KateSearch::find( const QString &pattern, long flags, bool add, bool shownotfound ) +bool KateSearch::find( const QString &pattern, long flags, bool add, bool shownotfound ) { KateViewConfig::global()->setSearchFlags( flags ); @@ -145,5 +146,5 @@ void KateSearch::find( const QString &pa s.showNotFound = shownotfound; - search( searchFlags ); + return search( searchFlags ); } @@ -166,7 +167,7 @@ void KateSearch::replace() m_replacement = replaceDialog->replacement(); s_searchList = replaceDialog->findHistory () ; - s_replaceList = replaceDialog->replacementHistory () ; + s_replaceList = replaceDialog->replacementHistory (); - replace( s_searchList.first(), s_replaceList.first(), opts ); + replace( s_searchList.first(), m_replacement, opts ); } @@ -234,5 +235,5 @@ void KateSearch::findAgain( bool back ) } -void KateSearch::search( SearchFlags flags ) +bool KateSearch::search( SearchFlags flags ) { s.flags = flags; @@ -262,6 +263,7 @@ void KateSearch::search( SearchFlags fla else replaceAll(); + return false; // FIXME } else { - findAgain(); + return findAgain(); } } @@ -291,19 +293,21 @@ void KateSearch::wrapSearch() } -void KateSearch::findAgain() +bool KateSearch::findAgain() { if( s_pattern.isEmpty() ) { find(); - return; + return false; // ### make find() return a bool too just to be consequent } if ( doSearch( s_pattern ) ) { exposeFound( s.cursor, s.matchedLength ); + return true; } else if( !s.flags.finished ) { if( askContinue() ) { wrapSearch(); - findAgain(); + return findAgain(); } else { if (arbitraryHLExample) m_arbitraryHLList->clear(); + return false; } } else { @@ -315,4 +319,5 @@ void KateSearch::findAgain() i18n("Find")); } + return false; } @@ -806,5 +811,6 @@ while ( (p = pattern.find( '\\' + delim, if ( cmd.startsWith( "find" ) ) { - ((KateView*)view)->find( pattern, f ); + if ( ! ((KateView*)view)->find( pattern, f ) ) + msg = i18n("'%1' not found.").arg( pattern ); return true; } @@ -899,5 +905,6 @@ void SearchCommand::processText( Kate::V v->setCursorPositionInternal( v->selStartLine(), v->selStartCol() ); - v->find( pattern, m_ifindFlags, false ); + if ( ! v->find( pattern, m_ifindFlags, false ) ) + KNotifyClient::beep(); } }
Sorry for the lengthy commit, but I *did* fix it. Just needs a backport, but that will be done too...
CVS commit by dhaumann: Backport Anders' fix for bug: allow to replace with nothing. CCBUG: 101895 M +1 -1 katesearch.cpp 1.84.2.1 --- kdelibs/kate/part/katesearch.cpp #1.84:1.84.2.1 @@ -167,5 +167,5 @@ void KateSearch::replace() s_replaceList = replaceDialog->replacementHistory () ; - replace( s_searchList.first(), s_replaceList.first(), opts ); + replace( s_searchList.first(), m_replacement, opts ); }
*** Bug 102678 has been marked as a duplicate of this bug. ***
*** Bug 105540 has been marked as a duplicate of this bug. ***