26 #if defined (HAVE_CONFIG_H)
30 #if defined (HAVE_QSCINTILLA)
32 #include <Qsci/qscilexer.h>
35 #include <QKeySequence>
36 #include <QMessageBox>
40 #include <QVBoxLayout>
41 #if defined (HAVE_QSCI_QSCILEXEROCTAVE_H)
42 # define HAVE_LEXER_OCTAVE 1
43 # include <Qsci/qscilexeroctave.h>
44 #elif defined (HAVE_QSCI_QSCILEXERMATLAB_H)
45 # define HAVE_LEXER_MATLAB 1
46 # include <Qsci/qscilexermatlab.h>
48 #include <Qsci/qscicommandset.h>
49 #include <Qsci/qscilexerbash.h>
50 #include <Qsci/qscilexerbatch.h>
51 #include <Qsci/qscilexercpp.h>
52 #include <Qsci/qscilexerdiff.h>
53 #include <Qsci/qscilexerperl.h>
64 #include "builtin-defun-decls.h"
77 is_end (
const QString& candidate,
const QString& opening)
83 if (candidate ==
"until")
88 if (candidate ==
"end")
94 if (candidate ==
"catch" || candidate ==
"end_try_catch")
97 else if (opening ==
"unwind_protect")
99 if (candidate ==
"unwind_protect_cleanup"
100 || candidate ==
"end_unwind_protect")
103 else if (candidate ==
"end" + opening)
105 else if (opening ==
"if" && candidate ==
"else")
114 :
QsciScintilla (p), m_octave_qobj (oct_qobj), m_debug_mode (false),
115 m_word_at_cursor (), m_selection (), m_selection_replacement (),
116 m_selection_line (-1), m_selection_col (-1), m_indicator_id (1)
118 connect (
this, SIGNAL (textChanged (
void)),
121 connect (
this, SIGNAL (cursorPositionChanged (
int,
int)),
126 Qt::QueuedConnection);
129 QsciCommandSet *cmd_set = standardCommands ();
132 SendScintilla (SCI_SETBUFFEREDDRAW,
false);
134 #if defined (HAVE_QSCI_VERSION_2_6_0)
136 cmd_set->find (QsciCommand::SelectionCopy)->setKey (0);
137 cmd_set->find (QsciCommand::SelectionCut)->setKey (0);
138 cmd_set->find (QsciCommand::Paste)->setKey (0);
139 cmd_set->find (QsciCommand::SelectAll)->setKey (0);
140 cmd_set->find (QsciCommand::SelectionDuplicate)->setKey (0);
141 cmd_set->find (QsciCommand::LineTranspose)->setKey (0);
142 cmd_set->find (QsciCommand::Undo)->setKey (0);
143 cmd_set->find (QsciCommand::Redo)->setKey (0);
144 cmd_set->find (QsciCommand::SelectionUpperCase)->setKey (0);
145 cmd_set->find (QsciCommand::SelectionLowerCase)->setKey (0);
146 cmd_set->find (QsciCommand::ZoomIn)->setKey (0);
147 cmd_set->find (QsciCommand::ZoomOut)->setKey (0);
148 cmd_set->find (QsciCommand::DeleteWordLeft)->setKey (0);
149 cmd_set->find (QsciCommand::DeleteWordRight)->setKey (0);
150 cmd_set->find (QsciCommand::DeleteLineLeft)->setKey (0);
151 cmd_set->find (QsciCommand::DeleteLineRight)->setKey (0);
152 cmd_set->find (QsciCommand::LineDelete)->setKey (0);
153 cmd_set->find (QsciCommand::LineCut)->setKey (0);
154 cmd_set->find (QsciCommand::LineCopy)->setKey (0);
158 for (
int i = 0; i < cmd_list.length (); i++)
160 int cmd_key = cmd_list.at (i)->key ();
171 case Qt::Key_Z |
Qt::CTRL | Qt::SHIFT :
173 case Qt::Key_U |
Qt::CTRL | Qt::SHIFT :
176 case Qt::Key_Backspace |
Qt::CTRL | Qt::SHIFT :
177 case Qt::Key_Delete |
Qt::CTRL | Qt::SHIFT :
178 case Qt::Key_K | Qt::META :
181 case Qt::Key_L |
Qt::CTRL | Qt::SHIFT :
183 case Qt::Key_T |
Qt::CTRL | Qt::SHIFT :
184 cmd_list.at (i)->setKey (0);
189 #if defined (Q_OS_MAC)
193 for (
int i = 0; i < cmd_list_mac.length (); i++)
196 int key = cmd_list_mac.at (i)->key ();
198 if (
static_cast<int> (key | Qt::META) == key
199 &&
static_cast<int> (key |
Qt::CTRL) != key)
201 else if (
static_cast<int> (key |
Qt::CTRL) == key)
204 cmd_list_mac.at (i)->setKey (key);
207 key = cmd_list_mac.at (i)->alternateKey ();
209 if (
static_cast<int> (key | Qt::META) == key
210 &&
static_cast<int> (key |
Qt::CTRL) != key)
212 else if (
static_cast<int> (key |
Qt::CTRL) == key)
215 cmd_list_mac.at (i)->setAlternateKey (key);
221 m_indicator_id = indicatorDefine (QsciScintilla::StraightBoxIndicator);
235 QsciScintilla::setCursorPosition (line, col);
253 #if defined (HAVE_QSCI_VERSION_2_6_0)
254 QPoint global_pos, local_pos;
255 QMenu *context_menu = createStandardContextMenu ();
257 bool in_left_margin =
false;
260 if (e->reason () == QContextMenuEvent::Mouse)
263 global_pos = e->globalPos ();
264 local_pos = e->pos ();
265 if (e->x () < marginWidth (1) + marginWidth (2))
266 in_left_margin =
true;
272 QRect editor_rect = geometry ();
273 editor_rect.moveTopLeft
274 (parentWidget ()->mapToGlobal (editor_rect.topLeft ()));
275 if (! editor_rect.contains (global_pos))
276 global_pos = editor_rect.topLeft ();
279 # if defined (HAVE_QSCI_VERSION_2_6_0)
280 if (! in_left_margin)
287 context_menu->addSeparator ();
291 QString lexer_name =
lexer ()->lexer ();
292 if (lexer_name ==
"octave" || lexer_name ==
"matlab")
299 context_menu->addAction (tr (
"Documentation on")
307 # if defined (HAVE_QSCI_VERSION_2_6_0)
313 for (
auto *a : all_actions)
314 context_menu->removeAction (a);
317 = context_menu->addAction (tr (
"dbstop if ..."),
this,
319 act->setData (local_pos);
324 context_menu->exec (global_pos);
328 octave_unused_parameter (e);
352 if (hasSelectedText ())
365 long position = SendScintilla (SCI_GETCURRENTPOS);
366 long point_x = SendScintilla (SCI_POINTXFROMPOSITION, 0, position);
367 long point_y = SendScintilla (SCI_POINTYFROMPOSITION, 0, position);
368 *local_pos = QPoint (point_x, point_y);
369 *global_pos = mapToGlobal (*local_pos);
375 QPoint global_pos, local_pos;
378 QString lexer_name =
lexer ()->lexer ();
379 return ((lexer_name ==
"octave" || lexer_name ==
"matlab")
386 int end_pos = text ().length ();
387 int end_line, end_col;
388 lineIndexFromPosition (end_pos, &end_line, &end_col);
398 case QsciScintilla::EolWindows:
400 case QsciScintilla::EolMac:
402 case QsciScintilla::EolUnix:
414 *pos = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS);
415 *line = SendScintilla (QsciScintillaBase::SCI_LINEFROMPOSITION, *pos);
416 *col = SendScintilla (QsciScintillaBase::SCI_GETCOLUMN, *pos);
422 int lexer = SendScintilla (SCI_GETLEXER);
426 #if defined (HAVE_LEXER_OCTAVE) || defined (HAVE_LEXER_MATLAB)
427 #if defined (HAVE_LEXER_OCTAVE)
472 return QStringList (
"#");
475 return QStringList (
"//");
478 return QStringList (
"REM ");
481 return QStringList (
"%");
490 position = SendScintilla (QsciScintillaBase::SCI_GETCURRENTPOS) - 2;
494 return SendScintilla (QsciScintillaBase::SCI_GETSTYLEAT, position);
500 int lexer = SendScintilla (QsciScintillaBase::SCI_GETLEXER);
507 || style == QsciLexerCPP::CommentLineDoc)
509 || style == QsciLexerCPP::CommentDoc
510 || style == QsciLexerCPP::CommentDocKeyword
511 || style == QsciLexerCPP::CommentDocKeywordError));
513 #if defined (HAVE_LEXER_MATLAB)
517 #if defined (HAVE_LEXER_OCTAVE)
541 int line,
int ind_char_width)
543 QString prevline = text (line);
545 QRegExp bkey = QRegExp (
"^[\t ]*(if|for|while|switch"
546 "|do|function|properties|events|classdef"
547 "|unwind_protect|try"
556 QRegExp ekey = QRegExp (
"(?:(?:['\"][^'\"]*['\"])?[^%#]*)*"
557 "(\\w+)[ \t;\r\n]*(?:[%#].*)?$");
559 int bpos = bkey.indexIn (prevline, 0);
567 epos = ekey.indexIn (prevline, bpos);
568 QString first_word = bkey.cap(1);
569 bool inline_end = (epos > -1) &&
is_end (ekey.cap(1), first_word);
571 if (do_smart_indent && ! inline_end)
580 && ! first_word.contains (QRegExp (
"(?:case|otherwise|unwind_protect_cleanup)")))
583 auto_close (do_auto_close, line, prevline, first_word);
589 QRegExp mkey = QRegExp (
"^[\t ]*(?:else|elseif|catch|unwind_protect_cleanup)"
591 if (prevline.contains (mkey))
593 int prev_ind = indentation (line-1);
594 int act_ind = indentation (line);
596 if (prev_ind == act_ind)
598 else if (prev_ind > act_ind)
600 setIndentation (line+1, prev_ind);
606 QRegExp case_key = QRegExp (
"^[\t ]*(?:case|otherwise)[\r]?[\t #%\n]");
607 if (prevline.contains (case_key) && do_smart_indent)
609 QString last_line = text (line-1);
610 int prev_ind = indentation (line-1);
611 int act_ind = indentation (line);
613 if (last_line.contains (QRegExp (
"^[\t ]*switch")))
616 act_ind = indentation (line+1);
620 if (prev_ind == act_ind)
622 else if (prev_ind > act_ind)
626 setIndentation (line+1, act_ind);
630 ekey = QRegExp (
"^[\t ]*(?:end|endif|endfor|endwhile|until|endfunction"
631 "|endswitch|end_try_catch|end_unwind_protect)[\r]?[\t #%\n(;]");
632 if (prevline.contains (ekey))
634 if (indentation (line-1) <= indentation (line))
638 if (prevline.contains (
"endswitch"))
655 QRegExp blank_line_regexp = QRegExp (
"^[\t ]*$");
658 QRegExp end_word_regexp
659 = QRegExp (
"(?:(?:['\"][^'\"]*['\"])?[^%#]*)*"
660 "(?:end\\w*)[\r\n\t ;]*(?:[%#].*)?$");
662 QRegExp begin_block_regexp
663 = QRegExp (
"^[\t ]*(?:if|elseif|else"
664 "|for|while|do|parfor"
665 "|switch|case|otherwise"
667 "|classdef|properties|events|enumeration|methods"
668 "|unwind_protect|unwind_protect_cleanup|try|catch)"
671 QRegExp mid_block_regexp
672 = QRegExp (
"^[\t ]*(?:elseif|else"
673 "|unwind_protect_cleanup|catch)"
676 QRegExp end_block_regexp
677 = QRegExp (
"^[\t ]*(?:end"
678 "|end(for|function|if|parfor|switch|while"
679 "|classdef|enumeration|events|methods|properties)"
680 "|end_(try_catch|unwind_protect)"
684 QRegExp case_block_regexp
685 = QRegExp (
"^[\t ]*(?:case|otherwise)"
688 int indent_column = -1;
689 int indent_increment = indentationWidth ();
690 bool in_switch =
false;
692 for (
int line = lineFrom-1; line >= 0; line--)
694 QString line_text = text (line);
696 if (blank_line_regexp.indexIn (line_text) < 0)
703 indent_column = indentation (line);
705 if (begin_block_regexp.indexIn (line_text) > -1)
707 indent_column += indent_increment;
708 if (line_text.contains (
"switch"))
716 if (indent_column < 0)
717 indent_column = indentation (lineFrom);
720 for (
int line = lineFrom; line <= lineTo; line++)
722 QString line_text = text (line);
724 if (end_block_regexp.indexIn (line_text) > -1)
726 indent_column -= indent_increment;
727 if (line_text.contains (
"endswitch"))
731 indent_column -= indent_increment;
736 if (mid_block_regexp.indexIn (line_text) > -1)
737 indent_column -= indent_increment;
739 if (case_block_regexp.indexIn (line_text) > -1)
741 if (case_block_regexp.indexIn (prev_line) < 0
742 && !prev_line.contains(
"switch"))
743 indent_column -= indent_increment;
747 setIndentation (line, indent_column);
749 int bpos = begin_block_regexp.indexIn (line_text);
753 int epos = end_word_regexp.indexIn (line_text, bpos);
755 indent_column += indent_increment;
756 if (line_text.contains (
"switch"))
760 if (blank_line_regexp.indexIn (line_text) < 0)
761 prev_line = line_text;
778 QToolTip::hideText ();
818 QMessageBox::critical (
this, tr (
"Octave Editor"),
819 tr (
"Creating temporary files failed.\n"
820 "Make sure you have write access to temp. directory\n"
822 "\"Run Selection\" requires temporary files.").arg (QDir::tempPath ()));
831 QString code = QString ();
832 QString hist = QString ();
835 QStringList lines = selectedText ().split (QRegExp (
"[\r\n]"),
836 #
if defined (HAVE_QT_SPLITBEHAVIOR_ENUM)
839 QString::SkipEmptyParts);
841 for (
int i = 0; i < lines.count (); i++)
843 QString line = lines.at (i);
844 if (line.trimmed ().isEmpty ())
846 QString line_escaped = line;
847 line_escaped.replace (QString (
"'"), QString (
"''"));
848 QString line_history = line;
851 QString next_bp_quiet;
852 QString next_bp_quiet_reset;
853 if (line.contains (
"keyboard"))
857 next_bp_quiet =
"__db_next_breakpoint_quiet__;\n";
858 next_bp_quiet_reset =
"\n__db_next_breakpoint_quiet__(false);";
862 code += next_bp_quiet + line + next_bp_quiet_reset +
"\n";
863 hist += line_history +
"\n";
869 QPointer<QTemporaryFile> tmp_file
872 bool tmp = (tmp_file && tmp_file->open ());
883 QPointer<QTemporaryFile> tmp_hist
886 tmp = (tmp_hist && tmp_hist->open ());
902 if (tmp_hist.isNull ())
905 std::string opt =
"-r";
906 std::string path = tmp_hist->fileName ().toStdString ();
920 QPointer<octave_qscintilla> this_oq (
this);
931 if (this_oq.isNull ())
934 std::string file = tmp_file->fileName ().toStdString ();
942 bool dbg = ovl_dbg(0).bool_value ();
945 ovl_auto_repeat = Fauto_repeat_debug_command (interp,
ovl (
false), 1);
946 bool auto_repeat = ovl_auto_repeat(0).bool_value ();
960 std::list<frame_info> stack = ee.stack_info ();
965 size_t max_stack_size = 1;
968 if (stack.size () <= max_stack_size)
970 QRegExp rx (
"source: error sourcing file [^\n]*$");
971 if (new_msg.contains (rx))
974 new_msg.replace (rx,
"error sourcing selected code");
982 rx_list <<
"near line (\\d+),[^\n]*\n";
983 rx_list <<
"near line (\\d+),[^\n]*$";
985 QStringList replace_list;
986 replace_list <<
"\n";
989 for (
int i = 0; i < rx_list.length (); i++)
992 rx = QRegExp (rx_list.at (i));
993 pos = rx.indexIn (new_msg, pos);
996 err_line = rx.cap (1).toInt ();
997 new_msg = new_msg.replace (rx, replace_list.at (i));
1005 if (stack.size () > 0)
1007 if (dbg && (stack.size () > 0))
1017 new_msg.toStdString (), stack);
1041 QTemporaryFile* tmp_file, QTemporaryFile* tmp_hist,
1042 bool dbg,
bool auto_repeat)
1061 Fauto_repeat_debug_command (interp,
ovl (auto_repeat));
1070 #if defined (HAVE_QSCI_VERSION_2_6_0)
1071 QAction *action = qobject_cast<QAction *>(sender ());
1072 QPoint local_pos = action->data ().value<QPoint> ();
1075 int margins = marginWidth (1) + marginWidth (2) + marginWidth (3);
1076 local_pos = QPoint (margins + 1, local_pos.y ());
1084 #if defined (HAVE_QSCI_VERSION_2_6_0)
1087 octave_unused_parameter (local_pos);
1093 emit
status_update (isUndoAvailable (), isRedoAvailable ());
1111 emit
status_update (isUndoAvailable (), isRedoAvailable ());
1113 QsciScintilla::focusInEvent (focusEvent);
1123 QKeySequence keyseq = Qt::SHIFT + Qt::Key_Return;
1125 QString msg = (tr (
"Press '%1' to replace all occurrences of '%2' with '%3'.")
1126 . arg (keyseq.toString ())
1135 QFontMetrics ttfm (QToolTip::font ());
1140 global_pos += QPoint (2*ttfm.maxWidth (), -3*ttfm.height ());
1142 QToolTip::showText (global_pos, msg);
1146 bool re,
bool cs,
bool wo)
1149 int pos, line, col, nline, ncol;
1153 int first_line = firstVisibleLine ();
1156 bool find_result_available = findFirst (o_str, re, cs, wo,
1160 while (find_result_available)
1167 find_result_available = findFirst (o_str, re, cs, wo,
1168 false,
true, nline, ncol);
1173 setFirstVisibleLine (first_line);
1177 if (line == lines () - 1)
1179 const int col_max = text (line).length () - eol_len;
1190 QHelpEvent *help_e =
static_cast<QHelpEvent *
>(e);
1191 QString variable = wordAtPoint (help_e->pos());
1192 QStringList symbol_names
1194 int symbol_idx = symbol_names.indexOf (variable);
1195 if (symbol_idx > -1)
1197 QStringList symbol_values
1199 QToolTip::showText (help_e->globalPos(), variable
1200 +
" = " + symbol_values.at (symbol_idx));
1204 QToolTip::hideText();
1211 return QsciScintilla::event(e);
1217 QsciScintilla::keyPressEvent (key_event);
1220 int key = key_event->key ();
1221 Qt::KeyboardModifiers modifiers = key_event->modifiers ();
1223 if (key == Qt::Key_Return && modifiers == Qt::ShiftModifier)
1240 QString text = key_event->text ();
1242 bool cancel_replacement =
false;
1244 if (key == Qt::Key_Backspace)
1247 cancel_replacement =
true;
1251 else if (key == Qt::Key_Delete || key == Qt::Key_Escape)
1252 cancel_replacement =
true;
1253 else if (! text.isEmpty ())
1255 else if (modifiers != Qt::ShiftModifier)
1256 cancel_replacement =
true;
1260 QsciScintilla::keyPressEvent (key_event);
1262 if (cancel_replacement)
1272 const QString& line, QString& first_word)
1279 bool autofill_simple_end = (auto_endif == 2);
1281 std::size_t start = line.toStdString ().find_first_not_of (
" \t");
1286 if (linenr < lines () - 1)
1290 std::size_t next_start;
1295 next_line = text (linenr + offset++);
1296 next_start = next_line.toStdString ().find_first_not_of (
" \t\n");
1298 while (linenr + offset < lines ()
1299 && next_start == std::string::npos);
1301 if (next_start == std::string::npos)
1303 if (start == 0 && next_start == 0)
1305 if (next_start > start)
1307 if (next_start == start)
1309 QRegExp rx_start = QRegExp (R
"((\w+))");
1310 int tmp = rx_start.indexIn (next_line, start);
1311 if (tmp != -1 &&
is_end (rx_start.cap(1), first_word))
1321 if (linenr + 2 == lines ())
1322 insertAt (QString (
"\n"), linenr + 2, 0);
1325 if (first_word ==
"try")
1326 insertAt (QString (start,
' ')
1327 + (autofill_simple_end ?
"end\n" :
"end_try_catch\n"),
1329 else if (first_word ==
"unwind_protect")
1330 insertAt (QString (start,
' ')
1331 + (autofill_simple_end ?
"end\n" :
"end_unwind_protect\n"),
1335 if (first_word ==
"do")
1336 next_line =
"until\n";
1337 else if (first_word ==
"try")
1338 next_line =
"catch\n";
1339 else if (first_word ==
"unwind_protect")
1340 next_line =
"unwind_protect_cleanup\n";
1341 else if (autofill_simple_end)
1342 next_line =
"end\n";
1345 if (first_word ==
"unwind_protect")
1346 first_word =
'_' + first_word;
1347 next_line =
"end" + first_word +
"\n";
1351 insertAt (next_line, linenr + 2, 0);
1352 setIndentation (linenr + 2, indentation (linenr));
1360 if (!e->mimeData ()->hasUrls ())
1362 QsciScintilla::dragEnterEvent (e);
Base class for Octave interfaces that use Qt.
resource_manager & get_resource_manager(void)
void show_documentation_window(const QString &file)
workspace_model * get_workspace_model(void)
static void replace_line(const std::string &text, bool clear_undo=true)
static void redisplay(void)
static std::string get_current_line(void)
static void set_initial_input(const std::string &text)
static bool erase_empty_line(bool flag)
static void accept_line(void)
static void interrupt_event_loop(bool flag=true)
The documentation main class derived from QSplitter.
void source_file(const std::string &file_name, const std::string &context="", bool verbose=false, bool require_file=true)
void get_current_position(int *pos, int *line, int *col)
bool get_actual_word(void)
void contextmenu_edit(bool)
void contextmenu_break_once(const QPoint &)
void ctx_menu_run_finished_signal(bool, int, QTemporaryFile *, QTemporaryFile *, bool, bool)
void show_replace_action_tooltip(void)
void auto_close(int auto_endif, int l, const QString &line, QString &first_word)
void ctx_menu_run_finished(bool, int, QTemporaryFile *, QTemporaryFile *, bool, bool)
octave_qscintilla(QWidget *p, base_qobject &oct_qobj)
void smart_indent(bool do_smart_indent, int do_auto_close, int line, int ind_char_width)
void context_menu_break_once(int)
void context_help_doc(bool)
void focus_console_after_command_signal(void)
void set_word_selection(const QString &word=QString())
void show_selection_markers(int l1, int c1, int l2, int c2)
void contextmenu_break_condition(bool)
void context_menu_break_condition_signal(int)
void contextmenu_help(bool)
void smart_indent_line_or_selected_text(int lineFrom, int lineTo)
base_qobject & m_octave_qobj
void cursor_position_changed(int, int)
void dragEnterEvent(QDragEnterEvent *e)
virtual void setCursorPosition(int line, int col)
virtual void contextMenuEvent(QContextMenuEvent *e)
void status_update(bool, bool)
void contextmenu_help_doc(bool)
void contextmenu_doc(bool)
void execute_command_in_terminal_signal(const QString &)
void context_menu_edit_signal(const QString &)
QString m_selection_replacement
void set_selection_marker_color(const QColor &c)
void focusInEvent(QFocusEvent *focusEvent)
void handle_exit_debug_mode(void)
void interpreter_event(const fcn_callback &fcn)
void clear_selection_markers(void)
void handle_enter_debug_mode(void)
void get_global_textcursor_pos(QPoint *global_pos, QPoint *local_pos)
void contextmenu_run(bool)
void create_context_menu_signal(QMenu *)
QStringList comment_string(bool comment=true)
int get_style(int pos=-1)
void contextmenu_run_temp_error(void)
int is_style_comment(int pos=-1)
void keyPressEvent(QKeyEvent *e)
void replace_all(const QString &o_str, const QString &n_str, bool re, bool cs, bool wo)
void update_rowcol_indicator_signal(int line, int col)
QPointer< QTemporaryFile > create_tmp_file(const QString &extension=QString(), const QString &contents=QString())
gui_settings * get_settings(void) const
void remove_tmp_file(QPointer< QTemporaryFile > tmp_file)
QStringList get_symbol_names(void) const
QStringList get_symbol_values(void) const
OCTAVE_BEGIN_NAMESPACE(octave) static octave_value daspk_fcn
OCTAVE_EXPORT octave_value_list Fisdebugmode(octave::interpreter &interp, const octave_value_list &args, int)
const gui_pref ed_comment_str_old("editor/octave_comment_string", QVariant(0))
const gui_pref ed_uncomment_str("editor/oct_uncomment_str", QVariant(1+2+4+8))
const gui_pref ed_show_dbg_file("editor/show_dbg_file", QVariant(true))
const QStringList ed_comment_strings
const gui_pref ed_comment_str("editor/oct_comment_str", QVariant(0))
const int ed_comment_strings_count
const Qt::KeyboardModifier CTRL
QString fromStdString(const std::string &s)
OCTAVE_EXPORT octave_value_list Fhistory(octave::interpreter &interp, const octave_value_list &args, int nargout)
static bool is_end(const QString &candidate, const QString &opening)
octave_value_list ovl(const OV_Args &... args)
Construct an octave_value_list with less typing.