Como tempo comandos de shell arbitrários automaticamente no emacs?

4

Eu uso os shells inferiores do emacs, ou apenas o shell com frequência. Como trabalho principalmente em algas ML, meus comandos demoram muito tempo. Eu gostaria de habilitar a sincronização automática de todos os comandos executados em shells do emacs, para que eu não precise adicionar código de cola extra / feio e eu não precise "pensar previamente" sobre o tempo de execução. Quando executo um comando, seu tempo de execução deve ser logado automaticamente (a impressão em um buffer separado seria melhor), de modo que, se alguns parâmetros de repente levarem muito tempo, eu possa observar seu tempo de execução mais tarde. Todas as ideias são bem-vindas, obrigado.

    
por Pushpendre 18.03.2013 / 10:43

3 respostas

0

Uma forma de resolver isso com uma solução alternativa é configurar o prompt do shell para exibir a hora e, a cada vez que você executa, você terá o registro de data e hora anterior e o novo registro de data e hora assim que a tarefa for concluída. Isso provavelmente exigirá que você pressione antes de executar qualquer comando para obter um novo prompt e renovar o horário do dsiplay, mas isso não é um grande problema quando você deseja um temporizador impreciso rápido de vez em quando.

Para obter um prompt como 15:01:54 MyPath/MyDir> no bash, use

export PS1='\t \[3[01;32m\]\w>\[3[00m\] '

EDITAR Para o Windows, tente

PROMPT $T $P$G

para obter algo como 17:07:34.60 C:\Programs\Console2>

    
por 18.03.2013 / 15:01
1

Inspirado na resposta de gt, encontrei uma maneira de fazer isso em python. Para intérprete de python,
adicione o seguinte código a usercustomize.py dentro do seu diretório site-packages .

import time, sys

class ShowTime(object):
    def __str__(self):
        return time.strftime("%c", time.localtime())+" >>> "

sys.ps1=ShowTime()

Isso adicionará um prompt parecido com 03/21/13 13:10:42 >>>

EDITAR

fazendo apenas o que foi descrito acima, quebraria recursos úteis no modo python, como região de envio e buffer de envio. Basicamente, o modo python espera que o prompt corresponda a um regexp específico. (além: isso também significa que não há nenhum ponto em mudar o modo mais baixo, mais básico, comint.) De qualquer forma, nós mudamos a variável python-shell-prompt-alist em python.el para que ele corresponda ao prompt que temos set, em seguida, exclua python.elc e reinicie.

Mais cedo :

(defcustom python-shell-prompt-alist
   '(("ipython" . "^In \[[0-9]+\]: *")
    (t . "^>>> "))

Agora :

(defcustom python-shell-prompt-alist
  '(("ipython" . "^In \[[0-9]+\]: *")
    (t . "^[0-9][0-9]_[0-9][0-9]:[0-9][0-9]:[0-9][0-9]>>> "))

Isso corresponderá a um prompt do tipo time.strftime("%d_%H:%M:%S", time.localtime())+">>> "

    
por 21.03.2013 / 08:48
0

Eu tenho um método que funciona para mim no linux. Depende da função time . Talvez haja uma função semelhante no Windows.

Este método não é bom se você quiser usar um programa dentro do shell que não funciona, digamos python interativamente. Basta ver isso como uma idéia de como implementá-lo, mas realmente não é nada que eu recomende, a menos que você execute apenas funções shell / cmd dentro do * shell * -buffer.

Aqui vai:

No seu arquivo .emacs, adicione isto.

(defun my-send (proc cmd)
    (comint-simple-send proc (concat "time " cmd)))
(setq  comint-input-sender 'my-send)

Sempre que eu executo um comando, aparece assim (neste exemplo: durmo por 1 segundo)

$ sleep 1

real    0m1.132s
user    0m0.000s
sys     0m0.000s
    
por 21.03.2013 / 10:25

Tags