blob: 205ed770c91e9a0efee4f26cecb6e844ab708b78 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
<herd>haskell</herd>
<herd>proxy-maintainers</herd>
<maintainer>
<email>haskell@gentoo.org</email>
</maintainer>
<longdescription>
D-Bus is a simple, message-based protocol for inter-process
communication, which allows applications to interact with other parts of
the machine and the user's session using remote procedure calls.
D-Bus is a essential part of the modern Linux desktop, where it replaces
earlier protocols such as CORBA and DCOP.
This library is an implementation of the D-Bus protocol in Haskell. It
can be used to add D-Bus support to Haskell applications, without the
awkward interfaces common to foreign bindings.
Example: connect to the session bus, and get a list of active names.
@
&#x7b;-\# LANGUAGE OverloadedStrings \#-&#x7d;
import Data.List (sort)
import DBus
import DBus.Client
main = do
&#x20; client <- connectSession
&#x20; //
&#x20; \-- Request a list of connected clients from the bus
&#x20; reply <- call_ client (methodCall \"\/org\/freedesktop\/DBus\" \"org.freedesktop.DBus\" \"ListNames\")
&#x20; &#x7b; methodCallDestination = Just \"org.freedesktop.DBus\"
&#x20; &#x7d;
&#x20; //
&#x20; \-- org.freedesktop.DBus.ListNames() returns a single value, which is
&#x20; \-- a list of names (here represented as [String])
&#x20; let Just names = fromVariant (methodReturnBody reply !! 0)
&#x20; //
&#x20; \-- Print each name on a line, sorted so reserved names are below
&#x20; \-- temporary names.
&#x20; mapM_ putStrLn (sort names)
@
>$ ghc --make list-names.hs
>$ ./list-names
>:1.0
>:1.1
>:1.10
>:1.106
>:1.109
>:1.110
>ca.desrt.dconf
>org.freedesktop.DBus
>org.freedesktop.Notifications
>org.freedesktop.secrets
>org.gnome.ScreenSaver
</longdescription>
</pkgmetadata>
|