Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
586 commits
Select commit Hold shift + click to select a range
0723ec9
ui: css tweaks
charliewales Jul 9, 2026
f189e71
ui: more css tweaks
charliewales Jul 9, 2026
7f6ecb3
ui: add_tab.png convert to grayscale
charliewales Jul 9, 2026
60e40bc
feat(ui): sort custom themes alphabetically in Theme Editor list
charliewales Jul 9, 2026
5fc2244
feat(ui): sort custom themes alphabetically in main Theme menu
charliewales Jul 9, 2026
c54934a
fix: apply theme colors to window background and menubar
charliewales Jul 10, 2026
ee39e57
ui: set outline spacing
charliewales Jul 10, 2026
4aa8578
refactor(themes): explicitly define tab colors in all themes
charliewales Jul 10, 2026
f739937
refactor(themes): replace dynamic tab color fallback with explicit th…
charliewales Jul 10, 2026
1a6f921
style: remove custom close-button icons from tabs
charliewales Jul 10, 2026
5d01a19
style(themes): apply highlight_line color to active tabs
charliewales Jul 10, 2026
2753af4
UI: Apply theme styling to entire Code Theme Editor dialog
charliewales Jul 10, 2026
1eea3ad
Refactor: Remove redundant stylesheet setting in Code Theme Editor
charliewales Jul 10, 2026
4402098
Fix Theme Editor initial styling and window size issues
charliewales Jul 10, 2026
25396d9
feat: add Fluorescent theme and fix output_background css rule
charliewales Jul 10, 2026
3a359e5
ui: css tweaks
charliewales Jul 10, 2026
a9f4185
UI: Update outline filter background color to use outline_background
charliewales Jul 10, 2026
04c932f
chore: remove duplicated code
charliewales Jul 10, 2026
23caf25
feat: Use selected text as initial search term in Find and Replace di…
charliewales Jul 10, 2026
418858e
feat: Auto select all occurrences feature and fix autocomplete trigge…
charliewales Jul 10, 2026
cfdb6b3
fix: Remove hallucinated syntax_timer from inputWidget.py
charliewales Jul 10, 2026
b485dc7
Fix multicursor auto-selection bugs and status bar message updates
charliewales Jul 10, 2026
9a50e6a
UI: Move occurrences message to the right side of status bar
charliewales Jul 10, 2026
d531a74
UI: Standardize QTabBar close button styling across OS and PySide ver…
charliewales Jul 10, 2026
11dd60d
ui: update close tab icons
charliewales Jul 10, 2026
8911233
Update status bar widgets order
charliewales Jul 10, 2026
6370c8b
feat: differentiate message for auto and manual occurrences selection
charliewales Jul 10, 2026
66ca1e2
ui: default themes label text tweaks
charliewales Jul 10, 2026
ad49857
UI: Update theme editor preview status bar to match main window
charliewales Jul 10, 2026
2d10fde
Fix: Resolve context detection circular import and path resolution
charliewales Jul 10, 2026
43e90af
chore: do not user Documents for settings
charliewales Jul 10, 2026
bc7bcc0
Fix occurrences label font in status bar to match current theme
charliewales Jul 10, 2026
5841147
fix(theme-editor): reset font size controls on font change
charliewales Jul 10, 2026
9af4f27
refactor(theme): consolidate size menu and reset functions
charliewales Jul 10, 2026
4cf2dc8
fix(theme): prevent QFont zero size error in themeEditor
charliewales Jul 10, 2026
d804f27
chore: menu size default is 90% of editor size
charliewales Jul 10, 2026
1460c7d
ui: css tweaks
charliewales Jul 10, 2026
dc2d9ee
fix(ui): apply theme colors synchronously to outline filter palette t…
charliewales Jul 10, 2026
1be614a
ui: css tweaks
charliewales Jul 10, 2026
7f37470
ui: css tweaks
charliewales Jul 10, 2026
c1f5467
feat(theme): add line_num_text color for line number bar
charliewales Jul 11, 2026
e3c4e32
style(ui): update default widget font sizes to 90% of theme font size
charliewales Jul 11, 2026
dbb69dc
feat: Add line numbers font size configuration to theme editor
charliewales Jul 11, 2026
8960e93
ui: css tweaks
charliewales Jul 11, 2026
b0c0189
feat: add status_bar_text color control to theme editor
charliewales Jul 11, 2026
5da0fb4
ui: css tweaks
charliewales Jul 11, 2026
262cfd3
fix(theme): prevent auto-applying imported themes and update editor U…
charliewales Jul 11, 2026
0c6e4ef
ui: css tweaks
charliewales Jul 11, 2026
65bd3e0
style: fix QComboBox item selection and hover colors for PySide2 and …
charliewales Jul 11, 2026
c8a41de
fix(vendor): suppress DLL load failed warnings in Qt.py
charliewales Jul 11, 2026
d40c183
Update readme.md
charliewales Jul 11, 2026
16b16bf
fix(outline): clear outline items when syntax errors are detected
charliewales Jul 11, 2026
5a143c5
Merge branch 'develop'
charliewales Jul 11, 2026
3199d6e
ui: reorganise Edit menu items
charliewales Jul 11, 2026
34412d2
feat: add trim trailing whitespace options and auto-trim functionality
charliewales Jul 11, 2026
9df19fa
docs: update mse.html with trailing whitespace, layout, and theme con…
charliewales Jul 11, 2026
0467128
Merge branch 'develop'
charliewales Jul 11, 2026
c928cca
fix: save trim_auto_whitespace setting properly
charliewales Jul 11, 2026
cb9831a
Merge branch 'develop'
charliewales Jul 11, 2026
f0de452
refactor: move jedi and parso to vendor directory
charliewales Jul 11, 2026
7d59c3f
feat: add case sensitive toggle for occurrences selection
charliewales Jul 11, 2026
096915b
chore: bump minor version 6.2.0 -> 6.3.0
charliewales Jul 11, 2026
5948248
feat: add next/previous selection actions
charliewales Jul 11, 2026
dfa06f2
fix(ui): decouple interface font scaling from global editor font
charliewales Jul 12, 2026
e441d3d
refactor: unify font scaling and make zooming temporary
charliewales Jul 12, 2026
3c10971
feat: add global keyboard shortcuts and UI enhancements
charliewales Jul 12, 2026
c003cf7
fix: dynamically scale menu fonts on default themes
charliewales Jul 12, 2026
d71d8a1
ui: css tweaks
charliewales Jul 12, 2026
2b9c28f
fix: subtract temporary zoom delta on auto-save to prevent persistent…
charliewales Jul 12, 2026
8f7a6bb
fix: subtract zoom delta in saveSession to prevent persistent zoom up…
charliewales Jul 12, 2026
826009e
fix: do not save text in session if file_path is present
charliewales Jul 12, 2026
db28164
feat: prompt to save unsaved files on exit
charliewales Jul 12, 2026
a6a32c8
feat(theme): store custom themes in an independent file
charliewales Jul 12, 2026
e092089
feat: replace tab close button with tab index on ctrl press
charliewales Jul 12, 2026
18a31e2
feat: implement vscode-like quick open navigation and minimal icons
charliewales Jul 12, 2026
233717f
ui: change documentation icon
charliewales Jul 12, 2026
a988551
feat: switch to existing tab if file is already open
charliewales Jul 12, 2026
71f3f04
feat: add View menu with zoom controls
charliewales Jul 12, 2026
f5ed9d0
ui: move "Always on top" to top
charliewales Jul 12, 2026
cb5fe28
feat: group settings files and sessions into mse_settings folder
charliewales Jul 12, 2026
4b6b1cf
ui: css tweaks
charliewales Jul 12, 2026
05f6b25
ui: css tweaks
charliewales Jul 12, 2026
60e483a
style: cleanup trailing whitespaces and correct outline item colors
charliewales Jul 12, 2026
ee4c052
fix: resolve always on top logic and apply theme fonts to message boxes
charliewales Jul 13, 2026
8bacb5c
feat(tabs): add file path tooltips matching theme font
charliewales Jul 15, 2026
bd9478d
feat: add syntax highlighting and open/save dialog support for .log f…
charliewales Jul 15, 2026
f792be4
feat(snippets): allow deleting snippets using Del key
charliewales Jul 15, 2026
9ec25ab
refactor: unify SnippetWidget and SymbolWidget with SearchPopupWidget
charliewales Jul 15, 2026
756cd04
fix: make MRU and recent files popup cyclic and update position
charliewales Jul 15, 2026
cbf77c0
fix(ui): adjust symbol indentation in OutlineParser to match source code
charliewales Jul 15, 2026
00a7dc3
refactor(editor): migrate QTextEdit to QPlainTextEdit for performance
charliewales Jul 15, 2026
3a9ca02
feat: implement dynamic dirty tab indicators via CSS
charliewales Jul 15, 2026
a0a3226
fix(editor): center cursor vertically after jumping to occurrence or …
charliewales Jul 15, 2026
d4e5875
feat: implement resilient dynamic tab dirty indicators
charliewales Jul 15, 2026
7d494a1
fix: update clearHistory and mse_help methods for QPlainTextEdit comp…
charliewales Jul 15, 2026
31994bc
style: add right margin to tab indicators for PySide6 consistency
charliewales Jul 15, 2026
5915a53
fix: disable execution UI and functions for non-Python files
charliewales Jul 15, 2026
041f170
fix: preserve window controls when changing flags in PySide6
charliewales Jul 15, 2026
d2f1551
ui: css tweaks, completer colors
charliewales Jul 16, 2026
d9a5531
feat: add JSON syntax highlighting and file filter support
charliewales Jul 16, 2026
212e079
feat: show JSON keys in outline and symbol widget
charliewales Jul 16, 2026
93fa34d
fix: houdini font size behavior and reset zoom themes pollution
charliewales Jul 16, 2026
3286b4d
refactor: unify font management logic across all DCCs
charliewales Jul 16, 2026
b778fbf
perf(session): prevent saving session to disk on tab change
charliewales Jul 16, 2026
c838ea1
docs: update mse.html key features and general overview
charliewales Jul 16, 2026
51f04e4
fix(theme): prioritize output font size over general text size in app…
charliewales Jul 16, 2026
9a34048
chore: remove 3dsmax compatibility
charliewales Jul 16, 2026
087e520
fix(tabs): show save confirmation dialog only if tab is modified or h…
charliewales Jul 16, 2026
9d5ce90
feat(tabs): add option for quick tab switching and fix close button r…
charliewales Jul 16, 2026
b8f4055
feat(ui): customize view menu actions, shortcuts, zoom icons, and sta…
charliewales Jul 16, 2026
79e4040
fix(tabWidget): prevent tabs from shrinking by disabling expanding an…
charliewales Jul 16, 2026
5b41ebf
docs: align mse.html menu option sequence with application UI
charliewales Jul 16, 2026
378ca02
chore: tweak help
charliewales Jul 16, 2026
69bf515
feat: add 'Open in browser' context menu for HTML files and status ti…
charliewales Jul 16, 2026
4a38c0c
chore: remove step code
charliewales Jul 16, 2026
9c6c79a
fix: apply theme font to about and shortcuts dialogs
charliewales Jul 16, 2026
c5a2ba2
docs: update readmes
charliewales Jul 16, 2026
3b3fe2a
feat(ui): hide tab scroller buttons and add toolbar margin
charliewales Jul 16, 2026
1ea44df
feat(ui): support language-specific comment syntax and fix JSON comments
charliewales Jul 16, 2026
1ea8288
feat: add auto-close delimiters functionality
charliewales Jul 16, 2026
2c20939
feat(editor): add f-string action with Alt+f shortcut
charliewales Jul 16, 2026
4b6fce4
feat: add prefer single quotes action
charliewales Jul 16, 2026
1a58b86
ui: shuffle actions
charliewales Jul 16, 2026
dbd7147
fix(editor): use logical block indices for line and symbol navigation
charliewales Jul 16, 2026
ca99189
feat: add action to toggle code outline button visibility
charliewales Jul 16, 2026
85561de
style: apply theme colors to QToolTip
charliewales Jul 16, 2026
d69474a
feat(ui): add Ctrl+Shift+Alt+W shortcut to close all tabs
charliewales Jul 16, 2026
d42f6bb
ui: fix action label
charliewales Jul 16, 2026
5301a1c
feat(recent-files): add support for deleting recent files via Del key
charliewales Jul 16, 2026
c23d777
ui: adjust menu label
charliewales Jul 16, 2026
ff852b6
fix(ui): handle missing recent files in menu and dialog
charliewales Jul 17, 2026
4cc1c60
fix(ui): use missing.png file for missing recent files
charliewales Jul 17, 2026
f0b0f42
refactor(ui): remove redundant inline imports in scriptEditor.py
charliewales Jul 17, 2026
e6e4468
feat: add Ctrl+B shortcut to Open in browser action for HTML files
charliewales Jul 17, 2026
611bb70
feat(icons): add open in browser icon and register in init
charliewales Jul 17, 2026
c3da2c4
fix(ui): use tab-separated format for 'Open in browser' shortcut to p…
charliewales Jul 17, 2026
78feb17
ui: add spaces so text do not collide on Linux
charliewales Jul 17, 2026
804bba0
feat: add open_in_browser icon to Open in browser context menu action
charliewales Jul 17, 2026
b2e3f30
refactor(imports): clean up redundant and unused inline imports
charliewales Jul 17, 2026
9f98152
feat: respect 'Prefer single quotes' setting in autocomplete
charliewales Jul 17, 2026
d06fd38
fix(editor): handle UnicodeDecodeError on loading files with differen…
charliewales Jul 17, 2026
2241d0f
feat: filter dictionary keys completion and add 'k' icon
charliewales Jul 17, 2026
85fb619
fix: PySide6 autocomplete not showing up
charliewales Jul 17, 2026
893ddb2
feat(editor): implement VSCode-style code folding and recursive toggl…
charliewales Jul 17, 2026
8432fa9
feat(editor): exclude trailing empty lines from folding range and fix…
charliewales Jul 17, 2026
98ba5c6
feat(editor): add single-block fold/unfold actions, auto-unfold on na…
charliewales Jul 17, 2026
973a337
chore: reasign shortcuts
charliewales Jul 17, 2026
7f1c888
feat: add 'Add Cursors to line ends' (Alt+Shift+I) action
charliewales Jul 17, 2026
191fae3
feat(bookmarks): implement bookmark toggle, navigation, and finder wi…
charliewales Jul 17, 2026
3fa1f98
fix(bookmarks): resolve syntax highlighting, PySide iterator, variabl…
charliewales Jul 17, 2026
d24308f
fix(bookmarks): extract syntax highlighting from QTextLayout formats
charliewales Jul 17, 2026
8943dbd
feat(bookmarks): center editor viewport on bookmark jump
charliewales Jul 17, 2026
c4c64aa
chore(bookmarks): format line label display in bookmark list
charliewales Jul 17, 2026
c7a68ca
feat(bookmarks): use boolean theme color for bookmark ribbons
charliewales Jul 17, 2026
311b2b6
feat(bookmarks): add semi-transparent hover preview in bookmark gutter
charliewales Jul 17, 2026
46df65e
chore(icons): update bookmark icon formats
charliewales Jul 17, 2026
e1d1f8a
feat(theme): add editable bookmark tag color defaulting to boolean
charliewales Jul 17, 2026
5da94ff
fix(syntax): prevent highlighting python builtins when accessed as at…
charliewales Jul 17, 2026
a713565
chore: reorginize bookmark actions code
charliewales Jul 17, 2026
798fa85
docs: update mse.html with bookmarks, folding, and shortcut updates
charliewales Jul 17, 2026
e85932d
refactor(theme): change default bookmark color fallback to string
charliewales Jul 17, 2026
7899613
feat: persist and restore cursor position and scroll state per tab
charliewales Jul 17, 2026
766e38e
feat(theme): add option to randomize custom theme at startup
charliewales Jul 17, 2026
799a7a2
feat(folding): show folding chevron when hovering over collapsible lines
charliewales Jul 17, 2026
e6bd37a
feat(preview): add interactive markdown preview overlay with Ctrl+Alt…
charliewales Jul 17, 2026
04b451f
fix(ui): preserve output widget splitter proportions when toggled or …
charliewales Jul 17, 2026
08f6a44
ui: css tweaks
charliewales Jul 19, 2026
f533645
Merge branch 'develop'
charliewales Jul 19, 2026
d4a3d99
chore: bump minor version 6.3.0 -> 6.4.0
charliewales Jul 19, 2026
54bbf55
feat(session): save and restore cursor line, column, and vertical scr…
charliewales Jul 19, 2026
cb7546f
feat(theme): add selection background and color options to theme editor
charliewales Jul 19, 2026
8cb4cb9
feat(theme): add border color property to theme editor
charliewales Jul 19, 2026
15ac6b7
style: add checkmark icons to selected checkboxes
charliewales Jul 19, 2026
ca1c5d7
feat: add menubar toggle with Ctrl+M shortcut
charliewales Jul 19, 2026
0f88292
ui: shuffle actions
charliewales Jul 19, 2026
2d1fb39
style: add keyboard accelerators to main menus
charliewales Jul 19, 2026
eeecbb4
feat: add 'Show menus' action to context menus when menubar is hidden
charliewales Jul 19, 2026
2a93e3d
feat: add "Add cursor above/below" shortcuts to Edit menu
charliewales Jul 19, 2026
21c53a5
feat: implement smart home navigation shortcut
charliewales Jul 19, 2026
715093b
ui: shuffle actions
charliewales Jul 19, 2026
466396d
feat: add "Save output" submenu with "As..." and "To tab" actions
charliewales Jul 19, 2026
7765b42
feat: add missing status bar text to UI actions
charliewales Jul 19, 2026
1c52c2c
feat: Add Zen Mode with 120-column centering and perfect size restora…
charliewales Jul 19, 2026
8f9fc69
feat(folding): display all chevrons on folding zone hover
charliewales Jul 19, 2026
f09fbdb
feat(icons): add custom minimalist icons for multi-cursor actions
charliewales Jul 19, 2026
43cde37
feat(folding): restrict folding chevron hover to rightmost folding area
charliewales Jul 19, 2026
ccbcbb2
feat(clipboard): implement clipboard manager with Ctrl+Shift+V and pe…
charliewales Jul 20, 2026
61ea330
docs: update mse.html with clipboard manager, Zen mode, and submenu a…
charliewales Jul 20, 2026
847859e
chore: restore support button
charliewales Jul 20, 2026
9c40b48
feat(session): persist and restore editor code folding state across s…
charliewales Jul 20, 2026
2cc22af
feat(session): persist and restore editor bookmarks across sessions a…
charliewales Jul 20, 2026
b177825
feat(session): purge horizontal scrollbar saving and restoration
charliewales Jul 20, 2026
20f391b
feat(tabs): close tab under mouse on middle click
charliewales Jul 20, 2026
5add7f0
feat: remove Zen Mode feature entirely
charliewales Jul 20, 2026
8569b3c
feat(snippets): execute snippet directly using Numpad Enter
charliewales Jul 20, 2026
e6ce8c7
docs: update mse.html for Zen Mode removal and tab/snippet features
charliewales Jul 20, 2026
ca76fcf
feat(editor): update fold/unfold all shortcuts to Alt+Shift+-/+ and e…
charliewales Jul 20, 2026
4246af7
feat(icons): add custom minimalist icons for code folding actions
charliewales Jul 20, 2026
c07233f
feat: add editor toolbar above tabWidget with toggle action
charliewales Jul 20, 2026
8af9d2e
style: remove keyboard access keys from menus
charliewales Jul 20, 2026
36b2d7c
feat: persist toolbar visibility state and adjust toolbar styling
charliewales Jul 20, 2026
31a7693
fix: keep window-level shortcuts active when menus are hidden
charliewales Jul 20, 2026
fe3e065
feat(bookmarks): add confirmation dialog before clearing bookmarks
charliewales Jul 20, 2026
04564eb
feat(toolbar): integrate toolbar toggles and customize action icons
charliewales Jul 20, 2026
6a259c9
fix(settings): fix saving and restoring of editor options
charliewales Jul 20, 2026
8932185
style(ui): change default splitter sizes to 40% output and 60% input
charliewales Jul 20, 2026
b9275af
docs: update folding shortcuts, toolbar toggle, and bookmarks confirm…
charliewales Jul 20, 2026
6ca761e
fix: resolve Enter and Escape key propagation in search popups
charliewales Jul 20, 2026
e121390
ui: shuffle toolbar buttons
charliewales Jul 20, 2026
05d04c4
feat(icons): add custom menu icon to Show menus context actions
charliewales Jul 20, 2026
710144e
feat: dynamically add hamburger menu button to toolbar when menus are…
charliewales Jul 20, 2026
16aaacc
feat(editor): implement modern go to line popup with syntax highlighting
charliewales Jul 20, 2026
1945f1a
fix(editor): respect list selection in goto line popup and use local …
charliewales Jul 20, 2026
2495a66
ui: set menu icon size
charliewales Jul 21, 2026
444fdc4
feat(icons): add custom minimalist icon for show autocompletion action
charliewales Jul 21, 2026
cdb0ffb
ui: add label to show menu action button
charliewales Jul 21, 2026
395a122
ui: shuffle action
charliewales Jul 21, 2026
2c4f62a
feat(ui): implement inline tab renaming
charliewales Jul 21, 2026
5503ccd
docs: update mse.html with inline renaming, modern go to line, and me…
charliewales Jul 21, 2026
e38cf5e
fix: custom menus not applying theme font at startup
charliewales Jul 21, 2026
c9cd89a
refactor(ui): reorganize menu structure
charliewales Jul 21, 2026
fd89de1
refactor(ui): move Always on top action to View menu
charliewales Jul 21, 2026
684ddd7
chore: update docs
charliewales Jul 21, 2026
94aa16c
refactor(ui): move Snippets menu to top-level menu bar
charliewales Jul 21, 2026
6eee99f
feat: add status bar text to top-level menus
charliewales Jul 21, 2026
cb9da13
feat: add "Show status tips" toggle in Options menu, active by default
charliewales Jul 21, 2026
eeb8c24
feat: add status tip for showStatusTips action
charliewales Jul 21, 2026
e478e8d
chore: change label
charliewales Jul 21, 2026
c760821
feat(ui): add icons and fix font styling for saved sessions and snipp…
charliewales Jul 21, 2026
6da4abb
chore: change cursor shortcuts
charliewales Jul 23, 2026
39fe8e3
Style tab rename QLineEdit to match tab border-radius and theme colors
charliewales Jul 23, 2026
ff6e467
refactor(ui): move Theme menu to top-level menu bar to the left of View
charliewales Jul 23, 2026
6430530
chore: remove theme menu icon
charliewales Jul 23, 2026
7f90ffa
fix(numBarWidget): fix current line highlight height and vertical ali…
charliewales Jul 23, 2026
bdd4991
feat: sync occurrence highlighting to output widget
charliewales Jul 23, 2026
d37d007
feat: prompt for confirmation before overwriting an existing named se…
charliewales Jul 23, 2026
c976718
feat: add 'Selection to tab' action to text editors context menu
charliewales Jul 23, 2026
cb91159
fix(ui): apply theme font to dialog texts and buttons
charliewales Jul 23, 2026
da571e0
feat(ui): apply theme font to the entire theme editor UI
charliewales Jul 23, 2026
601449c
fix(ui): use stylesheet to enforce theme font on theme editor widgets
charliewales Jul 23, 2026
2325891
perf(ui): avoid reapplying the same stylesheet to prevent UI flicker …
charliewales Jul 23, 2026
9d4ead3
fix(ui): ensure theme font is applied to theme editor widgets on show
charliewales Jul 23, 2026
5f97b26
fix(ui): apply theme font to delete file dialogs in tabWidget
charliewales Jul 23, 2026
6e6958b
fix(theme): fix theme name truncation and select previous theme on de…
charliewales Jul 23, 2026
8bc1c31
docs: add Sessions, Snippets, and Theme as top-level menu sections
charliewales Jul 23, 2026
2b24c85
docs: add Dark Mode, update version badge to v6.4.0, and simplify men…
charliewales Jul 24, 2026
de33e71
feat(tabs): synchronize disk files on tab rename, duplicate, and delete
charliewales Jul 24, 2026
44c3236
feat: enable drag and drop to open files in output widget
charliewales Jul 24, 2026
3c7882b
feat(session): print warning in outputWidget at startup when tab file…
charliewales Jul 24, 2026
8f20b96
Merge branch 'develop'
charliewales Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,6 @@ todo
tmp
_backup
_tmp
*.pyc
.history/
.agents/
21 changes: 21 additions & 0 deletions license.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Carlos Rico Adega

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
58 changes: 42 additions & 16 deletions multi_script_editor/__init__.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,63 @@
import os, sys
import os
import sys

# Set preferred binding
if not os.environ.get("QT_PREFERRED_BINDING"):
os.environ["QT_PREFERRED_BINDING"] = os.pathsep.join(
["PySide2", "PySide6", "PyQt5", "PySide", "PyQt4"]
)

# Disable High Dpi Scaling in PySide6
os.environ["QT_ENABLE_HIGHDPI_SCALING"] = "0"

root = os.path.dirname(__file__)
if not root in sys.path:
if root not in sys.path:
sys.path.append(root)

vendor_path = os.path.join(root, 'vendor')
if vendor_path not in sys.path:
sys.path.insert(0, vendor_path)


# HOUDINI
def showHoudini(clear=False, ontop=False, name=None, floating=False, position=(), size=(),
pane=None, replacePyPanel=False, hideTitleMenu=True):
def showHoudini(*args, **kwargs):
"""
This method use hqt module. Download it before
Launch Multi Script Editor in Houdini
"""
from .managers import _houdini
reload(_houdini)
_houdini.show(clear=clear, ontop=ontop, name=name, floating=floating, position=position,
size=size, pane=pane, replacePyPanel=replacePyPanel, hideTitleMenu=hideTitleMenu)
return _houdini.show(*args, **kwargs)


# NUKE
def showNuke(panel=False):
"""
Launch Multi Script Editor in Nuke
"""
from .managers import _nuke
reload(_nuke)

_nuke.show(panel)


# MAYA
def showMaya(dock=False):
"""
Launch Multi Script Editor in Maya
"""
from .managers import _maya
reload (_maya)

_maya.show(dock)

# 3DSMAX PLUS
def show3DSMax():
sys.argv = []
from .managers import _3dsmax
reload (_3dsmax)
_3dsmax.show()

def show(*args, **kwargs):
from . import managers
if managers.context == 'hou':
return showHoudini(*args, **kwargs)
elif managers.context == 'maya':
# Maya's show takes 'dock' kwarg
return showMaya(kwargs.get('dock', False))
elif managers.context == 'nuke':
# Nuke's show takes 'panel' kwarg
return showNuke(kwargs.get('panel', False))

import scriptEditor
scriptEditor.show()
1 change: 1 addition & 0 deletions multi_script_editor/core/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Core package for Multi Script Editor
133 changes: 133 additions & 0 deletions multi_script_editor/core/autocomplete_provider.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import re
import managers

class CompletionItem:
def __init__(self, name, complete, comp_type, docstring_val="", prefix_length=0):
self.name = name
self.complete = complete
self.type = comp_type
self._docstring = docstring_val
self.prefix_length = prefix_length

def get_completion_prefix_length(self):
return self.prefix_length

def docstring(self):
return self._docstring


class AutocompleteProvider:
def __init__(self):
# Lazy load jedi to avoid heavy startup overhead if possible
self._jedi = None

def _get_jedi(self):
if self._jedi is None:
import jedi
self._jedi = jedi
return self._jedi

def get_completions(self, text, line, column, namespace=None, fuzzy=True, context=None, prefer_single_quotes=False):
"""
Returns a list of CompletionItem objects.
"""
comp_items = []
context_completer = False

preferred_quote = "'" if prefer_single_quotes else '"'
other_quote = '"' if prefer_single_quotes else "'"

def format_quotes(name, complete, comp_type):
if comp_type == 'string' or (len(name) >= 2 and name[0] in ('"', "'") and name[-1] in ('"', "'")):
# Convert quotes in name
if len(name) >= 2 and name[0] == other_quote and name[-1] == other_quote:
name = preferred_quote + name[1:-1] + preferred_quote
# Convert quotes in complete
if complete:
if len(complete) >= 2 and complete[0] == other_quote and complete[-1] == other_quote:
complete = preferred_quote + complete[1:-1] + preferred_quote
elif complete[0] == other_quote:
complete = preferred_quote + complete[1:]
elif complete[-1] == other_quote:
complete = complete[:-1] + preferred_quote
return name, complete

# 1. Try Context-Specific Completers (e.g., Maya, Nuke specific cmds)
if context and context in managers.contextCompleters:
current_line_text = text.split('\n')[line - 1] if text else ''
# We don't have exact cursor offset here easily, but managers used it roughly
# The original code passed `line` string to contextCompleters.
comp, extra = managers.contextCompleters[context](current_line_text, namespace)
if comp or extra:
context_completer = True
# Format them as CompletionItem
if comp:
for c in comp:
name, complete = format_quotes(c.name, getattr(c, 'complete', ''), getattr(c, 'type', 'statement'))
comp_items.append(CompletionItem(name, complete, getattr(c, 'type', 'statement'), c.docstring() if hasattr(c, 'docstring') else ''))
if extra:
for c in extra:
name, complete = format_quotes(c.name, getattr(c, 'complete', ''), getattr(c, 'type', 'statement'))
comp_items.append(CompletionItem(name, complete, getattr(c, 'type', 'statement'), c.docstring() if hasattr(c, 'docstring') else ''))

if comp_items:
return comp_items

# 2. Fallback to Jedi Autocompletion
if not context_completer:
jedi = self._get_jedi()

# Prepend autoImports if necessary
offs = 0
if context and context in managers.autoImport:
autoImp = managers.autoImport.get(context, '')
text = autoImp + text
offs = len(autoImp.split('\n')) - 1

# Shift the line number due to autoImports
jedi_line = line + offs

try:
if namespace:
script = jedi.Interpreter(text, namespaces=[namespace])
else:
script = jedi.Script(code=text)

jedi_comps = script.complete(line=jedi_line, column=column, fuzzy=fuzzy)

for c in jedi_comps:
# Filter out 'mro' as original code did
if c.name == 'mro':
continue

doc = ''
try:
doc = c.docstring()
except Exception:
pass

prefix_len = 0
if hasattr(c, 'get_completion_prefix_length'):
prefix_len = c.get_completion_prefix_length()

name, complete = format_quotes(c.name, c.complete, c.type)

comp_items.append(CompletionItem(
name=name,
complete=complete,
comp_type=c.type,
docstring_val=doc,
prefix_length=prefix_len
))
except Exception:
pass

# Filter completions for dictionary keys if inside brackets
current_line_text = text.split('\n')[line - 1] if text else ''
prefix = current_line_text[:column]
if re.search(r'\w+\s*\[\s*[\'"]?\s*\w*$', prefix):
string_comps = [c for c in comp_items if c.type == 'string' or (len(c.name) >= 2 and c.name[0] in ('"', "'") and c.name[-1] in ('"', "'"))]
if string_comps:
comp_items = string_comps

return comp_items
Loading