⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 meldapp.py

📁 LINUX下的文件比较工具
💻 PY
📖 第 1 页 / 共 3 页
字号:
    def on_notebook_label_changed(self, component, text):        nbl = self.notebook.get_tab_label( component.widget )        nbl.label.set_text(text)        self.widget.set_title(text + " - Meld")        self.notebook.child_set_property(component.widget, "menu-label", text)    def on_can_undo(self, undosequence, can):        self.button_undo.set_sensitive(can)    def on_can_redo(self, undosequence, can):        self.button_redo.set_sensitive(can)    def on_size_allocate(self, window, rect):        self.prefs.window_size_x = rect.width        self.prefs.window_size_y = rect.height    #    # Toolbar and menu items (file)    #    def on_menu_file_new_activate(self, menuitem):        NewDocDialog(self, NewDocDialog.TYPE.DIFF2)    def on_menu_save_activate(self, menuitem):        self.current_doc().save()    def on_menu_save_as_activate(self, menuitem):        pane = self.current_doc()._get_focused_pane()        if pane >= 0:            self.current_doc().save_file(pane, 1)    def on_menu_refresh_activate(self, *args):        self.current_doc().refresh()    def on_menu_close_activate(self, *extra):        i = self.notebook.get_current_page()        if i >= 0:            page = self.notebook.get_nth_page(i).get_data("pyobject")            self.try_remove_page(page)    def on_menu_quit_activate(self, *extra):        if not developer:            for c in self.notebook.get_children():                response = c.get_data("pyobject").on_delete_event(appquit=1)                if response == gtk.RESPONSE_CANCEL:                    return gtk.RESPONSE_CANCEL                elif response == gtk.RESPONSE_CLOSE:                    break        for c in self.notebook.get_children():            c.get_data("pyobject").on_quit_event()        self.quit()        return gtk.RESPONSE_CLOSE    #    # Toolbar and menu items (edit)    #    def on_menu_undo_activate(self, *extra):        self.current_doc().on_undo_activate()    def on_menu_redo_activate(self, *extra):        self.current_doc().on_redo_activate()    def on_menu_refresh_activate(self, *extra):        self.current_doc().on_refresh_activate()    def on_menu_reload_activate(self, *extra):        self.current_doc().on_reload_activate()      def on_menu_find_activate(self, *extra):        self.current_doc().on_find_activate()    def on_menu_find_next_activate(self, *extra):        self.current_doc().on_find_next_activate()    def on_menu_replace_activate(self, *extra):        self.current_doc().on_replace_activate()    def on_menu_copy_activate(self, *extra):        self.current_doc().on_copy_activate()    def on_menu_cut_activate(self, *extra):        self.current_doc().on_cut_activate()    def on_menu_paste_activate(self, *extra):        self.current_doc().on_paste_activate()    #    # Toolbar and menu items (settings)    #    def on_menu_filter_activate(self, check):        print check, check.child.get_text()    def on_menu_preferences_activate(self, item):        PreferencesDialog(self)    #    # Toolbar and menu items (help)    #    def on_menu_meld_home_page_activate(self, button):        gnomeglade.url_show("http://meld.sourceforge.net")    def on_menu_help_bug_activate(self, button):        gnomeglade.url_show("http://bugzilla.gnome.org/buglist.cgi?product=meld")    def on_menu_users_manual_activate(self, button):        gnomeglade.url_show("ghelp:///"+os.path.abspath(paths.help_dir("C/meld.xml") ))    def on_menu_about_activate(self, *extra):        about = gtk.glade.XML(paths.share_dir("glade2/meldapp.glade"),"about").get_widget("about")        about.set_property("name", "Meld")        about.set_property("version", version)        about.show()    #    # Toolbar and menu items (misc)    #    def on_menu_magic_activate(self, *args):        for i in range(8):            self.append_filediff( ("ntest/file%ia"%i, "ntest/file%ib"%i) )            #self.append_filediff( ("ntest/file9a", "ntest/file9b") )        pass    def on_menu_edit_down_activate(self, *args):        misc.safe_apply( self.current_doc(), "next_diff", gtk.gdk.SCROLL_DOWN )    def on_menu_edit_up_activate(self, *args):        misc.safe_apply( self.current_doc(), "next_diff", gtk.gdk.SCROLL_UP )    def on_toolbar_new_clicked(self, *args):        NewDocDialog(self, NewDocDialog.TYPE.DIFF2)    def on_toolbar_stop_clicked(self, *args):        self.current_doc().stop()    def try_remove_page(self, page):        "See if a page will allow itself to be removed"        if page.on_delete_event() == gtk.RESPONSE_OK:            self.scheduler.remove_scheduler( page.scheduler )            i = self.notebook.page_num( page.widget )            assert(i>=0)            self.notebook.remove_page(i)            if self.notebook.get_n_pages() == 0:                self.widget.set_title("Meld")    def on_file_changed(self, srcpage, filename):        for c in self.notebook.get_children():            page = c.get_data("pyobject")            if page != srcpage:                page.on_file_changed(filename)    def _append_page(self, page, icon):        nbl = NotebookLabel(icon, onclose=lambda b: self.try_remove_page(page))        self.notebook.append_page( page.widget, nbl)        self.notebook.set_current_page( self.notebook.page_num(page.widget) )        self.scheduler.add_scheduler(page.scheduler)        page.connect("label-changed", self.on_notebook_label_changed)        page.connect("file-changed", self.on_file_changed)        page.connect("create-diff", lambda obj,arg: self.append_filediff(arg) )        page.connect("status-changed", lambda junk,arg: self.statusbar.set_doc_status(arg) )    def append_dirdiff(self, dirs):        assert len(dirs) in (1,2,3)        doc = dirdiff.DirDiff(self.prefs, len(dirs))        self._append_page(doc, "tree-folder-normal.png")        doc.set_locations(dirs)    def append_filediff(self, files):        assert len(files) in (1,2,3)        doc = filediff.FileDiff(self.prefs, len(files))        seq = doc.undosequence        seq.clear()        seq.connect("can-undo", self.on_can_undo)        seq.connect("can-redo", self.on_can_redo)        self._append_page(doc, "tree-file-normal.png")        doc.set_files(files)    def append_diff(self, paths):        aredirs = [ os.path.isdir(p) for p in paths ]        arefiles = [ os.path.isfile(p) for p in paths ]        if (1 in aredirs) and (1 in arefiles):            misc.run_dialog( _("Cannot compare a mixture of files and directories.\n"),                    parent = self,                    buttonstype = gtk.BUTTONS_OK)        elif 1 in aredirs:            self.append_dirdiff(paths)        else:            self.append_filediff(paths)    def append_vcview(self, locations):        assert len(locations) in (1,)        location = locations[0]        doc = vcview.VcView(self.prefs)        self._append_page(doc, "vc-icon.png")        doc.set_location(location)    #    # Current doc actions    #    def current_doc(self):        "Get the current doc or a dummy object if there is no current"        index = self.notebook.get_current_page()        if index >= 0:            return self.notebook.get_nth_page(index).get_data("pyobject")        class DummyDoc(object):            def __getattr__(self, a): return lambda *x: None        return DummyDoc()    #    # Usage    #    def usage(self, msg):        response = misc.run_dialog(msg,            self,            gtk.MESSAGE_ERROR,            gtk.BUTTONS_NONE,            [(gtk.STOCK_QUIT, gtk.RESPONSE_CANCEL), (gtk.STOCK_OK, gtk.RESPONSE_OK)] )        if response == gtk.RESPONSE_CANCEL:            sys.exit(0)                        ################################################################################## usage#################################################################################usage_string = _("""Meld is a file and directory comparison tool. Usage:    meld                        Start with no windows open    meld <dir>                  Start with VC browser in 'dir'    meld <file>                 Start with VC diff of 'file'    meld <file> <file> [file]   Start with 2 or 3 way file comparison    meld <dir>  <dir>  [dir]    Start with 2 or 3 way directory comparisonOptions:    -h, --help                  Show this help text and exit    -v, --version               Display the version and exitFor more information choose help -> contents.Report bugs at http://bugzilla.gnome.org/buglist.cgi?product=meldDiscuss meld at http://mail.gnome.org/mailman/listinfo/meld-list""")version_string = _("""Meld %sWritten by Stephen Kennedy <stevek@gnome.org>""") % version################################################################################## Main#################################################################################def main():    class Unbuffered(object):        def __init__(self, file):            self.file = file        def write(self, arg):            self.file.write(arg)            self.file.flush()        def __getattr__(self, attr):            return getattr(self.file, attr)    sys.stdout = Unbuffered(sys.stdout)    args = sys.argv[1:]    if args:        if "-h" in args or "--help" in args:            print usage_string            return        if "-v" in args or "--version" in args:            print version_string            return    app = MeldApp()    if len(args) == 0:        pass    elif len(args) == 1:        a = args[0]        if os.path.isfile(a):            doc = vcview.VcView(app.prefs)            def cleanup():                app.scheduler.remove_scheduler(doc.scheduler)            app.scheduler.add_task(cleanup)            app.scheduler.add_scheduler(doc.scheduler)            doc.set_location( os.path.dirname(a) )            doc.connect("create-diff", lambda obj,arg: app.append_diff(arg) )            doc.run_diff([a])        else:            app.append_vcview( [a] )                    elif len(args) in (2,3):        app.append_diff(args)    else:        app.usage( _("Wrong number of arguments (Got %i)") % len(args))    app.main()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -