]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / Text3.cpp
index 04a8ddd5f0c890373fecd561e5b2c125a9a52bc5..01a2fd671f7f9de86ad3a41abdea645d71b597ab 100644 (file)
 #include "BufferView.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
-#include "debug.h"
+#include "support/debug.h"
 #include "DispatchResult.h"
 #include "ErrorList.h"
 #include "factory.h"
 #include "FuncRequest.h"
-#include "gettext.h"
+#include "support/gettext.h"
 #include "InsetList.h"
 #include "Intl.h"
 #include "Language.h"
 #include "insets/InsetInfo.h"
 
 #include "support/lstrings.h"
-#include "support/lyxlib.h"
 #include "support/convert.h"
 #include "support/lyxtime.h"
 
 #include "mathed/InsetMathHull.h"
 #include "mathed/MathMacroTemplate.h"
 
-#include <boost/current_function.hpp>
 #include <boost/next_prior.hpp>
 
 #include <clocale>
 #include <sstream>
 
-using std::endl;
-using std::string;
-using std::istringstream;
-using std::ostringstream;
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
@@ -88,9 +84,6 @@ using cap::pasteFromStack;
 using cap::pasteClipboard;
 using cap::replaceSelection;
 
-using support::isStrUnsignedInt;
-using support::token;
-
 // globals...
 static Font freefont(ignore_font, ignore_language);
 static bool toggleall = false;
@@ -156,6 +149,7 @@ static void mathDispatch(Cursor & cur, FuncRequest const & cmd, bool display)
                // somewhere, and an ordinary formula
                // otherwise
                if (sel.find(from_ascii("\\newcommand")) == string::npos
+                               && sel.find(from_ascii("\\newlyxcommand")) == string::npos
                                && sel.find(from_ascii("\\def")) == string::npos)
                {
                        InsetMathHull * formula = new InsetMathHull;
@@ -197,7 +191,7 @@ static bool doInsertInset(Cursor & cur, Text * text,
 
        cur.recordUndo();
        if (cmd.action == LFUN_INDEX_INSERT) {
-               docstring ds = support::subst(text->getStringToIndex(cur), '\n', ' ');
+               docstring ds = subst(text->getStringToIndex(cur), '\n', ' ');
                text->insertInset(cur, inset);
                if (edit)
                        inset->edit(cur, true);
@@ -304,8 +298,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                        // Not found; do nothing
                        if (toclevel == Layout::NOT_IN_TOC || toclevel > thistoclevel)
                                break;
-                       pit_type const newpit = std::distance(bgn, dest);
-                       pit_type const len = std::distance(start, finish);
+                       pit_type const newpit = distance(bgn, dest);
+                       pit_type const len = distance(start, finish);
                        pit_type const deletepit = pit + len;
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, newpit, deletepit - 1);
                        pars.insert(dest, start, finish);
@@ -337,8 +331,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                                        break;
                        }
                        // One such was found:
-                       pit_type newpit = std::distance(bgn, dest);
-                       pit_type const len = std::distance(start, finish);
+                       pit_type newpit = distance(bgn, dest);
+                       pit_type const len = distance(start, finish);
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, newpit - 1);
                        pars.insert(dest, start, finish);
                        start = boost::next(bgn, pit);
@@ -388,7 +382,7 @@ bool Text::isRTL(Buffer const & buffer, Paragraph const & par) const
 
 void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 {
-       LYXERR(Debug::ACTION) << "Text::dispatch: cmd: " << cmd << endl;
+       LYXERR(Debug::ACTION, "Text::dispatch: cmd: " << cmd);
 
        // FIXME: We use the update flag to indicates wether a singlePar or a
        // full screen update is needed. We reset it here but shall we restore it
@@ -419,7 +413,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                pit_type const pit = cur.pit();
                recUndo(cur, pit, pit + 1);
                cur.finishUndo();
-               std::swap(pars_[pit], pars_[pit + 1]);
+               swap(pars_[pit], pars_[pit + 1]);
                updateLabels(cur.buffer());
                needsUpdate = true;
                ++cur.pit();
@@ -430,7 +424,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                pit_type const pit = cur.pit();
                recUndo(cur, pit - 1, pit);
                cur.finishUndo();
-               std::swap(pars_[pit], pars_[pit - 1]);
+               swap(pars_[pit], pars_[pit - 1]);
                updateLabels(cur.buffer());
                --cur.pit();
                needsUpdate = true;
@@ -493,6 +487,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                } else {
                        cur.undispatched();
                }
+               cur.updateFlags(Update::FitCursor);
                break;
 
        case LFUN_BUFFER_END:
@@ -503,12 +498,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                } else {
                        cur.undispatched();
                }
+               cur.updateFlags(Update::FitCursor);
                break;
 
        case LFUN_CHAR_FORWARD:
        case LFUN_CHAR_FORWARD_SELECT:
-               //lyxerr << BOOST_CURRENT_FUNCTION
-               //       << " LFUN_CHAR_FORWARD[SEL]:\n" << cur << endl;
+               //LYXERR0(" LFUN_CHAR_FORWARD[SEL]:\n" << cur);
                needsUpdate |= cur.selHandle(cmd.action == LFUN_CHAR_FORWARD_SELECT);
                needsUpdate |= cursorForward(cur);
 
@@ -536,29 +531,27 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_CHAR_LEFT_SELECT:
                //FIXME: for visual cursor, really move left
                if (reverseDirectionNeeded(cur)) {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_CHAR_LEFT_SELECT ? 
-                                       LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD));
+                       cmd.action = cmd.action == LFUN_CHAR_LEFT_SELECT ? 
+                                       LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD;
                } else {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_CHAR_LEFT_SELECT ? 
-                                       LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD));
+                       cmd.action = cmd.action == LFUN_CHAR_LEFT_SELECT ? 
+                                       LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD;
                }
-               break;
+               dispatch(cur, cmd);
+               return;
 
        case LFUN_CHAR_RIGHT:
        case LFUN_CHAR_RIGHT_SELECT:
                //FIXME: for visual cursor, really move right
                if (reverseDirectionNeeded(cur)) {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_CHAR_RIGHT_SELECT ? 
-                                       LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD));
+                       cmd.action = cmd.action == LFUN_CHAR_RIGHT_SELECT ? 
+                                       LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD;
                } else {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_CHAR_RIGHT_SELECT ? 
-                                       LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD));
+                       cmd.action = cmd.action == LFUN_CHAR_RIGHT_SELECT ? 
+                                       LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD;
                }
-               break;
+               dispatch(cur, cmd);
+               return;
 
        case LFUN_UP_SELECT:
        case LFUN_DOWN_SELECT:
@@ -632,15 +625,14 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_WORD_RIGHT_SELECT:
                //FIXME: for visual cursor mode, really move right
                if (reverseDirectionNeeded(cur)) {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_WORD_RIGHT_SELECT ?
-                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD));
+                       cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
                } else {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_WORD_RIGHT_SELECT ?
-                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD));
+                       cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
+                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
                }
-               break;
+               dispatch(cur, cmd);
+               return;
 
        case LFUN_WORD_FORWARD:
        case LFUN_WORD_FORWARD_SELECT:
@@ -652,15 +644,14 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_WORD_LEFT_SELECT:
                //FIXME: for visual cursor mode, really move left
                if (reverseDirectionNeeded(cur)) {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_WORD_LEFT_SELECT ?
-                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD));
+                       cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+                                       LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
                } else {
-                       lyx::dispatch(FuncRequest(
-                               cmd.action == LFUN_WORD_LEFT_SELECT ?
-                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD));
+                       cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
+                                       LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
                }
-               break;
+               dispatch(cur, cmd);
+               return;
 
        case LFUN_WORD_BACKWARD:
        case LFUN_WORD_BACKWARD_SELECT:
@@ -674,7 +665,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_BREAK_LINE: {
+       case LFUN_NEW_LINE: {
                // Not allowed by LaTeX (labels or empty par)
                if (cur.pos() > cur.paragraph().beginOfBody()) {
                        // this avoids a double undo
@@ -688,6 +679,21 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                }
                break;
        }
+       
+       case LFUN_LINE_BREAK: {
+               // Not allowed by LaTeX (labels or empty par)
+               if (cur.pos() > cur.paragraph().beginOfBody()) {
+                       // this avoids a double undo
+                       // FIXME: should not be needed, ideally
+                       if (!cur.selection())
+                               cur.recordUndo();
+                       cap::replaceSelection(cur);
+                       cur.insert(new InsetLinebreak);
+                       cur.posForward();
+                       moveCursor(cur, false);
+               }
+               break;
+       }
 
        case LFUN_CHAR_DELETE_FORWARD:
                if (!cur.selection()) {
@@ -862,25 +868,28 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                moveCursor(cur, false);
                break;
 
-       case LFUN_HYPHENATION_POINT_INSERT:
-               specialChar(cur, InsetSpecialChar::HYPHENATION);
-               break;
-
-       case LFUN_LIGATURE_BREAK_INSERT:
-               specialChar(cur, InsetSpecialChar::LIGATURE_BREAK);
-               break;
-
-       case LFUN_DOTS_INSERT:
-               specialChar(cur, InsetSpecialChar::LDOTS);
-               break;
-
-       case LFUN_END_OF_SENTENCE_PERIOD_INSERT:
-               specialChar(cur, InsetSpecialChar::END_OF_SENTENCE);
-               break;
-
-       case LFUN_MENU_SEPARATOR_INSERT:
-               specialChar(cur, InsetSpecialChar::MENU_SEPARATOR);
+       case LFUN_SPECIALCHAR_INSERT: {
+               string const name = to_utf8(cmd.argument());
+               if (name == "hyphenation")
+                       specialChar(cur, InsetSpecialChar::HYPHENATION);
+               else if (name == "ligature-break")
+                       specialChar(cur, InsetSpecialChar::LIGATURE_BREAK);
+               else if (name == "slash")
+                       specialChar(cur, InsetSpecialChar::SLASH);
+               else if (name == "nobreakdash")
+                       specialChar(cur, InsetSpecialChar::NOBREAKDASH);
+               else if (name == "dots")
+                       specialChar(cur, InsetSpecialChar::LDOTS);
+               else if (name == "end-of-sentence")
+                       specialChar(cur, InsetSpecialChar::END_OF_SENTENCE);
+               else if (name == "menu-separator")
+                       specialChar(cur, InsetSpecialChar::MENU_SEPARATOR);
+               else if (name.empty())
+                       lyxerr << "LyX function 'specialchar-insert' needs an argument." << endl;
+               else
+                       lyxerr << "Wrong argument for LyX function 'specialchar-insert'." << endl;
                break;
+       }
 
        case LFUN_WORD_UPCASE:
                changeCase(cur, text_uppercase);
@@ -938,7 +947,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                is >> x >> y;
                if (!is)
                        lyxerr << "SETXY: Could not parse coordinates in '"
-                              << to_utf8(cmd.argument()) << std::endl;
+                              << to_utf8(cmd.argument()) << endl;
                else
                        tm.setCursorFromCoordinates(cur, x, y);
                break;
@@ -959,7 +968,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_LAYOUT: {
                docstring layout = cmd.argument();
-               LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << to_utf8(layout) << endl;
+               LYXERR(Debug::INFO, "LFUN_LAYOUT: (arg) " << to_utf8(layout));
 
                docstring const old_layout = cur.paragraph().layout()->name();
 
@@ -1021,8 +1030,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                if (cmd.argument().empty())
                        break;
                docstring hexstring = cmd.argument();
-               if (lyx::support::isHex(hexstring)) {
-                       char_type c = lyx::support::hexToInt(hexstring);
+               if (isHex(hexstring)) {
+                       char_type c = hexToInt(hexstring);
                        if (c >= 32 && c < 0x10ffff) {
                                lyxerr << "Inserting c: " << c << endl;
                                docstring s = docstring(1, c);
@@ -1141,37 +1150,40 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
                // ignore motions deeper nested than the real anchor
                Cursor & bvcur = cur.bv().cursor();
-               if (bvcur.anchor_.hasPart(cur)) {
-                       CursorSlice old = bvcur.top();
-
-                       int const wh = bv->workHeight();
-                       int const y = std::max(0, std::min(wh - 1, cmd.y));
-
-                       tm.setCursorFromCoordinates(cur, cmd.x, y);
-                       cur.setTargetX(cmd.x);
+               if (!bvcur.anchor_.hasPart(cur)) {
+                       cur.undispatched();
+                       break;
+               }
+               CursorSlice old = bvcur.top();
+
+               int const wh = bv->workHeight();
+               int const y = max(0, min(wh - 1, cmd.y));
+
+               tm.setCursorFromCoordinates(cur, cmd.x, y);
+               cur.setTargetX(cmd.x);
+               if (cmd.y >= wh)
+                       lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
+               else if (cmd.y < 0)
+                       lyx::dispatch(FuncRequest(LFUN_UP_SELECT));
+               // This is to allow jumping over large insets
+               if (cur.top() == old) {
                        if (cmd.y >= wh)
                                lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
                        else if (cmd.y < 0)
                                lyx::dispatch(FuncRequest(LFUN_UP_SELECT));
-                       // This is to allow jumping over large insets
-                       if (cur.top() == old) {
-                               if (cmd.y >= wh)
-                                       lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
-                               else if (cmd.y < 0)
-                                       lyx::dispatch(FuncRequest(LFUN_UP_SELECT));
-                       }
-
-                       if (cur.top() == old)
-                               cur.noUpdate();
-                       else {
-                               // don't set anchor_
-                               bvcur.setCursor(cur);
-                               bvcur.selection() = true;
-                               //lyxerr << "MOTION: " << bv->cursor() << endl;
-                       }
+               }
 
-               } else
-                       cur.undispatched();
+               if (cur.top() == old)
+                       cur.noUpdate();
+               else {
+                       // FIXME: This is brute force! But without it the selected
+                       // area is not corrected updated while moving the mouse.
+                       cur.updateFlags(Update::Force | Update::FitCursor);
+                       // don't set anchor_
+                       bvcur.setCursor(cur);
+                       bvcur.selection() = true;
+                       //lyxerr << "MOTION: " << bv->cursor() << endl;
+               }
                break;
        }
 
@@ -1207,17 +1219,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // "auto_region_delete", which defaults to
                // true (on).
 
-               if (lyxrc.auto_region_delete && cur.selection()) {
-                       pit_type const begpit = cur.selBegin().pit();
-                       pit_type const endpit = cur.selEnd().pit();
+               if (lyxrc.auto_region_delete && cur.selection())
                        cutSelection(cur, false, false);
-                       // When a selection spans multiple paragraphs, the metrics update
-                       // mechanism sometimes fail to detect that a full update is needed.
-                       // In this case, we force the full update:
-                       // (see http://bugzilla.lyx.org/show_bug.cgi?id=4317)
-                       if (isMainText(cur.bv().buffer()) && begpit != endpit)
-                               cur.updateFlags(Update::Force);
-               }
 
                cur.clearSelection();
                Font const old_font = cur.real_current_font;
@@ -1243,7 +1246,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        content : cmd.argument();
                string const data = InsetCommandMailer::params2string("href", p);
                if (p["target"].empty()) {
-                       bv->showInsetDialog("href", data, 0);
+                       bv->showDialog("href", data);
                } else {
                        FuncRequest fr(LFUN_INSET_INSERT, data);
                        dispatch(cur, fr);
@@ -1260,7 +1263,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                string const data = InsetCommandMailer::params2string("label", p);
 
                if (cmd.argument().empty()) {
-                       bv->showInsetDialog("label", data, 0);
+                       bv->showDialog("label", data);
                } else {
                        FuncRequest fr(LFUN_INSET_INSERT, data);
                        dispatch(cur, fr);
@@ -1279,6 +1282,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        docstring ds = cur.selectionAsString(false);
                        cutSelection(cur, true, false);
                        static_cast<InsetInfo *>(inset)->setInfo(to_utf8(ds));
+                       static_cast<InsetInfo *>(inset)->updateInfo(cur.bv().buffer());
                }
                insertInset(cur, inset);
                cur.posForward();
@@ -1394,6 +1398,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_TOC_INSERT:
        case LFUN_HFILL_INSERT:
        case LFUN_LINE_INSERT:
+       case LFUN_NEWPAGE_INSERT:
        case LFUN_PAGEBREAK_INSERT:
        case LFUN_CLEARPAGE_INSERT:
        case LFUN_CLEARDOUBLEPAGE_INSERT:
@@ -1431,8 +1436,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        string const s1 = token(s, ' ', 1);
                        int const nargs = s1.empty() ? 0 : convert<int>(s1);
                        string const s2 = token(s, ' ', 2);
-                       string const type = s2.empty() ? "newcommand" : s2;
-                       cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, from_utf8(type)));
+                       MacroType type = MacroTypeNewcommand;
+                       if (s2 == "def")
+                               type = MacroTypeDef;
+                       cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type));
                        //cur.nextInset()->edit(cur, true);
                }
                break;
@@ -1449,12 +1456,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_MATH_MATRIX:
        case LFUN_MATH_DELIM:
        case LFUN_MATH_BIGDELIM: {
-               if (cur.selection())
-                       cur.clearSelection();
-               // FIXME: instead of the above, this one
-               // should be used (but it asserts with Bidi enabled)
-               // cf. http://bugzilla.lyx.org/show_bug.cgi?id=4055
-               // cap::replaceSelection(cur);
+               cap::replaceSelection(cur);
                cur.insert(new InsetMathHull(hullSimple));
                checkAndActivateInset(cur, true);
                BOOST_ASSERT(cur.inMathed());
@@ -1555,7 +1557,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        }
 
        case LFUN_FINISHED_LEFT:
-               LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_LEFT:\n" << cur << endl;
+               LYXERR(Debug::DEBUG, "handle LFUN_FINISHED_LEFT:\n" << cur);
                if (reverseDirectionNeeded(cur)) {
                        ++cur.pos();
                        cur.setCurrentFont();
@@ -1563,7 +1565,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_FINISHED_RIGHT:
-               LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_RIGHT:\n" << cur << endl;
+               LYXERR(Debug::DEBUG, "handle LFUN_FINISHED_RIGHT:\n" << cur);
                if (!reverseDirectionNeeded(cur)) {
                        ++cur.pos();
                        cur.setCurrentFont();
@@ -1571,11 +1573,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_FINISHED_BACKWARD:
-               LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_BACKWARD:\n" << cur << endl;
+               LYXERR(Debug::DEBUG, "handle LFUN_FINISHED_BACKWARD:\n" << cur);
                break;
 
        case LFUN_FINISHED_FORWARD:
-               LYXERR(Debug::DEBUG) << "handle LFUN_FINISHED_FORWARD:\n" << cur << endl;
+               LYXERR(Debug::DEBUG, "handle LFUN_FINISHED_FORWARD:\n" << cur);
                ++cur.pos();
                cur.setCurrentFont();
                break;
@@ -1584,7 +1586,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                string data;
                params2string(cur.paragraph(), data);
                data = "show\n" + data;
-               bv->showDialogWithData("paragraph", data);
+               bv->showDialog("paragraph", data);
                break;
        }
 
@@ -1669,7 +1671,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                arg = cur.selectionAsString(false);
                        }
                }
-               bv->showDialogWithData("thesaurus", to_utf8(arg));
+               bv->showDialog("thesaurus", to_utf8(arg));
                break;
        }
 
@@ -1733,10 +1735,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        default:
-               LYXERR(Debug::ACTION)
-                       << BOOST_CURRENT_FUNCTION
-                       << ": Command " << cmd
-                       << " not DISPATCHED by Text" << endl;
+               LYXERR(Debug::ACTION, "Command " << cmd << " not DISPATCHED by Text");
                cur.undispatched();
                break;
        }
@@ -1759,14 +1758,13 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // Inserting characters does not change par height
                ParagraphMetrics const & pms
                        = cur.bv().parMetrics(cur.bottom().text(), cur.bottom().pit());
-               if (pms.dim().height()
-                   == olddim.height()) {
+               if (pms.dim().height() == olddim.height()) {
                        // if so, update _only_ this paragraph
                        cur.updateFlags(Update::SinglePar |
                                Update::FitCursor);
                        return;
-               } else
-                       needsUpdate = true;
+               }
+               needsUpdate = true;
        }
 
        if (!needsUpdate
@@ -1955,12 +1953,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                // always allow this, since we will inset a raw quote
                // if an inset is not allowed.
                break;
-       case LFUN_HYPHENATION_POINT_INSERT:
-       case LFUN_LIGATURE_BREAK_INSERT:
        case LFUN_HFILL_INSERT:
-       case LFUN_MENU_SEPARATOR_INSERT:
-       case LFUN_DOTS_INSERT:
-       case LFUN_END_OF_SENTENCE_PERIOD_INSERT:
+       case LFUN_SPECIALCHAR_INSERT:
                code = SPECIALCHAR_CODE;
                break;
        case LFUN_SPACE_INSERT:
@@ -2101,8 +2095,9 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_PARAGRAPH_UP:
        case LFUN_PARAGRAPH_DOWN:
        case LFUN_LINE_BEGIN:
+       case LFUN_LINE_BREAK:
        case LFUN_LINE_END:
-       case LFUN_BREAK_LINE:
+       case LFUN_NEW_LINE:
        case LFUN_CHAR_DELETE_FORWARD:
        case LFUN_DELETE_FORWARD_SKIP:
        case LFUN_CHAR_DELETE_BACKWARD:
@@ -2123,6 +2118,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_DATE_INSERT:
        case LFUN_SELF_INSERT:
        case LFUN_LINE_INSERT:
+       case LFUN_NEWPAGE_INSERT:
        case LFUN_PAGEBREAK_INSERT:
        case LFUN_CLEARPAGE_INSERT:
        case LFUN_CLEARDOUBLEPAGE_INSERT: