1/*
2 SPDX-FileCopyrightText: 2003-2005 Anders Lund <anders@alweb.dk>
3 SPDX-FileCopyrightText: 2001-2010 Christoph Cullmann <cullmann@kde.org>
4 SPDX-FileCopyrightText: 2001 Charles Samuels <charles@kde.org>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef KATEVI_CMDS_H
10#define KATEVI_CMDS_H
11
12#include "mappings.h"
13#include <KTextEditor/Command>
14#include <katesedcmd.h>
15
16#include <QStringList>
17
18namespace KTextEditor
19{
20class DocumentPrivate;
21}
22class KCompletion;
23
24namespace KateVi
25{
26class InputModeManager;
27/**
28 * This KTextEditor::Command provides vi 'ex' commands
29 */
30class Commands : public KTextEditor::Command
31{
32 Commands()
33 : KTextEditor::Command(QStringList() << mappingCommands() << QStringLiteral("d") << QStringLiteral("delete") << QStringLiteral("j")
34 << QStringLiteral("c") << QStringLiteral("change") << QStringLiteral("<") << QStringLiteral(">")
35 << QStringLiteral("y") << QStringLiteral("yank") << QStringLiteral("ma") << QStringLiteral("mark")
36 << QStringLiteral("k"))
37 {
38 }
39 static Commands *m_instance;
40 InputModeManager *m_viInputModeManager;
41
42public:
43 ~Commands() override
44 {
45 m_instance = nullptr;
46 }
47
48 /**
49 * execute command on given range
50 * @param view view to use for execution
51 * @param cmd cmd string
52 * @param msg message returned from running the command
53 * @param range range to execute command on
54 * @return success
55 */
56 bool exec(class KTextEditor::View *view, const QString &cmd, QString &msg, const KTextEditor::Range &range = KTextEditor::Range(-1, -0, -1, 0)) override;
57
58 bool supportsRange(const QString &range) override;
59
60 /** This command does not have help. @see KTextEditor::Command::help */
61 bool help(class KTextEditor::View *, const QString &, QString &) override
62 {
63 return false;
64 }
65
66 /**
67 * Reimplement from KTextEditor::Command
68 */
69 KCompletion *completionObject(KTextEditor::View *, const QString &) override;
70
71 static Commands *self()
72 {
73 if (m_instance == nullptr) {
74 m_instance = new Commands();
75 }
76 return m_instance;
77 }
78
79 void setViInputModeManager(InputModeManager *m)
80 {
81 m_viInputModeManager = m;
82 }
83
84private:
85 static const QStringList &mappingCommands();
86 static Mappings::MappingMode modeForMapCommand(const QString &mapCommand);
87 static bool isMapCommandRecursive(const QString &mapCommand);
88};
89
90/**
91 * Support vim/sed style search and replace
92 * @author Charles Samuels <charles@kde.org>
93 **/
94class SedReplace : public KateCommands::SedReplace
95{
96 SedReplace()
97 {
98 }
99 static SedReplace *m_instance;
100 InputModeManager *m_viInputModeManager;
101
102public:
103 ~SedReplace() override
104 {
105 m_instance = nullptr;
106 }
107
108 static SedReplace *self()
109 {
110 if (m_instance == nullptr) {
111 m_instance = new SedReplace();
112 }
113 return m_instance;
114 }
115
116 void setViInputModeManager(InputModeManager *m)
117 {
118 m_viInputModeManager = m;
119 }
120
121protected:
122 bool interactiveSedReplace(KTextEditor::ViewPrivate *kateView, std::shared_ptr<InteractiveSedReplacer> interactiveSedReplace) override;
123};
124
125}
126
127#endif /* KATEVI_CMDS_H */
128

source code of ktexteditor/src/vimode/cmds.h