]> git.lyx.org Git - lyx.git/blobdiff - src/KeyMap.cpp
fix a visual cursor edge-case:
[lyx.git] / src / KeyMap.cpp
index b32bda3e4b7df8c1869d7bc72edcd9e3be83dda9..b068b2c95faf75e1376a6239b7027c213f38ef47 100644 (file)
 
 #include "KeyMap.h"
 
-#include "debug.h"
 #include "KeySequence.h"
 #include "LyXAction.h"
 #include "Lexer.h"
 
+#include "support/debug.h"
+#include "support/docstream.h"
+#include "support/FileName.h"
 #include "support/filetools.h"
 
 #include <fstream>
 #include <sstream>
 #include <utility>
 
-using std::endl;
-using std::ios;
-using std::ofstream;
-using std::string;
-using boost::make_tuple;
-
+using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
-using support::FileName;
-using support::i18nLibFileSearch;
-
 
 string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod)
 {
@@ -45,12 +40,12 @@ string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod)
 
        string const s = key.getSymbolName();
 
-       if (mod & ShiftModifier)
-               buf += "S-";
        if (mod & ControlModifier)
                buf += "C-";
        if (mod & AltModifier)
                buf += "M-";
+       if (mod & ShiftModifier)
+               buf += "S-";
 
        buf += s;
        return buf;
@@ -59,19 +54,17 @@ string const KeyMap::printKeySym(KeySymbol const & key, KeyModifier mod)
 
 size_t KeyMap::bind(string const & seq, FuncRequest const & func)
 {
-       LYXERR(Debug::KBMAP) << "BIND: Sequence `"
-              << seq << "' Action `"
-              << func.action << '\'' << endl;
+       LYXERR(Debug::KBMAP, "BIND: Sequence `" << seq << "' Action `"
+              << func.action << '\'');
 
        KeySequence k(0, 0);
 
        string::size_type const res = k.parse(seq);
        if (res == string::npos) {
-               defkey(&k, func);
+               bind(&k, func);
        } else {
-               LYXERR(Debug::KBMAP) << "Parse error at position " << res
-                                    << " in key sequence '" << seq << "'."
-                                    << endl;
+               LYXERR(Debug::KBMAP, "Parse error at position " << res
+                                    << " in key sequence '" << seq << "'.");
        }
 
        return res == string::npos ? 0 : res;
@@ -84,11 +77,10 @@ size_t KeyMap::unbind(string const & seq, FuncRequest const & func)
 
        string::size_type const res = k.parse(seq);
        if (res == string::npos)
-               delkey(&k, func);
+               unbind(&k, func);
        else
-               LYXERR(Debug::KBMAP) << "Parse error at position " << res
-                                    << " in key sequence '" << seq << "'."
-                                    << endl;
+               LYXERR(Debug::KBMAP, "Parse error at position " << res
+                                    << " in key sequence '" << seq << "'.");
        return res == string::npos ? 0 : res;
 }
 
@@ -158,7 +150,7 @@ bool KeyMap::read(string const & bind_file, KeyMap * unbind_map)
                return false;
        }
 
-       LYXERR(Debug::KBMAP) << "Reading bind file:" << tmp << endl;
+       LYXERR(Debug::KBMAP, "Reading bind file:" << tmp);
 
        bool error = false;
        while (lexrc.isOK()) {
@@ -269,11 +261,11 @@ void KeyMap::write(string const & bind_file, bool append, bool unbind) const
        BindingList::const_iterator it = list.begin();
        BindingList::const_iterator it_end = list.end();
        for (; it != it_end; ++it) {
-               kb_action action = it->get<0>().action;
-               string arg = to_utf8(it->get<0>().argument());
+               kb_action action = it->request.action;
+               string arg = to_utf8(it->request.argument());
 
                os << tag << " \""
-                               << to_utf8(it->get<1>().print(KeySequence::BindFile))
+                               << to_utf8(it->sequence.print(KeySequence::BindFile))
                                << "\" \""
                                << lyxaction.getActionName(action)
                                << (arg.empty() ? "" : " ") << arg
@@ -336,7 +328,7 @@ docstring const KeyMap::print(bool forgui) const
 }
 
 
-void KeyMap::defkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
+void KeyMap::bind(KeySequence * seq, FuncRequest const & func, unsigned int r)
 {
        KeySymbol code = seq->sequence[r];
        if (!code.isOK())
@@ -353,11 +345,9 @@ void KeyMap::defkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
                    && mod2 == it->mod.second) {
                        // overwrite binding
                        if (r + 1 == seq->length()) {
-                               LYXERR(Debug::KBMAP)
-                                       << "Warning: New binding for '"
+                               LYXERR(Debug::KBMAP, "Warning: New binding for '"
                                        << to_utf8(seq->print(KeySequence::Portable))
-                                       << "' is overriding old binding..."
-                                       << endl;
+                                       << "' is overriding old binding...");
                                if (it->table.get()) {
                                        it->table.reset();
                                }
@@ -371,7 +361,7 @@ void KeyMap::defkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
                                               << endl;
                                return;
                        } else {
-                               it->table->defkey(seq, func, r + 1);
+                               it->table->bind(seq, func, r + 1);
                                return;
                        }
                }
@@ -386,12 +376,12 @@ void KeyMap::defkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
                newone->table.reset();
        } else {
                newone->table.reset(new KeyMap);
-               newone->table->defkey(seq, func, r + 1);
+               newone->table->bind(seq, func, r + 1);
        }
 }
 
 
-void KeyMap::delkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
+void KeyMap::unbind(KeySequence * seq, FuncRequest const & func, unsigned int r)
 {
        KeySymbol code = seq->sequence[r];
        if (!code.isOK())
@@ -415,7 +405,7 @@ void KeyMap::delkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
                                                it->table.reset();
                                        }
                        } else if (it->table.get()) {
-                               it->table->delkey(seq, func, r + 1);
+                               it->table->unbind(seq, func, r + 1);
                                if (it->table->empty())
                                        remove = it;
                                return;
@@ -429,9 +419,9 @@ void KeyMap::delkey(KeySequence * seq, FuncRequest const & func, unsigned int r)
 }
 
 
-docstring const KeyMap::printbindings(FuncRequest const & func) const
+docstring KeyMap::printBindings(FuncRequest const & func) const
 {
-       Bindings bindings = findbindings(func);
+       Bindings bindings = findBindings(func);
        if (bindings.empty())
                return docstring();
        
@@ -447,26 +437,25 @@ docstring const KeyMap::printbindings(FuncRequest const & func) const
 }
 
 
-KeyMap::Bindings KeyMap::findbindings(FuncRequest const & func) const
+KeyMap::Bindings KeyMap::findBindings(FuncRequest const & func) const
 {
-       return findbindings(func, KeySequence(0, 0));
+       return findBindings(func, KeySequence(0, 0));
 }
 
 
-KeyMap::Bindings KeyMap::findbindings(FuncRequest const & func,
+KeyMap::Bindings KeyMap::findBindings(FuncRequest const & func,
                        KeySequence const & prefix) const
 {
        Bindings res;
-       if (table.empty()) return res;
+       if (table.empty())
+               return res;
 
        Table::const_iterator end = table.end();
-       for (Table::const_iterator cit = table.begin();
-           cit != end; ++cit) {
+       for (Table::const_iterator cit = table.begin(); cit != end; ++cit) {
                if (cit->table.get()) {
                        KeySequence seq = prefix;
                        seq.addkey(cit->code, cit->mod.first);
-                       Bindings res2 =
-                               cit->table->findbindings(func, seq);
+                       Bindings res2 = cit->table->findBindings(func, seq);
                        res.insert(res.end(), res2.begin(), res2.end());
                } else if (cit->func == func) {
                        KeySequence seq = prefix;
@@ -492,12 +481,12 @@ KeyMap::BindingList KeyMap::listBindings(bool unbound, int tag) const
                        BindingList::const_iterator it = list.begin();
                        BindingList::const_iterator it_end = list.end();
                        for (; it != it_end; ++it)
-                               if (it->get<0>().action == action) {
+                               if (it->request.action == action) {
                                        has_action = true;
                                        break;
                                }
                        if (!has_action)
-                               list.push_back(make_tuple(action, KeySequence(0, 0), tag));
+                               list.push_back(Binding(FuncRequest(action), KeySequence(0, 0), tag));
                }       
        }
        return list;
@@ -518,7 +507,7 @@ void KeyMap::listBindings(BindingList & list,
                } else {
                        KeySequence seq = prefix;
                        seq.addkey(it->code, it->mod.first);
-                       list.push_back(make_tuple(it->func, seq, tag));
+                       list.push_back(Binding(it->func, seq, tag));
                }
        }
 }