including some vi shortcuts

pull/42/head
EvanKoe 4 years ago
parent 03f44ef7be
commit ebdbc079bc

3
.gitignore vendored

@ -52,4 +52,5 @@ compile_commands.json
*creator.user*
/build/*
.vscode
.vscode
tags

@ -20,8 +20,8 @@ find_package(KF5WindowSystem)
find_package(KF5Config)
qt5_add_dbus_adaptor(DBUS_SOURCES
com.cutefish.FileManager.xml
application.h Application)
com.cutefish.FileManager.xml
application.h Application)
add_executable(cutefish-filemanager
main.cpp

@ -1,7 +1,11 @@
# File Manager
# File Manager Vi version
Cutefish File Manager, simple to use, beautiful, and retain the classic PC interactive design.
On this branch, the Cutefish File Manager has an even easier way to browse your files thanks to the
vi mode. Instead of the classical shortcuts, vim fans will be pleased to use some of the vim shortcuts
to browse their files.
![screenshot](screenshots/Screenshot_20211025_151224.png)
## Dependencies
@ -29,6 +33,7 @@ sudo pacman -S extra-cmake-modules qt5-base qt5-quickcontrols2 taglib kio
## Build
```shell
git checkout vi-mode
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

@ -43,43 +43,62 @@ void ShortCut::install(QObject *target)
}
}
// bool ShortCut::noShortcuts(QObject *obj, QEvent *e)
// {
// QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
// if (e->type() == QEvent::KeyPress) {
// // int keyInt = keyEvent->modifiers() + keyEvent->key();
// if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) {
// emit open();
// } else if (keyEvent->key() == Qt::Key_C && keyEvent->modifiers() & Qt::ControlModifier) {
// emit copy();
// } else if (keyEvent->key() == Qt::Key_X && keyEvent->modifiers() & Qt::ControlModifier) {
// emit cut();
// } else if (keyEvent->key() == Qt::Key_W && keyEvent->modifiers() & Qt::ControlModifier) {
// emit close();
// } else if (keyEvent->key() == Qt::Key_V && keyEvent->modifiers() & Qt::ControlModifier) {
// emit paste();
// } else if (keyEvent->key() == Qt::Key_F2) {
// emit rename();
// } else if (keyEvent->key() == Qt::Key_L && keyEvent->modifiers() & Qt::ControlModifier) {
// emit openPathEditor();
// } else if (keyEvent->key() == Qt::Key_A && keyEvent->modifiers() & Qt::ControlModifier) {
// emit selectAll();
// } else if (keyEvent->key() == Qt::Key_Backspace) {
// emit backspace();
// } else if (keyEvent->key() == Qt::Key_Delete) {
// emit deleteFile();
// } else if (keyEvent->key() == Qt::Key_F5) {
// emit refresh();
// } else if (keyEvent->key() == Qt::Key_H && keyEvent->modifiers() & Qt::ControlModifier) {
// emit showHidden();
// } else if (keyEvent->key() == Qt::Key_Z && keyEvent->modifiers() & Qt::ControlModifier) {
// emit undo();
// } else if (keyEvent->key() >= Qt::Key_A && keyEvent->key() <= Qt::Key_Z) {
// // Handle select
// // KeyboardSearchManager::self()->addKeys(keyEvent->text());
// emit keyPressed(keyEvent->text());
// keyEvent->ignore();
// }
// }
// return QObject::eventFilter(obj, e);
// }
bool ShortCut::eventFilter(QObject *obj, QEvent *e)
{
if (e->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
// int keyInt = keyEvent->modifiers() + keyEvent->key();
if (e->type() != QEvent::KeyPress) {
return QObject::eventFilter(obj, e);
}
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
int key = keyEvent->key();
if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) {
emit open();
} else if (keyEvent->key() == Qt::Key_C && keyEvent->modifiers() & Qt::ControlModifier) {
emit copy();
} else if (keyEvent->key() == Qt::Key_X && keyEvent->modifiers() & Qt::ControlModifier) {
emit cut();
} else if (keyEvent->key() == Qt::Key_W && keyEvent->modifiers() & Qt::ControlModifier) {
emit close();
} else if (keyEvent->key() == Qt::Key_V && keyEvent->modifiers() & Qt::ControlModifier) {
emit paste();
} else if (keyEvent->key() == Qt::Key_F2) {
emit rename();
} else if (keyEvent->key() == Qt::Key_L && keyEvent->modifiers() & Qt::ControlModifier) {
emit openPathEditor();
} else if (keyEvent->key() == Qt::Key_A && keyEvent->modifiers() & Qt::ControlModifier) {
emit selectAll();
} else if (keyEvent->key() == Qt::Key_Backspace) {
emit backspace();
} else if (keyEvent->key() == Qt::Key_Delete) {
emit deleteFile();
} else if (keyEvent->key() == Qt::Key_F5) {
emit refresh();
} else if (keyEvent->key() == Qt::Key_H && keyEvent->modifiers() & Qt::ControlModifier) {
emit showHidden();
} else if (keyEvent->key() == Qt::Key_Z && keyEvent->modifiers() & Qt::ControlModifier) {
emit undo();
} else if (keyEvent->key() >= Qt::Key_A && keyEvent->key() <= Qt::Key_Z) {
// Handle select
// KeyboardSearchManager::self()->addKeys(keyEvent->text());
emit keyPressed(keyEvent->text());
keyEvent->ignore();
for (const fun_shortcut &shortcut: Normal_Shortcuts) {
if (key == shortcut.key) {
shortcut.action();
}
}

@ -19,8 +19,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
***************************************************************************/
#ifndef SHORTCUT_H
#define SHORTCUT_H
#pragma once
#include <QObject>
@ -28,32 +27,58 @@ class ShortCut : public QObject
{
Q_OBJECT
public:
explicit ShortCut(QObject *parent = nullptr);
Q_INVOKABLE void install(QObject *target = nullptr);
signals:
void open();
void copy();
void cut();
void paste();
void rename();
void refresh();
void openPathEditor();
void selectAll();
void backspace();
void deleteFile();
void showHidden();
void keyPressed(const QString &text);
void close();
void undo();
protected:
bool eventFilter(QObject *obj, QEvent *e) override;
private:
QObject *m_object;
};
public:
explicit ShortCut(QObject *parent = nullptr);
Q_INVOKABLE void install(QObject *target = nullptr);
signals:
void open();
void copy();
void cut();
void paste();
void rename();
void refresh();
void openPathEditor();
void selectAll();
void backspace();
void deleteFile();
void showHidden();
void keyPressed(const QString &text);
void close();
void undo();
protected:
bool eventFilter(QObject *obj, QEvent *e) override;
#endif // SHORTCUT_H
private:
QObject *m_object;
// This is a structure composed of :
// - a key (the shortcut)
// - an action (the function pointer)
typedef struct {
Qt::Key key;
std::function<void(void)> action;
} fun_shortcut;
// This array contains structures where keys are associated
// with an action. You only have to loop on this array, compare
// its key with the one you received, and execute its action
const fun_shortcut Normal_Shortcuts[14] = {
{ Qt::Key_Y, [&]() { return copy(); } },
{ Qt::Key_P, [&]() { return paste(); } },
{ Qt::Key_R, [&]() { return rename(); } },
{ Qt::Key_Return, [&]() { return open(); } },
{ Qt::Key_Enter, [&]() { return open(); } },
{ Qt::Key_Percent, [&]() { return showHidden(); } },
{ Qt::Key_U, [&]() { return undo(); } },
{ Qt::Key_D, [&]() { return cut(); } },
{ Qt::Key_X, [&]() { return deleteFile(); } },
{ Qt::Key_Q, [&]() { return close(); } },
{ Qt::Key_A, [&]() { return refresh(); } },
{ Qt::Key_Colon, [&]() { return openPathEditor(); } },
{ Qt::Key_V, [&]() { return selectAll(); } },
{ Qt::Key_Backspace, [&]() { return backspace(); } }
};
};

Loading…
Cancel
Save