Come si esegue la leva da Emacs


9

Durante la scrittura del codice RoR ho spesso bisogno di eseguire drop in una sessione di leva o un debugger. Quindi inserisco la mia binding.pryriga nel codice di implementazione ed eseguo le mie specifiche. Funziona bene se eseguo le specifiche in un terminale ma dall'interno di Emacs, ottengo un output disordinato ed è molto difficile usare il debugger / pry.

Come state ragazzi?

inserisci qui la descrizione dell'immagine

Risposte:


10

rspec-modeha recentemente aggiunto una sezione del README su questo argomento. Dice:

Installa inf-rubye aggiungi questo al tuo file init:

(add-hook 'after-init-hook 'inf-ruby-switch-setup)

Quando hai raggiunto il punto di interruzione, premi C-x C-qper abilitare inf-ruby.


1
Che funziona, ma purtroppo ha coloro codice di colore strano personaggi come ^[[0G, ^[[1A. Posso liberarmene?
calcedonio

Per uno dei codici di escape, consultare le istruzioni in basso: github.com/nonsequitur/inf-ruby#bugs . Se anche i codici colore rappresentano un problema (sul mio sistema, non lo fanno), aggiungi Pry.config.color = falseallo stesso modo della correzione suggerita lì.
Dmitry

6

Trovo che pry-remote sia il modo migliore per eseguire la leva all'interno di Emacs, da allora pry ottiene il suo buffer dedicato e può collegarsi a un processo ruby ​​da qualsiasi luogo (incluso un terminale non Emacs o cose come pow ). Uso qualcosa del genere:

(defun my-run-remote-pry (&rest args)
  (interactive)
  (let ((buffer (apply 'make-comint "pry-remote" "pry-remote" nil args)))
    (switch-to-buffer buffer)
    (setq-local comint-process-echoes t)))

(define-key ruby-mode-map (kbd "C-c r d") 'my-run-remote-pry) ; (or whatever keybinding)

Quindi, inserirai il binding.remote_prytuo codice; ti attacchi a un'attesa prycon C-c r d(o qualsiasi altra cosa) e esci dalla leva (continuando il processo) con C-c C-d.

Probabilmente vorrai anche disabilitare il paging nel tuo ~/.pryrc, poiché non gioca bene con comint:

Pry.config.pager = false
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.