2011-08-30 11 views
5

Stavo cercando qualche codice da Elisp Cookbook, e inizialmente Io ho pensato che questo codice:elisp creare tampone senza nome dal contenuto del file di

(defun process-file (file) 
    "Read the contents of a file into a temp buffer and then do 
something there." 
    (when (file-readable-p file) 
    (with-temp-buffer 
     (insert-file-contents file) 
     (goto-char (point-min)) 
     (while (not (eobp)) 
     ;; do something here with buffer content 
     (forward-line))))) 

creerà una nuova (senza nome/non salvato) tampone sulla mia finestra emacs, avendo il contenuto di quel file (e magari aprirlo in primo piano). Tuttavia, questo non succede. Puoi guidarmi verso questo?

EDIT: Ho sperimentato un po ', e arrivati ​​a questo:

(defun myTest (file) 
    (interactive "f") 
    ; check if file is readable 
    (when (file-readable-p file) 
     ; create a new "untitled" buffer 
     (let ((myBuf (get-buffer-create "untitled"))) 
      ; make it the current displayed buffer 
      (switch-to-buffer myBuf) 
      (insert "Hello"))))   

È questo il modo per farlo?

Poiché si tratta di un buffer denominato "senza titolo", posso solo avere uno di questi in una sessione. C'è qualcosa che potrei usare per avere più di una, senza ricorrere a numeri casuali?

risposta

3

Il modo elisp per generare un nome di buffer univoco è utilizzare generate-new-buffer-name. La documentazione è:

(generate-new-buffer-name NAME &optional IGNORE) 

restituire una stringa che è il nome del tampone non esistente in base al nome. Se non ci sono buffer attivi denominati NAME, restituire NAME. Altrimenti, modifica il nome aggiungendo `', incrementando NUMBER (a partire da 2) fino a trovare un nome non utilizzato, quindi restituire tale nome. Il secondo argomento opzionale IGNORE specifica un nome che può essere utilizzato (se è nella sequenza da provare) anche se esiste un buffer con quel nome.

Problemi correlati