readline 6.2.4.1을 기반으로, 변수 rl_completion_invoking_key의 값을 readline.c의 파이썬에 전달하고 새로운 readline.so를 생성하는 새로운 함수를 추가했습니다. 그런 다음 complete() 함수에서 호출하는 키에 따라 다른 동작을 결정할 수 있습니다.
readline.c:
static PyObject *
get_completion_invoking_key(PyObject *self, PyObject *noarg)
{
return PyInt_FromLong(rl_completion_invoking_key);
}
PyDoc_STRVAR(doc_get_completion_invoking_key,
"get_completion_invoking_key() -> int\n\
Get the invoking key of completion being attempted.");
static struct PyMethodDef readline_methods[] =
{
...
{"get_completion_invoking_key", get_completion_invoking_key,
METH_NOARGS, doc_get_completion_invoking_key},
...
}
in your own code:
readline.parse_and_bind("tab: complete") # invoking_key = 9
readline.parse_and_bind("space: complete") # invoking_key = 32
readline.parse_and_bind("?: complete") # invoking_key = 63
def complete(self, text, state):
invoking_key = readline.get_completion_invoking_key()
약간 다른 대답은 : 나는 충분히 readline에 모르겠지만, 필요한 경우 조정할 수있는, 비슷한 동작을 제공하는 순수한 파이썬 라이브러리가 : https://bitbucket.org/pypy/pyrepl은 –
재미있을 것 같아서 고맙습니다 .--) – C2H5OH