2005-05-22 05:20:44 -04:00
|
|
|
(define (list-of-processes? thing)
|
|
|
|
(and (proper-list? thing)
|
|
|
|
(every process-info? thing)))
|
|
|
|
|
2005-05-25 05:44:27 -04:00
|
|
|
(define (string-take-max s nchars)
|
|
|
|
(if (>= nchars (string-length s))
|
|
|
|
s
|
|
|
|
(string-take s nchars)))
|
|
|
|
|
|
|
|
(define (layout-process width p)
|
|
|
|
(string-take-max
|
|
|
|
(apply format
|
|
|
|
(append
|
|
|
|
(list #f "~A ~A ~A ~A '~A ~A'~%")
|
|
|
|
(map (lambda (s) (s p))
|
|
|
|
(list process-info-pid
|
|
|
|
process-info-ppid
|
|
|
|
process-info-real-uid
|
|
|
|
process-info-%cpu
|
|
|
|
process-info-executable
|
|
|
|
process-info-command-line))))
|
|
|
|
width))
|
|
|
|
|
2005-05-25 07:36:12 -04:00
|
|
|
(define (make-process-selection-list num-cols num-lines processes)
|
|
|
|
(let ((layout (lambda (p) (layout-process num-cols p))))
|
2005-05-25 05:44:27 -04:00
|
|
|
(make-select-list
|
2005-05-26 07:33:38 -04:00
|
|
|
(map
|
|
|
|
(lambda (p)
|
|
|
|
(make-unmarked-element p #t (layout-process num-cols p)))
|
|
|
|
processes)
|
2005-05-25 07:36:12 -04:00
|
|
|
num-lines)))
|
2005-05-20 11:20:34 -04:00
|
|
|
|
2005-05-30 15:19:36 -04:00
|
|
|
(define (make-pps-viewer)
|
|
|
|
(let ((processes #f)
|
|
|
|
(select-list #f))
|
|
|
|
(lambda (message)
|
|
|
|
(cond
|
2005-05-25 05:44:27 -04:00
|
|
|
|
2005-05-30 15:19:36 -04:00
|
|
|
((eq? message 'init)
|
|
|
|
(lambda (self process-list buffer)
|
|
|
|
(let ((num-cols (result-buffer-num-cols buffer))
|
|
|
|
(num-lines (result-buffer-num-lines buffer)))
|
|
|
|
(set! processes process-list)
|
|
|
|
(set! select-list
|
|
|
|
(make-process-selection-list
|
|
|
|
num-cols num-lines processes))
|
|
|
|
self)))
|
2005-05-25 05:44:27 -04:00
|
|
|
|
2005-05-30 15:19:36 -04:00
|
|
|
((eq? message 'paint)
|
|
|
|
(lambda (self . args)
|
|
|
|
(apply paint-selection-list
|
|
|
|
(cons select-list args))))
|
2005-05-25 05:44:27 -04:00
|
|
|
|
2005-05-30 15:19:36 -04:00
|
|
|
((eq? message 'key-press)
|
|
|
|
(lambda (self key control-x-pressed?)
|
|
|
|
(set! select-list
|
|
|
|
(select-list-handle-key-press select-list key))
|
|
|
|
self))
|
|
|
|
|
|
|
|
(else
|
|
|
|
(error "pps-viewer unknown message" message))))))
|
2005-05-20 11:20:34 -04:00
|
|
|
|
2005-05-22 11:05:25 -04:00
|
|
|
(register-plugin!
|
2005-05-30 15:19:36 -04:00
|
|
|
(make-view-plugin make-pps-viewer list-of-processes?))
|