- case LFUN_INSET_EDIT: {
- cur.push(*this);
- text().selectAll(cur);
- string const format =
- cur.buffer()->params().documentClass().outputFormat();
- string const ext = theFormats().extension(format);
- tempfile_.reset(new TempFile("ert_editXXXXXX." + ext));
- FileName const tempfilename = tempfile_->name();
- string const name = tempfilename.toFilesystemEncoding();
- ofdocstream os(name.c_str());
- os << cur.selectionAsString(false);
- os.close();
- // Since we lock the inset while the external file is edited,
- // we need to move the cursor outside and clear any selection inside
- cur.clearSelection();
- cur.pop();
- cur.leaveInset(*this);
- theFormats().edit(buffer(), tempfilename, format);
- break;
- }
- case LFUN_INSET_END_EDIT: {
- FileName const tempfilename = tempfile_->name();
- docstring const s = tempfilename.fileContents("UTF-8");
- cur.recordUndoInset(this);
- cur.push(*this);
- text().selectAll(cur);
- cap::replaceSelection(cur);
- cur.text()->insertStringAsLines(cur, s, cur.current_font);
- // FIXME it crashes without this
- cur.fixIfBroken();
- tempfile_.reset();
- cur.pop();
- break;
- }