diff --git a/CHANGELOG.md b/CHANGELOG.md index 8761a5a..033feef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Editor: ^B to toggle breakpoint on current line. * Editor: Show cursor all the time. * Breakpoints: Allow multiple filename:line entries for the --break-source option. +* Control: Add ^D to toggle record playback direction for RR, Undo, and gdb's Record. ## [2.6] - 2025-10-07 * Watchpoints: Fixed regression when adding commands to a watchpoint. diff --git a/src/SeerEditorWidgetAssembly.cpp b/src/SeerEditorWidgetAssembly.cpp index 5a385f7..fedf0c2 100644 --- a/src/SeerEditorWidgetAssembly.cpp +++ b/src/SeerEditorWidgetAssembly.cpp @@ -177,6 +177,10 @@ void SeerEditorWidgetAssembly::setKeySettings (const SeerKeySettings& settings) if (_keySettings.has("SearchTextPrev") == true) { _textSearchPrevShortcut->setKey(_keySettings.get("SearchTextPrev")._sequence); } + + if (_keySettings.has("ToggleBreakpoint") == true) { + _toggleBreakpointShortcut->setKey(_keySettings.get("ToggleBreakpoint")._sequence); + } } const SeerKeySettings& SeerEditorWidgetAssembly::keySettings () const { diff --git a/src/SeerEditorWidgetSource.cpp b/src/SeerEditorWidgetSource.cpp index 8797764..49a0beb 100644 --- a/src/SeerEditorWidgetSource.cpp +++ b/src/SeerEditorWidgetSource.cpp @@ -119,6 +119,10 @@ void SeerEditorWidgetSource::setKeySettings (const SeerKeySettings& settings) { if (_keySettings.has("AlternateDir") == true) { _alternateDirShortcut->setKey(_keySettings.get("AlternateDir")._sequence); } + + if (_keySettings.has("ToggleBreakpoint") == true) { + _toggleBreakpointShortcut->setKey(_keySettings.get("ToggleBreakpoint")._sequence); + } } const SeerKeySettings& SeerEditorWidgetSource::keySettings () const { diff --git a/src/SeerKeySettings.cpp b/src/SeerKeySettings.cpp index 10f95ac..37d271e 100644 --- a/src/SeerKeySettings.cpp +++ b/src/SeerKeySettings.cpp @@ -60,24 +60,25 @@ SeerKeySettings SeerKeySettings::populate () { SeerKeySettings keySettings; - keySettings.add("Run", SeerKeySetting("Run", QKeySequence::fromString("F1"), "Run the program again. Do not break in \"main\".")); - keySettings.add("Start", SeerKeySetting("Start", QKeySequence::fromString("F2"), "Run the program again. Break in \"main\".")); - keySettings.add("Continue", SeerKeySetting("Continue", QKeySequence::fromString("F8"), "Continue execution of the program.")); - keySettings.add("Next", SeerKeySetting("Next", QKeySequence::fromString("F5"), "Execute the next line. Step over functions.")); - keySettings.add("Step", SeerKeySetting("Step", QKeySequence::fromString("F6"), "Execute the next line. Step into functions.")); - keySettings.add("Nexti", SeerKeySetting("Nexti", QKeySequence::fromString("Ctrl+F5"), "Execute the next instruction. Step over functions.")); - keySettings.add("Stepi", SeerKeySetting("Stepi", QKeySequence::fromString("Ctrl+F6"), "Execute the next instruction. Step into functions.")); - keySettings.add("Finish", SeerKeySetting("Finish", QKeySequence::fromString("F7"), "Finish the current function.")); - keySettings.add("Interrupt", SeerKeySetting("Interrupt", QKeySequence::fromString("Ctrl+I"), "Interrupt the executing program.")); - keySettings.add("Debug", SeerKeySetting("Debug", QKeySequence::fromString("Alt+D"), "Open the debug dialog.")); - keySettings.add("Arguments", SeerKeySetting("Arguments", QKeySequence::fromString("Alt+A"), "Open the argument dialog.")); - keySettings.add("Quit", SeerKeySetting("Quit", QKeySequence::fromString("Alt+Q"), "Quit Seer.")); - keySettings.add("SearchText", SeerKeySetting("SearchText", QKeySequence::fromString("Ctrl+F"), "Seach for text in the code editor.")); - keySettings.add("SearchTextNext", SeerKeySetting("SearchTextNext", QKeySequence::fromString("Ctrl+G"), "Seach for next text in the code editor.")); - keySettings.add("SearchTextPrev", SeerKeySetting("SearchTextPrev", QKeySequence::fromString("Ctrl+Shift+G"), "Seach for previous text in the code editor.")); - keySettings.add("SearchLine", SeerKeySetting("SearchLine", QKeySequence::fromString("Ctrl+L"), "Seach for line number in the code editor.")); - keySettings.add("AlternateDir", SeerKeySetting("AlternateDir", QKeySequence::fromString("Ctrl+O"), "Look for source file in an alternate directory.")); - keySettings.add("ToggleBreakpoint", SeerKeySetting("ToggleBreakpoint", QKeySequence::fromString("Ctrl+B"), "Toggle the breakpoint status of current line.")); + keySettings.add("Run", SeerKeySetting("Run", QKeySequence::fromString("F1"), "Run the program again. Do not break in \"main\".")); + keySettings.add("Start", SeerKeySetting("Start", QKeySequence::fromString("F2"), "Run the program again. Break in \"main\".")); + keySettings.add("Continue", SeerKeySetting("Continue", QKeySequence::fromString("F8"), "Continue execution of the program.")); + keySettings.add("Next", SeerKeySetting("Next", QKeySequence::fromString("F5"), "Execute the next line. Step over functions.")); + keySettings.add("Step", SeerKeySetting("Step", QKeySequence::fromString("F6"), "Execute the next line. Step into functions.")); + keySettings.add("Nexti", SeerKeySetting("Nexti", QKeySequence::fromString("Ctrl+F5"), "Execute the next instruction. Step over functions.")); + keySettings.add("Stepi", SeerKeySetting("Stepi", QKeySequence::fromString("Ctrl+F6"), "Execute the next instruction. Step into functions.")); + keySettings.add("Finish", SeerKeySetting("Finish", QKeySequence::fromString("F7"), "Finish the current function.")); + keySettings.add("Interrupt", SeerKeySetting("Interrupt", QKeySequence::fromString("Ctrl+I"), "Interrupt the executing program.")); + keySettings.add("Debug", SeerKeySetting("Debug", QKeySequence::fromString("Alt+D"), "Open the debug dialog.")); + keySettings.add("Arguments", SeerKeySetting("Arguments", QKeySequence::fromString("Alt+A"), "Open the argument dialog.")); + keySettings.add("Quit", SeerKeySetting("Quit", QKeySequence::fromString("Alt+Q"), "Quit Seer.")); + keySettings.add("SearchText", SeerKeySetting("SearchText", QKeySequence::fromString("Ctrl+F"), "Seach for text in the code editor.")); + keySettings.add("SearchTextNext", SeerKeySetting("SearchTextNext", QKeySequence::fromString("Ctrl+G"), "Seach for next text in the code editor.")); + keySettings.add("SearchTextPrev", SeerKeySetting("SearchTextPrev", QKeySequence::fromString("Ctrl+Shift+G"), "Seach for previous text in the code editor.")); + keySettings.add("SearchLine", SeerKeySetting("SearchLine", QKeySequence::fromString("Ctrl+L"), "Seach for line number in the code editor.")); + keySettings.add("AlternateDir", SeerKeySetting("AlternateDir", QKeySequence::fromString("Ctrl+O"), "Look for source file in an alternate directory.")); + keySettings.add("ToggleBreakpoint", SeerKeySetting("ToggleBreakpoint", QKeySequence::fromString("Ctrl+B"), "Toggle the breakpoint status of current line.")); + keySettings.add("ToggleRecordDirection", SeerKeySetting("ToggleRecordDirection", QKeySequence::fromString("Ctrl+D"), "Toggle the record playback directory.")); return keySettings; } diff --git a/src/SeerMainWindow.cpp b/src/SeerMainWindow.cpp index 6e7745d..8d4a537 100644 --- a/src/SeerMainWindow.cpp +++ b/src/SeerMainWindow.cpp @@ -123,6 +123,9 @@ SeerMainWindow::SeerMainWindow(QWidget* parent) : QMainWindow(parent) { setKeySettings(SeerKeySettings::populate()); setProjectFilename(""); + // Set the default shotcut key to toggle record direction. + actionRecordDirection->setShortcut(QKeySequence::fromString("Ctrl+D")); + // // Set up signals/slots. // @@ -1808,6 +1811,15 @@ void SeerMainWindow::refreshShortCuts () { actionFileQuit->setShortcut(setting._sequence); } + if (_keySettings.has("ToggleRecordDirection")) { + + SeerKeySetting setting = _keySettings.get("ToggleRecordDirection"); + + actionRecordDirection->setText(QString("Direction") + " (" + setting._sequence.toString() + ")"); + actionRecordDirection->setShortcut(setting._sequence); + } + + // Notify the editor manager of changes. gdbWidget->editorManager()->setEditorKeySettings(keySettings()); } diff --git a/tests/hellofft/breakpoints.seer b/tests/hellofft/breakpoints.seer new file mode 100644 index 0000000..9d553e1 --- /dev/null +++ b/tests/hellofft/breakpoints.seer @@ -0,0 +1,3 @@ +break -source /nas/erniep/Development/seer/tests/hellofft/hellofft.c -line 22 +break -source /nas/erniep/Development/seer/tests/hellofft/hellofft.c -line 60 +break -source /nas/erniep/Development/seer/tests/hellofft/hellofft.c -line 98