summaryrefslogtreecommitdiff
path: root/portland/libxdg-vfs/xdg-vfs-gnome/README
blob: 177431fde286224d72ade4e427794a77be9d4517 (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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
XDG_VFS_GNOME
=============

xdg_vfs_gnome is a command line client for gnome-vfs. It can read and write
files, list directories, open file-dialogs,... File-data is not stored in
temporary files, but instead is pushed/pulled via stdin and stdout.

xdg_vfs_gnome is linked to the gnomeui libraries and therefore will pop up password dialogs etc. (which the gnome-vfs command line utilities can't)

The aim of 'xdg_vfs_gnome' is to give third party desktop applications access
to Gnome-VFS without linking to the Gnome-libraries directly. It could be hidden behind a generic 'xdg_vfs' script, which switches between KIO, 
Gnome-VFS,... command line clients.


Samples:
========

-) reading a file

$ xdg_vfs_gnome get file:///etc/lilo.conf

$ xdg_vfs_gnome get http://www.freedesktop.org

will stream a remote file to stdout which could be read into the hosts
applications memory via the C-function popen(..,'r');

$ xdg_vfs_gnome openfiledlg --instant-get

will open a file-dialog to browse to a remote or local file and instantly 
stream the file-data of the selected file to stdout.

$ xdg_vfs_gnome openfiledlg --instant-get --qry-fileinfo --slow-mime --tagged

By adding those switches xdg_vfs_gnome will also 'stat' the remote file and
try to detect it's mime-type, size,...

-) writing a file

$ cat /etc/passwd | xdg_vfs_gnome put ftp://user@host/mydir/file.txt

or use something like popen(..,'w') to stream file-data to create a remote file.

-) listing a directory

$ xdg_vfs_gnome ls sftp://user@host/dir/


There are two operation modes: 
==============================

*) single command 

*) shell mode (like the command-line ftp client). In shell mode the
   host application can talk to 'xdg_vfs_gnome' by connecting to the
   stdin and stdout pipes to execute a sequence of vfs commands.
   (for instance QProcess or functions like g_spawn_async_with_pipes() allow
   connecting to stdin and stdout of a child process)

The advantage of shell mode is that passwords are kept in memory 
(the user doesn't have log in again and again) and avoiding startup-delay
when executing multiple commands (for instance if the client application
is a file-manager)

Tagged-mode:
============

the -t, --tagged option tells xdg_gnome_vfs to add 'labels' when a command
returns multiple 'parts'. For instance 

> xdg_vfs_gnome openfiledlg --instant-get --qry-fileinfo --tagged

will return an [OpenFileDlg], a [FileInfo] and a [Data] section.

Escaping file data:
===================

When operating in shell- or tagged- mode you will need an escape character 
to signal the end of binary data. This is done via the -e and --escape-data 
switch. By default '~' is the escape character. '~~' has to be treated as
single '~' and '~\n' as EOF. The escape-character can be changed by 
the -e35 or --escape-data=35 option. (when you want to use '#' ASCII 35 as escape
character)

Usage screen:
=============

Usage: xdg_vfs [command] [options] [filename]

  Commands:
      get  [filename]            : remote file->stdout
      info [file or dir]         : stat a remote file->stdout
      put  [filename]            : stdin->create remote file
      ls   [dir]                 : list directory
      openfiledlg [dir]          : show open file dialog and return selected file
      savefiledlg [dir] [fname]  : show save file dialog and return selected file
      shell                      : interactive mode

  Options:
      -t, --tagged               : tagged mode (file-data should be escaped)
      -i, --qry-fileinfo         : qry file-info when retrieving a file
      --show-metadata            : show metadata when retrieving a file
                                   requires tagged mode!
      -m, --slow-mime            : more accurate mime-type detection (slow)
      -e, --escape-data          : escape file data (for end of data detection)
      -eXXX, --escape-data=XXX   : set and use a user defined escape character
                                   XXX = ascii code!
      --end-seperator=           : add a custom seperator inbetween blocks
      --overwrite                : allow overwriting files (put)
      --instant-get              : openfiledilog instant get file->stdout
      --instant-put              : savefiledilog instant put file from stdin


Todo:
=====

*) Implement more VFS-Commands (set file-info, mkdir/rmdir, copy, move,...)

*) Progress reporting via stdout

*) multi file-open-dialog

*) Improve exit codes

*) Write xdg_vfs_kde

*) -w switch. Is there a way to pass the window-id to Gnome for accurate placement of dialogs?

*) Write a sample client application (a simple file-manager for instance)

...