[beesu/f15] really fix gedit plugin and fix nautilus issue

Tom Callaway spot at fedoraproject.org
Thu Mar 1 22:20:22 UTC 2012


commit 1c0ec16455da14dc2d5f3b19cebce8049d2e2bb4
Author: Tom Callaway <spot at fedoraproject.org>
Date:   Thu Mar 1 17:20:19 2012 -0500

    really fix gedit plugin and fix nautilus issue

 beesu-gedit-plugin-fix.patch    |  364 ++++++++++++++++++++++++++++++++++++++-
 beesu-nautilus-no-browser.patch |   10 +
 beesu.spec                      |    8 +-
 3 files changed, 378 insertions(+), 4 deletions(-)
---
diff --git a/beesu-gedit-plugin-fix.patch b/beesu-gedit-plugin-fix.patch
index f844aea..51e07d0 100644
--- a/beesu-gedit-plugin-fix.patch
+++ b/beesu-gedit-plugin-fix.patch
@@ -1,15 +1,373 @@
 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	2012-02-10 16:56:07.075334768 -0500
-+++ beesu-2.7/gedit-beesu-plugin-0.4/beesu.gedit-plugin	2012-02-10 16:56:13.722268371 -0500
+--- 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 at 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-02-10 16:54:13.781360974 -0500
++++ 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
diff --git a/beesu-nautilus-no-browser.patch b/beesu-nautilus-no-browser.patch
new file mode 100644
index 0000000..0fa9bd6
--- /dev/null
+++ b/beesu-nautilus-no-browser.patch
@@ -0,0 +1,10 @@
+--- beesu-2.7/nautilus-beesu-manager-1.7/libexec/scripts/Open Nautilus Here.nfix	2012-03-01 17:02:55.344922134 -0500
++++ beesu-2.7/nautilus-beesu-manager-1.7/libexec/scripts/Open Nautilus Here	2012-03-01 17:03:00.214873732 -0500
+@@ -6,6 +6,6 @@ else
+      while [ ! -z "$1" -a ! -d "$base/$1" ]; do shift; done
+      dir="$base/$1"
+ fi
+-beesu - nautilus --browser "$dir"
++beesu - nautilus "$dir"
+ # F12
+ /bin/true
diff --git a/beesu.spec b/beesu.spec
index 4f87771..a955b6a 100644
--- a/beesu.spec
+++ b/beesu.spec
@@ -5,7 +5,7 @@ Name: beesu
 Version: 2.7
 # Don't ever decrease this version (unless all beesu, nbm, and gbp update) or the subpackages will go backwards.
 # It is easier to do this than to track a separate release field.
-Release: 6%{?dist}
+Release: 7%{?dist}
 Summary: Graphical wrapper for su
 URL: http://www.honeybeenet.altervista.org
 Group: Applications/System
@@ -14,6 +14,7 @@ Source0: http://honeybeenet.altervista.org/beesu/files/beesu-sources/%{name}-%{v
 Source1: http://honeybeenet.altervista.org/beesu/files/beesu-manager/nautilus-beesu-manager-%{nbmversion}.tar.bz2
 Source2: http://honeybeenet.altervista.org/beesu/files/beesu-gedit/gedit-beesu-plugin-%{geditver}.tar.bz2
 Patch0:  beesu-gedit-plugin-fix.patch
+Patch1:  beesu-nautilus-no-browser.patch
 BuildRequires: desktop-file-utils
 Requires: pam, usermode
 
@@ -48,6 +49,7 @@ Open as root.
 %prep
 %setup -q -a1 -a2
 %patch0 -p1 -b .fix
+%patch1 -p1
 chmod -x nautilus-beesu-manager-%{nbmversion}/COPYING nautilus-beesu-manager-%{nbmversion}/README
 
 %build
@@ -123,6 +125,10 @@ fi
 %{_libexecdir}/gedit-beesu-plugin
 
 %changelog
+* Thu Mar  1 2012 Tom Callaway <spot at fedoraproject.org> - 2.7-7
+- remove --browser from nautilus invocation
+- fix gedit-beesu-plugin (this time for real)
+
 * Fri Feb 10 2012 Tom Callaway <spot at fedoraproject.org> - 2.7-6
 - fix gedit-beesu-plugin (bz 786734)
 


More information about the scm-commits mailing list