namespace fs = boost::filesystem;
-extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
-
// (alkis)
extern tex_accent_struct get_accent(kb_action action);
}
-LyXFunc::LyXFunc(LyXView * lv)
- : owner(lv),
+LyXFunc::LyXFunc()
+ : owner(0),
encoded_last_key(0),
- keyseq(toplevel_keymap.get(), toplevel_keymap.get()),
- cancel_meta_seq(toplevel_keymap.get(), toplevel_keymap.get()),
meta_fake_bit(key_modifier::none)
{
}
+void LyXFunc::initKeySequences(kb_keymap * kb)
+{
+ keyseq.reset(new kb_sequence(kb, kb));
+ cancel_meta_seq.reset(new kb_sequence(kb, kb));
+}
+
+
void LyXFunc::setLyXView(LyXView * lv)
{
owner = lv;
}
+
void LyXFunc::handleKeyFunc(kb_action action)
{
char c = encoded_last_key;
- if (keyseq.length()) {
+ if (keyseq->length()) {
c = 0;
}
.deadkey(c, get_accent(action).accent, view()->getLyXText());
// Need to clear, in case the minibuffer calls these
// actions
- keyseq.clear();
+ keyseq->clear();
// copied verbatim from do_accent_char
view()->cursor().resetAnchor();
view()->update();
// Do a one-deep top-level lookup for
// cancel and meta-fake keys. RVDK_PATCH_5
- cancel_meta_seq.reset();
+ cancel_meta_seq->reset();
- FuncRequest func = cancel_meta_seq.addkey(keysym, state);
+ FuncRequest func = cancel_meta_seq->addkey(keysym, state);
lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
<< " action first set to [" << func.action << ']'
<< endl;
// Mostly, meta_fake_bit = key_modifier::none. RVDK_PATCH_5.
if ((func.action != LFUN_CANCEL) && (func.action != LFUN_META_PREFIX)) {
// remove Caps Lock and Mod2 as a modifiers
- func = keyseq.addkey(keysym, (state | meta_fake_bit));
+ func = keyseq->addkey(keysym, (state | meta_fake_bit));
lyxerr[Debug::KEY] << BOOST_CURRENT_FUNCTION
<< "action now set to ["
<< func.action << ']' << endl;
lyxerr << BOOST_CURRENT_FUNCTION
<< " Key [action="
<< func.action << "]["
- << keyseq.print() << ']'
+ << keyseq->print() << ']'
<< endl;
}
// why not return already here if action == -1 and
// num_bytes == 0? (Lgb)
- if (keyseq.length() > 1) {
- owner->message(lyx::from_utf8(keyseq.print()));
+ if (keyseq->length() > 1) {
+ owner->message(lyx::from_utf8(keyseq->print()));
}
if (func.action == LFUN_UNKNOWN_ACTION &&
state == key_modifier::shift) {
lyxerr[Debug::KEY] << "Trying without shift" << endl;
- func = keyseq.addkey(keysym, key_modifier::none);
+ func = keyseq->addkey(keysym, key_modifier::none);
lyxerr[Debug::KEY] << "Action now " << func.action << endl;
}
// Hmm, we didn't match any of the keysequences. See
// if it's normal insertable text not already covered
// by a binding
- if (keysym->isText() && keyseq.length() == 1) {
+ if (keysym->isText() && keyseq->length() == 1) {
lyxerr[Debug::KEY] << "isText() is true, inserting." << endl;
func = FuncRequest(LFUN_SELF_INSERT,
FuncRequest::KEYBOARD);
}
case LFUN_COMMAND_PREFIX:
- owner->message(lyx::from_utf8(keyseq.printOptions()));
+ owner->message(lyx::from_utf8(keyseq->printOptions()));
break;
case LFUN_COMMAND_EXECUTE:
break;
case LFUN_CANCEL:
- keyseq.reset();
+ keyseq->reset();
meta_fake_bit = key_modifier::none;
if (view()->buffer())
// cancel any selection
case LFUN_META_PREFIX:
meta_fake_bit = key_modifier::alt;
- setMessage(lyx::from_utf8(keyseq.print()));
+ setMessage(lyx::from_utf8(keyseq->print()));
break;
case LFUN_BUFFER_TOGGLE_READ_ONLY:
break;
case LFUN_SERVER_NOTIFY:
- dispatch_buffer = lyx::from_utf8(keyseq.print());
- theApp->server().notifyClient(lyx::to_utf8(dispatch_buffer));
+ dispatch_buffer = lyx::from_utf8(keyseq->print());
+ theLyXServer().notifyClient(lyx::to_utf8(dispatch_buffer));
break;
case LFUN_SERVER_GOTO_FILE_ROW: {
}
}
- string const shortcuts = toplevel_keymap->printbindings(cmd);
+ string const shortcuts = theTopLevelKeymap().printbindings(cmd);
if (!shortcuts.empty())
comname += ": " + shortcuts;
}
-void LyXFunc::setupLocalKeymap()
-{
- keyseq.stdmap = toplevel_keymap.get();
- keyseq.curmap = toplevel_keymap.get();
- cancel_meta_seq.stdmap = toplevel_keymap.get();
- cancel_meta_seq.curmap = toplevel_keymap.get();
-}
-
-
void LyXFunc::menuNew(string const & name, bool fromTemplate)
{
string initpath = lyxrc.document_path;
{
// When meta-fake key is pressed, show the key sequence so far + "M-".
if (wasMetaKey())
- return keyseq.print() + "M-";
+ return keyseq->print() + "M-";
// Else, when a non-complete key sequence is pressed,
// show the available options.
- if (keyseq.length() > 0 && !keyseq.deleted())
- return keyseq.printOptions();
+ if (keyseq->length() > 0 && !keyseq->deleted())
+ return keyseq->printOptions();
if (!view()->buffer())
return lyx::to_utf8(_("Welcome to LyX!"));