KTextEditor

inputmodemanager.h
1/*
2 SPDX-FileCopyrightText: 2008 Erlend Hamberg <ehamberg@gmail.com>
3 SPDX-FileCopyrightText: 2011 Svyatoslav Kuzmich <svatoslav1@gmail.com>
4 SPDX-FileCopyrightText: 2012-2013 Simon St James <kdedevel@etotheipiplusone.com>
5
6 SPDX-License-Identifier: LGPL-2.0-or-later
7*/
8
9#ifndef KATEVI_INPUT_MODE_MANAGER_H
10#define KATEVI_INPUT_MODE_MANAGER_H
11
12#include <QKeyEvent>
13#include <QStack>
14#include <ktexteditor/cursor.h>
15#include <ktexteditor/view.h>
16#include <ktexteditor_export.h>
17
18#include <vimode/completion.h>
19#include <vimode/definitions.h>
20
21class KConfigGroup;
22class KateViewInternal;
23class KateViInputMode;
24class QString;
25
26namespace KTextEditor
27{
28class ViewPrivate;
29class DocumentPrivate;
30class MovingCursor;
31class Mark;
32class MarkInterface;
33}
34
35namespace KateVi
36{
37class GlobalState;
38class Searcher;
39class CompletionRecorder;
40class CompletionReplayer;
41class Marks;
42class Jumps;
43class MacroRecorder;
44class LastChangeRecorder;
45class ModeBase;
46class NormalViMode;
47class InsertViMode;
48class VisualViMode;
49class ReplaceViMode;
50class KeyParser;
51class KeyMapper;
52
53class InputModeManager
54{
55 friend KateViInputMode;
56
57public:
58 InputModeManager(KateViInputMode *inputAdapter, KTextEditor::ViewPrivate *view, KateViewInternal *viewInternal);
59 ~InputModeManager();
60 InputModeManager(const InputModeManager &) = delete;
61 InputModeManager &operator=(const InputModeManager &) = delete;
62
63 /**
64 * feed key the given key press to the command parser
65 * @return true if keypress was is [part of a] command, false otherwise
66 */
67 bool handleKeypress(const QKeyEvent *e);
68
69 /**
70 * feed key the given list of key presses to the key handling code, one by one
71 */
72 void feedKeyPresses(const QString &keyPresses) const;
73
74 /**
75 * Determines whether we are currently processing a Vi keypress
76 * @return true if we are still in a call to handleKeypress, false otherwise
77 */
78 bool isHandlingKeypress() const;
79
80 /**
81 * @return The current vi mode
82 */
83 KTEXTEDITOR_EXPORT ViMode getCurrentViMode() const;
84
85 /**
86 * @return The current vi mode string representation
87 */
88 KTextEditor::View::ViewMode getCurrentViewMode() const;
89
90 /**
91 * @return the previous vi mode
92 */
93 ViMode getPreviousViMode() const;
94
95 /**
96 * @return true if and only if the current mode is one of VisualMode, VisualBlockMode or VisualLineMode.
97 */
98 bool isAnyVisualMode() const;
99
100 /**
101 * @return one of getViNormalMode(), getViVisualMode(), etc, depending on getCurrentViMode().
102 */
103 ModeBase *getCurrentViModeHandler() const;
104
105 const QString getVerbatimKeys() const;
106
107 /**
108 * changes the current vi mode to the given mode
109 */
110 void changeViMode(ViMode newMode);
111
112 /**
113 * set normal mode to be the active vi mode and perform the needed setup work
114 */
115 KTEXTEDITOR_EXPORT void viEnterNormalMode();
116
117 /**
118 * set insert mode to be the active vi mode and perform the needed setup work
119 */
120 void viEnterInsertMode();
121
122 /**
123 * set visual mode to be the active vi mode and make the needed setup work
124 */
125 void viEnterVisualMode(ViMode visualMode = ViMode::VisualMode);
126
127 /**
128 * set replace mode to be the active vi mode and make the needed setup work
129 */
130 void viEnterReplaceMode();
131
132 /**
133 * @return the NormalMode instance
134 */
135 NormalViMode *getViNormalMode();
136
137 /**
138 * @return the InsertMode instance
139 */
140 InsertViMode *getViInsertMode();
141
142 /**
143 * @return the VisualMode instance
144 */
145 VisualViMode *getViVisualMode();
146
147 /**
148 * @return the ReplaceMode instance
149 */
150 ReplaceViMode *getViReplaceMode();
151
152 /**
153 * clear the key event log
154 */
155 void clearCurrentChangeLog();
156
157 /**
158 * copy the contents of the key events log to m_lastChange so that it can be repeated
159 */
160 void storeLastChangeCommand();
161
162 /**
163 * repeat last change by feeding the contents of m_lastChange to feedKeys()
164 */
165 void repeatLastChange();
166
167 void doNotLogCurrentKeypress();
168
169 bool getTemporaryNormalMode()
170 {
171 return m_temporaryNormalMode;
172 }
173
174 void setTemporaryNormalMode(bool b)
175 {
176 m_temporaryNormalMode = b;
177 }
178
179 void reset();
180
181 inline Marks *marks()
182 {
183 return m_marks;
184 }
185 inline Jumps *jumps()
186 {
187 return m_jumps;
188 }
189
190 inline Searcher *searcher()
191 {
192 return m_searcher;
193 }
194
195 CompletionRecorder *completionRecorder()
196 {
197 return m_completionRecorder;
198 }
199 CompletionReplayer *completionReplayer()
200 {
201 return m_completionReplayer;
202 }
203
204 MacroRecorder *macroRecorder()
205 {
206 return m_macroRecorder;
207 }
208
209 LastChangeRecorder *lastChangeRecorder()
210 {
211 return m_lastChangeRecorder;
212 }
213
214 // session stuff
215 void readSessionConfig(const KConfigGroup &config);
216 void writeSessionConfig(KConfigGroup &config);
217
218 KTEXTEDITOR_EXPORT KeyMapper *keyMapper();
219 GlobalState *globalState() const;
220 KTextEditor::ViewPrivate *view() const;
221
222 KateViInputMode *inputAdapter()
223 {
224 return m_inputAdapter;
225 }
226
227 void updateCursor(const KTextEditor::Cursor c);
228
229 void pushKeyMapper(std::shared_ptr<KeyMapper> mapper);
230 void popKeyMapper();
231
232private:
233 NormalViMode *m_viNormalMode;
234 InsertViMode *m_viInsertMode;
235 VisualViMode *m_viVisualMode;
236 ReplaceViMode *m_viReplaceMode;
237
238 ViMode m_currentViMode;
239 ViMode m_previousViMode;
240
241 KateViInputMode *m_inputAdapter;
242 KTextEditor::ViewPrivate *m_view;
243 KateViewInternal *m_viewInternal;
244 KeyParser *m_keyParser;
245
246 // Create a new keymapper for each macro event, to simplify expansion of mappings in macros
247 // where the macro itself was triggered by expanding a mapping!
248 QStack<std::shared_ptr<KeyMapper>> m_keyMapperStack;
249
250 int m_insideHandlingKeyPressCount;
251
252 /**
253 * a list of the (encoded) key events that was part of the last change.
254 */
255 QString m_lastChange;
256
257 CompletionList m_lastChangeCompletionsLog;
258
259 /**
260 * true when normal mode was started by Ctrl-O command in insert mode.
261 */
262 bool m_temporaryNormalMode;
263
264 Marks *m_marks;
265 Jumps *m_jumps;
266
267 Searcher *m_searcher;
268 CompletionRecorder *m_completionRecorder;
269 CompletionReplayer *m_completionReplayer;
270
271 MacroRecorder *m_macroRecorder;
272
273 LastChangeRecorder *m_lastChangeRecorder;
274};
275
276}
277
278#endif
Backend of KTextEditor::Document related public KTextEditor interfaces.
A Cursor which is bound to a specific Document, and maintains its position.
ViewMode
Possible view modes These correspond to various modes the text editor might be in.
Definition view.h:295
for encoding keypresses w/ modifiers into an internal QChar representation and back again to a descri...
Definition keyparser.h:28
Commands for the vi normal mode.
Commands for the vi replace mode.
The KTextEditor namespace contains all the public API that is required to use the KTextEditor compone...
This file is part of the KDE documentation.
Documentation copyright © 1996-2025 The KDE developers.
Generated on Fri Jan 24 2025 11:55:25 by doxygen 1.13.2 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.