История изменений
Исправление theNamelessOne, (текущая версия) :
еще вариант
Тут ты изобрёл locate-dominating-file
.
Кстати, у меня не получается с local-set-key. Работает только с global-set-key. Почему так ?
Вангую, что из-за with-temp-buffer
. local-set-key
определяет биндинг в локальном keymap текущего буффера, который определяется с помощью функции (current-local-map)
. В большинстве случаев (как и в моём примере), локальный keymap — это keymap текущего major mode. Т.к. bryak:load-directory-specific-command
выполняется как хук к python-mode
, это биндинг определяется в python-mode-map
(это можно проверить, если выполнить (lookup-key python-mode-map [f5])
.
Однако, в твоём случае load
(и, соответственно, local-set-key
) выполняется не в контексте python-буффера, а в контексте временного буффера, созданного макросом with-temp-buffer
. Временный буффер выполняется в fundamental major mode, для которого current-local-map
возвращает nil
. В этом случае local-set-key
создаёт новый keymap для временного буфера, в котором и определяется биндинг, что не имеет никакого смысла/эффекта, т.к. а) этот буффер удаляется при выходе из with-temp-buffer
, б) у него свой keymap, в то время как тебе нужен python-mode-map
.
Твоё решение заработает, если вместо (local-set-key ...)
явно устанавливать биндинг для python-mode-map
: (define-key python-mode-map ...)
. Также ты можешь избавиться от with-temp-buffer
или вынести загрузку файла из блока with-temp-buffer
. Но такие решения не имеют никаких преимуществ перед решением с locate-dominating-file
+ local-set-key
.
Исправление theNamelessOne, :
еще вариант
Тут ты изобрёл locate-dominating-file
.
Кстати, у меня не получается с local-set-key. Работает только с global-set-key. Почему так ?
Вангую, что из-за with-temp-buffer
. local-set-key
определяет биндинг в локальном keymap текущего буффера, который определяется с помощью функции (current-local-map)
. В большинстве случаев (как и в моём примере), локальный keymap — это keymap текущего major mode. Т.к. bryak:load-directory-specific-command
выполняется как хук к python-mode
, это биндинг определяется в python-mode-map
(это можно проверить, если выполнить (lookup-key python-mode-map [f5])
.
Однако, в твоём случае load
(и, соответственно, local-set-key
) выполняется не в контексте python-буффера, а в контексте временного буффера, созданного макросом with-temp-buffer
. Временный буффер выполняется в fundamental major mode, для которого current-local-map
возвращает nil
. В этом случае local-set-key
создаёт новый keymap для временного буфера, в котором и определяется биндинг, что не имеет никакого смысла/эффекта, т.к. а) этот буффер удаляется при выходе из with-temp-buffer
, б) у него свой keymap, в то время как тебе нужен python-mode-map
.
Твоё решение заработает, если вместо (local-set-key ...)
явно устанавливать биндинг для python-mode-map
: (define-key python-mode-map ...)
. Также ты можешь избавиться от `with-temp-buffer` или вынести загрузку файла из `with-temp-buffer`. Но такие решения не имеют никаких преимуществ перед решением с locate-dominating-file
+ local-set-key
.
Исходная версия theNamelessOne, :
еще вариант
Тут ты изобрёл locate-dominating-file
.
Кстати, у меня не получается с local-set-key. Работает только с global-set-key. Почему так ?
Вангую, что из-за with-temp-buffer
. local-set-key
определяет биндинг в локальном keymap текущего буффера, который определяется с помощью функции (current-local-map)
. В большинстве случаев (как и в моём примере), локальный keymap — это keymap текущего major mode. Т.к. bryak:load-directory-specific-command
выполняется как хук к python-mode
, это биндинг определяется в python-mode-map
(это можно проверить, если выполнить (lookup-key python-mode-map [f5])
.
Однако, в твоём случае load
(и, соответственно, local-set-key
) выполняется не в контексте python-буффера, а в контексте временного буффера, созданного макросом with-temp-buffer
. Временный буффер выполняется в fundamental major mode, для которого current-local-map
возвращает nil
. В этом случае local-set-key
создаёт новый keymap для временного буфера, в котором и определяется биндинг, что не имеет никакого смысла/эффекта, т.к. а) этот буффер удаляется при выходе из with-temp-buffer
, б) у него свой keymap, в то время как тебе нужен python-mode-map
.
Твоё решение заработает, если вместо (local-set-key ...)
явно устанавливать биндинг для python-mode-map
: (define-key python-mode-map ...)
, но такое решение не имеет никаких преимуществ перед решением с locate-dominating-file
+ local-set-key
.