From: Dorai S. <ds...@ya...> - 2009-06-06 02:46:19
|
> From: Nikodemus Siivola <nik...@ra...> > > 2009/6/5 Dorai Sitaram : > > > What would be an appropriate function to put into *ed-functions* so that a > call to the > > function ED will call (console) vim? (I'm running 64-bit SBCL running on Mac > OS X Leopard.) > > Something like this, maybe? > > (require :sb-introspect) > > (define-alien-routine system int (command c-string)) Thanks! The SYSTEM definition hit the spot. I was going to be satisfied with (ED "string"); the introspection is a bonus. My own attempts involved using SB-EXT:RUN-PROGRAM, which either produced nothing or issued a warning about Vim's input not coming from a terminal. --d > (defun namestring-for-vim (thing) > (when thing > (typecase thing > (pathname > (native-namestring (translate-logical-pathname thing) :as-file t)) > (string > thing) > (t > (let* ((source (sb-introspect:find-definition-source > (fdefinition thing))) > (pathname (sb-introspect:definition-source-pathname source)) > (offset (or > (sb-introspect:definition-source-character-offset source) 0))) > (unless pathname > (error "Don't know where the definition of ~S is, sorry." thing)) > (format nil "-c \"goto ~A\" ~A" > offset > (namestring-for-vim pathname))))))) > > (defun ed-in-vim (thing) > (system (format nil "vim~@[ ~A~]" (namestring-for-vim thing)))) > > (push 'ed-in-vim *ed-functions*) > > ;;; Now all of (ed "/native/path/name.txt"), (ed #p"pathname"), and > (ed 'cons) should work -- of course the last one > ;;; assumes that the sources are in place. > > Cheers, > > -- Nikodemus |