LINUX.ORG.RU

emacs python exec curent buffer

 


1

1

Значит что мне необходимо: 1. Отправить на выполнение текущий буфер(перед этим сохранить его) 2. Поиск .env. Если .env нет в текущей директории и выше, вплоть до ~, то использовать системный python, иначе - использовать .env/bin/python. 3. Прерывание процесса исполнения

Частично решил: 1.

(setq compilation-ask-about-save nil) ; don't ask save y/n before compile

;; PYTHON
(defun my-compile ()
  "Use compile to run python programs"
  (interactive)
  (compile (concat "python " (buffer-name))))
(setq compilation-scroll-output t)
(global-set-key (kbd "C-x r") (lambda () (interactive) (setq current-prefix-arg '(4)) (call-interactively 'my-compile)))

По C-x r происходит выполнение скрипта.

2. Есть на вим функция, честно говоря не знаю как ее переписать

function LoadVirtualEnv(path)
    let activate_this = a:path . '/bin/activate_this.py'
    if getftype(a:path) == "dir" && filereadable(activate_this)
        python << EOF
import vim
activate_this = vim.eval('l:activate_this')
execfile(activate_this, dict(__file__=activate_this))
EOF
    endif
endfunction

function CheckVirtualEnv(env)
    let s:old_path=expand('%:p:h')
    while !isdirectory(a:env) && getcwd () != "/"
        cd ..
    endwhile
    cd .
    call LoadVirtualEnv(getcwd() . "/" . a:env)
    execute 'cd' fnameescape(s:old_path)

    " set keywordprg=pydocX.Y
    let res=split(system('python --version'))[1][:-3]
    execute('set keywordprg='.'pydoc'.res)
endfunction

3. Я делаю так: ibuffer, выбираю compilation, потом C-x k. Но чувствую, что я делаю неправильно

★★★★

Поиск .env (возвращает путь или nil):

(defun find-dot-env ()
  (let ((dir (locate-dominating-file default-directory ".env")))
    (and dir (expand-file-name ".env" dir))))
theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

1) + 2) combined

Коду не хватает dash.el и f.el.

(defun find-dot-env ()
  (let ((dir (locate-dominating-file default-directory ".env")))
    (and dir (expand-file-name ".env" dir))))

(defun find-python ()
  (let ((dot-env (find-dot-env)))
    (if dot-env
        (concat dot-env "/bin/python")
      "python")))

(defun my-compile ()
  (interactive)
  (basic-save-buffer)
  (compile (concat (find-python) " " buffer-file-name)))
theNamelessOne ★★★★★
()
Последнее исправление: theNamelessOne (всего исправлений: 1)

Я делаю так: ibuffer, выбираю compilation, потом C-x k. Но чувствую, что я делаю неправильно

Можно навесить хоткей на kill-compilation.

theNamelessOne ★★★★★
()

Всем спасибо. Исчерпывающе!

bryak ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.