From 0bbd1671ab53efe079357689fcf18d10e9d846a4 Mon Sep 17 00:00:00 2001 From: monsta Date: Thu, 15 Dec 2016 12:34:46 +0300 Subject: pythonconsole plugin: port to gi and libpeas note: config dialog is broken for ages since it tries to use ancient MateConf, so it's left as is for now. later it can be ported to GSettings and PeasGtk. mostly adapted from: https://git.gnome.org/browse/gedit/commit/?id=4dcd8d84b1a6b11c5254416d9b5ed7af8105f538 https://git.gnome.org/browse/gedit/commit/?id=a9d2ea047401124537e49ef6a2bf9c0f6c4a4f22 https://git.gnome.org/browse/gedit/commit/?id=c2ef43753eaf07d7ea9eecf9221daacff5f2a3b7 https://git.gnome.org/browse/gedit/commit/?id=ad07a02a15ba868bbd5654152f3946350db2dadf --- configure.ac | 2 + plugins/Makefile.am | 4 +- plugins/pythonconsole/Makefile.am | 6 +- .../pythonconsole/pythonconsole.plugin.desktop.in | 10 ++++ .../pythonconsole.pluma-plugin.desktop.in | 10 ---- plugins/pythonconsole/pythonconsole/__init__.py | 42 +++++++------- plugins/pythonconsole/pythonconsole/console.py | 66 +++++++++++----------- po/POTFILES.in | 3 + po/POTFILES.skip | 3 - 9 files changed, 76 insertions(+), 70 deletions(-) create mode 100644 plugins/pythonconsole/pythonconsole.plugin.desktop.in delete mode 100644 plugins/pythonconsole/pythonconsole.pluma-plugin.desktop.in diff --git a/configure.ac b/configure.ac index d03836fb..64242d1f 100644 --- a/configure.ac +++ b/configure.ac @@ -261,6 +261,8 @@ plugins/externaltools/tools/Makefile plugins/filebrowser/Makefile plugins/filebrowser/org.mate.pluma.plugins.filebrowser.gschema.xml plugins/modelines/Makefile +plugins/pythonconsole/Makefile +plugins/pythonconsole/pythonconsole/Makefile plugins/sort/Makefile plugins/spell/Makefile plugins/spell/org.mate.pluma.plugins.spell.gschema.xml diff --git a/plugins/Makefile.am b/plugins/Makefile.am index 495d1a2c..03fa0d08 100644 --- a/plugins/Makefile.am +++ b/plugins/Makefile.am @@ -4,6 +4,7 @@ DIST_SUBDIRS = \ externaltools \ filebrowser \ modelines \ + pythonconsole \ sort \ spell \ taglist \ @@ -16,13 +17,14 @@ SUBDIRS = \ externaltools \ filebrowser \ modelines \ + pythonconsole \ sort \ taglist \ time \ trailsave # python plugins are disabled for now -#SUBDIRS += pythonconsole snippets quickopen +#SUBDIRS += snippets quickopen if ENABLE_ENCHANT SUBDIRS += spell diff --git a/plugins/pythonconsole/Makefile.am b/plugins/pythonconsole/Makefile.am index 53361183..0a9ff965 100644 --- a/plugins/pythonconsole/Makefile.am +++ b/plugins/pythonconsole/Makefile.am @@ -2,10 +2,10 @@ SUBDIRS = pythonconsole plugindir = $(PLUMA_PLUGINS_LIBS_DIR) -plugin_in_files = pythonconsole.pluma-plugin.desktop.in -%.pluma-plugin: %.pluma-plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache +plugin_in_files = pythonconsole.plugin.desktop.in +%.plugin: %.plugin.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*po) ; $(INTLTOOL_MERGE) $(top_srcdir)/po $< $@ -d -u -c $(top_builddir)/po/.intltool-merge-cache -plugin_DATA = $(plugin_in_files:.pluma-plugin.desktop.in=.pluma-plugin) +plugin_DATA = $(plugin_in_files:.plugin.desktop.in=.plugin) EXTRA_DIST = $(plugin_in_files) diff --git a/plugins/pythonconsole/pythonconsole.plugin.desktop.in b/plugins/pythonconsole/pythonconsole.plugin.desktop.in new file mode 100644 index 00000000..50d2a7a7 --- /dev/null +++ b/plugins/pythonconsole/pythonconsole.plugin.desktop.in @@ -0,0 +1,10 @@ +[Plugin] +Loader=python +Module=pythonconsole +IAge=2 +_Name=Python Console +_Description=Interactive Python console standing in the bottom panel +Icon=text-x-python +Authors=Steve Frécinaux +Copyright=Copyright © 2006 Steve Frécinaux +Website=http://www.mate-desktop.org diff --git a/plugins/pythonconsole/pythonconsole.pluma-plugin.desktop.in b/plugins/pythonconsole/pythonconsole.pluma-plugin.desktop.in deleted file mode 100644 index 1d6747e1..00000000 --- a/plugins/pythonconsole/pythonconsole.pluma-plugin.desktop.in +++ /dev/null @@ -1,10 +0,0 @@ -[Pluma Plugin] -Loader=python -Module=pythonconsole -IAge=2 -_Name=Python Console -_Description=Interactive Python console standing in the bottom panel -Icon=text-x-python -Authors=Steve Frécinaux -Copyright=Copyright © 2006 Steve Frécinaux -Website=http://www.mate-desktop.org diff --git a/plugins/pythonconsole/pythonconsole/__init__.py b/plugins/pythonconsole/pythonconsole/__init__.py index 347df0ee..59ac413e 100755 --- a/plugins/pythonconsole/pythonconsole/__init__.py +++ b/plugins/pythonconsole/pythonconsole/__init__.py @@ -24,38 +24,42 @@ # Bits from pluma Python Console Plugin # Copyrignt (C), 2005 Raphaël Slinckx -import gtk -import pluma +from gi.repository import GObject, Gtk, Peas, Pluma from console import PythonConsole from config import PythonConsoleConfigDialog from config import PythonConsoleConfig -PYTHON_ICON = 'mate-mime-text-x-python' +PYTHON_ICON = 'text-x-python' + +class PythonConsolePlugin(GObject.Object, Peas.Activatable): + __gtype_name__ = "PythonConsolePlugin" + + object = GObject.Property(type=GObject.Object) -class PythonConsolePlugin(pluma.Plugin): def __init__(self): - pluma.Plugin.__init__(self) + GObject.Object.__init__(self) self.dlg = None - def activate(self, window): - console = PythonConsole(namespace = {'__builtins__' : __builtins__, - 'pluma' : pluma, + def do_activate(self): + window = self.object + + self._console = PythonConsole(namespace = {'__builtins__' : __builtins__, + 'pluma' : Pluma, 'window' : window}) - console.eval('print "You can access the main window through ' \ + self._console.eval('print "You can access the main window through ' \ '\'window\' :\\n%s" % window', False) bottom = window.get_bottom_panel() - image = gtk.Image() - image.set_from_icon_name(PYTHON_ICON, gtk.ICON_SIZE_MENU) - bottom.add_item(console, _('Python Console'), image) - window.set_data('PythonConsolePluginInfo', console) - - def deactivate(self, window): - console = window.get_data("PythonConsolePluginInfo") - console.stop() - window.set_data("PythonConsolePluginInfo", None) + image = Gtk.Image() + image.set_from_icon_name(PYTHON_ICON, Gtk.IconSize.MENU) + bottom.add_item(self._console, _('Python Console'), image) + + def do_deactivate(self): + window = self.object + + self._console.stop() bottom = window.get_bottom_panel() - bottom.remove_item(console) + bottom.remove_item(self._console) def create_configure_dialog(self): diff --git a/plugins/pythonconsole/pythonconsole/console.py b/plugins/pythonconsole/pythonconsole/console.py index 5a01e311..75f60e4d 100755 --- a/plugins/pythonconsole/pythonconsole/console.py +++ b/plugins/pythonconsole/pythonconsole/console.py @@ -28,29 +28,27 @@ import string import sys import re import traceback -import gobject -import gtk -import pango +from gi.repository import GObject, Gdk, Gtk, Pango from config import PythonConsoleConfig __all__ = ('PythonConsole', 'OutFile') -class PythonConsole(gtk.ScrolledWindow): +class PythonConsole(Gtk.ScrolledWindow): __gsignals__ = { 'grab-focus' : 'override', } def __init__(self, namespace = {}): - gtk.ScrolledWindow.__init__(self) + Gtk.ScrolledWindow.__init__(self) - self.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) - self.set_shadow_type(gtk.SHADOW_IN) - self.view = gtk.TextView() - self.view.modify_font(pango.FontDescription('Monospace')) + self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC) + self.set_shadow_type(Gtk.ShadowType.IN) + self.view = Gtk.TextView() + self.view.modify_font(Pango.font_description_from_string('Monospace')) self.view.set_editable(True) - self.view.set_wrap_mode(gtk.WRAP_WORD_CHAR) + self.view.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self.add(self.view) self.view.show() @@ -98,19 +96,19 @@ class PythonConsole(gtk.ScrolledWindow): self.namespace = None def __key_press_event_cb(self, view, event): - modifier_mask = gtk.accelerator_get_default_mod_mask() + modifier_mask = Gtk.accelerator_get_default_mod_mask() event_state = event.state & modifier_mask - if event.keyval == gtk.keysyms.d and event_state == gtk.gdk.CONTROL_MASK: + if event.keyval == Gdk.KEY_D and event_state == Gdk.ModifierType.CONTROL_MASK: self.destroy() - elif event.keyval == gtk.keysyms.Return and event_state == gtk.gdk.CONTROL_MASK: + elif event.keyval == Gdk.KEY_Return and event_state == Gdk.ModifierType.CONTROL_MASK: # Get the command buffer = view.get_buffer() inp_mark = buffer.get_mark("input") inp = buffer.get_iter_at_mark(inp_mark) cur = buffer.get_end_iter() - line = buffer.get_text(inp, cur) + line = buffer.get_text(inp, cur, False) self.current_command = self.current_command + line + "\n" self.history_add(line) @@ -127,10 +125,10 @@ class PythonConsole(gtk.ScrolledWindow): cur = buffer.get_end_iter() buffer.place_cursor(cur) - gobject.idle_add(self.scroll_to_end) + GObject.idle_add(self.scroll_to_end) return True - elif event.keyval == gtk.keysyms.Return: + elif event.keyval == Gdk.KEY_Return: # Get the marks buffer = view.get_buffer() lin_mark = buffer.get_mark("input-line") @@ -139,7 +137,7 @@ class PythonConsole(gtk.ScrolledWindow): # Get the command line inp = buffer.get_iter_at_mark(inp_mark) cur = buffer.get_end_iter() - line = buffer.get_text(inp, cur) + line = buffer.get_text(inp, cur, False) self.current_command = self.current_command + line + "\n" self.history_add(line) @@ -171,25 +169,25 @@ class PythonConsole(gtk.ScrolledWindow): cur = buffer.get_end_iter() buffer.move_mark(inp_mark, cur) buffer.place_cursor(cur) - gobject.idle_add(self.scroll_to_end) + GObject.idle_add(self.scroll_to_end) return True - elif event.keyval == gtk.keysyms.KP_Down or event.keyval == gtk.keysyms.Down: + elif event.keyval == Gdk.KEY_KP_Down or event.keyval == Gdk.KEY_Down: # Next entry from history view.emit_stop_by_name("key_press_event") self.history_down() - gobject.idle_add(self.scroll_to_end) + GObject.idle_add(self.scroll_to_end) return True - elif event.keyval == gtk.keysyms.KP_Up or event.keyval == gtk.keysyms.Up: + elif event.keyval == Gdk.KEY_KP_Up or event.keyval == Gdk.KEY_Up: # Previous entry from history view.emit_stop_by_name("key_press_event") self.history_up() - gobject.idle_add(self.scroll_to_end) + GObject.idle_add(self.scroll_to_end) return True - elif event.keyval == gtk.keysyms.KP_Left or event.keyval == gtk.keysyms.Left or \ - event.keyval == gtk.keysyms.BackSpace: + elif event.keyval == Gdk.KEY_KP_Left or event.keyval == Gdk.KEY_Left or \ + event.keyval == Gdk.KEY_BackSpace: buffer = view.get_buffer() inp = buffer.get_iter_at_mark(buffer.get_mark("input")) cur = buffer.get_iter_at_mark(buffer.get_insert()) @@ -202,8 +200,8 @@ class PythonConsole(gtk.ScrolledWindow): # For the console we enable smart/home end behavior incoditionally # since it is useful when editing python - elif (event.keyval == gtk.keysyms.KP_Home or event.keyval == gtk.keysyms.Home) and \ - event_state == event_state & (gtk.gdk.SHIFT_MASK|gtk.gdk.CONTROL_MASK): + elif (event.keyval == Gdk.KEY_KP_Home or event.keyval == Gdk.KEY_Home) and \ + event_state == event_state & (Gdk.ModifierType.SHIFT_MASK|Gdk.ModifierType.CONTROL_MASK): # Go to the begin of the command instead of the begin of the line buffer = view.get_buffer() iter = buffer.get_iter_at_mark(buffer.get_mark("input")) @@ -215,14 +213,14 @@ class PythonConsole(gtk.ScrolledWindow): if iter.equal(ins): iter = buffer.get_iter_at_mark(buffer.get_mark("input")) - if event_state & gtk.gdk.SHIFT_MASK: + if event_state & Gdk.ModifierType.SHIFT_MASK: buffer.move_mark_by_name("insert", iter) else: buffer.place_cursor(iter) return True - elif (event.keyval == gtk.keysyms.KP_End or event.keyval == gtk.keysyms.End) and \ - event_state == event_state & (gtk.gdk.SHIFT_MASK|gtk.gdk.CONTROL_MASK): + elif (event.keyval == Gdk.KEY_KP_End or event.keyval == Gdk.KEY_End) and \ + event_state == event_state & (Gdk.ModifierType.SHIFT_MASK|Gdk.ModifierType.CONTROL_MASK): buffer = view.get_buffer() iter = buffer.get_end_iter() @@ -238,7 +236,7 @@ class PythonConsole(gtk.ScrolledWindow): if iter.equal(ins): iter = buffer.get_end_iter() - if event_state & gtk.gdk.SHIFT_MASK: + if event_state & Gdk.ModifierType.SHIFT_MASK: buffer.move_mark_by_name("insert", iter) else: buffer.place_cursor(iter) @@ -253,7 +251,7 @@ class PythonConsole(gtk.ScrolledWindow): buffer = self.view.get_buffer() inp = buffer.get_iter_at_mark(buffer.get_mark("input")) cur = buffer.get_end_iter() - return buffer.get_text(inp, cur) + return buffer.get_text(inp, cur, False) def set_command_line(self, command): buffer = self.view.get_buffer() @@ -284,7 +282,7 @@ class PythonConsole(gtk.ScrolledWindow): def scroll_to_end(self): iter = self.view.get_buffer().get_end_iter() - self.view.scroll_to_iter(iter, 0.0) + self.view.scroll_to_iter(iter, 0.0, False, 0.5, 0.5) return False def write(self, text, tag = None): @@ -293,7 +291,7 @@ class PythonConsole(gtk.ScrolledWindow): buffer.insert(buffer.get_end_iter(), text) else: buffer.insert_with_tags(buffer.get_end_iter(), text, tag) - gobject.idle_add(self.scroll_to_end) + GObject.idle_add(self.scroll_to_end) def eval(self, command, display_command = False): buffer = self.view.get_buffer() @@ -316,7 +314,7 @@ class PythonConsole(gtk.ScrolledWindow): buffer.insert(cur, ">>> ") cur = buffer.get_end_iter() buffer.move_mark_by_name("input", cur) - self.view.scroll_to_iter(buffer.get_end_iter(), 0.0) + self.view.scroll_to_iter(buffer.get_end_iter(), 0.0, False, 0.5, 0.5) def __run(self, command): sys.stdout, self.stdout = self.stdout, sys.stdout diff --git a/po/POTFILES.in b/po/POTFILES.in index 375cc50d..3b2cc225 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -70,6 +70,9 @@ plugins/filebrowser/pluma-file-browser-store.c plugins/filebrowser/pluma-file-browser-view.c plugins/filebrowser/pluma-file-browser-widget.c plugins/modelines/modelines.plugin.desktop.in +plugins/pythonconsole/pythonconsole.plugin.desktop.in +plugins/pythonconsole/pythonconsole/__init__.py +[type: gettext/glade]plugins/pythonconsole/pythonconsole/config.ui plugins/sort/pluma-sort-plugin.c plugins/sort/sort.plugin.desktop.in [type: gettext/glade]plugins/sort/sort.ui diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 5bbd91eb..eeabb59e 100644 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -1,9 +1,6 @@ # List of source files that should *not* be translated. # Please keep this file sorted alphabetically. data/pluma.desktop.in -plugins/pythonconsole/pythonconsole.pluma-plugin.desktop.in -plugins/pythonconsole/pythonconsole/__init__.py -[type: gettext/glade]plugins/pythonconsole/pythonconsole/config.ui plugins/quickopen/quickopen/popup.py plugins/quickopen/quickopen/windowhelper.py plugins/quickopen/quickopen.pluma-plugin.desktop.in -- cgit v1.2.1