(self, widget, event=None)
return(True)
Display the context menu
Display the context menu
Display the context menu
def show(self, widget, event=None):
        """Display the context menu"""
        terminal = self.terminal

        menu = Gtk.Menu()
        self.popup_menu = menu
        url = None
        button = None
        time = None

        self.config.set_profile(terminal.get_profile())

        if event:
            url = terminal.vte.match_check_event(event)
            button = event.button
            time = event.time
        else:
            time = 0
            button = 3

        if url and url[0]:
            dbg("URL matches id: %d" % url[1])
            if not url[1] in list(terminal.matches.values()):
                err("Unknown URL match id: %d" % url[1])
                dbg("Available matches: %s" % terminal.matches)

            nameopen = None
            namecopy = None
            if url[1] == terminal.matches['email']:
                nameopen = _('_Send email to...')
                namecopy = _('_Copy email address')
            elif url[1] == terminal.matches['voip']:
                nameopen = _('Ca_ll VoIP address')
                namecopy = _('_Copy VoIP address')
            elif url[1] in list(terminal.matches.values()):
                # This is a plugin match
                for pluginname in terminal.matches:
                    if terminal.matches[pluginname] == url[1]:
                        break

                dbg("Found match ID (%d) in terminal.matches plugin %s" %
                        (url[1], pluginname))
                registry = plugin.PluginRegistry()
                registry.load_plugins()
                plugins = registry.get_plugins_by_capability('url_handler')
                for urlplugin in plugins:
                    if urlplugin.handler_name == pluginname:
                        dbg("Identified matching plugin: %s" %
                                urlplugin.handler_name)
                        nameopen = _(urlplugin.nameopen)
                        namecopy = _(urlplugin.namecopy)
                        break

            if not nameopen:
                nameopen = _('_Open link')
            if not namecopy:
                namecopy = _('_Copy address')

            icon = Gtk.Image.new_from_stock(Gtk.STOCK_JUMP_TO,
                                            Gtk.IconSize.MENU)
            item = Gtk.ImageMenuItem.new_with_mnemonic(nameopen)
            item.set_property('image', icon)
            item.connect('activate', lambda x: terminal.open_url(url, True))
            menu.append(item)

            item = Gtk.MenuItem.new_with_mnemonic(namecopy)
            item.connect('activate', 
                         lambda x: terminal.clipboard.set_text(terminal.prepare_url(url), len(terminal.prepare_url(url))))
            menu.append(item)

            menu.append(Gtk.SeparatorMenuItem())

        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Copy'))
        item.connect('activate', lambda x: terminal.vte.copy_clipboard())
        item.set_sensitive(terminal.vte.get_has_selection())
        menu.append(item)

        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Paste'))
        item.connect('activate', lambda x: terminal.paste_clipboard())
        menu.append(item)

        menu.append(Gtk.SeparatorMenuItem())

        item = Gtk.ImageMenuItem.new_with_mnemonic(_('Set W_indow Title'))
        item.connect('activate', lambda x: terminal.key_edit_window_title())
        menu.append(item)
        
        if not terminal.is_zoomed():
            item = Gtk.ImageMenuItem.new_with_mnemonic(_('Split H_orizontally'))
            image = Gtk.Image()
            image.set_from_icon_name(APP_NAME + '_horiz', Gtk.IconSize.MENU)
            item.set_image(image)
            if hasattr(item, 'set_always_show_image'):
                item.set_always_show_image(True)
            item.connect('activate', lambda x: terminal.emit('split-horiz',
                self.terminal.get_cwd()))
            menu.append(item)

            item = Gtk.ImageMenuItem.new_with_mnemonic(_('Split V_ertically'))
            image = Gtk.Image()
            image.set_from_icon_name(APP_NAME + '_vert', Gtk.IconSize.MENU)
            item.set_image(image)
            if hasattr(item, 'set_always_show_image'):
                item.set_always_show_image(True)
            item.connect('activate', lambda x: terminal.emit('split-vert',
                self.terminal.get_cwd()))
            menu.append(item)

            item = Gtk.MenuItem.new_with_mnemonic(_('Open _Tab'))
            item.connect('activate', lambda x: terminal.emit('tab-new', False,
                terminal))
            menu.append(item)

            if self.terminator.debug_address is not None:
                item = Gtk.MenuItem.new_with_mnemonic(_('Open _Debug Tab'))
                item.connect('activate', lambda x:
                        terminal.emit('tab-new', True, terminal))
                menu.append(item)

            menu.append(Gtk.SeparatorMenuItem())

        item = Gtk.ImageMenuItem.new_with_mnemonic(_('_Close'))
        item.connect('activate', lambda x: terminal.close())
        menu.append(item)

        menu.append(Gtk.SeparatorMenuItem())

        if not terminal.is_zoomed():
            sensitive = not terminal.get_toplevel() == terminal.get_parent()

            item = Gtk.MenuItem.new_with_mnemonic(_('_Zoom terminal'))
            item.connect('activate', terminal.zoom)
            item.set_sensitive(sensitive)
            menu.append(item)

            item = Gtk.MenuItem.new_with_mnemonic(_('Ma_ximize terminal'))
            item.connect('activate', terminal.maximise)
            item.set_sensitive(sensitive)
            menu.append(item)

            menu.append(Gtk.SeparatorMenuItem())
        else:
            item = Gtk.MenuItem.new_with_mnemonic(_('_Restore all terminals'))
            item.connect('activate', terminal.unzoom)
            menu.append(item)

            menu.append(Gtk.SeparatorMenuItem())

        if self.config['show_titlebar'] == False:
            item = Gtk.MenuItem.new_with_mnemonic(_('Grouping'))
            submenu = self.terminal.populate_group_menu()
            submenu.show_all()
            item.set_submenu(submenu)
            menu.append(item)
            menu.append(Gtk.SeparatorMenuItem())

        if terminal.is_held_open:
            item = Gtk.MenuItem.new_with_mnemonic(_('Relaunch Command'))
            item.connect('activate', lambda x: terminal.spawn_child())
            menu.append(item)
            menu.append(Gtk.SeparatorMenuItem())

        item = Gtk.CheckMenuItem.new_with_mnemonic(_('Show _scrollbar'))
        item.set_active(terminal.scrollbar.get_property('visible'))
        item.connect('toggled', lambda x: terminal.do_scrollbar_toggle())
        menu.append(item)

        if hasattr(Gtk, 'Builder'):  # VERIFY FOR GTK3: is this ever false?
            item = Gtk.MenuItem.new_with_mnemonic(_('_Preferences'))
            item.connect('activate', lambda x: PrefsEditor(self.terminal))
            menu.append(item)

        profilelist = sorted(self.config.list_profiles(), key=str.lower)

        if len(profilelist) > 1:
            item = Gtk.MenuItem.new_with_mnemonic(_('Profiles'))
            submenu = Gtk.Menu()
            item.set_submenu(submenu)
            menu.append(item)

            current = terminal.get_profile()

            group = None

            for profile in profilelist:
                profile_label = profile
                if profile_label == 'default':
                    profile_label = profile.capitalize()
                item = Gtk.RadioMenuItem(profile_label, group)
                if profile == current:
                    item.set_active(True)
                item.connect('activate', terminal.force_set_profile, profile)
                submenu.append(item)

        self.add_layout_launcher(menu)

        try:
            menuitems = []
            registry = plugin.PluginRegistry()
            registry.load_plugins()
            plugins = registry.get_plugins_by_capability('terminal_menu')
            for menuplugin in plugins:
                menuplugin.callback(menuitems, menu, terminal)
            
            if len(menuitems) > 0:
                menu.append(Gtk.SeparatorMenuItem())

            for menuitem in menuitems:
                menu.append(menuitem)
        except Exception as ex:
            err('TerminalPopupMenu::show: %s' % ex)

        menu.show_all()
        menu.popup_at_pointer(None)

        return(True)
def show ( self , widget , event = None ) : terminal = self . terminal menu = Gtk . Menu ( ) self . popup_menu = menu url = None button = None time = None self . config . set_profile ( terminal . get_profile ( ) ) if event : url = terminal . vte . match_check_event ( event ) button = event . button time = event . time else : time = 0 button = 3 if url and url [ 0 ] : dbg ( "URL matches id: %d" % url [ 1 ] ) if not url [ 1 ] in list ( terminal . matches . values ( ) ) : err ( "Unknown URL match id: %d" % url [ 1 ] ) dbg ( "Available matches: %s" % terminal . matches ) nameopen = None namecopy = None if url [ 1 ] == terminal . matches [ 'email' ] : nameopen = _ ( '_Send email to...' ) namecopy = _ ( '_Copy email address' ) elif url [ 1 ] == terminal . matches [ 'voip' ] : nameopen = _ ( 'Ca_ll VoIP address' ) namecopy = _ ( '_Copy VoIP address' ) elif url [ 1 ] in list ( terminal . matches . values ( ) ) : # This is a plugin match for pluginname in terminal . matches : if terminal . matches [ pluginname ] == url [ 1 ] : break dbg ( "Found match ID (%d) in terminal.matches plugin %s" % ( url [ 1 ] , pluginname ) ) registry = plugin . PluginRegistry ( ) registry . load_plugins ( ) plugins = registry . get_plugins_by_capability ( 'url_handler' ) for urlplugin in plugins : if urlplugin . handler_name == pluginname : dbg ( "Identified matching plugin: %s" % urlplugin . handler_name ) nameopen = _ ( urlplugin . nameopen ) namecopy = _ ( urlplugin . namecopy ) break if not nameopen : nameopen = _ ( '_Open link' ) if not namecopy : namecopy = _ ( '_Copy address' ) icon = Gtk . Image . new_from_stock ( Gtk . STOCK_JUMP_TO , Gtk . IconSize . MENU ) item = Gtk . ImageMenuItem . new_with_mnemonic ( nameopen ) item . set_property ( 'image' , icon ) item . connect ( 'activate' , lambda x : terminal . open_url ( url , True ) ) menu . append ( item ) item = Gtk . MenuItem . new_with_mnemonic ( namecopy ) item . connect ( 'activate' , lambda x : terminal . clipboard . set_text ( terminal . prepare_url ( url ) , len ( terminal . prepare_url ( url ) ) ) ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( '_Copy' ) ) item . connect ( 'activate' , lambda x : terminal . vte . copy_clipboard ( ) ) item . set_sensitive ( terminal . vte . get_has_selection ( ) ) menu . append ( item ) item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( '_Paste' ) ) item . connect ( 'activate' , lambda x : terminal . paste_clipboard ( ) ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( 'Set W_indow Title' ) ) item . connect ( 'activate' , lambda x : terminal . key_edit_window_title ( ) ) menu . append ( item ) if not terminal . is_zoomed ( ) : item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( 'Split H_orizontally' ) ) image = Gtk . Image ( ) image . set_from_icon_name ( APP_NAME + '_horiz' , Gtk . IconSize . MENU ) item . set_image ( image ) if hasattr ( item , 'set_always_show_image' ) : item . set_always_show_image ( True ) item . connect ( 'activate' , lambda x : terminal . emit ( 'split-horiz' , self . terminal . get_cwd ( ) ) ) menu . append ( item ) item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( 'Split V_ertically' ) ) image = Gtk . Image ( ) image . set_from_icon_name ( APP_NAME + '_vert' , Gtk . IconSize . MENU ) item . set_image ( image ) if hasattr ( item , 'set_always_show_image' ) : item . set_always_show_image ( True ) item . connect ( 'activate' , lambda x : terminal . emit ( 'split-vert' , self . terminal . get_cwd ( ) ) ) menu . append ( item ) item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Open _Tab' ) ) item . connect ( 'activate' , lambda x : terminal . emit ( 'tab-new' , False , terminal ) ) menu . append ( item ) if self . terminator . debug_address is not None : item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Open _Debug Tab' ) ) item . connect ( 'activate' , lambda x : terminal . emit ( 'tab-new' , True , terminal ) ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) item = Gtk . ImageMenuItem . new_with_mnemonic ( _ ( '_Close' ) ) item . connect ( 'activate' , lambda x : terminal . close ( ) ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) if not terminal . is_zoomed ( ) : sensitive = not terminal . get_toplevel ( ) == terminal . get_parent ( ) item = Gtk . MenuItem . new_with_mnemonic ( _ ( '_Zoom terminal' ) ) item . connect ( 'activate' , terminal . zoom ) item . set_sensitive ( sensitive ) menu . append ( item ) item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Ma_ximize terminal' ) ) item . connect ( 'activate' , terminal . maximise ) item . set_sensitive ( sensitive ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) else : item = Gtk . MenuItem . new_with_mnemonic ( _ ( '_Restore all terminals' ) ) item . connect ( 'activate' , terminal . unzoom ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) if self . config [ 'show_titlebar' ] == False : item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Grouping' ) ) submenu = self . terminal . populate_group_menu ( ) submenu . show_all ( ) item . set_submenu ( submenu ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) if terminal . is_held_open : item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Relaunch Command' ) ) item . connect ( 'activate' , lambda x : terminal . spawn_child ( ) ) menu . append ( item ) menu . append ( Gtk . SeparatorMenuItem ( ) ) item = Gtk . CheckMenuItem . new_with_mnemonic ( _ ( 'Show _scrollbar' ) ) item . set_active ( terminal . scrollbar . get_property ( 'visible' ) ) item . connect ( 'toggled' , lambda x : terminal . do_scrollbar_toggle ( ) ) menu . append ( item ) if hasattr ( Gtk , 'Builder' ) : # VERIFY FOR GTK3: is this ever false? item = Gtk . MenuItem . new_with_mnemonic ( _ ( '_Preferences' ) ) item . connect ( 'activate' , lambda x : PrefsEditor ( self . terminal ) ) menu . append ( item ) profilelist = sorted ( self . config . list_profiles ( ) , key = str . lower ) if len ( profilelist ) > 1 : item = Gtk . MenuItem . new_with_mnemonic ( _ ( 'Profiles' ) ) submenu = Gtk . Menu ( ) item . set_submenu ( submenu ) menu . append ( item ) current = terminal . get_profile ( ) group = None for profile in profilelist : profile_label = profile if profile_label == 'default' : profile_label = profile . capitalize ( ) item = Gtk . RadioMenuItem ( profile_label , group ) if profile == current : item . set_active ( True ) item . connect ( 'activate' , terminal . force_set_profile , profile ) submenu . append ( item ) self . add_layout_launcher ( menu ) try : menuitems = [ ] registry = plugin . PluginRegistry ( ) registry . load_plugins ( ) plugins = registry . get_plugins_by_capability ( 'terminal_menu' ) for menuplugin in plugins : menuplugin . callback ( menuitems , menu , terminal ) if len ( menuitems ) > 0 : menu . append ( Gtk . SeparatorMenuItem ( ) ) for menuitem in menuitems : menu . append ( menuitem ) except Exception as ex : err ( 'TerminalPopupMenu::show: %s' % ex ) menu . show_all ( ) menu . popup_at_pointer ( None ) return ( True )