Emacs: аргументы передачи нижнему Python окружают во время буферной оценки

недавно я начал использовать Emacs в качестве IDE Python и этого не совсем интуитивный... Проблема, с которой я борюсь прямо сейчас, состоит в том, как передать параметры командной строки нижней оболочке Python, когда буфер оценен с C-c C-c. Спасибо за справку.

6
задан Luke Girvin 8 February 2012 в 23:25
поделиться

1 ответ

Это не представляется возможным; ущербный процесс, управляемый модулем python.el, предназначен для сохранения множества вызовов python-send-buffer (и его друзей). Одно из решений, которое я нашел - написать собственную функцию, которая устанавливает sys.argv программно изнутри нижестоящего процесса:

(defun python-send-buffer-with-my-args (args)
  (interactive "sPython arguments: ")
  (let ((source-buffer (current-buffer)))
    (with-temp-buffer
      (insert "import sys; sys.argv = '''" args "'''.split()\n")
      (insert-buffer-substring source-buffer)
      (python-send-buffer))))

Выполните эту функцию в вашем *scratch* буфере и/или сохраните ее в вашем .emacs файле, затем, если хотите, привяжите ее к удобной последовательности клавиш. C-c C-a, похоже, не используется python-mode, поэтому, возможно:

(global-set-key "\C-c\C-a" 'python-send-buffer-with-my-args)

Команда запросит у вас аргументы для использования, затем скопирует ваш исходный буфер во временный буфер, дополнив его фрагментом кода, который установит sys.argv в список аргументов, которые вы предоставили, и, наконец, вызовет python-send-buffer.

Приведенный выше код просто наивно разделит введенную вами строку на пробельные символы, поэтому если вам нужно предоставить аргументы, содержащие пробелы, вам понадобится более сложный алгоритм.

7
ответ дан 17 December 2019 в 00:04
поделиться