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