]> git.lyx.org Git - features.git/blob - src/LyXAction.cpp
* Doxy: fix \vars
[features.git] / src / LyXAction.cpp
1 /**
2  * \file LyXAction.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Lars Gullik Bjønnes
7  * \author Jean-Marc Lasgouttes
8  * \author John Levon
9  * \author André Pönitz
10  *
11  * Full author contact details are available in file CREDITS.
12  */
13
14 #include <config.h>
15
16 #include "LyXAction.h"
17
18 #include "support/debug.h"
19 #include "FuncRequest.h"
20
21 #include "support/lstrings.h"
22
23 #include <boost/assert.hpp>
24
25 using namespace std;
26 using namespace lyx::support;
27
28 namespace lyx {
29
30 /*
31      NAMING RULES FOR USER-COMMANDS
32      Here's the set of rules to apply when a new command name is introduced:
33
34      1) Use the object.event order. That is, use `word-forward'
35         instead of `forward-word'.
36      2) Don't introduce an alias for an already named object. Same for events.
37      3) Forward movement or focus is called `forward' (not `right').
38      4) Backward movement or focus is called `backward' (not `left').
39      5) Upward movement of focus is called `up'.
40      6) Downward movement is called `down'.
41      7) The begin of an object is called `begin' (not `start').
42      8) The end of an object is called `end'.
43
44      (May 19 1996, 12:04, RvdK)
45 */
46
47 /* LFUN documentation (a start at least, Chr 2007-08-12)
48  *
49  * The documentation below is primarily notes about restrictions and
50  * oddities relating to the different LFUNs.
51  *
52  * Try to find an appropriate (thematical) place when adding the new LFUN.
53  *
54  * Doxygen template below. Some notes: Parameters should be set in uppercase
55  * and put in <BRACKETS>, as so.
56  */
57
58 /**
59  * \var lyx::kb_action lyx::LFUN_
60  * \li Action: 
61  * \li Notion: 
62  * \li Syntax: 
63  * \li Params: 
64  * \li Origin: 
65  */
66
67 LyXAction lyxaction;
68
69
70 void LyXAction::newFunc(kb_action action, string const & name,
71                         unsigned int attrib, LyXAction::func_type type)
72 {
73         lyx_func_map[name] = action;
74         func_info tmpinfo;
75         tmpinfo.name = name;
76         tmpinfo.attrib = attrib;
77         tmpinfo.type = type;
78         lyx_info_map[action] = tmpinfo;
79 }
80
81
82 // Needed for LFUNs documentation to be accepted, since doxygen won't take
83 // \var inside functions.
84 #ifndef DOXYGEN_SHOULD_SKIP_THIS
85 void LyXAction::init()
86 {
87         // This function was changed to use the array below in initalization
88         // instead of calling newFunc numerous times because of compilation
89         // times. Since the array is not static we get back the memory it
90         // occupies after the init is completed. It compiles several
91         // magnitudes faster.
92
93         static bool init;
94         if (init) return;
95
96         struct ev_item {
97                 kb_action action;
98                 char const * name;
99                 unsigned int attrib;
100                 func_type type;
101         };
102
103         ev_item const items[] = {
104 #endif
105 /**
106  * \var lyx::kb_action lyx::LFUN_ACCENT_ACUTE
107  * \li Action: adds an acute accent (á) to the next character typed
108  * \li Syntax: accent-acute
109  */
110                 { LFUN_ACCENT_ACUTE, "accent-acute", Noop, Edit },
111 /**
112  * \var lyx::kb_action lyx::LFUN_ACCENT_BREVE
113  * \li Action: adds a breve accent to the next character typed
114  * \li Syntax: accent-breve
115  */
116                 { LFUN_ACCENT_BREVE, "accent-breve", Noop, Edit },
117 /**
118  * \var lyx::kb_action lyx::LFUN_ACCENT_CARON
119  * \li Action: adds a caron to the next character typed
120  * \li Syntax: accent-caron
121  */
122                 { LFUN_ACCENT_CARON, "accent-caron", Noop, Edit },
123 /**
124  * \var lyx::kb_action lyx::LFUN_ACCENT_CEDILLA
125  * \li Action: adds a cedilla (ç) to the next character typed
126  * \li Syntax: accent-cedilla
127  */
128                 { LFUN_ACCENT_CEDILLA, "accent-cedilla", Noop, Edit },
129 /**
130  * \var lyx::kb_action lyx::LFUN_ACCENT_CIRCLE
131  * \li Action: adds a circle accent (Å) to the next character typed
132  * \li Syntax: accent-circle
133  */
134                 { LFUN_ACCENT_CIRCLE, "accent-circle", Noop, Edit },
135 /**
136  * \var lyx::kb_action lyx::LFUN_ACCENT_CIRCUMFLEX
137  * \li Action: adds a circumflex (â) to the next character typed
138  * \li Syntax: accent-circumflex
139  */
140                 { LFUN_ACCENT_CIRCUMFLEX, "accent-circumflex", Noop, Edit },
141 /**
142  * \var lyx::kb_action lyx::LFUN_ACCENT_DOT
143  * \li Action: adds a dot accent to the next character typed
144  * \li Syntax: accent-dot
145  */
146                 { LFUN_ACCENT_DOT, "accent-dot", Noop, Edit },
147 /**
148  * \var lyx::kb_action lyx::LFUN_ACCENT_GRAVE
149  * \li Action: adds a grave accent (à) to the next character typed
150  * \li Syntax: accent-grave
151  */
152                 { LFUN_ACCENT_GRAVE, "accent-grave", Noop, Edit },
153 /**
154  * \var lyx::kb_action lyx::LFUN_ACCENT_HUNGARIAN_UMLAUT
155  * \li Action: adds a Hungarian umlaut to the next character typed
156  * \li Syntax: accent-grave
157  */
158                 { LFUN_ACCENT_HUNGARIAN_UMLAUT, "accent-hungarian-umlaut", Noop, Edit },
159 /**
160  * \var lyx::kb_action lyx::LFUN_ACCENT_MACRON
161  * \li Action: adds a macron to the next character typed
162  * \li Syntax: accent-macron
163  */
164                 { LFUN_ACCENT_MACRON, "accent-macron", Noop, Edit },
165 /**
166  * \var lyx::kb_action lyx::LFUN_ACCENT_OGONEK
167  * \li Action: adds an ogonek accent to the next character typed
168  * \li Syntax: accent-ogonek
169  */
170                 { LFUN_ACCENT_OGONEK, "accent-ogonek", Noop, Edit },
171                 { LFUN_ACCENT_SPECIAL_CARON, "accent-special-caron", Noop, Edit },
172 /**
173  * \var lyx::kb_action lyx::LFUN_ACCENT_TIE
174  * \li Action: adds a tie over the next two character typed
175  * \li Syntax: accent-tie
176  */
177                 { LFUN_ACCENT_TIE, "accent-tie", Noop, Edit },
178 /**
179  * \var lyx::kb_action lyx::LFUN_ACCENT_TILDE
180  * \li Action: adds a tilde (ñ) over the next character typed
181  * \li Syntax: accent-tilde
182  */
183                 { LFUN_ACCENT_TILDE, "accent-tilde", Noop, Edit },
184 /**
185  * \var lyx::kb_action lyx::LFUN_ACCENT_UMLAUT
186  * \li Action: adds an umlaut (ö) over the next character typed
187  * \li Syntax: accent-umlaut
188  */
189                 { LFUN_ACCENT_UMLAUT, "accent-umlaut", Noop, Edit },
190 /**
191  * \var lyx::kb_action lyx::LFUN_ACCENT_UNDERBAR
192  * \li Action: adds a bar under the next character typed
193  * \li Syntax: accent-underbar
194  */
195                 { LFUN_ACCENT_UNDERBAR, "accent-underbar", Noop, Edit },
196 /**
197  * \var lyx::kb_action lyx::LFUN_ACCENT_UNDERDOT
198  * \li Action: adds a dot under the next character typed
199  * \li Syntax: accent-underdot
200  */
201                 { LFUN_ACCENT_UNDERDOT, "accent-underdot", Noop, Edit },
202
203 /**
204  * \var lyx::kb_action lyx::LFUN_BREAK_PARAGRAPH
205  * \li Action: Breaks the current paragraph at the current location
206  * \li Syntax: break-paragraph
207  */
208                 { LFUN_BREAK_PARAGRAPH, "break-paragraph", Noop, Edit },
209 /**
210  * \var lyx::kb_action lyx::LFUN_BREAK_PARAGRAPH_SKIP
211  * \li Action: Breaks the current paragraph at the current location,
212                unless used at the beginning of a line, where it sets
213                the label width string to empty.
214  * \li Syntax: break-paragraph-skip
215  */
216                 { LFUN_BREAK_PARAGRAPH_SKIP, "break-paragraph-skip", Noop, Edit },
217 /**
218  * \var lyx::kb_action lyx::LFUN_CAPTION_INSERT
219  * \li Action: Inserts a caption inset.
220  * \li Syntax: caption-insert
221  */
222                 { LFUN_CAPTION_INSERT, "caption-insert", Noop, Edit },
223 /**
224  * \var lyx::kb_action lyx::LFUN_DATE_INSERT
225  * \li Action: Inserts the current date
226  * \li Syntax: date-insert <ARG>
227  * \li Param: <ARG>: Strangely, this is inserted verbatim, no matter
228                      what it is.
229  */
230                 { LFUN_DATE_INSERT, "date-insert", Noop, Edit },
231 /**
232  * \var lyx::kb_action lyx::LFUN_FOOTNOTE_INSERT
233  * \li Action: Inserts a footnote inset.
234  * \li Syntax: footnote-insert
235  */
236                 { LFUN_FOOTNOTE_INSERT, "footnote-insert", Noop, Edit },
237 /**
238  * \var lyx::kb_action lyx::LFUN_ERT_INSERT
239  * \li Action: Inserts an ERT inset.
240  * \li Syntax: ert-insert
241  */
242                 { LFUN_ERT_INSERT, "ert-insert", Noop, Edit },
243                 { LFUN_FLOAT_INSERT, "float-insert", Noop, Edit },
244                 { LFUN_FLOAT_WIDE_INSERT, "float-wide-insert", Noop, Edit },
245                 { LFUN_WRAP_INSERT, "wrap-insert", Noop, Edit },
246 /**
247  * \var lyx::kb_action lyx::LFUN_HFILL_INSERT
248  * \li Action: Inserts an hfill inset.
249  * \li Syntax: hfill-insert
250  */
251                 { LFUN_HFILL_INSERT, "hfill-insert", Noop, Edit },
252 /**
253  * \var lyx::kb_action lyx::LFUN_OPTIONAL_INSERT
254  * \li Action: Inserts an optional-argument (short title) inset.
255  * \li Syntax: optional-insert
256  */
257                 { LFUN_OPTIONAL_INSERT, "optional-insert", Noop, Edit },
258 /**
259  * \var lyx::kb_action lyx::LFUN_LINE_INSERT
260  * \li Action: Inserts a horizontal line.
261  * \li Syntax: line-insert
262  */
263                 { LFUN_LINE_INSERT, "line-insert", Noop, Edit },
264 /**
265  * \var lyx::kb_action lyx::LFUN_NEWPAGE_INSERT
266  * \li Action: Inserts a new page.
267  * \li Syntax: newpage-insert
268  */
269                 { LFUN_NEWPAGE_INSERT, "newpage-insert", Noop, Edit },
270 /**
271  * \var lyx::kb_action lyx::LFUN_PAGEBREAK_INSERT
272  * \li Action: Inserts a pagebreak.
273  * \li Syntax: pagebreak-insert
274  */
275                 { LFUN_PAGEBREAK_INSERT, "pagebreak-insert", Noop, Edit },
276 /**
277  * \var lyx::kb_action lyx::LFUN_MARGINALNOTE_INSERT
278  * \li Action: Inserts a marginal note.
279  * \li Syntax: marginalnote-insert
280  */
281                 { LFUN_MARGINALNOTE_INSERT, "marginalnote-insert", Noop, Edit },
282 /**
283  * \var lyx::kb_action lyx::LFUN_UNICODE_INSERT
284  * \li Action: Inserts a single unicode character.
285  * \li Syntax: unicode-insert <CHAR>
286  * \li Params: <CHAR>: The character to insert, given as its code
287                        point, in hexadecimal, e.g.: unicode-insert 0x0100.
288  */
289                 { LFUN_UNICODE_INSERT, "unicode-insert", Noop, Edit },
290 /**
291  * \var lyx::kb_action lyx::LFUN_LISTING_INSERT
292  * \li Action: Inserts a new listings inset.
293  * \li Syntax: listing-insert
294  */
295                 { LFUN_LISTING_INSERT, "listing-insert", Noop, Edit },
296                 { LFUN_QUOTE_INSERT, "quote-insert", Noop, Edit },
297                 { LFUN_INFO_INSERT, "info-insert", Noop, Edit },
298                 { LFUN_BRANCH_INSERT, "branch-insert", Noop, Edit },
299                 { LFUN_BOX_INSERT, "box-insert", Noop, Edit },
300                 { LFUN_FLEX_INSERT, "flex-insert", Noop, Edit },
301                 { LFUN_SELF_INSERT, "self-insert", SingleParUpdate, Hidden },
302                 { LFUN_SPACE_INSERT, "space-insert", Noop, Edit },
303                 { LFUN_HYPERLINK_INSERT, "href-insert", Noop, Edit },
304                 { LFUN_SPECIALCHAR_INSERT, "specialchar-insert", Noop, Edit },
305                 { LFUN_CLEARPAGE_INSERT, "clearpage-insert", Noop, Edit },
306                 { LFUN_CLEARDOUBLEPAGE_INSERT, "cleardoublepage-insert", Noop, Edit },
307                 { LFUN_TOC_INSERT, "toc-insert", Noop, Edit },
308                 { LFUN_APPENDIX, "appendix", Noop, Edit },
309
310 #if 0
311                 { LFUN_LIST_INSERT, "list-insert", Noop, Edit },
312                 { LFUN_THEOREM_INSERT, "theorem-insert", Noop, Edit },
313 #endif
314
315                 { LFUN_DELETE_BACKWARD_SKIP, "delete-backward-skip", Noop, Edit },
316                 { LFUN_DELETE_FORWARD_SKIP, "delete-forward-skip", Noop, Edit },
317                 { LFUN_DOWN, "down", ReadOnly | NoUpdate, Edit },
318                 { LFUN_DOWN_SELECT, "down-select", ReadOnly | SingleParUpdate, Edit },
319                 { LFUN_UP, "up", ReadOnly | NoUpdate, Edit },
320                 { LFUN_UP_SELECT, "up-select", ReadOnly | SingleParUpdate, Edit },
321                 { LFUN_SCREEN_DOWN, "screen-down", ReadOnly, Edit },
322                 { LFUN_SCREEN_DOWN_SELECT, "screen-down-select", ReadOnly, Edit },
323 /**
324  * \var lyx::kb_action lyx::LFUN_SCROLL
325  * \li Action: scroll the buffer view
326  * \li Notion: Only scrolls the screen up or down; does not move the cursor.
327  * \li Syntax: scroll <TYPE> <QUANTITY>
328  * \li Params: <TYPE>:  line|page\n
329                <QUANTITY>: up|down|<number>\n
330  * \li Origin: Abdelrazak Younes, Dec 27 2007
331  */
332                 { LFUN_SCROLL, "scroll", ReadOnly, Edit },
333 /**
334  * \var lyx::kb_action lyx::LFUN_SCREEN_RECENTER
335  * \li Action: Recenters the screen on the current cursor position
336  * \li Syntax: screen-recenter
337  */
338                 { LFUN_SCREEN_RECENTER, "screen-recenter", ReadOnly, Edit },
339                 { LFUN_SCREEN_UP, "screen-up", ReadOnly, Edit },
340                 { LFUN_SCREEN_UP_SELECT, "screen-up-select", ReadOnly, Edit },
341
342                 { LFUN_ERROR_NEXT, "error-next", ReadOnly, Edit },
343                 { LFUN_CHAR_BACKWARD, "char-backward", ReadOnly | NoUpdate, Edit },
344                 { LFUN_CHAR_BACKWARD_SELECT, "char-backward-select", ReadOnly | SingleParUpdate, Edit },
345                 { LFUN_CHAR_DELETE_BACKWARD, "delete-backward", SingleParUpdate, Edit },
346                 { LFUN_CHAR_DELETE_FORWARD, "delete-forward", SingleParUpdate, Edit },
347                 { LFUN_CHAR_FORWARD, "char-forward", ReadOnly | NoUpdate, Edit },
348                 { LFUN_CHAR_FORWARD_SELECT, "char-forward-select", ReadOnly | SingleParUpdate, Edit },
349                 { LFUN_CHAR_LEFT, "char-left", ReadOnly | NoUpdate, Edit },
350                 { LFUN_CHAR_LEFT_SELECT, "char-left-select", ReadOnly | SingleParUpdate, Edit },
351                 { LFUN_CHAR_RIGHT, "char-right", ReadOnly | NoUpdate, Edit },
352                 { LFUN_CHAR_RIGHT_SELECT, "char-right-select", ReadOnly | SingleParUpdate, Edit },
353
354                 { LFUN_WORD_BACKWARD, "word-backward", ReadOnly | NoUpdate, Edit },
355                 { LFUN_WORD_BACKWARD_SELECT, "word-backward-select", ReadOnly | SingleParUpdate, Edit },
356                 { LFUN_WORD_CAPITALIZE, "word-capitalize", Noop, Edit },
357                 { LFUN_WORD_DELETE_BACKWARD, "word-delete-backward", Noop, Edit },
358                 { LFUN_WORD_DELETE_FORWARD, "word-delete-forward", Noop, Edit },
359                 { LFUN_WORD_FIND_BACKWARD, "word-find-backward", ReadOnly, Edit },
360                 { LFUN_WORD_FIND_FORWARD, "word-find-forward", ReadOnly, Edit },
361                 { LFUN_WORD_FORWARD, "word-forward", ReadOnly | NoUpdate, Edit },
362                 { LFUN_WORD_FORWARD_SELECT, "word-forward-select", ReadOnly | SingleParUpdate, Edit },
363                 { LFUN_WORD_LEFT, "word-left", ReadOnly | NoUpdate, Edit },
364                 { LFUN_WORD_LEFT_SELECT, "word-left-select", ReadOnly | SingleParUpdate, Edit },
365                 { LFUN_WORD_LOWCASE, "word-lowcase", Noop, Edit },
366                 { LFUN_WORD_RIGHT, "word-right", ReadOnly | NoUpdate, Edit },
367                 { LFUN_WORD_RIGHT_SELECT, "word-right-select", ReadOnly | SingleParUpdate, Edit },
368                 { LFUN_WORD_SELECT, "word-select", ReadOnly, Edit },
369                 { LFUN_WORD_UPCASE, "word-upcase", Noop, Edit },
370                 { LFUN_WORD_FIND, "word-find", ReadOnly, Edit },
371                 { LFUN_WORD_REPLACE, "word-replace", Noop, Edit },
372 /**
373  * \var lyx::kb_action lyx::LFUN_THESAURUS_ENTRY
374  * \li Action: Look up thesaurus entries with respect to the word under the cursor.
375  * \li Syntax: thesaurus-entry
376  * \li Origin: Levon, 20 Jul 2001
377  */
378                 { LFUN_THESAURUS_ENTRY, "thesaurus-entry", ReadOnly, Edit },
379                 { LFUN_BUFFER_BEGIN, "buffer-begin", ReadOnly, Edit },
380                 { LFUN_BUFFER_BEGIN_SELECT, "buffer-begin-select", ReadOnly, Edit },
381                 { LFUN_BUFFER_END, "buffer-end", ReadOnly, Edit },
382                 { LFUN_BUFFER_END_SELECT, "buffer-end-select", ReadOnly, Edit },
383
384                 { LFUN_LINE_BEGIN, "line-begin", ReadOnly | NoUpdate, Edit },
385                 { LFUN_LINE_BEGIN_SELECT, "line-begin-select", ReadOnly | SingleParUpdate, Edit },
386                 { LFUN_LINE_BREAK, "line-break", Noop, Edit },
387                 { LFUN_LINE_DELETE, "line-delete-forward", Noop, Edit }, // there is no line-delete-backward
388                 { LFUN_LINE_END, "line-end", ReadOnly | NoUpdate, Edit },
389                 { LFUN_LINE_END_SELECT, "line-end-select", ReadOnly | SingleParUpdate, Edit },
390                 { LFUN_NEW_LINE, "new-line", Noop, Edit },
391
392 /**
393  * \var lyx::kb_action lyx::LFUN_PARAGRAPH_MOVE_DOWN
394  * \li Action: Moves the current paragraph downwards in the document.
395  * \li Syntax: paragraph-move-down
396  * \li Origin: Edwin, 8 Apr 2006
397  */
398                 { LFUN_PARAGRAPH_MOVE_DOWN, "paragraph-move-down", Noop, Edit },
399 /**
400  * \var lyx::kb_action lyx::LFUN_PARAGRAPH_MOVE_UP
401  * \li Action: Moves the current paragraph upwards in the document.
402  * \li Syntax: paragraph-move-up
403  * \li Origin: Edwin, 8 Apr 2006
404  */
405                 { LFUN_PARAGRAPH_MOVE_UP, "paragraph-move-up", Noop, Edit },
406 /**
407  * \var lyx::kb_action lyx::LFUN_COPY
408  * \li Action: Copies to the clipboard the last edit
409  * \li Syntax: copy
410  */
411                 { LFUN_COPY, "copy", ReadOnly, Edit },
412 /**
413  * \var lyx::kb_action lyx::LFUN_CUT
414  * \li Action: Cuts to the clipboard
415  * \li Syntax: cut
416  */
417                 { LFUN_CUT, "cut", Noop, Edit },
418 /**
419  * \var lyx::kb_action lyx::LFUN_PASTE
420  * \li Action: Pastes from the active clipboard
421  * \li Syntax: paste
422  */
423                 { LFUN_PASTE, "paste", Noop, Edit },
424                 { LFUN_CLIPBOARD_PASTE, "clipboard-paste", Noop, Edit },
425 /**
426  * \var lyx::kb_action lyx::LFUN_PRIMARY_SELECTION_PASTE
427  * \li Action: Pastes the material currently selected
428  * \li Syntax: primary-selection-paste
429  */
430                 { LFUN_PRIMARY_SELECTION_PASTE, "primary-selection-paste", Noop, Edit },
431 /**
432  * \var lyx::kb_action lyx::LFUN_UNDO
433  * \li Action: Undoes the last edit
434  * \li Syntax: undo
435  */
436                 { LFUN_UNDO, "undo", Noop, Edit },
437 /**
438  * \var lyx::kb_action lyx::LFUN_REDO
439  * \li Action: Redoes the last thing undone
440  * \li Syntax: redo
441  */
442                 { LFUN_REDO, "redo", Noop, Edit },
443                 { LFUN_REPEAT, "repeat", NoBuffer, Edit },
444                 { LFUN_CHARS_TRANSPOSE, "chars-transpose", Noop, Edit },
445
446                 { LFUN_DEPTH_DECREMENT, "depth-decrement", Noop, Edit },
447                 { LFUN_DEPTH_INCREMENT, "depth-increment", Noop, Edit },
448                 { LFUN_ENVIRONMENT_INSERT, "environment-insert", Noop, Edit },
449
450                 { LFUN_FONT_BOLD, "font-bold", Noop, Layout },
451                 { LFUN_FONT_TYPEWRITER, "font-typewriter", Noop, Layout },
452                 { LFUN_FONT_DEFAULT, "font-default", Noop, Layout },
453                 { LFUN_FONT_EMPH, "font-emph", Noop, Layout },
454                 { LFUN_FONT_FREE_APPLY, "font-free-apply", Noop, Layout },
455                 { LFUN_FONT_FREE_UPDATE, "font-free-update", Noop, Layout },
456                 { LFUN_FONT_NOUN, "font-noun", Noop, Layout },
457                 { LFUN_FONT_ROMAN, "font-roman", Noop, Layout },
458                 { LFUN_FONT_SANS, "font-sans", Noop, Layout },
459                 { LFUN_FONT_FRAK, "font-frak", Noop, Layout },
460                 { LFUN_FONT_ITAL, "font-ital", Noop, Layout },
461                 { LFUN_FONT_SIZE, "font-size", Noop, Layout },
462                 { LFUN_FONT_STATE, "font-state", ReadOnly, Layout },
463                 { LFUN_FONT_UNDERLINE, "font-underline", Noop, Layout },
464                 { LFUN_SCREEN_FONT_UPDATE, "screen-font-update", NoBuffer, Layout },
465
466                 { LFUN_INDEX_INSERT, "index-insert", Noop, Edit },
467                 { LFUN_INDEX_PRINT, "index-print", Noop, Edit },
468
469                 { LFUN_NOMENCL_INSERT, "nomencl-insert", Noop, Edit },
470                 { LFUN_NOMENCL_PRINT, "nomencl-print", Noop, Edit },
471
472                 { LFUN_NOTE_INSERT, "note-insert", Noop, Edit },
473                 { LFUN_NOTE_NEXT, "note-next", ReadOnly, Edit },
474
475                 { LFUN_BIBITEM_INSERT, "bibitem-insert", Noop, Edit },
476                 { LFUN_CITATION_INSERT, "citation-insert", Noop, Edit },
477                 { LFUN_BIBTEX_DATABASE_ADD, "bibtex-database-add", Noop, Edit },
478                 { LFUN_BIBTEX_DATABASE_DEL, "bibtex-database-del", Noop, Edit },
479
480  /**
481  * \var lyx::kb_action lyx::LFUN_LAYOUT
482  * \li Action: Sets the layout (that is, environment) for the current paragraph
483  * \li Syntax: layout <LAYOUT>
484  * \li Params: <LAYOUT>: the layout to use
485  */
486                 { LFUN_LAYOUT, "layout", Noop, Layout },
487 /**
488  * \var lyx::kb_action lyx::LFUN_LAYOUT_PARAGRAPH
489  * \li Action: Launches the paragraph settings dialog
490  * \li Syntax: layout-paragraph
491  */
492                 { LFUN_LAYOUT_PARAGRAPH, "layout-paragraph", ReadOnly, Layout },
493                 { LFUN_LAYOUT_TABULAR, "layout-tabular", Noop, Layout },
494 /**
495  * \var lyx::kb_action lyx::LFUN_DROP_LAYOUTS_CHOICE
496  * \li Action: Displays list of layout choices
497  * \li Notion: In the current (as of 2007) Qt4 frontend, this LFUN opens the
498                dropbox allowing for choice of layout
499  * \li Syntax: drop-layouts-choice
500  */
501                 { LFUN_DROP_LAYOUTS_CHOICE, "drop-layouts-choice", ReadOnly, Layout },
502 /**
503  * \var lyx::kb_action lyx::LFUN_LAYOUT_MODULES_CLEAR
504  * \li Action: Clears the module list
505  * \li Notion: Clears the list of included modules for the current buffer.
506  * \li Syntax: layout-modules-clear
507  * \li Origin: rgh, 25 August 2007
508  */
509                 { LFUN_LAYOUT_MODULES_CLEAR, "layout-modules-clear", Noop, Layout },
510 /**
511  * \var lyx::kb_action lyx::LFUN_LAYOUT_MODULE_ADD
512  * \li Action: Adds a module
513  * \li Notion: Adds a module to the list of included modules for the current buffer.
514  * \li Syntax: layout-module-add <MODULE>
515  * \li Params: <MODULE>: the module to be added
516  * \li Origin: rgh, 25 August 2007
517  */
518                 { LFUN_LAYOUT_MODULE_ADD, "layout-module-add", Noop, Layout },
519 /**
520  * \var lyx::kb_action lyx::LFUN_LAYOUT_RELOAD
521  * \li Action: Reloads layout information
522  * \li Notion: Reloads all layout information for the current buffer from disk, thus
523                recognizing any changes that have been made to layout files on the fly.
524                This is intended to be used only by layout developers and should not be
525                used when one is trying to do actual work.
526  * \li Syntax: layout-reload
527  * \li Origin: rgh, 3 September 2007
528  */
529                 { LFUN_LAYOUT_RELOAD, "layout-reload", Noop, Layout },
530 /**
531  * \var lyx::kb_action lyx::LFUN_TEXTCLASS_APPLY
532  * \li Action: Sets the text class for the current buffer
533  * \li Syntax: textclass-apply <TEXTCLASS>
534  * \li Params: <TEXTCLASS>: the textclass to set. Note that this must be
535                    the filename, minus the ".layout" extension.
536  */
537                 { LFUN_TEXTCLASS_APPLY, "textclass-apply", Noop, Layout },
538 /**
539  * \var lyx::kb_action lyx::LFUN_TEXTCLASS_LOAD
540  * \li Action: Loads information for a textclass from disk
541  * \li Syntax: textclass-load <TEXTCLASS>
542  * \li Params: <TEXTCLASS>: the textclass to load. Note that this must be
543                    the filename, minus the ".layout" extension.
544  */
545                 { LFUN_TEXTCLASS_LOAD, "textclass-load", Noop, Layout },
546
547 /**
548  * \var lyx::kb_action lyx::LFUN_MARK_OFF
549  * \li Action: Disable selecting of text-region.
550  * \li Syntax: mark-off
551  */
552                 { LFUN_MARK_OFF, "mark-off", ReadOnly, Edit },
553 /**
554  * \var lyx::kb_action lyx::LFUN_MARK_ON
555  * \li Action: Enable selecting of text-region.
556  * \li Notion: After enabling you can simply move arrow keys to get selected region.
557  * \li Syntax: mark-on
558  */
559                 { LFUN_MARK_ON, "mark-on", ReadOnly, Edit },
560 /**
561  * \var lyx::kb_action lyx::LFUN_MARK_TOGGLE
562  * \li Action: Toggle between #LFUN_MARK_ON and #LFUN_MARK_OFF .
563  * \li Syntax: mark-toggle
564  * \li Origin: poenitz, May 5 2006
565  */
566                 { LFUN_MARK_TOGGLE, "mark-toggle", ReadOnly, Edit },
567                 
568                 { LFUN_MATH_DELIM, "math-delim", Noop, Math },
569                 { LFUN_MATH_BIGDELIM, "math-bigdelim", Noop, Math },
570                 { LFUN_MATH_DISPLAY, "math-display", Noop, Math },
571                 { LFUN_MATH_INSERT, "math-insert", Noop, Math },
572                 { LFUN_MATH_SUBSCRIPT, "math-subscript", Noop, Math },
573                 { LFUN_MATH_SUPERSCRIPT, "math-superscript", Noop, Math },
574                 { LFUN_MATH_LIMITS, "math-limits", Noop, Math },
575                 { LFUN_MATH_MACRO, "math-macro", Noop, Math },
576                 { LFUN_MATH_MUTATE, "math-mutate", Noop, Math },
577                 { LFUN_MATH_SPACE, "math-space", Noop, Math },
578                 { LFUN_MATH_IMPORT_SELECTION, "math-import-selection", Noop, Math },
579                 { LFUN_MATH_MATRIX, "math-matrix", Noop, Math },
580                 { LFUN_MATH_MODE, "math-mode", Noop, Math },
581 /**
582  * \var lyx::kb_action lyx::LFUN_MATH_NUMBER_LINE_TOGGLE
583  * \li Action: Toggles numbering of the current formula line.
584  * \li Notion: Must be in display formula mode.
585  * \li Syntax: math-number-line-toggle
586  * \li Origin: Alejandro 18 Jun 1996
587  */
588                 { LFUN_MATH_NUMBER_LINE_TOGGLE, "math-number-line-toggle", Noop, Math },
589 /**
590  * \var lyx::kb_action lyx::LFUN_MATH_NUMBER_TOGGLE
591  * \li Action: Toggles numbering of the current formula.
592  * \li Notion: Must be in display formula mode.
593  * \li Syntax: math-number-toggle
594  * \li Origin: Alejandro 4 Jun 1996
595  */
596                 { LFUN_MATH_NUMBER_TOGGLE, "math-number-toggle", Noop, Math },
597                 { LFUN_MATH_EXTERN, "math-extern", Noop, Math },
598                 { LFUN_MATH_SIZE, "math-size", Noop, Math },
599 /**
600  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_UNFOLD
601  * \li Action: Unfold a Math Macro
602  * \li Notion: Unfold the Math Macro the cursor is in, i.e.
603                display it as \foo.
604  * \li Syntax: math-macro-unfold
605  * \li Origin: sts, 06 January 2008
606  */
607                 { LFUN_MATH_MACRO_UNFOLD, "math-macro-unfold", ReadOnly | SingleParUpdate, Math },
608 /**
609  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_FOLD
610  * \li Action: Fold a Math Macro
611  * \li Notion: Fold the Math Macro the cursor is in if it was
612                unfolded, i.e. displayed as \foo before.
613  * \li Syntax: math-macro-fold
614  * \li Origin: sts, 06 January 2008
615  */
616                 { LFUN_MATH_MACRO_FOLD, "math-macro-fold", ReadOnly | SingleParUpdate, Math },
617 /**
618  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_ADD_PARAM
619  * \li Action: Add a parameter
620  * \li Notion: Add a parameter to a Math Macro
621  * \li Params: <NUM>: The number of the parameter behind which the new one
622                will be added (1 for the first, i.e. use 0 for add a
623                parameter at the left), defaults to the last one.
624  * \li Syntax: math-macro-add-param <NUM>
625  * \li Origin: sts, 06 January 2008
626  */
627                 { LFUN_MATH_MACRO_ADD_PARAM, "math-macro-add-param", Noop, Math },
628 /**
629  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_REMOVE_PARAM
630  * \li Action: Remove the last parameter
631  * \li Notion: Remove the last parameter of a Math Macro and
632                remove its value in all instances of the macro
633                in the buffer.
634  * \li Params: <NUM>: The number of the parameter to be deleted (1 for
635                the first), defaults to the last one.
636  * \li Syntax: math-macro-remove-param <NUM>
637  * \li Origin: sts, 06 January 2008
638  */
639                 { LFUN_MATH_MACRO_REMOVE_PARAM, "math-macro-remove-param", Noop, Math },
640 /**
641  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_APPEND_GREEDY_PARAM
642  * \li Action: Append a greedy parameter
643  * \li Notion: Append a greedy parameter to a Math Macro which
644                eats the following mathed cell in every instance of
645                the macro in the buffer.
646  * \li Syntax: math-macro-append-greedy-param
647  * \li Origin: sts, 06 January 2008
648  */
649                 { LFUN_MATH_MACRO_APPEND_GREEDY_PARAM, "math-macro-append-greedy-param", Noop, Math },
650 /**
651  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_REMOVE_GREEDY_PARAM
652  * \li Action: Remove a greedy parameter
653  * \li Notion: Remove a greedy parameter of a Math Macro and spit
654                out the values of it in every instance of the macro
655                in the buffer. If it is an optional parameter the [valud]
656                format is used.
657  * \li Syntax: math-macro-remove-greedy-param
658  * \li Origin: sts, 06 January 2008
659  */
660                 { LFUN_MATH_MACRO_REMOVE_GREEDY_PARAM, "math-macro-remove-greedy-param", Noop, Math },
661 /**
662  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_MAKE_OPTIONAL
663  * \li Action: Make a parameter optional
664  * \li Notion: Turn the first non-optional parameter of a Math Macro
665                into an optional parameter with a default value.
666  * \li Syntax: math-macro-make-optional
667  * \li Origin: sts, 06 January 2008
668  */
669                 { LFUN_MATH_MACRO_MAKE_OPTIONAL, "math-macro-make-optional", Noop, Math },
670 /**
671  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_MAKE_NONOPTIONAL
672  * \li Action: Make a parameter non-optional
673  * \li Notion: Turn the last optional parameter of a Math Macro
674                into a non-optional parameter. The default value is
675                remembered to be reused later if the user changes his mind.
676  * \li Syntax: math-macro-make-nonoptional
677  * \li Origin: sts, 06 January 2008
678  */
679                 { LFUN_MATH_MACRO_MAKE_NONOPTIONAL, "math-macro-make-nonoptional", Noop, Math },
680 /**
681  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_ADD_OPTIONAL_PARAM
682  * \li Action: Add an optional parameter
683  * \li Notion: Insert an optional parameter just behind the
684                already existing optional parameters.
685  * \li Syntax: math-macro-add-optional-param
686  * \li Origin: sts, 06 January 2008
687  */
688                 { LFUN_MATH_MACRO_ADD_OPTIONAL_PARAM, "math-macro-add-optional-param", Noop, Math },
689 /**
690  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_REMOVE_OPTIONAL_PARAM
691  * \li Action: Remove the last optional parameter
692  * \li Notion: Remove the last optional parameter of a Math Macro and
693                remove it in all the instances of the macro in the buffer.
694  * \li Syntax: math-macro-remove-optional-param
695  * \li Origin: sts, 06 January 2008
696  */
697                 { LFUN_MATH_MACRO_REMOVE_OPTIONAL_PARAM, "math-macro-remove-optional-param", Noop, Math },
698 /**
699  * \var lyx::kb_action lyx::LFUN_MATH_MACRO_ADD_GREEDY_OPTIONAL_PARAM
700  * \li Action: Add a greedy optional parameter
701  * \li Notion: Add a greedy optional parameter which eats the value
702                from the following cells in mathed which are in the [value]
703                format.
704  * \li Syntax: math-macro-add-greedy-optional-param
705  * \li Origin: sts, 06 January 2008
706  */
707                 { LFUN_MATH_MACRO_ADD_GREEDY_OPTIONAL_PARAM, "math-macro-add-greedy-optional-param", Noop, Math },
708 /**
709  * \var lyx::kb_action lyx::LFUN_IN_MATHMACROTEMPLATE
710  * \li Action: Only active in Math Macro definition
711  * \li Notion: Dummy function which is only active in a Math Macro definition.
712                It's used to toggle the Math Macro toolbar if the cursor moves
713                into a Math Macro definition.
714  * \li Syntax: in-mathmacrotemplate
715  * \li Origin: sts, 06 January 2008
716  */
717                 { LFUN_IN_MATHMACROTEMPLATE, "in-mathmacrotemplate", Noop, Math },
718
719                 { LFUN_PARAGRAPH_DOWN, "paragraph-down", ReadOnly | NoUpdate, Edit },
720                 { LFUN_PARAGRAPH_DOWN_SELECT, "paragraph-down-select", ReadOnly, Edit },
721                 { LFUN_PARAGRAPH_GOTO, "paragraph-goto", ReadOnly, Edit },
722 /**
723  * \var lyx::kb_action lyx::LFUN_OUTLINE_UP
724  * \li Action: Move the current group in the upward direction in the
725                structure of the document.
726  * \li Notion: The "group" can be Part/Chapter/Section/etc. It moves
727                the whole substructure of the group.
728  * \li Syntax: outline-up
729  * \li Origin: Vermeer, 23 Mar 2006
730  */
731                 { LFUN_OUTLINE_UP, "outline-up", Noop, Edit },
732 /**
733  * \var lyx::kb_action lyx::LFUN_OUTLINE_DOWN
734  * \li Action: Move the current group in the downward direction in the
735                structure of the document.
736  * \li Notion: The "group" can be Part/Chapter/Section/etc. It moves
737                the whole substructure of the group.
738  * \li Syntax: outline-down
739  * \li Origin: Vermeer, 23 Mar 2006
740  */
741                 { LFUN_OUTLINE_DOWN, "outline-down", Noop, Edit },
742 /**
743  * \var lyx::kb_action lyx::LFUN_OUTLINE_IN
744  * \li Action: Moves the current group in the downward direction in the
745                hierarchy of the document structure.
746  * \li Notion: Part -> Chapter -> Section -> etc.
747  * \li Syntax: outline-in
748  * \li Origin: Vermeer, 23 Mar 2006
749  */
750                 { LFUN_OUTLINE_IN, "outline-in", Noop, Edit },
751 /**
752  * \var lyx::kb_action lyx::LFUN_OUTLINE_OUT
753  * \li Action: Moves the current group in the upward direction in the
754                hierarchy of the document structure.
755  * \li Notion: Part <- Chapter <- Section <- etc.
756  * \li Syntax: outline-out
757  * \li Origin: Vermeer, 23 Mar 2006
758  */
759                 { LFUN_OUTLINE_OUT, "outline-out", Noop, Edit },
760
761                 { LFUN_PARAGRAPH_SPACING, "paragraph-spacing", Noop, Edit },
762                 { LFUN_PARAGRAPH_UP, "paragraph-up", ReadOnly | NoUpdate, Edit },
763                 { LFUN_PARAGRAPH_UP_SELECT, "paragraph-up-select", ReadOnly, Edit },
764
765                 { LFUN_EXTERNAL_EDIT, "external-edit", Noop, Edit },
766                 { LFUN_GRAPHICS_EDIT, "graphics-edit", Noop, Edit },
767
768                 { LFUN_CELL_BACKWARD, "cell-backward", Noop, Edit },
769                 { LFUN_CELL_FORWARD, "cell-forward", Noop, Edit },
770                 { LFUN_CELL_SPLIT, "cell-split", Noop, Edit },
771                 { LFUN_TABULAR_INSERT, "tabular-insert", Noop, Edit },
772                 { LFUN_TABULAR_FEATURE, "tabular-feature", Noop, Edit },
773
774                 { LFUN_VC_CHECK_IN, "vc-check-in", ReadOnly, System },
775                 { LFUN_VC_CHECK_OUT, "vc-check-out", ReadOnly, System },
776                 { LFUN_VC_REGISTER, "vc-register", ReadOnly, System },
777                 { LFUN_VC_REVERT, "vc-revert", ReadOnly, System },
778                 { LFUN_VC_UNDO_LAST, "vc-undo-last", ReadOnly, System },
779
780                 { LFUN_CHANGES_TRACK, "changes-track", Noop, Edit },
781                 { LFUN_CHANGES_OUTPUT, "changes-output", Noop, Edit },
782                 { LFUN_CHANGE_NEXT, "change-next", ReadOnly, Edit },
783                 { LFUN_CHANGES_MERGE, "changes-merge", Noop, Edit },
784                 { LFUN_CHANGE_ACCEPT, "change-accept", Noop, Edit },
785                 { LFUN_CHANGE_REJECT, "change-reject", Noop, Edit },
786                 { LFUN_ALL_CHANGES_ACCEPT, "all-changes-accept", Noop, Edit },
787                 { LFUN_ALL_CHANGES_REJECT, "all-changes-reject", Noop, Edit },
788
789                 { LFUN_INSET_APPLY, "inset-apply", Noop, Edit },
790                 { LFUN_INSET_DISSOLVE, "inset-dissolve", Noop, Edit },
791                 { LFUN_INSET_INSERT, "inset-insert", Noop, Edit },
792                 { LFUN_INSET_MODIFY, "", Noop, Hidden },
793                 { LFUN_INSET_DIALOG_UPDATE, "", Noop, Hidden },
794                 { LFUN_INSET_SETTINGS, "inset-settings", ReadOnly, Edit },
795                 { LFUN_INSET_REFRESH, "", Noop, Hidden },
796                 { LFUN_NEXT_INSET_TOGGLE, "next-inset-toggle", ReadOnly, Edit },
797                 { LFUN_INSET_TOGGLE, "", ReadOnly, Hidden },
798                 { LFUN_ALL_INSETS_TOGGLE, "all-insets-toggle", ReadOnly, Edit },
799
800 /**
801  * \var lyx::kb_action lyx::LFUN_PARAGRAPH_PARAMS
802  * \li Action: Change paragraph settings
803  * \li Notion: Modifies the current paragraph, or currently selected paragraphs.
804                This function only modifies, and does not override, existing settings.
805                Note that the "leftindent" indent setting is deprecated.
806  * \li Syntax: paragraph-params [<INDENT>] [<SPACING>] [<ALIGN>] [<OTHERS>]
807  * \li Params: <INDENT>:  \\noindent|\\indent|\\indent-toggle|\\leftindent LENGTH\n
808                <SPACING>: \\paragraph_spacing default|single|onehalf|double|other\n
809                <ALIGN>:   \\align block|left|right|center|default\n
810                <OTHERS>:  \\labelwidthstring WIDTH|\\start_of_appendix\n
811  * \li Origin: rgh, Aug 15 2007
812  */
813                 { LFUN_PARAGRAPH_PARAMS, "paragraph-params", Noop, Edit },
814 /**
815  * \var lyx::kb_action lyx::LFUN_PARAGRAPH_PARAMS_APPLY
816  * \li Action: Change paragraph settings.
817  * \li Notion: Overwrite all nonspecified settings to the default ones.
818                Use paragraph-params lfun if you don't want to overwrite others settings.
819  * \li Syntax: paragraph-params-apply <INDENT> <SPACING> <ALIGN> <OTHERS>
820  * \li Params: For parameters see LFUN_PARAGRAPH_PARAMS
821  * \li Origin: leeming, 30 Mar 2004
822  */
823                 { LFUN_PARAGRAPH_PARAMS_APPLY, "paragraph-params-apply", Noop, Edit },
824                 { LFUN_PARAGRAPH_UPDATE, "", Noop, Hidden },
825
826                 { LFUN_FINISHED_FORWARD, "", ReadOnly, Hidden },
827                 { LFUN_FINISHED_BACKWARD, "", ReadOnly, Hidden },
828                 { LFUN_FINISHED_RIGHT, "", ReadOnly, Hidden },
829                 { LFUN_FINISHED_LEFT, "", ReadOnly, Hidden },
830
831                 { LFUN_LANGUAGE, "language", Noop, Edit },
832
833                 { LFUN_LABEL_GOTO, "label-goto", ReadOnly, Edit },
834                 { LFUN_LABEL_INSERT, "label-insert", Noop, Edit },
835                 { LFUN_REFERENCE_NEXT, "reference-next", ReadOnly, Edit },
836
837 /**
838  * \var lyx::kb_action lyx::LFUN_BOOKMARK_GOTO
839  * \li Action: Goto a bookmark
840  * \li Notion: Moves the cursor to the numbered bookmark, opening the file
841                if necessary. Note that bookmarsk are saved per-session, not
842                per file.
843  * \li Syntax: bookmark-goto <NUMBER>
844  * \li Params: <NUMBER>: the number of the bookmark to restore.
845  * \li Origin: Dekel, 27 January 2001
846  */
847                 { LFUN_BOOKMARK_GOTO, "bookmark-goto", NoBuffer, Edit },
848 /**
849  * \var lyx::kb_action lyx::LFUN_BOOKMARK_SAVE
850  * \li Action: Save a bookmark
851  * \li Notion: Saves a numbered bookmark to the sessions file. The number
852                must be between 1 and 9, inclusive. Note that bookmarks are
853                saved per-session, not per file.
854  * \li Syntax: bookmark-save <NUMBER>
855  * \li Params: <NUMBER>: the number of the bookmark to save.
856  * \li Origin: Dekel, 27 January 2001
857  */
858                 { LFUN_BOOKMARK_SAVE, "bookmark-save", ReadOnly, Edit },
859 /**
860  * \var lyx::kb_action lyx::LFUN_BOOKMARK_CLEAR
861  * \li Action: Clears the list of saved bookmarks
862  * \li Syntax: bookmark-clear
863  * \li Origin: bpeng, 31 October 2006
864  */
865                 { LFUN_BOOKMARK_CLEAR, "bookmark-clear", NoBuffer, Edit },
866
867                 { LFUN_HELP_OPEN, "help-open", NoBuffer | Argument, Buffer },
868 /**
869  * \var lyx::kb_action lyx::LFUN_LYX_QUIT
870  * \li Action: Terminates the current LyX instance
871  * \li Notion: Terminates the current LyX instance, asking whether to save
872                modified documents, etc.
873  * \li Syntax: lyx-quit
874  */
875                 { LFUN_LYX_QUIT, "lyx-quit", NoBuffer, Buffer },
876                 { LFUN_TOOLBAR_TOGGLE, "toolbar-toggle", NoBuffer, Buffer },
877                 { LFUN_MENU_OPEN, "menu-open", NoBuffer, Buffer },
878
879                 { LFUN_WINDOW_NEW, "window-new", NoBuffer, Buffer },
880                 { LFUN_WINDOW_CLOSE, "window-close", NoBuffer, Buffer },
881
882                 { LFUN_DIALOG_SHOW, "dialog-show", NoBuffer, Edit },
883                 { LFUN_DIALOG_SHOW_NEW_INSET, "dialog-show-new-inset", Noop, Edit },
884                 { LFUN_DIALOG_UPDATE, "dialog-update", NoBuffer, Edit },
885                 { LFUN_DIALOG_HIDE, "dialog-hide", NoBuffer, Edit },
886                 { LFUN_DIALOG_TOGGLE, "dialog-toggle", NoBuffer, Edit },
887                 { LFUN_DIALOG_DISCONNECT_INSET, "dialog-disconnect-inset", Noop, Edit },
888
889                 { LFUN_MOUSE_PRESS, "", ReadOnly, Hidden },
890                 { LFUN_MOUSE_MOTION, "", ReadOnly | SingleParUpdate, Hidden },
891                 { LFUN_MOUSE_RELEASE, "", ReadOnly, Hidden },
892                 { LFUN_MOUSE_DOUBLE, "", ReadOnly, Hidden },
893                 { LFUN_MOUSE_TRIPLE, "", ReadOnly, Hidden },
894
895                 { LFUN_KEYMAP_OFF, "keymap-off", ReadOnly, Edit },
896                 { LFUN_KEYMAP_PRIMARY, "keymap-primary", ReadOnly, Edit },
897                 { LFUN_KEYMAP_SECONDARY, "keymap-secondary", ReadOnly, Edit },
898                 { LFUN_KEYMAP_TOGGLE, "keymap-toggle", ReadOnly, Edit },
899
900                 { LFUN_MESSAGE, "message", NoBuffer, System },
901                 { LFUN_FLOAT_LIST, "float-list", Noop, Edit },
902                 { LFUN_ESCAPE, "escape", ReadOnly, Edit },
903
904                 { LFUN_SERVER_CHAR_AFTER, "server-char-after", ReadOnly, System },
905                 { LFUN_SERVER_GET_FONT, "server-get-font", ReadOnly, System },
906                 { LFUN_SERVER_GET_LAYOUT, "server-get-layout", ReadOnly, System },
907                 { LFUN_SERVER_GET_NAME, "server-get-name", ReadOnly, System },
908                 { LFUN_SERVER_GET_XY, "server-get-xy", ReadOnly, System },
909                 { LFUN_SERVER_GOTO_FILE_ROW, "server-goto-file-row", ReadOnly, System },
910                 { LFUN_SERVER_NOTIFY, "server-notify", ReadOnly, System },
911                 { LFUN_SERVER_SET_XY, "server-set-xy", ReadOnly, System },
912
913                 { LFUN_BUILD_PROGRAM, "build-program", ReadOnly, Buffer },
914
915 /**
916  * \var lyx::kb_action lyx::LFUN_BUFFER_AUTO_SAVE
917  * \li Action: Saves the current buffer to a temporary file
918  * \li Notion: Saves the current buffer to a file named "#filename#". This LFUN
919                is called automatically by LyX, to "autosave" the current buffer.
920         * \li Syntax: buffer-auto-save
921  */
922                 { LFUN_BUFFER_AUTO_SAVE, "buffer-auto-save", Noop, Buffer },
923                 { LFUN_BUFFER_CHILD_OPEN, "buffer-child-open", ReadOnly, Buffer },
924                 { LFUN_BUFFER_CHKTEX, "buffer-chktex", ReadOnly, Buffer },
925                 { LFUN_BUFFER_TOGGLE_COMPRESSION, "buffer-toggle-compression", Noop, Buffer },
926                 { LFUN_BUFFER_TOGGLE_EMBEDDING, "buffer-toggle-embedding", Noop, Buffer },
927 /**
928  * \var lyx::kb_action lyx::LFUN_BUFFER_CLOSE
929  * \li Action: Closes the current buffer
930  * \li Notion: Closes the current buffer, asking whether to save it, etc,
931                if the buffer has been modified.
932  * \li Syntax: buffer-close
933  */
934                 { LFUN_BUFFER_CLOSE, "buffer-close", ReadOnly, Buffer },
935                 { LFUN_BUFFER_EXPORT, "buffer-export", ReadOnly, Buffer },
936                 { LFUN_BUFFER_EXPORT_CUSTOM, "buffer-export-custom", ReadOnly, Buffer },
937                 { LFUN_BUFFER_PRINT, "buffer-print", ReadOnly, Buffer },
938                 { LFUN_BUFFER_IMPORT, "buffer-import", NoBuffer, Buffer },
939 /**
940  * \var lyx::kb_action lyx::LFUN_BUFFER_NEW
941  * \li Action: Creates a new buffer (that is, document)
942  * \li Syntax: buffer-new
943  */
944                 { LFUN_BUFFER_NEW, "buffer-new", NoBuffer, Buffer },
945                 { LFUN_BUFFER_NEW_TEMPLATE,"buffer-new-template", NoBuffer, Buffer },
946                 { LFUN_BUFFER_RELOAD, "buffer-reload", ReadOnly, Buffer },
947                 { LFUN_BUFFER_SWITCH, "buffer-switch", NoBuffer | ReadOnly, Buffer },
948                 { LFUN_BUFFER_TOGGLE_READ_ONLY, "buffer-toggle-read-only", ReadOnly, Buffer },
949                 { LFUN_BUFFER_UPDATE, "buffer-update", ReadOnly, Buffer },
950 /**
951  * \var lyx::kb_action lyx::LFUN_BUFFER_VIEW
952  * \li Action: Displays current buffer in chosen format
953  * \li Notion: Displays the contents of the current buffer in the chosen
954                format, for example, PDF or DVI. This runs the necessary
955                converter, calls the defined viewer, and so forth.
956  * \li Syntax: buffer-view <FORMAT>
957  * \li Params: <FORMAT>: The format to display, where this is one of the
958                          formats defined (in the current GUI) in the
959                          Tools>Preferences>File Formats dialog.
960  */
961                 { LFUN_BUFFER_VIEW, "buffer-view", ReadOnly, Buffer },
962 /**
963  * \var lyx::kb_action lyx::LFUN_BUFFER_WRITE
964  * \li Action: Saves the current buffer
965  * \li Notion: Saves the current buffer to disk, using the filename that
966                is already associated with the buffer, asking for one if
967                none is yet assigned.
968  * \li Syntax: buffer-write
969  */
970                 { LFUN_BUFFER_WRITE, "buffer-write", ReadOnly, Buffer },
971 /**
972  * \var lyx::kb_action lyx::LFUN_BUFFER_WRITE_AS
973  * \li Action: Rename and save current buffer.
974  * \li Syntax: buffer-write-as <FILENAME>
975  * \li Params: <FILENAME>: New name of the buffer/file. A relative path
976  *             is with respect to the original location of the buffer/file.
977  */
978                 { LFUN_BUFFER_WRITE_AS, "buffer-write-as", ReadOnly, Buffer },
979                 { LFUN_BUFFER_WRITE_ALL, "buffer-write-all", ReadOnly, Buffer },
980                 { LFUN_BUFFER_NEXT, "buffer-next", ReadOnly, Buffer },
981                 { LFUN_BUFFER_PREVIOUS, "buffer-previous", ReadOnly, Buffer },
982                 { LFUN_MASTER_BUFFER_UPDATE, "master-buffer-update", ReadOnly, Buffer },
983                 { LFUN_MASTER_BUFFER_VIEW, "master-buffer-view", ReadOnly, Buffer },
984                 { LFUN_BUFFER_LANGUAGE, "buffer-language", Noop, Buffer },
985                 { LFUN_BUFFER_SAVE_AS_DEFAULT, "buffer-save-as-default", Noop, Buffer },
986                 { LFUN_BUFFER_PARAMS_APPLY, "buffer-params-apply", Noop, Buffer },
987
988                 { LFUN_FILE_INSERT, "file-insert", Noop, Edit },
989                 { LFUN_FILE_INSERT_PLAINTEXT, "file-insert-plaintext", Noop, Edit },
990                 { LFUN_FILE_INSERT_PLAINTEXT_PARA, "file-insert-plaintext-para", Noop, Edit },
991                 { LFUN_FILE_NEW, "file-new", NoBuffer, Buffer },
992                 { LFUN_FILE_OPEN, "file-open", NoBuffer, Buffer },
993
994                 { LFUN_META_PREFIX, "meta-prefix", NoBuffer, System },
995
996 /**
997  * \var lyx::kb_action lyx::LFUN_CALL
998  * \li Action: Executes a command defined in a .def file.
999  * \li Notion: The definitions are by default read from lib/commands/default.def .
1000                A .def file allows to define a command with \\define "<NAME>" "<LFUN>"
1001                where <NAME> is the name of the new command and <LFUN> is the lfun code
1002                to be executed (see e.g. #LFUN_COMMAND_SEQUENCE).
1003                \\def_file "FileName" allows to include another .def file. \n
1004                This is particularly useful in connection with toolbar buttons:
1005                Since the name of the button image for this lfun is 
1006                lib/images/commands/<NAME>.png this is the way to assign an image
1007                to a complex command-sequence.
1008  * \li Syntax: call <NAME>
1009  * \li Params: <NAME>: Name of the command that must be called.
1010  * \li Origin: broider, 2 Oct 2007
1011  */
1012                 { LFUN_CALL, "call", NoBuffer, System },
1013                 { LFUN_CANCEL, "cancel", NoBuffer, System },
1014
1015                 { LFUN_COMMAND_EXECUTE, "command-execute", NoBuffer, Edit },
1016                 { LFUN_COMMAND_PREFIX, "command-prefix", NoBuffer, Hidden },
1017                 { LFUN_COMMAND_SEQUENCE, "command-sequence", NoBuffer, System },
1018
1019 /**
1020  * \var lyx::kb_action lyx::LFUN_PREFERENCES_SAVE
1021  * \li Action: Save user preferences.
1022  * \li Syntax: preferences-save
1023  * \li Origin: Lgb, 27 Nov 1999
1024  */
1025                 { LFUN_PREFERENCES_SAVE, "preferences-save", NoBuffer, System },
1026 /**
1027  * \var lyx::kb_action lyx::LFUN_RECONFIGURE
1028  * \li Action: Reconfigure the automatic settings.
1029  * \li Syntax: reconfigure
1030  * \li Origin: Asger, 14 Feb 1997
1031  */
1032                 { LFUN_RECONFIGURE, "reconfigure", NoBuffer, System },
1033                 { LFUN_LYXRC_APPLY, "lyxrc-apply", NoBuffer, System },
1034 /**
1035  * \var lyx::kb_action lyx::LFUN_TOGGLE_CURSOR_FOLLOWS_SCROLLBAR
1036  * \li Action: Determine whether keep cursor inside the editing window regardless
1037                the scrollbar movement.
1038  * \li Syntax: toggle-cursor-follows-scrollbar
1039  * \li Origin: ARRae, 2 Dec 1997
1040  */
1041                 { LFUN_TOGGLE_CURSOR_FOLLOWS_SCROLLBAR, "toggle-cursor-follows-scrollbar", ReadOnly, System },
1042 /**
1043  * \var lyx::kb_action lyx::LFUN_SET_COLOR
1044  * \li Action: Set the given LyX color to the color defined by the X11 name given.
1045  * \li Notion: A new color entry is created if the color is unknown.
1046                Color names can be stored as a part of user settings.
1047  * \li Syntax: set-color <LYX_NAME> <X11_NAME>
1048  * \li Origin: SLior, 11 Jun 2000
1049  */
1050                 { LFUN_SET_COLOR, "set-color", ReadOnly | NoBuffer, System },
1051 /**
1052  * \var lyx::kb_action lyx::LFUN_STATISTICS
1053  * \li Action: Count the statistics (number of words and characters)
1054                in the document or in the given selection.
1055  * \li Notion: Note that this function gives the number of words/chars written,
1056                not the number of characters which will be typeset.
1057  * \li Syntax: statistics
1058  * \li Origin: lasgouttes, Jan 27 2004; ps, Jan 8 2008
1059  */
1060                 { LFUN_STATISTICS, "statistics", ReadOnly, System },
1061
1062                 { LFUN_NOACTION, "", Noop, Hidden }
1063 #ifndef DOXYGEN_SHOULD_SKIP_THIS
1064         };
1065
1066         for (int i = 0; items[i].action != LFUN_NOACTION; ++i) {
1067                 newFunc(items[i].action, items[i].name, items[i].attrib, items[i].type);
1068         }
1069
1070         init = true;
1071 }
1072 #endif
1073
1074 LyXAction::LyXAction()
1075 {
1076         init();
1077 }
1078
1079
1080 // Returns an action tag from a string.
1081 FuncRequest LyXAction::lookupFunc(string const & func) const
1082 {
1083         string const func2 = trim(func);
1084
1085         if (func2.empty()) {
1086                 return FuncRequest(LFUN_NOACTION);
1087         }
1088
1089         string cmd;
1090         string const arg = split(func2, cmd, ' ');
1091
1092         func_map::const_iterator fit = lyx_func_map.find(cmd);
1093
1094         return fit != lyx_func_map.end() ? FuncRequest(fit->second, arg) : FuncRequest(LFUN_UNKNOWN_ACTION);
1095 }
1096
1097
1098 string const LyXAction::getActionName(kb_action action) const
1099 {
1100         info_map::const_iterator const it = lyx_info_map.find(action);
1101         return it != lyx_info_map.end() ? it->second.name : string();
1102 }
1103
1104
1105 LyXAction::func_type const LyXAction::getActionType(kb_action action) const
1106 {
1107         info_map::const_iterator const it = lyx_info_map.find(action);
1108         return it != lyx_info_map.end() ? it->second.type : Hidden;
1109 }
1110
1111
1112 bool LyXAction::funcHasFlag(kb_action action,
1113                             LyXAction::func_attrib flag) const
1114 {
1115         info_map::const_iterator ici = lyx_info_map.find(action);
1116
1117         if (ici == lyx_info_map.end()) {
1118                 LYXERR0("action: " << action << " is not known.");
1119                 BOOST_ASSERT(false);
1120         }
1121
1122         return ici->second.attrib & flag;
1123 }
1124
1125
1126 LyXAction::const_func_iterator LyXAction::func_begin() const
1127 {
1128         return lyx_func_map.begin();
1129 }
1130
1131
1132 LyXAction::const_func_iterator LyXAction::func_end() const
1133 {
1134         return lyx_func_map.end();
1135 }
1136
1137
1138 } // namespace lyx