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