|
|
|
|
|
by kazinator
1910 days ago
|
|
$ find /etc/network | ./frangi.tl
etc:
network:
if-post-down.d:
wireless-tools wpasupplicant avahi-daemon
if-down.d:
resolvconf wpasupplicant avahi-autoipd
interfaces.d interfaces if-pre-up.d:
wireless-tools wpasupplicant ethtool
if-up.d:
ntpdate wpasupplicant 000resolvconf openssh-server ethtool avahi-autoipd slrn avahi-daemon
$ find /etc/network | ./frangi-cheat.tl
/etc/network
/if-post-down.d
/wireless-tools
/wpasupplicant
/avahi-daemon
/if-down.d
/resolvconf
/wpasupplicant
/avahi-autoipd
/interfaces.d
/interfaces
/if-pre-up.d
/wireless-tools
/wpasupplicant
/ethtool
/if-up.d
/ntpdate
/wpasupplicant
/000resolvconf
/openssh-server
/ethtool
/avahi-autoipd
/slrn
/avahi-daemon
$ cat frangi-cheat.tl
#!/usr/bin/env txr
(let (old-path)
(whilet ((line (get-line)))
(whenlet ((path (tok #/[^\/]*/ line))
(canon `@{path "/"}`)
(pos (mismatch path old-path)))
(let ((cpos (max 0 (+ pos -1 [sum [path 0..pos] len]))))
(put-line `@{"" cpos}@{canon [cpos..:]}`))
(set old-path path))))
$ cat frangi.tl
#!/usr/bin/env txr
(defstruct (node name) list-builder
name
(:method equal (me) me.name)
(:method ensure-child (me child-name)
(let ((children me.(get)))
(or (find child-name me.(get))
(let ((new-child (new (node child-name))))
me.(add new-child)
new-child))))
(:method print (me stream : pretty-p)
(let* ((old-im (set-indent-mode stream indent-code))
(old-id (get-indent stream))
(children me.(get))
(is-bottom (none children .(get))))
(unwind-protect
(cond
(children
(put-line `@{me.name}:` stream)
(set-indent stream (+ old-id 4))
[mapdo (op print @1 stream) children]
(when is-bottom
(put-char #\newline stream)))
(t (put-string `@{me.name} `) stream))
(set-indent-mode stream old-im)
(set-indent stream old-id)))))
(let ((supernode (new (node :root))))
(whilet ((line (get-line)))
(let ((path (tok #/[^\/]+/ line))
(node supernode))
(each ((comp path))
(set node node.(ensure-child comp)))))
(each ((top-child supernode.(get)))
(pprinl top-child)))
|
|