From kde-core-devel Sun Dec 30 15:47:22 2001 From: Martijn Klingens Date: Sun, 30 Dec 2001 15:47:22 +0000 To: kde-core-devel Subject: PATCH/RFC dcop cmdline client X-MARC-Message: https://marc.info/?l=kde-core-devel&m=100972711811812 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--------------Boundary-00=_YIY5VLS451YJDR9Q5ZU6" --------------Boundary-00=_YIY5VLS451YJDR9Q5ZU6 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 8bit Attached is a patch that adds a truckload of options to dcop. Technically none of these options is new, the fact that I don't need to patch the dcop lib for this speaks for itself. Still, I think these options make a lot of sense, so I post them here for reviewing and commenting. In short there are now the following options to dcop, with the reasoning behind them: --pipe - Posted earlier already. Reads from stdin and does repeated DCOP calls. Reason for implementing: spawning a new dcop process from the shell for high-traffic text streams is too slow. This is a factor 100+ faster. Todo: find a decent name for this option. David already suggested just '-' to read from stdin, is that ok with everyone? --user/--all-users - Send DCOP message to a specific user or even to all users that have an active DCOP server. Reason: cron jobs, system processes and other apps without X11 connection may want this. Of course this only works if the user issuing dcop has access to the dcopserver socket and the ICE authority file. --session/--all-sessions - Send to a specific session of the given user(s) or to all sessions. Reason: those same processes that might like --user might also like to broadcast to multiple sessions. This allows a command like 'wall' to extend onto the desktop with something like 'dcop --all-users --all-sessions knotify "" messageBox "The system will be rebooted in 5 minutes. Please log out."' or whatever cool applications you can think of. --list-sessions - Convenience. List the sessions for the given user(s). Combined you could also do things like tail -f /var/log/httod/access.log | dcop --pipe --user martijn kwebmonitor "" accessLog %1 and so forth. Anyone wants to write kicker applets for this? ;-) There are also two questions with this. 1. Most important one: where should I put this? I would go for KDE CVS, but if everyone is against that the code can be forked for people who want this functionality (Rob for example). After all it doesn't require lib changes. A third option is to move the code to the dcop lib. I don't know if that makes sense, but it might do for console Qt apps. 2. What should I do with all the strings I introduced? dcop currently is Qt-only and doesn't know about klocale, so the strings are not i18n-able. Any ideas how to fix this? Other comments/flames/remarks/whatevers? Martijn --------------Boundary-00=_YIY5VLS451YJDR9Q5ZU6 Content-Type: application/x-gzip; name="dcop.diff.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="dcop.diff.gz" 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 --------------Boundary-00=_YIY5VLS451YJDR9Q5ZU6--