Domanda

In modalità Python, esiste una funzione chiamata py-execute-region che invia una regione evidenziata di codice al buffer Python per la valutazione. Dopo la valutazione, il cursore si trova nel buffer di Python, ma preferirei che rimanga nel buffer di script in modo da poter continuare a produrre più codice. Ho scritto una semplice funzione di consulenza:

(defadvice py-execute-region                                                
   (after py-execute-region-other-window activate)                          
   """ After execution, return cursor to script buffer """                  
   (other-window 1)                                                         
) 

Ma questo non fa assolutamente nulla. Ho provato altre varianti come usare 'around' piuttosto che 'after'; impostando una variabile sul nome del buffer dello script e quindi pop-to-buffer su quel buffer e cose del genere. Nessun successo! Mi chiedo se la meccanica di questo sia ovvia per qualcuno ... Grazie!

È stato utile?

Soluzione

In questo caso la soluzione sembra essere

(custom-set-variables
 '(py-shell-switch-buffers-on-execute nil))

Altri suggerimenti

Usa il suggerimento per concludere la funzione in una chiamata a save-window-excursion , che ripristinerà la finestra precedente configurazione dopo il completamento del comando.

(defadvice py-execute-region
   (around preserve-window-configuration activate)
   "After execution, return cursor to script buffer"
   (save-window-excursion ad-do-it))

Tieni presente, tuttavia, che se il buffer Python non era già mostrato, sarà comunque nascosto dopo il completamento del comando. Per rimediare a ciò, puoi aggiungere un altro consiglio per chiamare switch-to-buffer-other-window in fine:

(defadvice py-execute-region
   (after show-pybuf-other-window activate)
   "After execution, show the python buffer in another window."
   (switch-to-buffer-other-window "[PYTHON BUFFER NAME]"))

Inoltre, assicurati di non utilizzare " " " triple virgolette " " " in elisp. Io non pensa che funzionino.

Quello che hai lì funziona bene per me. E dovrebbe attivarsi automaticamente, quindi un'attivazione separata non dovrebbe essere necessaria. Tuttavia, è necessario disattivare e riattivare i consigli per rendere effettive le modifiche:

1) definisce e attiva i consigli

2) non fa quello che vuoi, quindi cambia i consigli

3) disattivalo: (ad-disable 'py-execute-region)

4) riattivalo: (ad-activ 'py-execute-region)

Il passaggio 4 dovrebbe rilevare le modifiche apportate al passaggio 2. In alternativa, è possibile modificare il codice nel passaggio 2 e quindi rivalutare il codice nel passaggio 4 (presupponendo che sia impostato il flag di attivazione).

In realtà non l'ho provato, ma ho fatto qualcosa di simile per find-file, e lì dovevo chiamare interattivo prima di chiamare other-window. In realtà non ho idea reale di Emacs Lisp, ma potrebbe funzionare.

(defadvice py-execute-region                                                
   (after py-execute-region-other-window activate)                          
   (interactive)
   (other-window 1)                                                         
)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top