cur.pit() = newpit - len;
break;
}
- case OutlineIn: {
+ case OutlineIn:
+ case OutlineOut: {
pit_type const len = distance(start, finish);
buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, pit + len - 1);
for (; start != finish; ++start) {
DocumentClass::const_iterator lit = tc.begin();
DocumentClass::const_iterator len = tc.end();
for (; lit != len; ++lit) {
- if (lit->toclevel == toclevel + 1 &&
+ if (lit->toclevel == (mode == OutlineIn ?
+ toclevel + 1 : toclevel - 1) &&
start->layout().labeltype == lit->labeltype) {
start->setLayout(*lit);
break;
}
break;
}
- case OutlineOut: {
- pit_type const len = distance(start, finish);
- buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, pit + len - 1);
- for (; start != finish; ++start) {
- toclevel = buf.text().getTocLevel(distance(bgn, start));
- if (toclevel == Layout::NOT_IN_TOC)
- continue;
- DocumentClass::const_iterator lit = tc.begin();
- DocumentClass::const_iterator len = tc.end();
- for (; lit != len; ++lit) {
- if (lit->toclevel == toclevel - 1 &&
- start->layout().labeltype == lit->labeltype) {
- start->setLayout(*lit);
- break;
- }
- }
- }
- break;
- }
}
}
cur.screenUpdateFlags(Update::FitCursor);
break;
- case LFUN_INSET_SELECT_ALL:
- if (cur.depth() == 1 || !cur.selection() || !cur.selBegin().at_begin()
- || !cur.selEnd().at_end()) {
- needsUpdate |= cur.selHandle(false);
- needsUpdate |= cursorTop(cur);
- needsUpdate |= cur.selHandle(true);
- needsUpdate |= cursorBottom(cur);
- } else
- cur.undispatched();
- cur.screenUpdateFlags(Update::FitCursor);
- break;
-
case LFUN_CHAR_FORWARD:
case LFUN_CHAR_FORWARD_SELECT:
//LYXERR0(" LFUN_CHAR_FORWARD[SEL]:\n" << cur);
cap::replaceSelection(cur);
pit_type pit = cur.pit();
Paragraph const & par = pars_[pit];
- Paragraph const & prevpar = pit > 0 ? pars_[pit - 1] : par;
- if (pit > 0 && cur.pos() == par.beginOfBody()
+ pit_type prev = pit;
+ if (pit > 0) {
+ if (!pars_[pit - 1].layout().isEnvironment())
+ prev = depthHook(pit, par.getDepth());
+ else if (pars_[pit - 1].getDepth() >= par.getDepth())
+ prev = pit - 1;
+ }
+ if (prev < pit && cur.pos() == par.beginOfBody()
&& !par.isEnvSeparator(cur.pos())
&& !par.layout().isCommand()
- && ((prevpar.getDepth() > par.getDepth()
- && !par.layout().isEnvironment())
- || (prevpar.layout() != par.layout()
- && prevpar.layout().isEnvironment()))) {
- if (par.layout().isEnvironment()) {
+ && pars_[prev].layout() != par.layout()
+ && pars_[prev].layout().isEnvironment()) {
+ if (par.layout().isEnvironment()
+ && pars_[prev].getDepth() == par.getDepth()) {
docstring const layout = par.layout().name();
DocumentClass const & tc = bv->buffer().params().documentClass();
lyx::dispatch(FuncRequest(LFUN_LAYOUT, tc.plainLayout().name()));
case LFUN_MOUSE_DOUBLE:
if (cmd.button() == mouse_button::button1) {
- selectWord(cur, WHOLE_WORD_STRICT);
+ selectWord(cur, WHOLE_WORD);
bv->cursor() = cur;
}
break;
needsUpdate = true;
break;
+ case LFUN_SERVER_GET_STATISTICS:
+ {
+ DocIterator from, to;
+ if (cur.selection()) {
+ from = cur.selectionBegin();
+ to = cur.selectionEnd();
+ } else {
+ from = doc_iterator_begin(cur.buffer());
+ to = doc_iterator_end(cur.buffer());
+ }
+
+ cur.buffer()->updateStatistics(from, to);
+ string const arg0 = cmd.getArg(0);
+ if (arg0 == "words") {
+ cur.message(convert<docstring>(cur.buffer()->wordCount()));
+ } else if (arg0 == "chars") {
+ cur.message(convert<docstring>(cur.buffer()->charCount(false)));
+ } else if (arg0 == "chars-space") {
+ cur.message(convert<docstring>(cur.buffer()->charCount(true)));
+ } else {
+ cur.message(convert<docstring>(cur.buffer()->wordCount()) + " "
+ + convert<docstring>(cur.buffer()->charCount(false)) + " "
+ + convert<docstring>(cur.buffer()->charCount(true)));
+ }
+ }
+ break;
+
default:
LYXERR(Debug::ACTION, "Command " << cmd << " not DISPATCHED by Text");
cur.undispatched();
case LFUN_CAPTION_INSERT: {
code = CAPTION_CODE;
string arg = cmd.getArg(0);
- bool varia = arg != "LongTableNoNumber";
- if (cur.depth() > 0) {
- if (&cur[cur.depth() - 1].inset())
- varia = cur[cur.depth() - 1].inset().allowsCaptionVariation(arg);
- }
+ bool varia = arg != "LongTableNoNumber"
+ && cur.inset().allowsCaptionVariation(arg);
// not allowed in description items,
// and in specific insets
enable = !inDescriptionItem(cur)
case LFUN_INSET_END:
case LFUN_INSET_BEGIN_SELECT:
case LFUN_INSET_END_SELECT:
- case LFUN_INSET_SELECT_ALL:
case LFUN_PARAGRAPH_UP:
case LFUN_PARAGRAPH_DOWN:
case LFUN_LINE_BEGIN:
case LFUN_UNICODE_INSERT:
case LFUN_THESAURUS_ENTRY:
case LFUN_ESCAPE:
+ case LFUN_SERVER_GET_STATISTICS:
// these are handled in our dispatch()
enable = true;
break;