multiple GNOME terminals in one window
This report summarizes scanner evidence for gnome-terminator/terminator, a Python project with 2,684 GitHub stars. SynthScan examined 18,823 lines of code across 82 source files, recording 289 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 17.8 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 203 finding(s).
Are imports declared and package/API names verified? 28 finding(s).
Are wrappers, guards, and repeated structures necessary? 193 finding(s).
Which changes need focused human review? 289 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 289 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_window_title.py | 44 | def test_background_terminal_cannot_override_window_title(): | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 21 | def detect_close_message_dialog(prefs_editor, message_dialog_token): | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 51 | def test_non_empty_default_keybinding_accels_are_distinct(): | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 84 | def test_message_dialog_is_shown_on_duplicate_accel_assignment( | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 132 | def test_duplicate_accels_not_possible_to_set(accel_params): | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 222 | def test_keybinding_edit_produce_expected_accels( | CODE |
| LOW | tests/test_prefseditor_keybindings.py | 271 | def test_keybinding_successfully_reassigned_after_clearing(accel_params): | CODE |
| LOW | tests/test_terminal_popup_menu.py | 66 | def test_close_terminal_closes_after_confirmation_accepts(): | CODE |
| LOW | tests/test_terminal_popup_menu.py | 78 | def test_close_terminal_keeps_terminal_open_when_confirmation_rejects(): | CODE |
| LOW | tests/test_terminal_popup_menu.py | 89 | def test_close_terminal_finds_confirmation_container_above_parent_widget(): | CODE |
| LOW | terminatorlib/config.py | 394 | def connect_gsetting_callbacks(self): | CODE |
| LOW | terminatorlib/config.py | 451 | def on_gsettings_change_event(self, settings, key): | CODE |
| LOW | terminatorlib/config.py | 777 | def restore_config_with_suffix(self, suffix): | CODE |
| LOW⚡ | terminatorlib/config.py | 796 | def remove_config_with_suffix(self, suffix): | CODE |
| LOW | terminatorlib/window.py | 388 | def apply_window_decoration_style(self, style): | CODE |
| LOW | terminatorlib/window.py | 824 | def deferred_set_rough_geometry_hints(self): | CODE |
| LOW | terminatorlib/window.py | 832 | def do_deferred_set_rough_geometry_hints(self): | CODE |
| LOW | terminatorlib/terminal.py | 247 | def switch_to_previous_profile(self): | CODE |
| LOW | terminatorlib/terminal.py | 705 | def do_autocleangroups_toggle(self): | CODE |
| LOW | terminatorlib/terminal.py | 1485 | def ensure_visible_and_focussed(self): | CODE |
| LOW | terminatorlib/terminal.py | 1550 | def deferred_on_vte_size_allocate(self, widget, allocation): | CODE |
| LOW | terminatorlib/terminal.py | 1558 | def do_deferred_on_vte_size_allocate(self, widget, allocation): | CODE |
| LOW | terminatorlib/terminal.py | 2305 | def key_preferences_keybindings(self): | CODE |
| LOW | terminatorlib/terminator.py | 149 | def deregister_launcher_window(self, window): | CODE |
| LOW | terminatorlib/ipc.py | 102 | def toggle_visibility_cmdline(self,options=dbus.Dictionary): | CODE |
| LOW | terminatorlib/ipc.py | 357 | def toggle_visibility_cmdline(session,options): | CODE |
| LOW | terminatorlib/util.py | 375 | def update_config_to_cell_height(filename): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 904 | def on_detachable_tabs_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 908 | def on_disable_mousewheel_zoom_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 913 | def on_winbordercheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 918 | def on_extrastylingcheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 923 | def on_window_decoration_style_combo_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 938 | def on_hidefromtaskbcheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 943 | def on_alwaysontopcheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 948 | def on_hideonlosefocuscheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 958 | def on_title_hide_sizetextcheck_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 963 | def on_title_at_bottom_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 968 | def on_new_tab_after_current_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 973 | def on_always_split_with_profile_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 978 | def on_allow_bold_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 988 | def on_copy_on_selection_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 993 | def on_putty_paste_style_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 998 | def on_putty_paste_style_source_clipboard_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1010 | def on_clear_select_on_copy_toggled(self,widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1015 | def on_disable_mouse_paste_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1025 | def on_icon_bell_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1030 | def on_visual_bell_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1035 | def on_audible_bell_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1040 | def on_urgent_bell_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1045 | def on_login_shell_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1050 | def on_scroll_on_keystroke_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1055 | def on_scroll_on_output_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1060 | def on_delete_binding_combobox_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1160 | def on_darken_background_scale_value_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1168 | def on_background_blur_checkbutton_toggled(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1173 | def on_palette_combobox_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1356 | def on_custom_url_handler_entry_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1361 | def on_custom_command_entry_changed(self, widget): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1366 | def on_cursor_color_default_checkbutton_toggled(self, checkbutton): | CODE |
| LOW⚡ | terminatorlib/prefseditor.py | 1382 | def on_cursor_fg_color_color_set(self, widget): | CODE |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | terminatorlib/debugserver.py | 163 | except: | CODE |
| HIGH | terminatorlib/searchbar.py | 144 | except TypeError: | CODE |
| HIGH | terminatorlib/window.py | 141 | except (KeyError, NameError): | CODE |
| HIGH | terminatorlib/terminal.py | 1719 | except AttributeError: | CODE |
| HIGH | terminatorlib/terminal.py | 264 | except: | CODE |
| HIGH | terminatorlib/terminal.py | 357 | except GLib.Error: | CODE |
| HIGH | terminatorlib/terminal.py | 781 | except: | CODE |
| HIGH | terminatorlib/util.py | 80 | except IOError: | CODE |
| HIGH | terminatorlib/util.py | 73 | except IOError: | CODE |
| HIGH | terminatorlib/prefseditor.py | 533 | except KeymapError: | CODE |
| HIGH | terminatorlib/container.py | 131 | except TypeError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 61 | except Exception as e: | CODE |
| LOW | terminatorlib/config.py | 678 | except Exception as ex: | CODE |
| LOW | terminatorlib/config.py | 691 | except Exception as ex: | CODE |
| LOW | terminatorlib/config.py | 773 | except Exception as ex: | CODE |
| LOW⚡ | terminatorlib/config.py | 792 | except Exception as ex: | CODE |
| LOW⚡ | terminatorlib/config.py | 803 | except Exception as ex: | CODE |
| LOW | terminatorlib/config.py | 879 | except Exception as ex: | CODE |
| MEDIUM | terminatorlib/config.py | 756 | def save_config_with_suffix(self, suffix): | CODE |
| MEDIUM | terminatorlib/config.py | 777 | def restore_config_with_suffix(self, suffix): | CODE |
| MEDIUM | terminatorlib/config.py | 796 | def remove_config_with_suffix(self, suffix): | CODE |
| LOW | terminatorlib/configjson.py | 126 | except Exception as ex: | CODE |
| LOW | terminatorlib/configjson.py | 138 | except Exception as ex: | CODE |
| LOW | terminatorlib/configjson.py | 154 | except Exception as ex: | CODE |
| MEDIUM | terminatorlib/configjson.py | 111 | def get_layout(self, layoutjson): | CODE |
| MEDIUM | terminatorlib/configjson.py | 130 | def get_profile(self, profilejson, baseprofile): | CODE |
| LOW | terminatorlib/window.py | 474 | except Exception as e: | CODE |
| LOW | terminatorlib/window.py | 551 | except Exception as e: | CODE |
| MEDIUM | terminatorlib/terminal.py | 208 | def set_background_image(self,image): | CODE |
| LOW | terminatorlib/terminal.py | 214 | except Exception as e: | CODE |
| LOW | terminatorlib/terminal.py | 279 | except Exception as ex: | CODE |
| LOW | terminatorlib/terminal.py | 434 | except Exception as ex: | CODE |
| LOW | terminatorlib/terminal.py | 1799 | except Exception as ex: | CODE |
| LOW | terminatorlib/ipc.py | 55 | except Exception as e: | CODE |
| LOW | terminatorlib/util.py | 404 | except Exception as ex: | CODE |
| LOW | terminatorlib/layoutlauncher.py | 41 | except Exception as ex: | CODE |
| LOW | terminatorlib/prefseditor.py | 215 | except Exception as ex: | CODE |
| LOW | terminatorlib/prefseditor.py | 238 | except Exception as e: | CODE |
| LOW | terminatorlib/terminal_popup_menu.py | 128 | except Exception: | CODE |
| LOW | terminatorlib/terminal_popup_menu.py | 401 | except Exception as ex: | CODE |
| LOW | terminatorlib/plugin.py | 115 | except Exception as ex: | CODE |
| LOW | terminatorlib/plugins/remote.py | 175 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 212 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 243 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 259 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 388 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 502 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/remote.py | 642 | except Exception as e: | CODE |
| MEDIUM | terminatorlib/plugins/remote.py | 499 | def get_as_bool(config, key): | CODE |
| LOW | terminatorlib/plugins/custom_commands.py | 135 | except Exception as ex: | CODE |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 41 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 52 | except Exception as e: | CODE |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 63 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | setup.py | 41 | CODE | |
| LOW | setup.py | 106 | CODE | |
| LOW | terminatorlib/config.py | 660 | CODE | |
| LOW | terminatorlib/config.py | 882 | CODE | |
| LOW | terminatorlib/config.py | 907 | CODE | |
| LOW | terminatorlib/window.py | 209 | CODE | |
| LOW | terminatorlib/window.py | 1053 | CODE | |
| LOW | terminatorlib/window.py | 1139 | CODE | |
| LOW | terminatorlib/terminal.py | 369 | CODE | |
| LOW | terminatorlib/terminal.py | 709 | CODE | |
| LOW | terminatorlib/terminal.py | 1018 | CODE | |
| LOW | terminatorlib/terminal.py | 1065 | CODE | |
| LOW | terminatorlib/terminal.py | 1108 | CODE | |
| LOW | terminatorlib/terminal.py | 1178 | CODE | |
| LOW | terminatorlib/terminal.py | 1245 | CODE | |
| LOW | terminatorlib/terminal.py | 1378 | CODE | |
| LOW | terminatorlib/terminal.py | 1654 | CODE | |
| LOW | terminatorlib/terminal.py | 1771 | CODE | |
| LOW | terminatorlib/terminator.py | 216 | CODE | |
| LOW | terminatorlib/terminator.py | 311 | CODE | |
| LOW | terminatorlib/terminator.py | 368 | CODE | |
| LOW | terminatorlib/terminator.py | 546 | CODE | |
| LOW | terminatorlib/ipc.py | 166 | CODE | |
| LOW | terminatorlib/ipc.py | 213 | CODE | |
| LOW | terminatorlib/keybindings.py | 64 | CODE | |
| LOW | terminatorlib/util.py | 100 | CODE | |
| LOW | terminatorlib/util.py | 148 | CODE | |
| LOW | terminatorlib/util.py | 243 | CODE | |
| LOW | terminatorlib/util.py | 263 | CODE | |
| LOW | terminatorlib/util.py | 279 | CODE | |
| LOW | terminatorlib/util.py | 303 | CODE | |
| LOW | terminatorlib/paned.py | 160 | CODE | |
| LOW | terminatorlib/paned.py | 203 | CODE | |
| LOW | terminatorlib/paned.py | 275 | CODE | |
| LOW | terminatorlib/paned.py | 365 | CODE | |
| LOW | terminatorlib/prefseditor.py | 269 | CODE | |
| LOW | terminatorlib/prefseditor.py | 1519 | CODE | |
| LOW | terminatorlib/titlebar.py | 102 | CODE | |
| LOW | terminatorlib/terminal_popup_menu.py | 104 | CODE | |
| LOW | terminatorlib/plugin.py | 72 | CODE | |
| LOW | terminatorlib/notebook.py | 115 | CODE | |
| LOW | terminatorlib/notebook.py | 375 | CODE | |
| LOW | terminatorlib/notebook.py | 545 | CODE | |
| LOW | terminatorlib/plugins/remote.py | 197 | CODE | |
| LOW | terminatorlib/plugins/remote.py | 350 | CODE | |
| LOW | terminatorlib/plugins/custom_commands.py | 176 | CODE | |
| LOW | terminatorlib/plugins/custom_commands.py | 480 | CODE | |
| LOW | terminatorlib/plugins/custom_commands.py | 602 | CODE | |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 378 | CODE | |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 477 | CODE | |
| LOW | terminatorlib/plugins/maven.py | 44 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_signalman.py | 36 | CODE | |
| LOW | terminatorlib/debugserver.py | 6 | CODE | |
| LOW | terminatorlib/debugserver.py | 9 | CODE | |
| LOW | terminatorlib/debugserver.py | 17 | CODE | |
| LOW | terminatorlib/debugserver.py | 18 | CODE | |
| LOW | terminatorlib/keybindings.py | 25 | CODE | |
| LOW | terminatorlib/util.py | 18 | CODE | |
| LOW | terminatorlib/layoutlauncher.py | 8 | CODE | |
| LOW | terminatorlib/layoutlauncher.py | 10 | CODE | |
| LOW | terminatorlib/layoutlauncher.py | 12 | CODE | |
| LOW | terminatorlib/layoutlauncher.py | 14 | CODE | |
| LOW | terminatorlib/layoutlauncher.py | 106 | CODE | |
| LOW | terminatorlib/prefseditor.py | 11 | CODE | |
| LOW | terminatorlib/plugin.py | 219 | CODE | |
| LOW | terminatorlib/plugin.py | 220 | CODE | |
| LOW | terminatorlib/editablelabel.py | 20 | CODE | |
| LOW | terminatorlib/plugins/command_notify.py | 21 | CODE | |
| LOW | terminatorlib/plugins/save_user_session_layout.py | 13 | CODE | |
| LOW | terminatorlib/plugins/save_user_session_layout.py | 13 | CODE | |
| LOW | terminatorlib/plugins/save_last_session_layout.py | 11 | CODE | |
| LOW | terminatorlib/plugins/save_last_session_layout.py | 11 | CODE | |
| LOW | terminatorlib/plugins/custom_commands.py | 19 | CODE | |
| LOW | terminatorlib/plugins/run_cmd_on_match.py | 7 | CODE | |
| LOW | terminatorlib/plugins/auto_theme.py | 18 | CODE | |
| LOW | terminatorlib/plugins/auto_theme.py | 19 | CODE | |
| LOW | terminatorlib/plugins/mousefree_url_handler.py | 19 | CODE | |
| LOW | terminatorlib/plugins/mousefree_url_handler.py | 19 | CODE | |
| LOW | terminatorlib/plugins/mousefree_url_handler.py | 19 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | terminatorlib/window.py | 0 | handle a keyboard event requesting a terminal resize | STRING |
| HIGH | terminatorlib/paned.py | 0 | handle a keyboard event requesting a terminal resize | STRING |
| HIGH | terminatorlib/container.py | 0 | handle a keyboard event requesting a terminal resize | STRING |
| HIGH | terminatorlib/notebook.py | 0 | handle a keyboard event requesting a terminal resize | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | terminatorlib/config.py | 1 | # TerminatorConfig - layered config classes | COMMENT |
| LOW | terminatorlib/version.py | 1 | # TerminatorVersion - version number | COMMENT |
| LOW | terminatorlib/terminal.py | 281 | # not what we should be doing. | COMMENT |
| LOW | terminatorlib/keybindings.py | 1 | # Terminator - multiple gnome terminals in one window | COMMENT |
| LOW | terminatorlib/util.py | 1 | # Terminator.util - misc utility functions | COMMENT |
| LOW | terminatorlib/prefseditor.py | 81 | 'gruvbox_dark': 7, | COMMENT |
| LOW | terminatorlib/__init__.py | 1 | # Terminator - multiple gnome terminals in one window | COMMENT |
| LOW | terminatorlib/optionparse.py | 1 | # Terminator.optionparse - Parse commandline options | COMMENT |
| LOW | terminatorlib/translation.py | 1 | # Terminator - multiple gnome terminals in one window | COMMENT |
| LOW | terminatorlib/editablelabel.py | 1 | # vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab | COMMENT |
| LOW | terminatorlib/plugins/maven.py | 1 | # Copyright (c) 2010 Julien Nicoulaud <julien.nicoulaud@gmail.com> | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | terminatorlib/terminal.py | 1037 | # Create a new group and assign currently focused | COMMENT |
| MEDIUM | terminatorlib/terminator.py | 414 | # Create a dummy window/vte and realise it so it has correct | STRING |
| MEDIUM | terminatorlib/prefseditor.py | 1324 | # Create the dialog to choose a custom color | COMMENT |
| MEDIUM | terminatorlib/plugins/run_cmd_on_match.py | 23 | # This class is not useful as is, it needs to be forged through MetaRCOM metaclass to be useful | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | terminatorlib/window.py | 866 | # FIXME: I don't think we should just use whatever font size info is on | COMMENT |
| LOW | terminatorlib/terminal.py | 2049 | # bindings that should be moved to Terminator as they all just call | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | terminatorlib/debugserver.py | 24 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | terminatorlib/terminal.py | 1594 | CODE |