You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/WPy32-3720/python-3.7.2/Scripts/EditWithIdleX.py

196 lines
5.4 KiB

6 years ago
"""
IdleX Windows Configuration
Adds/removes "Edit with IdleX" to the right-click context menu
for .py files.
Author: Roger D. Serwy
Date: 2011-11-28
2012-04-13 modified to work with setup.py
License: See LICENSE.txt
"""
import os
import sys
import shlex
WINREG = True
if sys.version < '3':
import Tkinter as tk
import tkMessageBox as mb
try:
import _winreg as W
except:
WINREG = False
else:
import tkinter as tk
import tkinter.messagebox as mb
try:
import winreg as W
except:
WINREG = False
if 'linux' in sys.platform:
# For Testing on Non-Windows platforms
class dummy_winreg:
def dummy(*args, **kwargs):
pass
def CreateKey(self, *args, **kwargs):
raise Exception('This is not Windows')
DeleteKey = CreateKey
def QueryValue(self, *args, **kwargs):
return r'C:\\Python32\\python.exe'
def __getattr__(self, *args, **kwargs):
return self.dummy
__file__ = 'LINUX'
W = dummy_winreg()
WINREG = True
if WINREG == False:
mb.showerror(title='Edit with IdleX',
message='Unable to import winreg')
sys.exit(1)
def get_python_executable():
""" Get path to python.exe """
reg = W.ConnectRegistry(None, W.HKEY_CLASSES_ROOT)
p = W.OpenKey(reg, r'Python.File\shell\Edit with IDLE\command')
v = W.QueryValue(p, None)
path_to_python = shlex.split(v)[0]
return path_to_python
def get_idlex_module():
try:
mod = __import__('idlexlib')
except:
return None
return mod
def get_idlex_path():
# This assumes EditWithIdleX.py is in same directory as idlex.py
mod = get_idlex_module()
if mod:
head, tail = os.path.split(os.path.abspath(mod.__file__))
path_to_idlex = os.path.join(head, 'launch.py')
else:
head, tail = os.path.split(os.path.abspath(__file__))
head, tail = os.path.split(head)
path_to_idlex = os.path.join(head, 'idlex.py')
if os.path.exists(path_to_idlex):
return path_to_idlex
else:
return 'NOT FOUND. Make sure idlex.py is in same directory as EditWithIdleX.py.'
def build_registry_value():
""" Build the value for "Edit with IdleX" """
path_to_python = get_python_executable()
path_to_idlex = get_idlex_path()
if not os.path.exists(path_to_idlex):
raise Exception('Path to IdleX is not valid.')
regval = '"%(python)s" "%(idlex)s" -e "%%1"' % {'python':path_to_python,
'idlex':path_to_idlex}
return regval
def create_registry_key():
""" Create the "Edit with IdleX" registry key. """
regval = build_registry_value()
_create_registry_key_helper(regval)
def _create_registry_key_helper(regval):
reg = W.ConnectRegistry(None, W.HKEY_CURRENT_USER)
p = W.OpenKey(reg, r'Software\Classes', 0, W.KEY_SET_VALUE)
p2 = W.CreateKey(p, 'Python.File\shell\Edit with IdleX\command')
W.SetValue(p2, '', W.REG_SZ, regval)
W.CloseKey(p2)
W.CloseKey(p)
W.CloseKey(reg)
def delete_registry_key():
""" Delete the "Edit with IdleX" registry key """
reg = W.ConnectRegistry(None, W.HKEY_CURRENT_USER)
p = W.OpenKey(reg, r'Software\Classes\Python.File\shell', 0, W.KEY_ALL_ACCESS)
p2 = W.DeleteKey(p, 'Edit with IdleX\command')
p3 = W.DeleteKey(p, 'Edit with IdleX')
W.CloseKey(p)
W.CloseKey(reg)
def errorbox(err):
mb.showerror(title='Error occurred',
message=err)
def successbox(op=''):
mb.showinfo(title='Success',
message='Operation Successful. %s' % op)
def add_menu_item():
try:
create_registry_key()
successbox("'Edit with IdleX' added.")
except Exception as err:
errorbox(err)
def delete_menu_item():
try:
delete_registry_key()
successbox("'Edit with IdleX' removed.")
except Exception as err:
errorbox(err)
def quitprog():
root.destroy()
def build_gui():
f1 = tk.Frame(root)
f1.config(borderwidth=2, relief=tk.GROOVE)
f1.pack(side=tk.TOP, fill=tk.BOTH, expand=1, padx=5, pady=5)
msg = ["This will configure the right-click context menu",
"item 'Edit with IdleX'. This will sit alongside the",
"'Edit with IDLE' menu item.",
"",
"Python found at: %r" % get_python_executable(),
"IdleX found at: %r" % get_idlex_path(),
"",
"If you change the location of IdleX, re-run this script.",
"Otherwise, no action will occur if you click 'Edit with IdleX'.",
"",
"This program creates a registry key here:",
r"HKEY_CURRENT_USER\Software\Classes\Python.File\shell\Edit with IdleX\command",
]
L = tk.Label(f1, text='\n'.join(msg),
wraplength=300, justify=tk.LEFT)
b1 = tk.Button(f1, text="Add 'Edit with IdleX' to context menu",
command=add_menu_item)
b2 = tk.Button(f1, text="Remove 'Edit with IdleX' from context menu",
command=delete_menu_item)
b3 = tk.Button(f1, text='Exit this program',
command=quitprog)
TOP = tk.TOP
L.pack(side=TOP, fill=tk.X, expand=True)
b1.pack(side=TOP, fill=tk.X, expand=True)
b2.pack(side=TOP, fill=tk.X, expand=True)
b3.pack(side=TOP, fill=tk.X, expand=True)
if __name__ == '__main__':
root = tk.Tk()
root.title('Edit with IdleX')
build_gui()
root.mainloop()