Skip to content

Commit

Permalink
Merge pull request #26 from falbru/add-focus-command
Browse files Browse the repository at this point in the history
Add focus command to kakounecli
  • Loading branch information
falbru authored Mar 25, 2024
2 parents 86e44b6 + ffa0a46 commit 0b35a9e
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 4 deletions.
8 changes: 8 additions & 0 deletions src/kakounecli.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,14 @@ int KakouneCli::run(QStringList command)
m_dbusiface.call("newClient", command.sliced(1).join(" "));
}
}
else if (command_name == "focus")
{
if (command.size() != 2)
{
return 1;
}
m_dbusiface.call("focusWindow", command[1]);
}
else
{
return 1;
Expand Down
15 changes: 13 additions & 2 deletions src/kakouneclient.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,12 @@ KakouneClient::KakouneClient(const QString &session_id) : KakouneClient(session_
{
}

KakouneClient::KakouneClient(const QString &session_id, QString arguments)
KakouneClient::KakouneClient(const QString &session_id, QString arguments) : KakouneClient(session_id, arguments, {})
{
}

KakouneClient::KakouneClient(const QString &session_id, QString arguments,
QList<QPair<QString, QString>> environment_variables)
{
connect(&m_process, &QProcess::readyReadStandardOutput, [=]() {
QByteArray buffer = m_process.readAllStandardOutput();
Expand All @@ -88,8 +93,14 @@ KakouneClient::KakouneClient(const QString &session_id, QString arguments)

connect(&m_process, &QProcess::finished, this, &KakouneClient::finished);

QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
for (auto variable : environment_variables)
{
env.insert(variable.first, variable.second);
}
m_process.setProcessEnvironment(env);

QStringList process_arguments;
qDebug() << arguments;
process_arguments << "-ui"
<< "json"
<< "-c" << session_id;
Expand Down
1 change: 1 addition & 0 deletions src/kakouneclient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ class KakouneClient : public QObject
public:
KakouneClient(const QString &session_id);
KakouneClient(const QString &session_id, QString arguments);
KakouneClient(const QString &session_id, QString arguments, QList<QPair<QString, QString>> environment_variables);
~KakouneClient();

void sendKeys(const QString &key);
Expand Down
9 changes: 8 additions & 1 deletion src/kakounewidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ KakouneWidget::KakouneWidget(const QString &session_id, DrawOptions *draw_option
QWidget *parent)
: QWidget(parent)
{
m_id = QUuid::createUuid();
m_draw_options = draw_options;

m_client = new KakouneClient(session_id, client_arguments);
m_client = new KakouneClient(session_id, client_arguments, {{"KAKQT_WINDOW_ID", m_id.toString()}});
connect(m_client, &KakouneClient::refresh, this, &KakouneWidget::clientRefreshed);
connect(m_client, &KakouneClient::finished, this, &KakouneWidget::finished);

Expand All @@ -30,6 +31,7 @@ KakouneWidget::KakouneWidget(const QString &session_id, DrawOptions *draw_option
layout->addWidget(m_textedit);
layout->addWidget(status_bar);

setFocusProxy(m_textedit);
this->setLayout(layout);
}

Expand All @@ -43,6 +45,11 @@ KakouneWidget::~KakouneWidget()
delete m_client;
}

QUuid KakouneWidget::getID()
{
return m_id;
}

KakouneClient *KakouneWidget::getClient()
{
return m_client;
Expand Down
2 changes: 2 additions & 0 deletions src/kakounewidget.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class KakouneWidget : public QWidget
QWidget *parent = nullptr);
~KakouneWidget();

QUuid getID();
KakouneClient *getClient();

QSize sizeHint() const override;
Expand All @@ -28,6 +29,7 @@ class KakouneWidget : public QWidget
void refresh();

private:
QUuid m_id;
KakouneClient *m_client;

KakouneTextEdit *m_textedit;
Expand Down
15 changes: 14 additions & 1 deletion src/mainwindow.cpp
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#include "mainwindow.hpp"
#include "kakounewidget.hpp"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
Expand Down Expand Up @@ -35,12 +34,26 @@ void MainWindow::newClient(const QString &arguments)
KakouneWidget *kakwidget = new KakouneWidget(m_session->getSessionId(), m_draw_options, arguments, m_root);
connect(kakwidget, &KakouneWidget::finished, m_root, [=]() {
kakwidget->setParent(nullptr);
m_windows.removeOne(kakwidget);

if (m_root->count() == 0)
{
close();
}
});

m_windows.append(kakwidget);
m_root->addWidget(kakwidget);
}

void MainWindow::focusWindow(const QString &uuid)
{
for (KakouneWidget *window : m_windows)
{
if (window->getID().toString() == uuid)
{
window->setFocus();
return;
}
}
}
4 changes: 4 additions & 0 deletions src/mainwindow.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include "drawoptions.hpp"
#include "kakounesession.hpp"
#include "kakounewidget.hpp"
#include <QMainWindow>
#include <QtWidgets>

Expand All @@ -17,6 +18,7 @@ class MainWindow : public QMainWindow
public slots:
void newClient();
void newClient(const QString &arguments);
void focusWindow(const QString &uuid);

protected:
void closeEvent(QCloseEvent *ev) override;
Expand All @@ -25,6 +27,8 @@ class MainWindow : public QMainWindow
QSplitter *m_root;
KakouneSession *m_session;

QList<KakouneWidget *> m_windows;

DrawOptions *m_draw_options;
};

Expand Down

0 comments on commit 0b35a9e

Please sign in to comment.