Ejemplo n.º 1
0
 def _run_kitten(self, kitten, args=(), type_of_input='none'):
     w = self.active_window
     tab = self.active_tab
     if w is not None and tab is not None and w.overlay_for is None:
         orig_args, args = list(args), list(args)
         args[0:0] = [config_dir, kitten]
         if type_of_input in ('text', 'history', 'ansi', 'ansi-history'):
             data = w.as_text(as_ansi='ansi' in type_of_input,
                              add_history='history'
                              in type_of_input).encode('utf-8')
         elif type_of_input == 'none':
             data = None
         else:
             raise ValueError(
                 'Unknown type_of_input: {}'.format(type_of_input))
         from kittens.runner import create_kitten_handler
         end_kitten = create_kitten_handler(kitten, orig_args)
         copts = {
             k: self.opts[k]
             for k in ('select_by_word_characters', 'open_url_with')
         }
         overlay_window = tab.new_special_window(
             SpecialWindow([
                 'kitty', '+runpy',
                 'from kittens.runner import main; main()'
             ] + args,
                           stdin=data,
                           env={
                               'KITTY_COMMON_OPTS': json.dumps(copts),
                               'PYTHONWARNINGS': 'ignore'
                           },
                           overlay_for=w.id))
         overlay_window.action_on_close = partial(self.on_kitten_finish,
                                                  w.id, end_kitten)
Ejemplo n.º 2
0
    def _run_kitten(self, kitten, args=(), input_data=None, window=None):
        orig_args, args = list(args), list(args)
        from kittens.runner import create_kitten_handler
        end_kitten = create_kitten_handler(kitten, orig_args)
        if window is None:
            w = self.active_window
            tab = self.active_tab
        else:
            w = window
            tab = w.tabref()
        if end_kitten.no_ui:
            end_kitten(None, getattr(w, 'id', None), self)
            return

        if w is not None and tab is not None and w.overlay_for is None:
            args[0:0] = [config_dir, kitten]
            if input_data is None:
                type_of_input = end_kitten.type_of_input
                if type_of_input in ('text', 'history', 'ansi', 'ansi-history',
                                     'screen', 'screen-history', 'screen-ansi',
                                     'screen-ansi-history'):
                    data = w.as_text(as_ansi='ansi' in type_of_input,
                                     add_history='history' in type_of_input,
                                     add_wrap_markers='screen'
                                     in type_of_input).encode('utf-8')
                elif type_of_input is None:
                    data = None
                else:
                    raise ValueError(
                        'Unknown type_of_input: {}'.format(type_of_input))
            else:
                data = input_data
            if isinstance(data, str):
                data = data.encode('utf-8')
            copts = {
                k: self.opts[k]
                for k in ('select_by_word_characters', 'open_url_with')
            }
            overlay_window = tab.new_special_window(
                SpecialWindow([
                    kitty_exe(), '+runpy',
                    'from kittens.runner import main; main()'
                ] + args,
                              stdin=data,
                              env={
                                  'KITTY_COMMON_OPTS': json.dumps(copts),
                                  'KITTY_CHILD_PID': w.child.pid,
                                  'PYTHONWARNINGS': 'ignore',
                                  'OVERLAID_WINDOW_LINES': str(w.screen.lines),
                                  'OVERLAID_WINDOW_COLS':
                                  str(w.screen.columns),
                              },
                              cwd=w.cwd_of_child,
                              overlay_for=w.id))
            overlay_window.action_on_close = partial(self.on_kitten_finish,
                                                     w.id, end_kitten)
            return overlay_window