diff --git a/tools/emacsmode/emacsmode.pluginspec b/tools/emacsmode/emacsmode.pluginspec
index cbea2fd3f5..7ed694cf92 100644
--- a/tools/emacsmode/emacsmode.pluginspec
+++ b/tools/emacsmode/emacsmode.pluginspec
@@ -13,9 +13,9 @@ Alternatively, this plugin may be used under the terms of the GNU Lesser General
Emacs-style keyboard navigation.
-
-
-
-
+
+
+
+
diff --git a/tools/emacsmode/emacsmode.pro b/tools/emacsmode/emacsmode.pro
index c3a707af74..b90b357172 100644
--- a/tools/emacsmode/emacsmode.pro
+++ b/tools/emacsmode/emacsmode.pro
@@ -1,5 +1,5 @@
QTC_SOURCE = ../../../qt-creator-2.2.0-beta-src
-QTC_BUILD = ../../../qtcreator-build
+QTC_BUILD = ../../../qt-creator-2.2.0-beta-src
TEMPLATE = lib
TARGET = EmacsMode
@@ -10,13 +10,9 @@ DESTDIR = $$QTC_BUILD/lib/qtcreator/plugins/Spliny
LIBS += -L$$QTC_BUILD/bin/Qt\ Creator.app/Contents/PlugIns/Nokia
include($$QTC_SOURCE/src/qtcreatorplugin.pri)
-include($$QTC_SOURCE/src/libs/cplusplus/cplusplus.pri)
-include($$QTC_SOURCE/src/plugins/projectexplorer/projectexplorer.pri)
include($$QTC_SOURCE/src/plugins/coreplugin/coreplugin.pri)
include($$QTC_SOURCE/src/plugins/texteditor/texteditor.pri)
-include($$QTC_SOURCE/src/plugins/cppeditor/cppeditor.pri)
include($$QTC_SOURCE/src/plugins/find/find.pri)
-include($$QTC_SOURCE/src/shared/indenter/indenter.pri)
# DEFINES += QT_NO_CAST_FROM_ASCII QT_NO_CAST_TO_ASCII
QT += gui
diff --git a/tools/emacsmode/emacsmodeplugin.cpp b/tools/emacsmode/emacsmodeplugin.cpp
index 7b7522522f..4dd18f3fe8 100644
--- a/tools/emacsmode/emacsmodeplugin.cpp
+++ b/tools/emacsmode/emacsmodeplugin.cpp
@@ -55,16 +55,14 @@
#include
#include
#include
-#include
+#include
+//#include
#include
#include
#include
-
-#include
-
#include
#include
#include
@@ -186,7 +184,7 @@ bool EmacsModeOptionPage::matches(QString const & s) const
EmacsModePluginPrivate::EmacsModePluginPrivate(EmacsModePlugin *plugin)
{
q = plugin;
- m_EmacsModeOptionsPage = 0;
+ m_emacsModeOptionsPage = 0;
}
EmacsModePluginPrivate::~EmacsModePluginPrivate()
@@ -195,53 +193,80 @@ EmacsModePluginPrivate::~EmacsModePluginPrivate()
void EmacsModePluginPrivate::aboutToShutdown()
{
- q->removeObject(m_EmacsModeOptionsPage);
- delete m_EmacsModeOptionsPage;
- m_EmacsModeOptionsPage = 0;
+ q->removeObject(m_emacsModeOptionsPage);
+ delete m_emacsModeOptionsPage;
+ m_emacsModeOptionsPage = 0;
theEmacsModeSettings()->writeSettings(Core::ICore::instance()->settings());
delete theEmacsModeSettings();
}
bool EmacsModePluginPrivate::initialize()
{
- Core::ActionManager *actionManager = Core::ICore::instance()->actionManager();
- QTC_ASSERT(actionManager, return false);
+ m_core = Core::ICore::instance();
+ m_editorManager = core()->editorManager();
+ m_actionManager = core()->actionManager();
+ QTC_ASSERT(actionManager(), return false);
- QList globalcontext;
- globalcontext << Core::Constants::C_GLOBAL_ID;
+// m_wordCompletion = new WordCompletion;
+// q->addAutoReleasedObject(m_wordCompletion);
+
+ Context globalcontext(Core::Constants::C_GLOBAL);
+
+ m_emacsModeOptionsPage = new EmacsModeOptionPage;
+ q->addObject(m_emacsModeOptionsPage);
+
+// theEmacsModeSettings()->readSettings(Core::ICore::instance()->settings());
+ readSettings();
- m_EmacsModeOptionsPage = new EmacsModeOptionPage;
- q->addObject(m_EmacsModeOptionsPage);
- theEmacsModeSettings()->readSettings(Core::ICore::instance()->settings());
-
Core::Command *cmd = 0;
- cmd = actionManager->registerAction(theEmacsModeSetting(ConfigUseEmacsMode),
+ cmd = actionManager()->registerAction(theEmacsModeSetting(ConfigUseEmacsMode),
Constants::INSTALL_HANDLER, globalcontext);
cmd->setDefaultKeySequence(QKeySequence(Constants::INSTALL_KEY));
ActionContainer *advancedMenu =
- actionManager->actionContainer(Core::Constants::M_EDIT_ADVANCED);
+ actionManager()->actionContainer(Core::Constants::M_EDIT_ADVANCED);
advancedMenu->addAction(cmd, Core::Constants::G_EDIT_EDITOR);
+ connect(m_core, SIGNAL(coreAboutToClose()), this, SLOT(onCoreAboutToClose()));
+
+
// EditorManager
- QObject *editorManager = Core::ICore::instance()->editorManager();
- connect(editorManager, SIGNAL(editorAboutToClose(Core::IEditor*)),
+ connect(editorManager(), SIGNAL(editorAboutToClose(Core::IEditor*)),
this, SLOT(editorAboutToClose(Core::IEditor*)));
- connect(editorManager, SIGNAL(editorOpened(Core::IEditor*)),
+ connect(editorManager(), SIGNAL(editorOpened(Core::IEditor*)),
this, SLOT(editorOpened(Core::IEditor*)));
- connect(theEmacsModeSetting(SettingsDialog), SIGNAL(triggered()),
- this, SLOT(showSettingsDialog()));
+// connect(theEmacsModeSetting(SettingsDialog), SIGNAL(triggered()),
+// this, SLOT(showSettingsDialog()));
connect(theEmacsModeSetting(ConfigUseEmacsMode), SIGNAL(valueChanged(QVariant)),
this, SLOT(setUseEmacsMode(QVariant)));
- // Delayed operatiosn
+ // Delayed operations.
connect(this, SIGNAL(delayedQuitRequested(bool,Core::IEditor*)),
this, SLOT(handleDelayedQuit(bool,Core::IEditor*)), Qt::QueuedConnection);
connect(this, SIGNAL(delayedQuitAllRequested(bool)),
this, SLOT(handleDelayedQuitAll(bool)), Qt::QueuedConnection);
+// maybeReadVimRc();
+ // << "MODE: " << theFakeVimSetting(ConfigUseFakeVim)->value();
- return true;
+}
+
+void EmacsModePluginPrivate::readSettings()
+{
+ QSettings *settings = ICore::instance()->settings();
+
+ theEmacsModeSettings()->readSettings(settings);
+
+ /*exCommandMap() = defaultExCommandMap();
+ int size = settings->beginReadArray(_(exCommandMapGroup));
+ for (int i = 0; i < size; ++i) {
+ settings->setArrayIndex(i);
+ const QString id = settings->value(_(idKey)).toString();
+ const QString re = settings->value(_(reKey)).toString();
+ exCommandMap()[id] = QRegExp(re);
+ }
+ settings->endArray();
+ }*/
}
void EmacsModePluginPrivate::showSettingsDialog()
@@ -386,13 +411,14 @@ void EmacsModePluginPrivate::setUseEmacsMode(const QVariant &value)
void EmacsModePluginPrivate::triggerCompletions()
{
- EmacsModeHandler *handler = qobject_cast(sender());
+/* EmacsModeHandler *handler = qobject_cast(sender());
if (!handler)
return;
- if (BaseTextEditor *bt = qobject_cast(handler->widget()))
- TextEditor::Internal::CompletionSupport::instance()->
- autoComplete(bt->editableInterface(), false);
- // bt->triggerCompletions();
+ if (BaseTextEditorWidget *editor = qobject_cast(handler->widget()))
+ CompletionSupport::instance()->
+ autoComplete(editor->editor(), false);
+ // editor->triggerCompletions();
+*/
}
void EmacsModePluginPrivate::writeFile(bool *handled,
@@ -515,40 +541,38 @@ void EmacsModePluginPrivate::indentRegion(int *amount, int beginLine, int endLin
if (!handler)
return;
- BaseTextEditor *bt = qobject_cast(handler->widget());
+ BaseTextEditorWidget *bt = qobject_cast(handler->widget());
if (!bt)
return;
- TextEditor::TabSettings tabSettings =
- TextEditor::TextEditorSettings::instance()->tabSettings();
- typedef SharedTools::Indenter Indenter;
- Indenter &indenter = Indenter::instance();
- indenter.setIndentSize(tabSettings.m_indentSize);
- indenter.setTabSize(tabSettings.m_tabSize);
+ const TabSettings oldTabSettings = bt->tabSettings();
+ TabSettings tabSettings;
+ tabSettings.m_indentSize = theEmacsModeSetting(ConfigShiftWidth)->value().toInt();
+ tabSettings.m_tabSize = theEmacsModeSetting(ConfigTabStop)->value().toInt();
+ tabSettings.m_spacesForTabs = theEmacsModeSetting(ConfigExpandTab)->value().toBool();
+ bt->setTabSettings(tabSettings);
- const QTextDocument *doc = bt->document();
- QTextBlock begin = doc->findBlockByNumber(beginLine);
- QTextBlock end = doc->findBlockByNumber(endLine);
- const TextEditor::TextBlockIterator docStart(doc->begin());
- QTextBlock cur = begin;
- do {
- if (typedChar == 0 && cur.text().simplified().isEmpty()) {
- *amount = 0;
- if (cur != end) {
- QTextCursor cursor(cur);
- while (!cursor.atBlockEnd())
- cursor.deleteChar();
- }
+ QTextDocument *doc = bt->document();
+ QTextBlock startBlock = doc->findBlockByNumber(beginLine);
+
+ // Record line lenghts for mark adjustments
+ QVector lineLengths(endLine - beginLine + 1);
+ QTextBlock block = startBlock;
+
+ for (int i = beginLine; i <= endLine; ++i) {
+ lineLengths[i - beginLine] = block.text().length();
+ if (typedChar == 0 && block.text().simplified().isEmpty()) {
+ // clear empty lines
+ QTextCursor cursor(block);
+ while (!cursor.atBlockEnd())
+ cursor.deleteChar();
} else {
- const TextEditor::TextBlockIterator current(cur);
- const TextEditor::TextBlockIterator next(cur.next());
- *amount = indenter.indentForBottomLine(current, docStart, next, typedChar);
- if (cur != end)
- tabSettings.indentLine(cur, *amount);
+ bt->indenter()->indentBlock(doc, block, typedChar, bt);
}
- if (cur != end)
- cur = cur.next();
- } while (cur != end);
+ block = block.next();
+ }
+
+ bt->setTabSettings(oldTabSettings);
}
void EmacsModePluginPrivate::quitEmacsMode()
@@ -575,8 +599,8 @@ void EmacsModePluginPrivate::changeSelection
(const QList &selection)
{
if (EmacsModeHandler *handler = qobject_cast(sender()))
- if (BaseTextEditor *bt = qobject_cast(handler->widget()))
- bt->setExtraSelections(BaseTextEditor::FakeVimSelection, selection);
+ if (BaseTextEditorWidget *bt = qobject_cast(handler->widget()))
+ bt->setExtraSelections(BaseTextEditorWidget::FakeVimSelection, selection);
}
@@ -602,9 +626,10 @@ bool EmacsModePlugin::initialize(const QStringList &arguments, QString *errorMes
return d->initialize();
}
-void EmacsModePlugin::aboutToShutdown()
+ExtensionSystem::IPlugin::ShutdownFlag EmacsModePlugin::aboutToShutdown()
{
d->aboutToShutdown();
+ return SynchronousShutdown;
}
void EmacsModePlugin::extensionsInitialized()
diff --git a/tools/emacsmode/emacsmodeplugin.h b/tools/emacsmode/emacsmodeplugin.h
index 7d7ff295f8..c951d7b952 100644
--- a/tools/emacsmode/emacsmodeplugin.h
+++ b/tools/emacsmode/emacsmodeplugin.h
@@ -36,6 +36,7 @@
#include "ui_emacsmodeoptions.h"
#include
#include
+#include
namespace EmacsMode {
namespace Internal {
@@ -55,7 +56,7 @@ public:
private:
// implementation of ExtensionSystem::IPlugin
bool initialize(const QStringList &arguments, QString *error_message);
- void aboutToShutdown();
+ ShutdownFlag aboutToShutdown();
void extensionsInitialized();
private:
@@ -139,6 +140,7 @@ public:
bool initialize();
void aboutToShutdown();
+ void readSettings();
private slots:
void editorOpened(Core::IEditor *);
@@ -169,8 +171,15 @@ signals:
private:
EmacsModePlugin *q;
- EmacsModeOptionPage *m_EmacsModeOptionsPage;
+ EmacsModeOptionPage *m_emacsModeOptionsPage;
QHash m_editorToHandler;
+ QPointer m_core;
+ QPointer m_editorManager;
+ QPointer m_actionManager;
+ Core::ICore *core() const { return m_core; }
+ Core::EditorManager *editorManager() const { return m_editorManager; }
+ Core::ActionManager *actionManager() const { return m_actionManager; }
+
void triggerAction(const QString& code);
};