I've written a couple of simple dired commands to help me transition to an ``all-Edwin'' lifestyle -- I'd love to get some feedback on them from this list:
* DIRED-DO-SHELL-COMMAND * DIRED-RUN-PROGRAM-IN-BACKGROUND (not sure about this name, suggestions welcome) The code is below, along with questions. The first command is pretty straightforward. I don't like that it uses the UNIXism "&", though. I'd like to rewrite this in something portable to Windows, et al. There could just be a conditional that checks if Scheme is running on a non-UNIX system, but I'd be happy to use a more robust cross-platform idiom if y'all can recommend one. (define-command dired-do-shell-command "Run a shell command on the file or directory at point. Note that this is a synchronous operation; Edwin will not accept input until the shell command finishes." (lambda () (list ((environment-lookup (->environment '(edwin process)) 'shell-command-prompt) "Shell command on file: ") (command-argument))) (lambda (command pathname) (run-shell-command (string-append command " " (->namestring (dired-current-pathname)) " " "&")))) The second, DIRED-RUN-PROGRAM-IN-BACKGROUND, was written because Edwin was blocking on the call to RUN-SHELL-COMMAND in the above, even with the appended "&". It'd be cool to unify the two if there's a better way to get all this functionality into one command. (define-command dired-run-program-in-background "Run a program on the file or directory at point. This starts the program as a background subprocess, so you can continue using Edwin." (lambda () (let ((shell-command-prompt (environment-lookup (->environment '(edwin process)) 'shell-command-prompt))) (list (shell-command-prompt "With arguments: ") (shell-command-prompt "Run program on file: ") (command-argument)))) (lambda (user-args program-name pathname) (let* ((program (os/find-program program-name (user-homedir-pathname) (ref-variable exec-path))) ; modify in .edwin as needed (filename (->namestring (dired-current-pathname))) (arguments (list->vector (list user-args filename)))) (start-subprocess-in-background program arguments #f)))) (define-key 'dired #\! 'dired-do-shell-command) (define-key 'dired #\& 'dired-run-program-in-background) _______________________________________________ MIT-Scheme-devel mailing list MIT-Scheme-devel@gnu.org https://lists.gnu.org/mailman/listinfo/mit-scheme-devel