Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37547691
en ru br
Репозитории ALT

Группа :: Система/Основа
Пакет: beesu

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: beesu-gedit-plugin-fix.patch
Скачать


diff -up beesu-2.7/gedit-beesu-plugin-0.4/beesu.gedit-plugin.fix beesu-2.7/gedit-beesu-plugin-0.4/beesu.gedit-plugin
--- beesu-2.7/gedit-beesu-plugin-0.4/beesu.gedit-plugin.fix	2010-07-22 05:38:58.000000000 -0400
+++ beesu-2.7/gedit-beesu-plugin-0.4/beesu.gedit-plugin	2012-03-01 16:54:11.491145515 -0500
@@ -1,4 +1,4 @@
-[Gedit Plugin]
+[Plugin]
 Loader=python
 Module=beesu
 IAge=2
diff -up beesu-2.7/gedit-beesu-plugin-0.4/beesu.py.fix beesu-2.7/gedit-beesu-plugin-0.4/beesu.py
--- beesu-2.7/gedit-beesu-plugin-0.4/beesu.py.fix	2010-11-04 16:35:56.000000000 -0400
+++ beesu-2.7/gedit-beesu-plugin-0.4/beesu.py	2012-03-01 16:54:11.493145496 -0500
@@ -1,4 +1,5 @@
 # 2010 - Copyright by Bee <http://www.honeybeenet.altervista.org>.
+# 2012 - Rewritten to work with modern Gedit by Tom Callaway <spot@fedoraproject.org>
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 # as published by the Free Software Foundation; either version 2
@@ -13,77 +14,91 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 
-import gedit
-import pygtk
-pygtk.require('2.0')
-import gtk
+from gi.repository import GObject, Gtk, Gedit
+# import gedit
+# import pygtk
+# pygtk.require('2.0')
+# import gtk
 from gettext import gettext as _
 import os
 import tempfile
 import time
+import sys
+import traceback
 import subprocess
 import pickle
 
-def error_message(message):
-    def msg_on_close_destroy(button,response_id,dialog):
-        if response_id == gtk.RESPONSE_CLOSE: 
-            dialog.destroy()
-
-    msg_dialog = gtk.MessageDialog(flags = gtk.DIALOG_MODAL, buttons = gtk.BUTTONS_CLOSE, type = gtk.MESSAGE_ERROR, message_format = message)
-    msg_dialog.connect('response', msg_on_close_destroy, msg_dialog)
-    msg_dialog.run()
-
-class WindowControl:
-    def __init__(self, plugin, window):
-        self._window = window
-        self._plugin = plugin
+ui_str = """
+<ui>
+  <menubar name="MenuBar">
+    <menu name="ToolsMenu" action="Tools">
+      <placeholder name="ToolsOps_2">
+        <menuitem name="beesuPlugin" action="beesuPlugin"/>
+      </placeholder>
+    </menu>
+  </menubar>
+</ui>
+"""
+
+class beesuPlugin(GObject.Object, Gedit.WindowActivatable):
+    __gtype_name__ = "BeesuPlugin"
+
+    window = GObject.property(type=Gedit.Window)
+
+    def __init__(self):
+        GObject.Object.__init__(self)
+
+    def do_activate(self):
         self._insert_menu()
 
-    def deactivate(self):
+    def do_deactivate(self):
         self._remove_menu()
-        self._window = self._plugin = self._action_group = None
+
+    def _remove_menu(self):
+        manager = self.window.get_ui_manager()
+        manager.remove_ui(self._ui_id)
+        manager.remove_action_group(self._action_group)
+        self._action_group = None
+        manager.ensure_update()
 
     def _insert_menu(self):
-        manager = self._window.get_ui_manager()
+        manager = self.window.get_ui_manager()
 
-        self._action_group = gtk.ActionGroup("beesuPluginActions")
-        self._action_group.add_actions([("beesuPlugin", None, 
+        self._action_group = Gtk.ActionGroup(name="beesuPluginActions")
+        self._action_group.add_actions([("beesuPlugin", None,
                                         _("Open as \"root\""),
-                                         None, 
+                                         None,
                                         _("Open this document as \"root\" in gedit with SED_BEESU_COMMAND_LINE_NAME"),
                                          self.beesu)])
 
         manager.insert_action_group(self._action_group, -1)
-
-        ui_str = """<ui>
-            <menubar name="MenuBar">
-                <menu name="ToolsMenu" action="Tools">
-                    <placeholder name="ToolsOps_2">
-                        <menuitem name="beesuPlugin" action="beesuPlugin"/>
-                    </placeholder>
-                    </menu>
-            </menubar>
-        </ui>
-        """
-
         self._ui_id = manager.add_ui_from_string(ui_str)
 
-    def _remove_menu(self):
-        manager = self._window.get_ui_manager()
-        manager.remove_ui(self._ui_id)
-        manager.remove_action_group(self._action_group)
-        manager.ensure_update()
+    def is_configurable(self):
+        return False  
+
+    def error_message(message):
+        def msg_on_close_destroy(button,response_id,dialog):
+            if response_id == Gtk.ResponseType.CLOSE:
+                dialog.destroy()
+
+        msg_dialog = Gtk.MessageDialog(self, Gtk.DialogFlags.MODAL, Gtk.MessageType.ERROR, Gtk.ButtonsType.CLOSE, message)
+        msg_dialog.connect('response', msg_on_close_destroy, msg_dialog)
+        msg_dialog.run()
 
-    def update_ui(self):
-        self._action_group.set_sensitive(self._window.get_active_document() != None)
 
     def beesu(self, action):
-        tab = self._window.get_active_tab()
-        doc = self._window.get_active_document()
+        tab = self.window.get_active_tab()
+        doc = self.window.get_active_document()
 
         filename = None
         if doc:
-            filename = doc.get_uri()
+            location = doc.get_location()
+            if location:
+               uri = location.get_uri()
+               if uri is not None:
+                   if uri[:7] == "file://":
+                       filename = location.get_parse_name()
 
         if not self.beesu_exec(filename):
             return
@@ -91,45 +106,36 @@ class WindowControl:
         if tab:
             if doc == tab.get_document():
                 if doc.get_readonly() or doc.is_untouched():
-                    self._window.close_tab(tab)
-                    if self._window.get_active_document() == None and self._window.get_active_tab() == None:
-                        self._window.destroy()
-        
+                    self.window.close_tab(tab)
+                    if self.window.get_active_document() == None and self.window.get_active_tab() == None:
+                        self.window.destroy()
+
     def beesu_exec(self, filename):
         tmp = tempfile.NamedTemporaryFile(delete = False)
         lockfile = tmp.name
         tmp.close()
-        #['beesu', '-l', '-c', '/usr/libexec/gedit-beesu-plugin','gedit-beesu-plugin','/usr/bin/gedit','gedit',lockfile]
-        shell_args = [SED_BEESU_COMMAND_LINE_SU,'/usr/libexec/gedit-beesu-plugin','gedit-beesu-plugin','gedit','gedit',lockfile]
+        #shell_args = [SED_BEESU_COMMAND_LINE_SU,'/usr/libexec/gedit-beesu-plugin','gedit-beesu-plugin','gedit','gedit',lockfile]
         if filename != None and filename != '':
-            shell_args.append(filename)
+            # shell_args = ['beesu', '-l', '-c', '\"/usr/bin/gedit %s\"' % filename]
+            shell_args = ['beesu', '-l', '-c', '/usr/libexec/gedit-beesu-plugin','gedit-beesu-plugin','gedit','gedit',lockfile, filename]
+            # shell_args = ['/usr/libexec/gedit-beesu-plugin','gedit-beesu-plugin','gedit','gedit', lockfile, filename]
+        else:
+           return False
+        print shell_args
         try:
             subprocess.Popen(shell_args, stderr=open(os.devnull)).wait()
         except:
-            error_message(_("Error running SED_BEESU_COMMAND_LINE_NAME: " + sys.exc_info()[0]))
+            etype = sys.exc_info()[0]
+            evalue = sys.exc_info()[1]
+            etb = traceback.extract_tb(sys.exc_info()[2])
+            myerror = 'Error running SED_BEESU_COMMAND_LINE_NAME: ' + '\n' + 'Error Type: ' + str(etype) + '\n' + 'Error Value: ' + str(evalue) + '\n' + 'Traceback: ' + str(etb)
+            self.error_message(_(myerror))
             return False
 
+        print 'Hey, it says the Popen succeeded.'
+
         if os.path.isfile(lockfile):
             os.remove(lockfile)
             return False
 
         return True
-
-class beesuPlugin(gedit.Plugin):
-    def __init__(self):
-        gedit.Plugin.__init__(self)
-        self._instances = {}
-
-    def activate(self, window):
-        self._instances[window] = WindowControl(self, window)
-
-    def deactivate(self, window):
-        self._instances[window].deactivate()
-        del self._instances[window]
-
-    def update_ui(self, window):
-        self._instances[window].update_ui()
-
-    def is_configurable(self):
-        return False  
-
diff -up beesu-2.7/gedit-beesu-plugin-0.4/libexec/gedit-beesu-plugin.c.fix beesu-2.7/gedit-beesu-plugin-0.4/libexec/gedit-beesu-plugin.c
--- beesu-2.7/gedit-beesu-plugin-0.4/libexec/gedit-beesu-plugin.c.fix	2011-01-07 11:33:15.000000000 -0500
+++ beesu-2.7/gedit-beesu-plugin-0.4/libexec/gedit-beesu-plugin.c	2012-03-01 16:59:49.454787493 -0500
@@ -40,61 +40,109 @@ int main(int argc, char **argv)
     int fd;
     int pid;
     int status;
+    int dup2_return = 0;
     char syncfile[]="/tmp/gbeesu.XXXXXX";
+    pid_t cpid;
     if(argc > REQUIRED_ARGC)
     {
+        printf("DEBUG: Number of necessary args found.\n");
         command = argv[1];                               // 1, REQUIRED_ARGC - 3
         if(strcmp(command, "gedit-beesu-plugin") == 0)
         {
+            printf("DEBUG: strcmp succeeded.\n");
             command        = argv[2];                    // 2, REQUIRED_ARGC - 2
             commandline[0] = argv[3];                    // 3, REQUIRED_ARGC - 1
             lockfile       = argv[4];                    // 4, REQUIRED_ARGC
             if(argc > (REQUIRED_ARGC + 1))
+                printf("DEBUG: Appending additional args to commandline.\n");
                 commandline[1] = argv[REQUIRED_ARGC + 1];// 5, REQUIRED_ARGC + 1
             if(lstat(lockfile, &buf) == 0)
             {
+                printf("DEBUG: lstat on lockfile succeeded.\n");
                 if(buf.st_size == 0 && S_ISREG(buf.st_mode))
                 {
+                    printf("DEBUG: buf checks passed.\n");
                     fd = mkstemp(syncfile);
-                    if(fd == -1)
+                    printf("DEBUG: fd initialized.\n");
+                    if(fd == -1) {
+                        printf("DEBUG: fd failure, exiting.\n");
                         return EXIT_FAILURE;
+                    }
+                    printf("DEBUG: About to close fd.\n");
                     close(fd);
+                    printf("DEBUG: fd closed, about to fork.\n");
                     pid = fork();
+                    printf("DEBUG: Going into PID switch.\n");
                     switch(pid)
                     {
                         case 0:
+                            printf("DEBUG: PID switch case 0.\n");
+/*
                             fd = open("/dev/null", O_RDWR);
                             if(fd != -1)
                             {
-                                dup2(fd, 0);
-                                dup2(fd, 1);
-                                dup2(fd, 2);
-                                close(fd);
+                                printf("DEBUG: Opened fd for /dev/null.\n");
+                                printf("DEBUG: Calling dup2 for 0\n");
+                                dup2_return = dup2(fd, 0);
+                                if(dup2_return < 0) {
+                                    printf("DEBUG: dup2(fd, 0) failed with error %d.\n", dup2_return);
+                                } else {
+       	       	       	       	    printf("DEBUG: dup2(fd, 0) succeeded.\n");
+                                }
+                                printf("DEBUG: Calling dup2 for	1\n");
+                                dup2_return = dup2(fd, 1);
+                                if(dup2_return < 0) {
+                                    printf("DEBUG: dup2(fd, 1) failed with error %d.\n", dup2_return);
+                                    
+                                } else {
+       	       	       	       	    printf("DEBUG: dup2(fd, 1) succeeded.\n");
+                                }
+                                printf("DEBUG: Calling dup2 for	2\n");
+                                dup2_return = dup2(fd, 2);
+                                if(dup2_return < 0) {
+                                    printf("DEBUG: dup2(fd, 2) failed with error %d.\n", dup2_return);
+                                } else {
+                                    printf("DEBUG: dup2(fd, 2) succeeded.\n");
+                                }
                             }
+                            printf("DEBUG: Closing fd for /dev/null.\n");
+                            close(fd);
+*/
+                            printf("DEBUG: About to call signal(SIGHUP, SIG_IGN).\n");
                             signal(SIGHUP, SIG_IGN);
+                            printf("DEBUG: Going into FORK switch.\n");
                             switch(fork()) // internal fork!!
                             {
                                 case -1:
+                                    printf("DEBUG: FORK switch case -1.\n");
                                     _exit(EXIT_FAILURE);
                                     break;
                                 case 0:
+                                    printf("DEBUG: FORK switch case 0.\n");
                                     signal(SIGHUP, SIG_IGN);
                                     unlink(syncfile);
-                                    execvp(command, commandline);
+                                    printf("DEBUG: About to execvp %s %s %s.\n", command, commandline[0], commandline[1]);
+                                    if (execvp(command, commandline) < 0) {
+                                       printf("DEBUG: execvp failed.\n");
+                                    }
                                     _exit(EXIT_FAILURE);
                                     break;
                                 default:
+                                    printf("DEBUG: FORK switch default.\n");
                                     break;
                             }
                             _exit(EXIT_SUCCESS);
                             break;
                         case -1:
+                            printf("DEBUG: PID switch case -1.\n");
                             unlink(syncfile);
                             return EXIT_FAILURE;
                             break;
                         default:
+                            printf("DEBUG: PID switch case default.\n");
                             waitpid(pid, &status, 0);
                             // Wait (max 20 seconds!!!) for the syncfile to be removed!!!
+                            printf("DEBUG: Waiting for the syncfile to be removed.\n");
                             for(status = 0; status < 20; status++)
                             {
                                 if(access(syncfile, F_OK) == 0)
@@ -108,15 +156,19 @@ int main(int argc, char **argv)
                             }
                             if(access(syncfile, F_OK) == 0)
                             {
+                                printf("DEBUG: Syncfile error.\n");
                                 // Enter here on error
                                 unlink(syncfile);
                             }
                             else
                             {
+                                printf("DEBUG: Syncfile success.\n");
                                 // Enter here on success!!!!!!
-                                usleep(50000);
+                                printf("DEBUG: usleeping for 5000000, hope that is long enough for gedit to respawn.\n");
+                                usleep(5000000);
                                 unlink(lockfile);
                             }
+                            printf("DEBUG: About to return SUCCESS.\n");
                             return EXIT_SUCCESS;
                             break;
                     }
@@ -124,6 +176,7 @@ int main(int argc, char **argv)
             }
         }
     }
+    printf("DEBUG: About to return FAILURE.\n");
     return EXIT_FAILURE;
 }
 
diff -up beesu-2.7/gedit-beesu-plugin-0.4/Makefile.in.fix beesu-2.7/gedit-beesu-plugin-0.4/Makefile.in
--- beesu-2.7/gedit-beesu-plugin-0.4/Makefile.in.fix	2010-11-04 16:39:29.000000000 -0400
+++ beesu-2.7/gedit-beesu-plugin-0.4/Makefile.in	2012-03-01 16:54:11.497145456 -0500
@@ -13,19 +13,19 @@ all:
 
 # To install things in the right place
 install:
-	$(MKDIR) -v -p $(LIBDIR)/gedit-2/plugins
-	$(INSTALL) -p -m 644 beesu.gedit-plugin $(LIBDIR)/gedit-2/plugins
-	$(MKDIR) -v -p $(LIBDIR)/gedit-2/plugins/beesu
-	$(INSTALL) -p -m 644 beesu/__init__.py $(LIBDIR)/gedit-2/plugins/beesu
-	$(INSTALL) -p -m 644 beesu/beesu.py $(LIBDIR)/gedit-2/plugins/beesu
+	$(MKDIR) -v -p $(LIBDIR)/gedit/plugins
+	$(INSTALL) -p -m 644 beesu.gedit-plugin $(LIBDIR)/gedit/plugins/beesu.plugin
+	$(MKDIR) -v -p $(LIBDIR)/gedit/plugins/beesu
+	$(INSTALL) -p -m 644 beesu/__init__.py $(LIBDIR)/gedit/plugins/beesu
+	$(INSTALL) -p -m 644 beesu/beesu.py $(LIBDIR)/gedit/plugins/beesu
 	$(MKDIR) -v -p $(LIBEXECDIR)
 	$(INSTALL) -p -m 755 libexec/gedit-beesu-plugin $(LIBEXECDIR)/
 
 # uninstall
 uninstall:
 	$(RM) $(LIBEXECDIR)/gedit-beesu-plugin
-	$(RM) $(LIBDIR)/gedit-2/plugins/beesu/beesu.py
-	$(RM) $(LIBDIR)/gedit-2/plugins/beesu/__init__.py
-	$(RM) $(LIBDIR)/gedit-2/plugins/beesu.gedit-plugin
-	$(RMDIR) $(LIBDIR)/gedit-2/plugins/beesu
+	$(RM) $(LIBDIR)/gedit/plugins/beesu/beesu.py
+	$(RM) $(LIBDIR)/gedit/plugins/beesu/__init__.py
+	$(RM) $(LIBDIR)/gedit/plugins/beesu.plugin
+	$(RMDIR) $(LIBDIR)/gedit/plugins/beesu
 
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin