это IPython 5.0 и привязки клавиш в консоли




как установить jupyter notebook на windows (3)

Новый выпуск IPython больше не зависит от readline но использует чистый prompt-toolkit библиотеки Python, решающий проблемы обслуживания в системах Apple и Windows.

Новая функция - это возможность редактировать многострочный кодовый блок, используя клавиши курсора для свободного перемещения в кодовом блоке - с этой силой возникает, по крайней мере для меня, проблема: потому что ret вставляет новую строку в ваш код, чтобы передать весь блок интерпретатору, вы должны использовать сочетание клавиш alt + ret или, возможно, менее удобную последовательность клавиш esc, за которой следует ret .

Я говорю, что это проблема, потому что моим эмулятором терминала является XTerm, и во многих дистрибутивах Linux ярлык alt + ret не передается приложению, а используется непосредственно XTerm, в котором работает IPython, для переключить заполненность экрана указанного терминала (@ThomasDickey, помощник xterm и соавтор указали, что по умолчанию xterm не заботится о том, чтобы отправлять приложению бит модификатора на Enter, даже когда кто-либо отменяет действие Fullscreen).

По этой причине я хотел бы изменить хотя бы эту конкретную привязку ключа IPython.

Я нашел инструкции (вроде) для предыдущих версий, основанных на readline , IPython, которые не применимы к новой версии 5.0.

Мне понадобятся инструкции, которые помогут мне найти в документации пользователя IPython имена возможных действий, которые я могу связать, имена ярлыков, которые нужно связать с действиями, и процедуру, которую необходимо выполнить для настройки новой привязки ключа.

Не имея такого типа канонического ответа, я могу быть доволен рецептом для выполнения этого конкретного связывания клавиш с условием, что рецепт все еще работает в IPython 6.0


Вы можете изменить конфигурацию xterm.

xterm настраивается (и документируется). В руководстве xterm раздел « Привязки ключей по умолчанию » показывает привязку по умолчанию для этого ключа:

                        Alt <Key>Return:fullscreen() \n\

Вы можете подавить эту привязку несколькими способами:

  • использование ресурса omitTranslation для подавления функции
  • установка fullscreen ресурса never

Однако простое его подавление не заставит его посылать что-то интересное (xterm игнорирует модификатор Enter ). Настройка ресурса translation работает, например, в вашем файле $HOME/.Xdefaults :

*VT100*translations:      #override \n\ 
     Alt <Key>Return: string("\033[27;3;13~")

Изменение сочетаний клавиш в конфигурации при использовании prompt_toolkit (пока) невозможно; хотя это довольно легко, если вы устанавливаете IPython из исходного кода. Если вы посмотрите на файл IPython/terminal/shortcuts.py вы увидите, что он содержит различную логику; в частности вы найдете:

# Ctrl+J == Enter, seemingly
registry.add_binding(Keys.ControlJ,
                     filter=(HasFocus(DEFAULT_BUFFER)
                             & ~HasSelection()
                             & insert_mode
                    ))(newline_or_execute_outer(shell))

Это связывает CtrlJ (ввод) с функцией newline_or_execute_outer которая отвечает за добавление новых строк; это определится позже в файле. В частности, если вы дважды нажмете клавишу ввода в конце блока кода, он должен выполнить этот блок без необходимости использования других ярлыков.

Уберите логику, которая добавляет новые строки:

def execute_outer(shell):
    def execute(event):
        """When the user presses return, insert a newline or execute the code."""
        b = event.current_buffer

        # some logic to also dismiss the completer

        b.accept_action.validate_and_handle(event.cli, b)
    return execute

Свяжите это вокруг строки 20 с чем-то:

registry.add_binding(Keys.ControlE,
                     filter=(HasFocus(DEFAULT_BUFFER)
                             & ~HasSelection()
                             & insert_mode
                    ))(execute_outer(shell))

И наслаждаться. Если вы недовольны документацией, мы приветствуем помощь; Например, взять суть ответов и внести их обратно. Немного обидно читать резкие комментарии, когда мы говорим в заметках о выпуске:

New terminal interface

The overhaul of the terminal interface will probably cause a range of minor
issues for existing users. This is inevitable for such a significant
change, and weve done our best to minimise these issues. Some changes that
were aware of, with suggestions on how to handle them:

IPython no longer uses readline configuration (~/.inputrc). We hope that
the functionality you want (e.g. vi input mode) will be available by
configuring IPython directly (see Terminal IPython options). If somethings
missing, please file an issue.

...

Также приветствуется помощь в улучшении IPython для настройки настраиваемой привязки клавиш с именем действия, поэтому вы сможете ответить на свой вопрос.


Сочетания клавиш ctrl + j или ctrl + m подтверждают ввод.





xterm