LASSERT(!bm.filename.empty(), /**/);
string const file = bm.filename.absFilename();
// if the file is not opened, open it.
- if (!theBufferList().exists(file)) {
+ if (!theBufferList().exists(bm.filename)) {
if (openFile)
dispatch(FuncRequest(LFUN_FILE_OPEN, file));
else
return;
}
// open may fail, so we need to test it again
- if (!theBufferList().exists(file))
+ if (!theBufferList().exists(bm.filename))
return;
// if the current buffer is not that one, switch to it.
- if (lyx_view_->buffer()->absFileName() != file) {
+ if (lyx_view_->buffer()->fileName() != bm.filename) {
if (!switchToBuffer)
return;
dispatch(FuncRequest(LFUN_BUFFER_SWITCH, file));
break;
case LFUN_VC_REGISTER:
- enable = !buf->lyxvc().inUse();
+ enable = !buf->lyxvc().inUse() && !buf->isUnnamed();
break;
case LFUN_VC_CHECK_IN:
enable = buf->lyxvc().checkInEnabled();
/*
case LFUN_BUFFER_WRITE:
case LFUN_BUFFER_WRITE_AS: {
- Buffer * b = theBufferList().getBuffer(cmd.getArg(0));
+ Buffer * b = theBufferList().getBuffer(FileName(cmd.getArg(0)));
enable = b && (b->isUnnamed() || !b->isClean());
break;
}
break;
}
+ // we want to check if at least one of these is enabled
+ case LFUN_COMMAND_ALTERNATIVES: {
+ // argument contains ';'-terminated commands
+ string arg = to_utf8(cmd.argument());
+ while (!arg.empty()) {
+ string first;
+ arg = split(arg, first, ';');
+ FuncRequest func(lyxaction.lookupFunc(first));
+ func.origin = cmd.origin;
+ flag = getStatus(func);
+ // if this one is enabled, the whole thing is
+ if (flag.enabled())
+ break;
+ }
+ break;
+ }
+
case LFUN_CALL: {
FuncRequest func;
string name = to_utf8(cmd.argument());
// --- version control -------------------------------
case LFUN_VC_REGISTER:
LASSERT(lyx_view_ && lyx_view_->buffer(), /**/);
- if (!ensureBufferClean(view()))
+ if (!ensureBufferClean(view()) || lyx_view_->buffer()->isUnnamed())
break;
if (!lyx_view_->buffer()->lyxvc().inUse()) {
lyx_view_->buffer()->lyxvc().registrer();
break;
if (lyx_view_->buffer()->lyxvc().inUse()
&& !lyx_view_->buffer()->isReadonly()) {
- lyx_view_->buffer()->lyxvc().checkIn();
+ setMessage(from_utf8(lyx_view_->buffer()->lyxvc().checkIn()));
reloadBuffer();
}
break;
if (!ensureBufferClean(view()))
break;
if (lyx_view_->buffer()->lyxvc().inUse()) {
- lyx_view_->buffer()->lyxvc().checkOut();
+ setMessage(from_utf8(lyx_view_->buffer()->lyxvc().checkOut()));
reloadBuffer();
}
break;
// and get full path
FileName const s = fileSearch(string(), changeExtension(file_name, ".lyx"), "lyx");
// Either change buffer or load the file
- if (theBufferList().exists(s.absFilename()))
- buf = theBufferList().getBuffer(s.absFilename());
+ if (theBufferList().exists(s))
+ buf = theBufferList().getBuffer(s);
else {
buf = lyx_view_->loadDocument(s);
loaded = true;
view()->saveBookmark(false);
Buffer * child = 0;
bool parsed = false;
- if (theBufferList().exists(filename.absFilename())) {
- child = theBufferList().getBuffer(filename.absFilename());
+ if (theBufferList().exists(filename)) {
+ child = theBufferList().getBuffer(filename);
} else {
setMessage(bformat(_("Opening child document %1$s..."),
makeDisplayPath(filename.absFilename())));
break;
}
+ case LFUN_COMMAND_ALTERNATIVES: {
+ // argument contains ';'-terminated commands
+ string arg = argument;
+ while (!arg.empty()) {
+ string first;
+ arg = split(arg, first, ';');
+ FuncRequest func(lyxaction.lookupFunc(first));
+ func.origin = cmd.origin;
+ FuncStatus stat = getStatus(func);
+ if (stat.enabled()) {
+ dispatch(func);
+ break;
+ }
+ }
+ break;
+ }
+
case LFUN_CALL: {
FuncRequest func;
if (theTopLevelCmdDef().lock(argument, func)) {
if (lyx_view_ == 0)
break;
+ // Start an undo group. This may be needed for
+ // some stuff like inset-apply on labels.
+ if (lyx_view_->view())
+ view()->cursor().beginUndoGroup();
+
// Let the current LyXView dispatch its own actions.
if (lyx_view_->dispatch(cmd)) {
- if (lyx_view_->view())
+ if (lyx_view_->view()) {
updateFlags = lyx_view_->view()->cursor().result().update();
+ view()->cursor().endUndoGroup();
+ }
break;
}
LASSERT(lyx_view_->view(), /**/);
+
// Let the current BufferView dispatch its own actions.
if (view()->dispatch(cmd)) {
// The BufferView took care of its own updates if needed.
updateFlags = Update::None;
+ view()->cursor().endUndoGroup();
break;
}
view()->cursor().fixIfBroken();
}
+ // we assume here that the buffer view has not
+ // changed since the beginUndoGroup.
+ view()->cursor().endUndoGroup();
+
// update completion. We do it here and not in
// processKeySym to avoid another redraw just for a
// changed inline completion
case LyXRC::RC_FORMAT:
case LyXRC::RC_GROUP_LAYOUTS:
case LyXRC::RC_INDEX_COMMAND:
+ case LyXRC::RC_NOMENCL_COMMAND:
case LyXRC::RC_INPUT:
case LyXRC::RC_KBMAP:
case LyXRC::RC_KBMAP_PRIMARY: