Services for using the XDG Base Directory specification

This is a low-level module, it is meant to be wrapped by higher level services.

For more information, refer to the documentation of the libxdg-basedir project or the official specification at: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Introduced classes

extern class XdgBasedir

xdg_basedir :: XdgBasedir

Handle to a local cache of XDG base directories

Redefined classes

redef class Sys

xdg_basedir :: xdg_basedir $ Sys

The main class of the program.

All class definitions

redef class Sys

xdg_basedir :: xdg_basedir $ Sys

The main class of the program.
extern class XdgBasedir

xdg_basedir $ XdgBasedir

Handle to a local cache of XDG base directories
package_diagram xdg_basedir::xdg_basedir xdg_basedir core core xdg_basedir::xdg_basedir->core linux::data_store data_store linux::data_store->xdg_basedir::xdg_basedir xdg_basedir::show_basedir show_basedir xdg_basedir::show_basedir->xdg_basedir::xdg_basedir linux::ui ui linux::ui->linux::data_store linux::ui... ... linux::ui...->linux::ui a_star-m a_star-m a_star-m->xdg_basedir::show_basedir a_star-m... ... a_star-m...->a_star-m

Ancestors

module abstract_collection

core :: abstract_collection

Abstract collection classes and services.
module abstract_text

core :: abstract_text

Abstract class for manipulation of sequences of characters
module array

core :: array

This module introduces the standard array structure.
module bitset

core :: bitset

Services to handle BitSet
module bytes

core :: bytes

Services for byte streams and arrays
module circular_array

core :: circular_array

Efficient data structure to access both end of the sequence.
module codec_base

core :: codec_base

Base for codecs to use with streams
module codecs

core :: codecs

Group module for all codec-related manipulations
module collection

core :: collection

This module define several collection classes.
module environ

core :: environ

Access to the environment variables of the process
module error

core :: error

Standard error-management infrastructure.
module exec

core :: exec

Invocation and management of operating system sub-processes.
module file

core :: file

File manipulations (create, read, write, etc.)
module fixed_ints

core :: fixed_ints

Basic integers of fixed-precision
module fixed_ints_text

core :: fixed_ints_text

Text services to complement fixed_ints
module flat

core :: flat

All the array-based text representations
module gc

core :: gc

Access to the Nit internal garbage collection mechanism
module hash_collection

core :: hash_collection

Introduce HashMap and HashSet.
module iso8859_1

core :: iso8859_1

Codec for ISO8859-1 I/O
module kernel

core :: kernel

Most basic classes and methods.
module list

core :: list

This module handle double linked lists
module math

core :: math

Mathematical operations
module native

core :: native

Native structures for text and bytes
module numeric

core :: numeric

Advanced services for Numeric types
module protocol

core :: protocol

module queue

core :: queue

Queuing data structures and wrappers
module range

core :: range

Module for range of discrete objects.
module re

core :: re

Regular expression support for all services based on Pattern
module ropes

core :: ropes

Tree-based representation of a String.
module sorter

core :: sorter

This module contains classes used to compare things and sorts arrays.
module stream

core :: stream

Input and output streams of characters
module text

core :: text

All the classes and methods related to the manipulation of text entities
module time

core :: time

Management of time and dates
module union_find

core :: union_find

union–find algorithm using an efficient disjoint-set data structure
module utf8

core :: utf8

Codec for UTF-8 I/O

Parents

module core

core :: core

Standard classes and methods used by default by Nit programs and libraries.

Children

module data_store

linux :: data_store

app::data_store implementation on GNU/Linux
module show_basedir

xdg_basedir :: show_basedir

Prints the local base directories as per the XDG Base Directory specification

Descendants

module a_star-m

a_star-m

module ui

linux :: ui

Implementation of the app.nit UI module for GNU/Linux
# Services for using the XDG Base Directory specification
#
# This is a low-level module, it is meant to be wrapped by higher level services.
#
# For more information, refer to the documentation of the `libxdg-basedir`
# project or the official specification at:
# http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
module xdg_basedir is pkgconfig("libxdg-basedir")

in "C Header" `{
	#include <basedir.h>
`}

# Handle to a local cache of XDG base directories
extern class XdgBasedir `{ xdgHandle* `}

	# Initialize a handle to an XDG data cache and initialize the cache.
	new `{ return xdgInitHandle(NULL); `}

	# Has this instance been correctly initialized?
	fun is_valid: Bool do return not address_is_null

	# Wipe handle of XDG data cache.
	fun destroy `{ xdgWipeHandle(self); `}

	# Update the data cache.
	#
	# This should not be done frequently as it reallocates the cache.
	# Even if updating the cache fails the handle remains valid and can
	# be used to access XDG data as it was before `update` was called.
	#
	# Returns `true` if the update was successful.
	fun update: Bool `{ return xdgUpdateData(self); `}

	# Base directory for user specific data files.
	fun data_home: String import CString.to_s `{
		return CString_to_s((char*)xdgDataHome(self));
	`}

	# Base directory for user specific configuration files.
	fun config_home: String import CString.to_s `{
		return CString_to_s((char*)xdgConfigHome(self));
	`}

	# Base directory for user specific non-essential data files.
	fun cache_home: String import CString.to_s `{
		return CString_to_s((char*)xdgCacheHome(self));
	`}

	# Preference-ordered set of base directories to search for data files
	# in addition to the $XDG_DATA_HOME base directory.
	fun data_dirs: Array[String] do return native_data_dirs.to_string_array

	private fun native_data_dirs: ConstPointer `{
		return xdgDataDirectories(self);
	`}

	# Preference-ordered set of base directories to search for data files
	# with $XDG_DATA_HOME prepended.
	#
	# The base directory defined by $XDG_DATA_HOME is considered more
	# important than any of the base directories defined by $XDG_DATA_DIRS.
	fun searchable_data_dirs: Array[String]
	do
		return native_searchable_data_dirs.to_string_array
	end

	private fun native_searchable_data_dirs: ConstPointer `{
		return xdgSearchableDataDirectories(self);
	`}

	# Preference-ordered set of base directories to search for configuration
	# files in addition to the $XDG_CONFIG_HOME base directory.
	fun config_dirs: Array[String] do return native_config_dirs.to_string_array

	private fun native_config_dirs: ConstPointer `{
		return xdgConfigDirectories(self);
	`}

	# Preference-ordered set of base directories to search for configuration
	# files with $XDG_CONFIG_HOME prepended.
	#
	# The base directory defined by $XDG_CONFIG_HOME is considered more
	# important than any of the base directories defined by $XDG_CONFIG_DIRS.
	fun searchable_config_dirs: Array[String]
	do
		return native_searchable_config_dirs.to_string_array
	end

	private fun native_searchable_config_dirs: ConstPointer `{
		return xdgSearchableConfigDirectories(self);
	`}
end

private extern class ConstPointer `{ const void * `}
	# Convert a C `char **` to a Nit `Array[String]`
	fun to_string_array: Array[String]
	import Array[String], Array[String].add, CString.to_s `{
		char **strings = (char**)self;

		Array_of_String aos = new_Array_of_String();
		int p = 0;
		while (strings[p] != NULL) {
			Array_of_String_add(aos, CString_to_s((char*)strings[p]));
			p ++;
		}

		return aos;
	`}
end

# Version of XDG Base Directory specification implemented in this library.
fun xdg_basedir_spec: Float `{ return XDG_BASEDIR_SPEC; `}

# Get an instance of XdgBasedir
fun xdg_basedir: XdgBasedir do return once new XdgBasedir
lib/xdg_basedir/xdg_basedir.nit:17,1--132,57