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 KATE_CMDS_H
10#define KATE_CMDS_H
11
12#include <KTextEditor/Command>
13
14#include <QStringList>
15
16class KCompletion;
17
18/**
19 * The KateCommands namespace collects subclasses of KTextEditor::Command
20 * for specific use in kate.
21 */
22namespace KateCommands
23{
24/**
25 * This KTextEditor::Command provides access to a lot of the core functionality
26 * of kate part, settings, utilities, navigation etc.
27 * it needs to get a kateview pointer, it will cast the kate::view pointer
28 * hard to kateview
29 */
30class CoreCommands : public KTextEditor::Command
31{
32 CoreCommands()
33 : KTextEditor::Command({QStringLiteral("indent"),
34 QStringLiteral("unindent"),
35 QStringLiteral("cleanindent"),
36 QStringLiteral("fold"),
37 QStringLiteral("tfold"),
38 QStringLiteral("unfold"),
39 QStringLiteral("comment"),
40 QStringLiteral("uncomment"),
41 QStringLiteral("goto"),
42 QStringLiteral("kill-line"),
43 QStringLiteral("set-tab-width"),
44 QStringLiteral("set-replace-tabs"),
45 QStringLiteral("set-show-tabs"),
46 QStringLiteral("set-indent-width"),
47 QStringLiteral("set-indent-mode"),
48 QStringLiteral("set-auto-indent"),
49 QStringLiteral("set-line-numbers"),
50 QStringLiteral("set-folding-markers"),
51 QStringLiteral("set-icon-border"),
52 QStringLiteral("set-indent-pasted-text"),
53 QStringLiteral("set-word-wrap"),
54 QStringLiteral("set-word-wrap-column"),
55 QStringLiteral("set-replace-tabs-save"),
56 QStringLiteral("set-remove-trailing-spaces"),
57 QStringLiteral("set-highlight"),
58 QStringLiteral("set-mode"),
59 QStringLiteral("set-show-indent"),
60 QStringLiteral("print")})
61 {
62 }
63
64 static CoreCommands *m_instance;
65
66public:
67 ~CoreCommands() override
68 {
69 m_instance = nullptr;
70 }
71
72 /**
73 * execute command
74 * @param view view to use for execution
75 * @param cmd cmd string
76 * @param errorMsg error to return if no success
77 * @return success
78 */
79 bool exec(class KTextEditor::View *view, const QString &cmd, QString &errorMsg);
80
81 /**
82 * execute command on given range
83 * @param view view to use for execution
84 * @param cmd cmd string
85 * @param errorMsg error to return if no success
86 * @param range range to execute command on
87 * @return success
88 */
89 bool
90 exec(class KTextEditor::View *view, const QString &cmd, QString &errorMsg, const KTextEditor::Range &range = KTextEditor::Range(-1, -0, -1, 0)) override;
91
92 bool supportsRange(const QString &range) override;
93
94 /** This command does not have help. @see KTextEditor::Command::help */
95 bool help(class KTextEditor::View *, const QString &, QString &) override;
96
97 /** override from KTextEditor::Command */
98 KCompletion *completionObject(KTextEditor::View *, const QString &) override;
99
100 static CoreCommands *self()
101 {
102 if (m_instance == nullptr) {
103 m_instance = new CoreCommands();
104 }
105 return m_instance;
106 }
107};
108
109/**
110 * insert a unicode or ascii character
111 * base 9+1: 1234
112 * hex: 0x1234 or x1234
113 * octal: 01231
114 *
115 * prefixed with "char:"
116 **/
117class Character : public KTextEditor::Command
118{
119 Character()
120 : KTextEditor::Command({QStringLiteral("char")})
121 {
122 }
123
124 static Character *m_instance;
125
126public:
127 ~Character() override
128 {
129 m_instance = nullptr;
130 }
131
132 /**
133 * execute command
134 * @param view view to use for execution
135 * @param cmd cmd string
136 * @param errorMsg error to return if no success
137 * @return success
138 */
139 bool
140 exec(class KTextEditor::View *view, const QString &cmd, QString &errorMsg, const KTextEditor::Range &range = KTextEditor::Range(-1, -0, -1, 0)) override;
141
142 /** This command does not have help. @see KTextEditor::Command::help */
143 bool help(class KTextEditor::View *, const QString &, QString &) override;
144
145 static Character *self()
146 {
147 if (m_instance == nullptr) {
148 m_instance = new Character();
149 }
150 return m_instance;
151 }
152};
153
154/**
155 * insert the current date/time in the given format
156 */
157class Date : public KTextEditor::Command
158{
159 Date()
160 : KTextEditor::Command({QStringLiteral("date")})
161 {
162 }
163
164 static Date *m_instance;
165
166public:
167 ~Date() override
168 {
169 m_instance = nullptr;
170 }
171
172 /**
173 * execute command
174 * @param view view to use for execution
175 * @param cmd cmd string
176 * @param errorMsg error to return if no success
177 * @return success
178 */
179 bool
180 exec(class KTextEditor::View *view, const QString &cmd, QString &errorMsg, const KTextEditor::Range &range = KTextEditor::Range(-1, -0, -1, 0)) override;
181
182 /** This command does not have help. @see KTextEditor::Command::help */
183 bool help(class KTextEditor::View *, const QString &, QString &) override;
184
185 static Date *self()
186 {
187 if (m_instance == nullptr) {
188 m_instance = new Date();
189 }
190 return m_instance;
191 }
192};
193
194} // namespace KateCommands
195#endif
196

source code of ktexteditor/src/utils/katecmds.h