Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
7fe5837
add more shorcuts, delete line, close tab, new tab, execute line, wor…
charliewales Jan 14, 2023
e3af88c
fix about
charliewales Jan 14, 2023
459c80d
convert pngs to get rid of "Libpng warning: iCCP: known incorrect sRG…
charliewales Jan 14, 2023
30bc77c
cycle tabs with Ctrl+Tab (next) and Ctrl+Shift+Tab (previous)
charliewales Jan 14, 2023
4d4a62d
highlight current line, close current tab with middle mouse button
charliewales Jan 15, 2023
cf9e758
set new tab shortcut from Ctrl+N to Ctrl+T
charliewales Jan 15, 2023
b062e2e
current line highlight spans the whole widget width
charliewales Jan 15, 2023
2c042fc
rounded tabs, set proper cursor posistion when deleting lines
charliewales Jan 15, 2023
90ebccf
fix tooltips, set close tab warning
charliewales Jan 15, 2023
f09fa76
do not change to previous tab when cancelling closing current tab
charliewales Jan 16, 2023
3a075c6
duplicate line fix
charliewales Jan 16, 2023
a6d9d23
switch tabs with Ctrl+PageDown and Ctrl+PageUp
charliewales Jan 16, 2023
280177a
set proper version
charliewales Jan 16, 2023
1cf1f0b
show python version in window title
charliewales Jan 17, 2023
4cdcaff
v3.0.3
charliewales Jan 17, 2023
dabdf0a
save QSplitter sizes in settings
charliewales Jan 26, 2023
5d204dd
update
charliewales Jan 26, 2023
482ca8d
word wrap output text (Ctrl+Alt+W)
charliewales Feb 1, 2023
99c27ff
set word wrap in all tabs, add check to menuItems
charliewales Feb 1, 2023
8c3be4e
add quit menuItem, save wrap status
charliewales Feb 6, 2023
3fba2b0
restore delete and duplciate line menuItems
charliewales Feb 6, 2023
6ae29bc
make Python 2 and Python 3 comaptible, using Qt.py
charliewales Feb 18, 2023
31f8f7b
delete unused shortcuts
charliewales Feb 18, 2023
9cb33d2
added Quick Help for Maya python commands and PyQt Classes
charliewales Feb 18, 2023
254d4a1
Update readme.md
charliewales Feb 18, 2023
30cd88d
fix imports
charliewales Feb 20, 2023
79f5933
update info
charliewales Feb 20, 2023
5a23fd8
show proper PySide version help (1 or 2)
charliewales Feb 20, 2023
036028b
add help links for Houdini, Maya, Nuke and Qt
charliewales Feb 20, 2023
c026bb2
add maya completion stubs
charliewales Feb 20, 2023
299d7b0
fix function call, update version
charliewales Feb 20, 2023
a597c5c
show proper comment shortcut (Alt+C)
charliewales Feb 20, 2023
a38de34
function_cmd works on selected text if any, otherwise works on curren…
charliewales Feb 23, 2023
33ccfca
update version
charliewales Feb 23, 2023
a3c5788
update readme
charliewales Feb 23, 2023
8c7c3b7
Update readme.md
charliewales Feb 23, 2023
208b47f
Update about dialog
charliewales Feb 24, 2023
5508a5f
update version
charliewales Feb 24, 2023
977f96c
move toolbar to tabWidget top right corner
charliewales Feb 25, 2023
e32ef05
reset version as v3
charliewales Feb 25, 2023
0561a75
add icons to menus
charliewales Feb 25, 2023
2f27f6b
add more icons
charliewales Feb 26, 2023
5ffcc21
add python builtin functions and modules to Quick Help
charliewales Feb 26, 2023
b4dcdce
update
charliewales Feb 26, 2023
d40bdd1
fix Open Script
charliewales Feb 26, 2023
2bb14b4
update help module
charliewales Feb 27, 2023
1a7c744
refactor storing builtins
charliewales Feb 27, 2023
e092544
syntax highlighting in output window, new shortcuts
charliewales Feb 28, 2023
91cfcc9
fix shortcuts dialog in Python 2
charliewales Feb 28, 2023
0d9fd54
fix builtin functions help in Python 2
charliewales Feb 28, 2023
35be6b8
adjust line number size
charliewales Feb 28, 2023
1455d85
add option to run menu to clear output before executing code (Clear …
charliewales Feb 28, 2023
2bad58c
remove clear output before execute from toolbar
charliewales Feb 28, 2023
0f94853
fix execute selected with multi-line selection
charliewales Feb 28, 2023
26b8e64
add visual aid to toolbar (red outline) when clear before execute is …
charliewales Feb 28, 2023
9e9f830
update shortcuts list
charliewales Feb 28, 2023
3a138b5
remove builtin icons (houdini crashed)
charliewales Mar 1, 2023
015b202
change font to Consolas
charliewales Mar 1, 2023
394c2ea
take into account the display resolution to set the line number size
charliewales Mar 5, 2023
4537ac4
added echo command as setting
charliewales Mar 13, 2023
3002ad9
change execute key bindings
charliewales Mar 14, 2023
8fdd428
fix syntax
charliewales Mar 14, 2023
71b288f
always on top option added
charliewales Apr 9, 2023
62d97fe
rende whitespace option, initialset font option
charliewales Apr 16, 2023
0200fa7
set font option, highlight line color config, whitesapce color config
charliewales Apr 18, 2023
3d78c48
update, remove some commented lines
charliewales Apr 29, 2023
685b552
Remove tab dialog default to yes button
charliewales Oct 22, 2023
eaf662a
set Houdni font to Consolas
charliewales Oct 22, 2023
c253569
add Enter shortcuts
charliewales Apr 5, 2024
c06c950
execute selected when pressing Enter or all if no selection
charliewales Apr 5, 2024
794df48
set proper version
charliewales Apr 5, 2024
2527d26
fix Key_Enter in Houdini
charliewales Jun 8, 2024
5269dc8
delete comented lines
charliewales Jun 8, 2024
6c69b97
fixing two deprecated methods
charliewales Aug 13, 2024
287d5a1
Python 3 completion compatibility, v4.0.0
charliewales Dec 2, 2025
37d57e1
update readme, v3.0.0 -> v4.0.0
charliewales Dec 2, 2025
11a9bef
PySide6 compatiblity
charliewales Dec 20, 2025
266b621
Prefer PySide2, add title bar versions info
charliewales Dec 20, 2025
a7b3fe7
fix: Ctrl+Wheel to resize the text in PySide6
charliewales Dec 20, 2025
09a6d5d
docs: update info docs
charliewales Dec 21, 2025
1e9d984
Disable High Dpi Scaling in PySide6
charliewales Dec 21, 2025
4a521da
update version 4.1.2
charliewales Dec 21, 2025
3c9bb8d
Update readme.md
charliewales Jan 14, 2026
a06ec7c
Update readme.md
charliewales Jan 14, 2026
9b1514f
add MIT license file
charliewales Jan 30, 2026
f877847
add window icon
charliewales Jan 30, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,7 @@ todo
tmp
_backup
_tmp
*.pyc
multi_script_editor/run_no_pyc.cmd
.history/
multi_script_editor/run2_no_pyc.cmd
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.
48 changes: 38 additions & 10 deletions multi_script_editor/__init__.py
Original file line number Diff line number Diff line change
@@ -1,37 +1,65 @@
import os, sys
import os
import sys

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


# HOUDINI
def showHoudini(clear=False, ontop=False, name=None, floating=False, position=(), size=(),
pane=None, replacePyPanel=False, hideTitleMenu=True):
def showHoudini(
clear=False,
ontop=False,
name=None,
floating=False,
position=(),
size=(),
pane=None,
replacePyPanel=False,
hideTitleMenu=True,
):
"""
This method use hqt module. Download it before
"""
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)

_houdini.show(
clear=clear,
ontop=ontop,
name=name,
floating=floating,
position=position,
size=size,
pane=pane,
replacePyPanel=replacePyPanel,
hideTitleMenu=hideTitleMenu,
)


# NUKE
def showNuke(panel=False):
from .managers import _nuke
reload(_nuke)

_nuke.show(panel)


# MAYA
def showMaya(dock=False):
print('showMaya')
from .managers import _maya
reload (_maya)

_maya.show(dock)


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

_3dsmax.show()


def show():
import scriptEditor

scriptEditor.show()
2 changes: 2 additions & 0 deletions multi_script_editor/helpText.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
Multi Script Editor v%s</h2>
<p>
By PaulWinex paulwinex.com</p>
<p>
By Carlos Rico Adega (Python 3 - PySide 6)</p>
<h3>
Editor Variables:</h3>
<ul>
Expand Down
227 changes: 57 additions & 170 deletions multi_script_editor/hqt.py

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions multi_script_editor/icons/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,34 @@
pw=os.path.join(root,'pw.png'),
all=os.path.join(root,'exec_all.png'),
sel=os.path.join(root,'exec_sel.png'),
line=os.path.join(root,'exec_line.png'),
clear=os.path.join(root,'clear.png'),
help=os.path.join(root,'help.png'),
donate=os.path.join(root,'donate.png'),
maya=os.path.join(root,'maya.png'),
houdini=os.path.join(root,'houdini.png'),
nuke=os.path.join(root,'nuke.png'),
github=os.path.join(root,'github.png'),
copy=os.path.join(root,'copy.png'),
cut=os.path.join(root,'cut.png'),
paste=os.path.join(root,'paste.png'),
delete_line=os.path.join(root,'delete_line.png'),
duplicate_line=os.path.join(root,'duplicate_line.png'),
comment=os.path.join(root,'comment.png'),
replace=os.path.join(root,'replace.png'),
add_tab=os.path.join(root,'add_tab.png'),
undo=os.path.join(root,'undo.png'),
redo=os.path.join(root,'redo.png'),
tabs_to_spaces=os.path.join(root,'tabs_to_spaces.png'),
python=os.path.join(root,'python.png'),
open=os.path.join(root,'open.png'),
save=os.path.join(root,'save.png'),
about=os.path.join(root,'about.png'),
quit=os.path.join(root,'quit.png'),
theme=os.path.join(root,'theme.png'),
settings=os.path.join(root,'settings.png'),
qt=os.path.join(root,'qt.png'),
shortcut=os.path.join(root,'shortcut.png'),
print_help=os.path.join(root,'print_help.png'),
font=os.path.join(root,'font.png'),
)
Binary file added multi_script_editor/icons/about.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/add_tab.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/clear.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/comment.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/copy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/cut.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/delete_line.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/donate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/duplicate_line.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/exec_all.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/exec_line.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/exec_sel.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/font.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/github.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/help.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/houdini.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/maya.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/nuke.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/open.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/paste.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/print_help.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/pw.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified multi_script_editor/icons/pw_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/python.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/qt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added multi_script_editor/icons/quit.png
Binary file added multi_script_editor/icons/redo.png
Binary file added multi_script_editor/icons/replace.png
Binary file added multi_script_editor/icons/save.png
Binary file added multi_script_editor/icons/settings.png
Binary file added multi_script_editor/icons/shortcut.png
Binary file added multi_script_editor/icons/tabs_to_spaces.png
Binary file added multi_script_editor/icons/theme.png
Binary file added multi_script_editor/icons/undo.png
9 changes: 5 additions & 4 deletions multi_script_editor/icons_rcs.py

Large diffs are not rendered by default.

57 changes: 29 additions & 28 deletions multi_script_editor/jedi/__init__.py
Original file line number Diff line number Diff line change
@@ -1,41 +1,42 @@
"""
Jedi is an autocompletion tool for Python that can be used in IDEs/editors.
Jedi works. Jedi is fast. It understands all of the basic Python syntax
elements including many builtin functions.
Jedi is a static analysis tool for Python that is typically used in
IDEs/editors plugins. Jedi has a focus on autocompletion and goto
functionality. Other features include refactoring, code search and finding
references.

Additionaly, Jedi suports two different goto functions and has support for
renaming as well as Pydoc support and some other IDE features.
Jedi has a simple API to work with. There is a reference implementation as a
`VIM-Plugin <https://github.com/davidhalter/jedi-vim>`_. Autocompletion in your
REPL is also possible, IPython uses it natively and for the CPython REPL you
can install it. Jedi is well tested and bugs should be rare.

Jedi uses a very simple API to connect with IDE's. There's a reference
implementation as a `VIM-Plugin <http://github.com/davidhalter/jedi-vim>`_,
which uses Jedi's autocompletion. I encourage you to use Jedi in your IDEs.
It's really easy. If there are any problems (also with licensing), just contact
me.

To give you a simple example how you can use the Jedi library, here is an
example for the autocompletion feature:
Here's a simple example of the autocompletion feature:

>>> import jedi
>>> source = '''
... import datetime
... datetime.da'''
>>> script = jedi.Script(source, 3, len('datetime.da'), 'example.py')
... import json
... json.lo'''
>>> script = jedi.Script(source, path='example.py')
>>> script
<Script: 'example.py'>
>>> completions = script.completions()
>>> completions #doctest: +ELLIPSIS
[<Completion: date>, <Completion: datetime>, ...]
<Script: 'example.py' ...>
>>> completions = script.complete(3, len('json.lo'))
>>> completions
[<Completion: load>, <Completion: loads>]
>>> print(completions[0].complete)
te
ad
>>> print(completions[0].name)
date

As you see Jedi is pretty simple and allows you to concentrate on writing a
good text editor, while still having very good IDE features for Python.
load
"""

__version__ = '0.8.1-final0'
__version__ = '0.19.2'

from jedi.api import Script, Interpreter, NotFoundError, set_debug_function
from jedi.api import preload_module, defined_names
from jedi.api import Script, Interpreter, set_debug_function, preload_module
from jedi import settings
from jedi.api.environment import find_virtualenvs, find_system_environments, \
get_default_environment, InvalidPythonEnvironment, create_environment, \
get_system_environment, InterpreterEnvironment
from jedi.api.project import Project, get_default_project
from jedi.api.exceptions import InternalError, RefactoringError

# Finally load the internal plugins. This is only internal.
from jedi.plugins import registry
del registry
47 changes: 38 additions & 9 deletions multi_script_editor/jedi/__main__.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,13 @@
from sys import argv
import sys
from os.path import join, dirname, abspath, isdir


if len(argv) == 2 and argv[1] == 'repl':
# don't want to use __main__ only for repl yet, maybe we want to use it for
# something else. So just use the keyword ``repl`` for now.
print(join(dirname(abspath(__file__)), 'api', 'replstartup.py'))
elif len(argv) > 1 and argv[1] == 'linter':
def _start_linter():
"""
This is a pre-alpha API. You're not supposed to use it at all, except for
testing. It will very likely change.
"""
import jedi
import sys

if '--debug' in sys.argv:
jedi.set_debug_function()
Expand All @@ -32,12 +27,46 @@
paths = [path]

try:
for path in paths:
for error in jedi.Script(path=path)._analysis():
for p in paths:
for error in jedi.Script(path=p)._analysis():
print(error)
except Exception:
if '--pdb' in sys.argv:
import traceback
traceback.print_exc()
import pdb
pdb.post_mortem()
else:
raise


def _complete():
import jedi
import pdb

if '-d' in sys.argv:
sys.argv.remove('-d')
jedi.set_debug_function()

try:
completions = jedi.Script(sys.argv[2]).complete()
for c in completions:
c.docstring()
c.type
except Exception as e:
print(repr(e))
pdb.post_mortem()
else:
print(completions)


if len(sys.argv) == 2 and sys.argv[1] == 'repl':
# don't want to use __main__ only for repl yet, maybe we want to use it for
# something else. So just use the keyword ``repl`` for now.
print(join(dirname(abspath(__file__)), 'api', 'replstartup.py'))
elif len(sys.argv) > 1 and sys.argv[1] == '_linter':
_start_linter()
elif len(sys.argv) > 1 and sys.argv[1] == '_complete':
_complete()
else:
print('Command not implemented: %s' % sys.argv[1])
Loading