/nautilus-follow-symlink/trunk/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.9.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# FIXME: Make this better |
FSL_ICON="/usr/share/icons/gnome/48x48/emblems/emblem-symbolic-link.png" |
AC_SUBST(FSL_ICON) |
AC_DEFINE_UNQUOTED(FSL_ICON, "$FSL_ICON", [follow-symlink menu icon]) |
# libtool, DISABLE_STATIC should go before PROG_LIBTOOL |
AM_DISABLE_STATIC |
AM_PROG_LIBTOOL |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
#AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/trunk/ChangeLog |
---|
0,0 → 1,50 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.9.0 (30 oct 2006): |
* INTERNAL: function tagging for optimization/semantics with GCC's C |
extensions |
* INTERNAL: stricter parameter attributes |
* INTERNAL: Use of inlined variadic functions for debugging instead of macros |
* FEATURE: Display icon in the menu entry/entries |
* INTERNAL: Debugging macros/functions cleanup |
* FEATURE: Support for different verbosity levels on debug |
0.8.0 (25 oct 2006): |
* INTERNAL: Changed the use of lstat() and realpath() to GnomeVFS versions |
* BUGFIX: Resolve realpaths correctly for paths with non-ascii characters |
or spaces |
* FEATURE: Support for multiple file selections, entries for the symbolic |
links in the selected set are added to the context menu |
* BUGFIX: Don't use urlencoded urls for the working dir of the spawned |
nautilus |
* INTERNAL: Use '.' as cwd of the spawned nautilus |
0.7.9 (24 oct 2006): |
* FEATURE: Show the symbolic link's name (unresolved) in context menu and |
description |
0.7.0 (24 oct 2006): |
* FEATURE: Added support for background items (context menu on opened symlinks) |
* BUGFIX: Corrected translation typos |
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode |
0.6.0 (24 oct 2006): |
* FEATURE: Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/trunk/src/follow-symlink.c |
---|
0,0 → 1,225 |
#include "follow-symlink.h" |
// Offset at char 7 to remove file:// |
//static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
extern int errno; |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
iface->get_file_items = fsl_get_file_items; |
iface->get_background_items = fsl_get_background_items; |
} |
/* Implementation of the menu attachment, |
* this is slightly different whith file items and with background (one folder) |
* items, but shares most of the code, so the common part is here. |
*/ |
GList * fsl_get_items_impl(GtkWidget * window, |
NautilusFileInfo * file_info, |
gboolean is_file_item, |
GList * input) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Only file uris |
{ |
// TODO: what about GnomeVFSFileInfo's is_local ? |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG1( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
/* TODO: In which situations might the flags field be invalid? |
* Hence, can the older stat version be dumped safely? |
*/ |
g_assert( (gfi->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_FLAGS) > 0 ); |
if ( (gfi->flags & GNOME_VFS_FILE_FLAGS_SYMLINK) == 0 ) { |
FSL_LOG("GnomeVFS Flags: ! SYMLINK in %s", nautilus_file_info_get_uri(file_info)); |
return NULL; |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), |
is_file_item, |
nautilus_file_info_get_name(file_info)); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), file_info); |
return g_list_append(input, item); |
} |
GList * |
fsl_get_background_items(NautilusMenuProvider * provider __unused, |
GtkWidget * window, |
NautilusFileInfo * current_folder) |
{ |
TRACE(); |
if (NULL == current_folder) { // XXX: Does this ever happen? |
FSL_LOG1( "No folder selected"); |
} |
return fsl_get_items_impl(window, current_folder, FALSE, NULL); |
} |
gboolean file_is_directory (const gpointer const file_data) |
{ |
TRACE(); |
/* |
* Apparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
const GnomeVFSFileInfo * const gfi = nautilus_file_info_get_vfs_file_info(file_data); |
return gfi->type == GNOME_VFS_FILE_TYPE_DIRECTORY; |
} |
/* |
* Bind to the menu if needed |
* |
* |
*/ |
GList * fsl_get_file_items (NautilusMenuProvider * provider __unused, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL == files) { |
FSL_LOG1("No file selected"); |
return NULL; |
} |
assert( g_list_length(files) > 0 ); |
FSL_LOG_COND( g_list_length(files) > 1, "More than one file selected (%d)", g_list_length(files) ); |
GList * items = NULL; |
for (int i=0; i<g_list_length(files); ++i) { |
const gpointer file_info = g_list_nth_data(files, i); |
if (!file_is_directory(file_info)) { |
FSL_LOG ( "File %s is not a directory, discarded", |
nautilus_file_info_get_name(file_info) ); |
continue; |
} |
FSL_LOG( "%s is a directory", nautilus_file_info_get_name(file_info) ); |
// TODO: Am I loosing memory? |
GList * ret = fsl_get_items_impl(window, file_info, TRUE, items); |
if (NULL != ret) { |
items = ret; |
} |
} |
return items; |
} |
/* |
* Opens the real path of the symbolic link |
* |
* file_info: The symbolic link |
*/ |
void fsl_callback (NautilusMenuItem * item __unused, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
// See /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h, |
// this one is the "realpath()" (3), also it isn't urlencoded |
const gchar const * target = gfi->symlink_name; |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 1 ) ); |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
// FIXME: const gchar * cwd = nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET; |
// TODO: does the cwd used for spawn have any side-effect ? |
g_spawn_async( ".", |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* |
* Creates the new menu item |
* |
* is_file_item: TRUE if we're working over a (selected) file, FALSE if working |
* over a (opened) folder |
* base_name: file name, without path, of the given file |
*/ |
NautilusMenuItem * fsl_menu_item_new(GdkScreen *screen __unused, |
gboolean is_file_item, |
const gchar * base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
char * name; |
char * tooltip; |
if (is_file_item) { |
const gchar * fmt_name = _("Follow symbolic _link '%s'"); |
const gchar * fmt_tooltip = _("Open the directory pointed by the " |
"symbolic link '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
else { |
const gchar * fmt_name = _("Open real path of '%s'"); |
const gchar * fmt_tooltip = _("Open the real path of the folder " |
"pointed by '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name + 1))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name + 1))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown, and also that the name should always be |
// the same for a given file |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
gchar * unique_name = g_malloc(strlen(ITEM_NAME_FMT) + strlen(base_name)); |
g_sprintf(unique_name, ITEM_NAME_FMT, base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON); |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/trunk/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,96 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
# if 0 |
provider_types[0] = fsl_get_type(); |
#endif |
provider_types[0] = fsl_type; |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule * module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
//TODO: Does nullifyng this have side effects? |
NULL, //(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
NULL, //(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
#if 0 |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
#endif |
#if 0 |
void fsl_instance_init(FsymlinkExtension *instance) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
#endif |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/trunk/src/follow-symlink.h |
---|
0,0 → 1,47 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include "common.h" |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <glib/gprintf.h> |
#include <errno.h> /* errno (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
#include <assert.h> |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
// This signature can't be changed |
static GList * fsl_get_file_items(NautilusMenuProvider *, |
GtkWidget *, |
GList *); |
// This signature can't be changed |
static GList * fsl_get_background_items(NautilusMenuProvider *, |
GtkWidget *, |
NautilusFileInfo *); |
static inline GList * fsl_get_items_impl(GtkWidget *, |
NautilusFileInfo *, |
gboolean, |
GList *); |
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean, const gchar *); |
static inline __pure gboolean file_is_directory(const gpointer const); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/trunk/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,58 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include "common.h" |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
#if 0 |
static __constfn GType fsl_get_type(void); |
#endif |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers, not really needed */ |
#if 0 |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
#endif |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_EXT_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/trunk/src/common.h |
---|
0,0 → 1,204 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
#ifdef _DEBUG |
#include <stdarg.h> /* va_list, va_start ... */ |
#endif |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#if !defined(__inline) |
#define __inline |
#elif defined(_DEBUG) |
#undef __inline |
#define __inline |
#endif |
// Based on : http://rlove.org/log/2005102601 |
#if __GNUC__ >= 3 |
#define inline inline __attribute__((always_inline)) |
#define __pure __attribute__((pure)) |
//#define __const __attribute__((const)) // fails |
#define __constfn __attribute__((const)) |
#define __noreturn __attribute__((noreturn)) |
#define __malloc __attribute__((malloc)) |
#define __must_check __attribute__((warn_unused_result)) |
#define __deprecated __attribute__((deprecated)) |
#define __used __attribute__((used)) |
#define __unused __attribute__((unused)) |
#define __packed __attribute__((packed)) |
#define likely(x) __builtin_expect (!!(x), 1) |
#define unlikely(x) __builtin_expect (!!(x), 0) |
/* These are mine: used to hint the compiler in variadic printf-like |
* functions, this way it will warn if format/arguments are incorrect */ |
/* printf-like variadic arguments (format is first, args from second) */ |
#define __va_printf __attribute__((format(printf, 1, 2))) |
/* fprintf-like variadic arguments (format is second, args from third */ |
#define __va_fprintf __attribute__((format(printf, 2, 3))) |
#else |
#define inline /* no inline */ |
#define __pure /* no pure */ |
#define __constfn /* no const */ |
#define __noreturn /* no noreturn */ |
#define __malloc /* no malloc */ |
#define __must_check /* no warn_unused_result */ |
#define __deprecated /* no deprecated */ |
#define __used /* no used */ |
#define __unused /* no unused */ |
#define __packed /* no packed */ |
#define likely(x) (x) |
#define unlikely(x) (x) |
#define __va_printf |
#define __va_fprintf |
#endif |
/* |
* Uber-anal glib usage: disallow stdlib's functions where glib provides |
* their own |
*/ |
#if 0 && __GNUC__ |
#pragma GCC poison printf sprintf |
#endif |
#ifdef _DEBUG |
/* Debugging facilities */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
enum { |
FINE = 1, |
FINER, |
TRACE = FINER, |
}; |
/* Check on runtime the environment variable's value |
* |
* (set to 1 to enable verbosity, to 2 for extra verbosity) |
*/ |
static inline int VERBOSITY_LEVEL(void) |
{ |
const char * const DBGENV = getenv("FSL_DBG"); |
if (NULL == DBGENV || 0 == strcmp(DBGENV, "0")) { |
return 0; |
} |
else if (0 == strcmp(DBGENV, "2")) { |
return 2; |
} |
return 1; |
} |
/* Informational message shown on initialisation */ |
static inline void FSL_DEBUG_INIT(void) |
{ |
g_print( FSL_ "DEBUG mode is available, and "); |
g_printf(" set to %d.\n", VERBOSITY_LEVEL()); |
g_print( FSL_ "set the environment variable FSL_DBG to \n" |
FSL_ "1 to enable it or to any other value to disable it.\n"); |
} |
/* Display the name of the current function name */ |
#define TRACE() FSL_LOG_WITH_LEVEL(TRACE, FSL_ "trace: %s()", __func__); |
/* |
* Display a log message with a given log level if the level |
* is at least VERBOSITY_LEVEL(). |
* Same as FSL_LOG_WITH_LEVEL but taking a va_list, this function |
* provides the implementation used by the other FSL_LOG_*'s |
*/ |
static inline void __unused FSL_LOG_WITH_LEVEL_IMPL(int level, |
gchar * const format, |
va_list ap) |
{ |
if (VERBOSITY_LEVEL() >= level) { |
g_vprintf(format, ap); |
g_print("\n"); |
} |
} |
/* |
* Display a log message with a given log level if the level |
* is at least VERBOSITY_LEVEL(). |
*/ |
static void __unused __va_fprintf FSL_LOG_WITH_LEVEL(int level, |
gchar * const format, |
...) |
{ |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(level, format, ap); |
va_end(ap); |
} |
/* Display a message |
* |
* NOTE: Variadic functions can't be inlined |
*/ |
static void __unused __va_printf FSL_LOG(gchar * const format, ...) |
{ |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(FINE, format, ap); |
va_end(ap); |
} |
/* Display a message if a condition is true |
* |
* NOTE: Variadic functions can't be inlined |
*/ |
static void __unused __va_fprintf FSL_LOG_COND(int cond, gchar * const format, ...) |
{ |
if (cond) { |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(FINE, format, ap); |
va_end(ap); |
} |
} |
/* see below for an explanation */ |
#define FSL_LOG1(s) FSL_LOG(s) |
#else |
/* Debugging facilities disabled */ |
#define FINE |
#define FINER |
#define TRACE() |
#define FSL_DEBUG_INIT() |
/* With variadic functions there's no way (AFAIK) to provide empty |
* alternative macros that won't raise a compiler error if no variable |
* arguments are given, hence this hackish FSL_LOG1, for the cases |
* in which just an argument is used |
*/ |
#define FSL_LOG1(s) |
#define FSL_LOG(f, ...) |
///* Unneeded for the time being */ #define FSL_LOG_WITH_LEVEL(l,f,rest...) |
#define FSL_LOG_COND(c,f,...) |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/trunk/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/trunk/BUILD |
---|
0,0 → 1,35 |
COMPILER NOTES |
============== |
This program is meant to be built whith gcc. |
While where possible care has been taken to not rely on GCC, the code is (and |
will remain) only tested to build with it. Additionally, future versions |
might use GCC's extension to the C syntax. |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/trunk/debian/changelog |
---|
0,0 → 1,58 |
nautilus-follow-symlink (0.9.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 30 Oct 2006 06:16:26 +0100 |
nautilus-follow-symlink (0.8.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 25 Oct 2006 05:03:23 +0200 |
nautilus-follow-symlink (0.7.9-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 23:00:48 +0200 |
nautilus-follow-symlink (0.7.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 21:30:10 +0200 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/trunk/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/nautilus-follow-symlink/trunk/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/trunk/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/trunk/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/trunk/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/trunk/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/trunk/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/trunk/GPL |
---|
0,0 → 1,340 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
convey the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
Also add information on how to contact you by electronic and paper mail. |
If the program is interactive, make it output a short notice like this |
when it starts in an interactive mode: |
Gnomovision version 69, Copyright (C) year name of author |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, the commands you use may |
be called something other than `show w' and `show c'; they could even be |
mouse-clicks or menu items--whatever suits your program. |
You should also get your employer (if you work as a programmer) or your |
school, if any, to sign a "copyright disclaimer" for the program, if |
necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
<signature of Ty Coon>, 1 April 1989 |
Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into |
proprietary programs. If your program is a subroutine library, you may |
consider it more useful to permit linking proprietary applications with the |
library. If this is what you want to do, use the GNU Library General |
Public License instead of this License. |
/nautilus-follow-symlink/trunk/dist |
---|
0,0 → 1,76 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: check-gen-deps |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
# This rule serves as a replacement for which for systems in which it |
# isn't installed |
# Use: ./dist which-PROGNAME or |
# a rule that depends on which-PROGNAME1, which-PROGNAME2, ... |
which-%: |
@bash -c "type -p $*" || { \ |
echo "*** Couldn't find $*, can't continue without"\ |
"all requirements">&2 ;\ |
false ; \ |
} |
check-gen-deps: \ |
which-libtoolize \ |
which-intltoolize \ |
which-aclocal \ |
which-autoconf \ |
which-autoheader \ |
which-automake |
help: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo "(use ./dist TARGET):" |
@echo " gen (default) Create the required structure" |
@echo " clean Remove the files created by gen and by the build process" |
@echo " update-po Update the language files with new translation or moved " |
@echo " string locations (note it also updates the meta-timestamp)" |
@echo " so it can get funny issuing this command when using CVS/SVN" |
@echo " regen 'clean' then 'gen'" |
@echo " help This very message" |
update-po: |
cd po && intltool-update -p |
cd po && for file in *.po ; do \ |
intltool-update --dist `basename $$file .po` ; \ |
done |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
rm -f po/*.gmo po/Makefile po/Makefile.in po/POTFILES |
find . -name 'stamp-??' -exec rm {} \; |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/trunk/po/ca.po |
---|
0,0 → 1,36 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 22:59+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Obre el directori apuntat per l'enllaç simbòlic '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Obre la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/nautilus-follow-symlink/trunk/po/es.po |
---|
0,0 → 1,38 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 23:00+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Abrir el directorio apuntado por el enlace simbólico '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Abrir la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/nautilus-follow-symlink/trunk/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/trunk/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
EXTRA_DIST = dist po/nautilus-follow-symlink.pot |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/trunk |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.7.0:r13 |
Merged /nautilus-follow-symlink/branches/0.8.0:r19 |
Merged /nautilus-follow-symlink/branches/0.9.0:r22 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/branches/0.9.0/BUILD |
---|
0,0 → 1,35 |
COMPILER NOTES |
============== |
This program is meant to be built whith gcc. |
While where possible care has been taken to not rely on GCC, the code is (and |
will remain) only tested to build with it. Additionally, future versions |
might use GCC's extension to the C syntax. |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/branches/0.9.0/debian/changelog |
---|
0,0 → 1,58 |
nautilus-follow-symlink (0.9.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 30 Oct 2006 06:16:26 +0100 |
nautilus-follow-symlink (0.8.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 25 Oct 2006 05:03:23 +0200 |
nautilus-follow-symlink (0.7.9-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 23:00:48 +0200 |
nautilus-follow-symlink (0.7.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 21:30:10 +0200 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/branches/0.9.0/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/nautilus-follow-symlink/branches/0.9.0/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/branches/0.9.0/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/branches/0.9.0/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/branches/0.9.0/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/branches/0.9.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/branches/0.9.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/branches/0.9.0/GPL |
---|
0,0 → 1,340 |
GNU GENERAL PUBLIC LICENSE |
Version 2, June 1991 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
Everyone is permitted to copy and distribute verbatim copies |
of this license document, but changing it is not allowed. |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
License is intended to guarantee your freedom to share and change free |
software--to make sure the software is free for all its users. This |
General Public License applies to most of the Free Software |
Foundation's software and to any other program whose authors commit to |
using it. (Some other Free Software Foundation software is covered by |
the GNU Library General Public License instead.) You can apply it to |
your programs, too. |
When we speak of free software, we are referring to freedom, not |
price. Our General Public Licenses are designed to make sure that you |
have the freedom to distribute copies of free software (and charge for |
this service if you wish), that you receive source code or can get it |
if you want it, that you can change the software or use pieces of it |
in new free programs; and that you know you can do these things. |
To protect your rights, we need to make restrictions that forbid |
anyone to deny you these rights or to ask you to surrender the rights. |
These restrictions translate to certain responsibilities for you if you |
distribute copies of the software, or if you modify it. |
For example, if you distribute copies of such a program, whether |
gratis or for a fee, you must give the recipients all the rights that |
you have. You must make sure that they, too, receive or can get the |
source code. And you must show them these terms so they know their |
rights. |
We protect your rights with two steps: (1) copyright the software, and |
(2) offer you this license which gives you legal permission to copy, |
distribute and/or modify the software. |
Also, for each author's protection and ours, we want to make certain |
that everyone understands that there is no warranty for this free |
software. If the software is modified by someone else and passed on, we |
want its recipients to know that what they have is not the original, so |
that any problems introduced by others will not reflect on the original |
authors' reputations. |
Finally, any free program is threatened constantly by software |
patents. We wish to avoid the danger that redistributors of a free |
program will individually obtain patent licenses, in effect making the |
program proprietary. To prevent this, we have made it clear that any |
patent must be licensed for everyone's free use or not licensed at all. |
The precise terms and conditions for copying, distribution and |
modification follow. |
GNU GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License applies to any program or other work which contains |
a notice placed by the copyright holder saying it may be distributed |
under the terms of this General Public License. The "Program", below, |
refers to any such program or work, and a "work based on the Program" |
means either the Program or any derivative work under copyright law: |
that is to say, a work containing the Program or a portion of it, |
either verbatim or with modifications and/or translated into another |
language. (Hereinafter, translation is included without limitation in |
the term "modification".) Each licensee is addressed as "you". |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running the Program is not restricted, and the output from the Program |
is covered only if its contents constitute a work based on the |
Program (independent of having been made by running the Program). |
Whether that is true depends on what the Program does. |
1. You may copy and distribute verbatim copies of the Program's |
source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate |
copyright notice and disclaimer of warranty; keep intact all the |
notices that refer to this License and to the absence of any warranty; |
and give any other recipients of the Program a copy of this License |
along with the Program. |
You may charge a fee for the physical act of transferring a copy, and |
you may at your option offer warranty protection in exchange for a fee. |
2. You may modify your copy or copies of the Program or any portion |
of it, thus forming a work based on the Program, and copy and |
distribute such modifications or work under the terms of Section 1 |
above, provided that you also meet all of these conditions: |
a) You must cause the modified files to carry prominent notices |
stating that you changed the files and the date of any change. |
b) You must cause any work that you distribute or publish, that in |
whole or in part contains or is derived from the Program or any |
part thereof, to be licensed as a whole at no charge to all third |
parties under the terms of this License. |
c) If the modified program normally reads commands interactively |
when run, you must cause it, when started running for such |
interactive use in the most ordinary way, to print or display an |
announcement including an appropriate copyright notice and a |
notice that there is no warranty (or else, saying that you provide |
a warranty) and that users may redistribute the program under |
these conditions, and telling the user how to view a copy of this |
License. (Exception: if the Program itself is interactive but |
does not normally print such an announcement, your work based on |
the Program is not required to print an announcement.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Program, |
and can be reasonably considered independent and separate works in |
themselves, then this License, and its terms, do not apply to those |
sections when you distribute them as separate works. But when you |
distribute the same sections as part of a whole which is a work based |
on the Program, the distribution of the whole must be on the terms of |
this License, whose permissions for other licensees extend to the |
entire whole, and thus to each and every part regardless of who wrote it. |
Thus, it is not the intent of this section to claim rights or contest |
your rights to work written entirely by you; rather, the intent is to |
exercise the right to control the distribution of derivative or |
collective works based on the Program. |
In addition, mere aggregation of another work not based on the Program |
with the Program (or with a work based on the Program) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may copy and distribute the Program (or a work based on it, |
under Section 2) in object code or executable form under the terms of |
Sections 1 and 2 above provided that you also do one of the following: |
a) Accompany it with the complete corresponding machine-readable |
source code, which must be distributed under the terms of Sections |
1 and 2 above on a medium customarily used for software interchange; or, |
b) Accompany it with a written offer, valid for at least three |
years, to give any third party, for a charge no more than your |
cost of physically performing source distribution, a complete |
machine-readable copy of the corresponding source code, to be |
distributed under the terms of Sections 1 and 2 above on a medium |
customarily used for software interchange; or, |
c) Accompany it with the information you received as to the offer |
to distribute corresponding source code. (This alternative is |
allowed only for noncommercial distribution and only if you |
received the program in object code or executable form with such |
an offer, in accord with Subsection b above.) |
The source code for a work means the preferred form of the work for |
making modifications to it. For an executable work, complete source |
code means all the source code for all modules it contains, plus any |
associated interface definition files, plus the scripts used to |
control compilation and installation of the executable. However, as a |
special exception, the source code distributed need not include |
anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the |
operating system on which the executable runs, unless that component |
itself accompanies the executable. |
If distribution of executable or object code is made by offering |
access to copy from a designated place, then offering equivalent |
access to copy the source code from the same place counts as |
distribution of the source code, even though third parties are not |
compelled to copy the source along with the object code. |
4. You may not copy, modify, sublicense, or distribute the Program |
except as expressly provided under this License. Any attempt |
otherwise to copy, modify, sublicense or distribute the Program is |
void, and will automatically terminate your rights under this License. |
However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such |
parties remain in full compliance. |
5. You are not required to accept this License, since you have not |
signed it. However, nothing else grants you permission to modify or |
distribute the Program or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Program (or any work based on the |
Program), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Program or works based on it. |
6. Each time you redistribute the Program (or any work based on the |
Program), the recipient automatically receives a license from the |
original licensor to copy, distribute or modify the Program subject to |
these terms and conditions. You may not impose any further |
restrictions on the recipients' exercise of the rights granted herein. |
You are not responsible for enforcing compliance by third parties to |
this License. |
7. If, as a consequence of a court judgment or allegation of patent |
infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or |
otherwise) that contradict the conditions of this License, they do not |
excuse you from the conditions of this License. If you cannot |
distribute so as to satisfy simultaneously your obligations under this |
License and any other pertinent obligations, then as a consequence you |
may not distribute the Program at all. For example, if a patent |
license would not permit royalty-free redistribution of the Program by |
all those who receive copies directly or indirectly through you, then |
the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Program. |
If any portion of this section is held invalid or unenforceable under |
any particular circumstance, the balance of the section is intended to |
apply and the section as a whole is intended to apply in other |
circumstances. |
It is not the purpose of this section to induce you to infringe any |
patents or other property right claims or to contest validity of any |
such claims; this section has the sole purpose of protecting the |
integrity of the free software distribution system, which is |
implemented by public license practices. Many people have made |
generous contributions to the wide range of software distributed |
through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing |
to distribute software through any other system and a licensee cannot |
impose that choice. |
This section is intended to make thoroughly clear what is believed to |
be a consequence of the rest of this License. |
8. If the distribution and/or use of the Program is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Program under this License |
may add an explicit geographical distribution limitation excluding |
those countries, so that distribution is permitted only in or among |
countries not thus excluded. In such case, this License incorporates |
the limitation as if written in the body of this License. |
9. The Free Software Foundation may publish revised and/or new versions |
of the General Public License from time to time. Such new versions will |
be similar in spirit to the present version, but may differ in detail to |
address new problems or concerns. |
Each version is given a distinguishing version number. If the Program |
specifies a version number of this License which applies to it and "any |
later version", you have the option of following the terms and conditions |
either of that version or of any later version published by the Free |
Software Foundation. If the Program does not specify a version number of |
this License, you may choose any version ever published by the Free Software |
Foundation. |
10. If you wish to incorporate parts of the Program into other free |
programs whose distribution conditions are different, write to the author |
to ask for permission. For software which is copyrighted by the Free |
Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals |
of preserving the free status of all derivatives of our free software and |
of promoting the sharing and reuse of software generally. |
NO WARRANTY |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
REPAIR OR CORRECTION. |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
POSSIBILITY OF SUCH DAMAGES. |
END OF TERMS AND CONDITIONS |
How to Apply These Terms to Your New Programs |
If you develop a new program, and you want it to be of the greatest |
possible use to the public, the best way to achieve this is to make it |
free software which everyone can redistribute and change under these terms. |
To do so, attach the following notices to the program. It is safest |
to attach them to the start of each source file to most effectively |
convey the exclusion of warranty; and each file should have at least |
the "copyright" line and a pointer to where the full notice is found. |
<one line to give the program's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This program is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This program is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this program; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
Also add information on how to contact you by electronic and paper mail. |
If the program is interactive, make it output a short notice like this |
when it starts in an interactive mode: |
Gnomovision version 69, Copyright (C) year name of author |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
This is free software, and you are welcome to redistribute it |
under certain conditions; type `show c' for details. |
The hypothetical commands `show w' and `show c' should show the appropriate |
parts of the General Public License. Of course, the commands you use may |
be called something other than `show w' and `show c'; they could even be |
mouse-clicks or menu items--whatever suits your program. |
You should also get your employer (if you work as a programmer) or your |
school, if any, to sign a "copyright disclaimer" for the program, if |
necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
<signature of Ty Coon>, 1 April 1989 |
Ty Coon, President of Vice |
This General Public License does not permit incorporating your program into |
proprietary programs. If your program is a subroutine library, you may |
consider it more useful to permit linking proprietary applications with the |
library. If this is what you want to do, use the GNU Library General |
Public License instead of this License. |
/nautilus-follow-symlink/branches/0.9.0/dist |
---|
0,0 → 1,76 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: check-gen-deps |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
# This rule serves as a replacement for which for systems in which it |
# isn't installed |
# Use: ./dist which-PROGNAME or |
# a rule that depends on which-PROGNAME1, which-PROGNAME2, ... |
which-%: |
@bash -c "type -p $*" || { \ |
echo "*** Couldn't find $*, can't continue without"\ |
"all requirements">&2 ;\ |
false ; \ |
} |
check-gen-deps: \ |
which-libtoolize \ |
which-intltoolize \ |
which-aclocal \ |
which-autoconf \ |
which-autoheader \ |
which-automake |
help: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo "(use ./dist TARGET):" |
@echo " gen (default) Create the required structure" |
@echo " clean Remove the files created by gen and by the build process" |
@echo " update-po Update the language files with new translation or moved " |
@echo " string locations (note it also updates the meta-timestamp)" |
@echo " so it can get funny issuing this command when using CVS/SVN" |
@echo " regen 'clean' then 'gen'" |
@echo " help This very message" |
update-po: |
cd po && intltool-update -p |
cd po && for file in *.po ; do \ |
intltool-update --dist `basename $$file .po` ; \ |
done |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
rm -f po/*.gmo po/Makefile po/Makefile.in po/POTFILES |
find . -name 'stamp-??' -exec rm {} \; |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/branches/0.9.0/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.9.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# FIXME: Make this better |
FSL_ICON="/usr/share/icons/gnome/48x48/emblems/emblem-symbolic-link.png" |
AC_SUBST(FSL_ICON) |
AC_DEFINE_UNQUOTED(FSL_ICON, "$FSL_ICON", [follow-symlink menu icon]) |
# libtool, DISABLE_STATIC should go before PROG_LIBTOOL |
AM_DISABLE_STATIC |
AM_PROG_LIBTOOL |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
#AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/branches/0.9.0/ChangeLog |
---|
0,0 → 1,50 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.9.0 (30 oct 2006): |
* INTERNAL: function tagging for optimization/semantics with GCC's C |
extensions |
* INTERNAL: stricter parameter attributes |
* INTERNAL: Use of inlined variadic functions for debugging instead of macros |
* FEATURE: Display icon in the menu entry/entries |
* INTERNAL: Debugging macros/functions cleanup |
* FEATURE: Support for different verbosity levels on debug |
0.8.0 (25 oct 2006): |
* INTERNAL: Changed the use of lstat() and realpath() to GnomeVFS versions |
* BUGFIX: Resolve realpaths correctly for paths with non-ascii characters |
or spaces |
* FEATURE: Support for multiple file selections, entries for the symbolic |
links in the selected set are added to the context menu |
* BUGFIX: Don't use urlencoded urls for the working dir of the spawned |
nautilus |
* INTERNAL: Use '.' as cwd of the spawned nautilus |
0.7.9 (24 oct 2006): |
* FEATURE: Show the symbolic link's name (unresolved) in context menu and |
description |
0.7.0 (24 oct 2006): |
* FEATURE: Added support for background items (context menu on opened symlinks) |
* BUGFIX: Corrected translation typos |
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode |
0.6.0 (24 oct 2006): |
* FEATURE: Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/branches/0.9.0/src/follow-symlink.h |
---|
0,0 → 1,47 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include "common.h" |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <glib/gprintf.h> |
#include <errno.h> /* errno (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
#include <assert.h> |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
// This signature can't be changed |
static GList * fsl_get_file_items(NautilusMenuProvider *, |
GtkWidget *, |
GList *); |
// This signature can't be changed |
static GList * fsl_get_background_items(NautilusMenuProvider *, |
GtkWidget *, |
NautilusFileInfo *); |
static inline GList * fsl_get_items_impl(GtkWidget *, |
NautilusFileInfo *, |
gboolean, |
GList *); |
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean, const gchar *); |
static inline __pure gboolean file_is_directory(const gpointer const); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/branches/0.9.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,58 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include "common.h" |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
#if 0 |
static __constfn GType fsl_get_type(void); |
#endif |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers, not really needed */ |
#if 0 |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
#endif |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_EXT_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/branches/0.9.0/src/common.h |
---|
0,0 → 1,204 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
#ifdef _DEBUG |
#include <stdarg.h> /* va_list, va_start ... */ |
#endif |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#if !defined(__inline) |
#define __inline |
#elif defined(_DEBUG) |
#undef __inline |
#define __inline |
#endif |
// Based on : http://rlove.org/log/2005102601 |
#if __GNUC__ >= 3 |
#define inline inline __attribute__((always_inline)) |
#define __pure __attribute__((pure)) |
//#define __const __attribute__((const)) // fails |
#define __constfn __attribute__((const)) |
#define __noreturn __attribute__((noreturn)) |
#define __malloc __attribute__((malloc)) |
#define __must_check __attribute__((warn_unused_result)) |
#define __deprecated __attribute__((deprecated)) |
#define __used __attribute__((used)) |
#define __unused __attribute__((unused)) |
#define __packed __attribute__((packed)) |
#define likely(x) __builtin_expect (!!(x), 1) |
#define unlikely(x) __builtin_expect (!!(x), 0) |
/* These are mine: used to hint the compiler in variadic printf-like |
* functions, this way it will warn if format/arguments are incorrect */ |
/* printf-like variadic arguments (format is first, args from second) */ |
#define __va_printf __attribute__((format(printf, 1, 2))) |
/* fprintf-like variadic arguments (format is second, args from third */ |
#define __va_fprintf __attribute__((format(printf, 2, 3))) |
#else |
#define inline /* no inline */ |
#define __pure /* no pure */ |
#define __constfn /* no const */ |
#define __noreturn /* no noreturn */ |
#define __malloc /* no malloc */ |
#define __must_check /* no warn_unused_result */ |
#define __deprecated /* no deprecated */ |
#define __used /* no used */ |
#define __unused /* no unused */ |
#define __packed /* no packed */ |
#define likely(x) (x) |
#define unlikely(x) (x) |
#define __va_printf |
#define __va_fprintf |
#endif |
/* |
* Uber-anal glib usage: disallow stdlib's functions where glib provides |
* their own |
*/ |
#if 0 && __GNUC__ |
#pragma GCC poison printf sprintf |
#endif |
#ifdef _DEBUG |
/* Debugging facilities */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
enum { |
FINE = 1, |
FINER, |
TRACE = FINER, |
}; |
/* Check on runtime the environment variable's value |
* |
* (set to 1 to enable verbosity, to 2 for extra verbosity) |
*/ |
static inline int VERBOSITY_LEVEL(void) |
{ |
const char * const DBGENV = getenv("FSL_DBG"); |
if (NULL == DBGENV || 0 == strcmp(DBGENV, "0")) { |
return 0; |
} |
else if (0 == strcmp(DBGENV, "2")) { |
return 2; |
} |
return 1; |
} |
/* Informational message shown on initialisation */ |
static inline void FSL_DEBUG_INIT(void) |
{ |
g_print( FSL_ "DEBUG mode is available, and "); |
g_printf(" set to %d.\n", VERBOSITY_LEVEL()); |
g_print( FSL_ "set the environment variable FSL_DBG to \n" |
FSL_ "1 to enable it or to any other value to disable it.\n"); |
} |
/* Display the name of the current function name */ |
#define TRACE() FSL_LOG_WITH_LEVEL(TRACE, FSL_ "trace: %s()", __func__); |
/* |
* Display a log message with a given log level if the level |
* is at least VERBOSITY_LEVEL(). |
* Same as FSL_LOG_WITH_LEVEL but taking a va_list, this function |
* provides the implementation used by the other FSL_LOG_*'s |
*/ |
static inline void __unused FSL_LOG_WITH_LEVEL_IMPL(int level, |
gchar * const format, |
va_list ap) |
{ |
if (VERBOSITY_LEVEL() >= level) { |
g_vprintf(format, ap); |
g_print("\n"); |
} |
} |
/* |
* Display a log message with a given log level if the level |
* is at least VERBOSITY_LEVEL(). |
*/ |
static void __unused __va_fprintf FSL_LOG_WITH_LEVEL(int level, |
gchar * const format, |
...) |
{ |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(level, format, ap); |
va_end(ap); |
} |
/* Display a message |
* |
* NOTE: Variadic functions can't be inlined |
*/ |
static void __unused __va_printf FSL_LOG(gchar * const format, ...) |
{ |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(FINE, format, ap); |
va_end(ap); |
} |
/* Display a message if a condition is true |
* |
* NOTE: Variadic functions can't be inlined |
*/ |
static void __unused __va_fprintf FSL_LOG_COND(int cond, gchar * const format, ...) |
{ |
if (cond) { |
va_list ap; |
va_start(ap, format); |
FSL_LOG_WITH_LEVEL_IMPL(FINE, format, ap); |
va_end(ap); |
} |
} |
/* see below for an explanation */ |
#define FSL_LOG1(s) FSL_LOG(s) |
#else |
/* Debugging facilities disabled */ |
#define FINE |
#define FINER |
#define TRACE() |
#define FSL_DEBUG_INIT() |
/* With variadic functions there's no way (AFAIK) to provide empty |
* alternative macros that won't raise a compiler error if no variable |
* arguments are given, hence this hackish FSL_LOG1, for the cases |
* in which just an argument is used |
*/ |
#define FSL_LOG1(s) |
#define FSL_LOG(f, ...) |
///* Unneeded for the time being */ #define FSL_LOG_WITH_LEVEL(l,f,rest...) |
#define FSL_LOG_COND(c,f,...) |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/branches/0.9.0/src/follow-symlink.c |
---|
0,0 → 1,225 |
#include "follow-symlink.h" |
// Offset at char 7 to remove file:// |
//static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
extern int errno; |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
iface->get_file_items = fsl_get_file_items; |
iface->get_background_items = fsl_get_background_items; |
} |
/* Implementation of the menu attachment, |
* this is slightly different whith file items and with background (one folder) |
* items, but shares most of the code, so the common part is here. |
*/ |
GList * fsl_get_items_impl(GtkWidget * window, |
NautilusFileInfo * file_info, |
gboolean is_file_item, |
GList * input) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Only file uris |
{ |
// TODO: what about GnomeVFSFileInfo's is_local ? |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG1( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
/* TODO: In which situations might the flags field be invalid? |
* Hence, can the older stat version be dumped safely? |
*/ |
g_assert( (gfi->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_FLAGS) > 0 ); |
if ( (gfi->flags & GNOME_VFS_FILE_FLAGS_SYMLINK) == 0 ) { |
FSL_LOG("GnomeVFS Flags: ! SYMLINK in %s", nautilus_file_info_get_uri(file_info)); |
return NULL; |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), |
is_file_item, |
nautilus_file_info_get_name(file_info)); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), file_info); |
return g_list_append(input, item); |
} |
GList * |
fsl_get_background_items(NautilusMenuProvider * provider __unused, |
GtkWidget * window, |
NautilusFileInfo * current_folder) |
{ |
TRACE(); |
if (NULL == current_folder) { // XXX: Does this ever happen? |
FSL_LOG1( "No folder selected"); |
} |
return fsl_get_items_impl(window, current_folder, FALSE, NULL); |
} |
gboolean file_is_directory (const gpointer const file_data) |
{ |
TRACE(); |
/* |
* Apparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
const GnomeVFSFileInfo * const gfi = nautilus_file_info_get_vfs_file_info(file_data); |
return gfi->type == GNOME_VFS_FILE_TYPE_DIRECTORY; |
} |
/* |
* Bind to the menu if needed |
* |
* |
*/ |
GList * fsl_get_file_items (NautilusMenuProvider * provider __unused, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL == files) { |
FSL_LOG1("No file selected"); |
return NULL; |
} |
assert( g_list_length(files) > 0 ); |
FSL_LOG_COND( g_list_length(files) > 1, "More than one file selected (%d)", g_list_length(files) ); |
GList * items = NULL; |
for (int i=0; i<g_list_length(files); ++i) { |
const gpointer file_info = g_list_nth_data(files, i); |
if (!file_is_directory(file_info)) { |
FSL_LOG ( "File %s is not a directory, discarded", |
nautilus_file_info_get_name(file_info) ); |
continue; |
} |
FSL_LOG( "%s is a directory", nautilus_file_info_get_name(file_info) ); |
// TODO: Am I loosing memory? |
GList * ret = fsl_get_items_impl(window, file_info, TRUE, items); |
if (NULL != ret) { |
items = ret; |
} |
} |
return items; |
} |
/* |
* Opens the real path of the symbolic link |
* |
* file_info: The symbolic link |
*/ |
void fsl_callback (NautilusMenuItem * item __unused, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
// See /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h, |
// this one is the "realpath()" (3), also it isn't urlencoded |
const gchar const * target = gfi->symlink_name; |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 1 ) ); |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
// FIXME: const gchar * cwd = nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET; |
// TODO: does the cwd used for spawn have any side-effect ? |
g_spawn_async( ".", |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* |
* Creates the new menu item |
* |
* is_file_item: TRUE if we're working over a (selected) file, FALSE if working |
* over a (opened) folder |
* base_name: file name, without path, of the given file |
*/ |
NautilusMenuItem * fsl_menu_item_new(GdkScreen *screen __unused, |
gboolean is_file_item, |
const gchar * base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
char * name; |
char * tooltip; |
if (is_file_item) { |
const gchar * fmt_name = _("Follow symbolic _link '%s'"); |
const gchar * fmt_tooltip = _("Open the directory pointed by the " |
"symbolic link '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
else { |
const gchar * fmt_name = _("Open real path of '%s'"); |
const gchar * fmt_tooltip = _("Open the real path of the folder " |
"pointed by '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name + 1))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name + 1))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown, and also that the name should always be |
// the same for a given file |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
gchar * unique_name = g_malloc(strlen(ITEM_NAME_FMT) + strlen(base_name)); |
g_sprintf(unique_name, ITEM_NAME_FMT, base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON); |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/branches/0.9.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,96 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
# if 0 |
provider_types[0] = fsl_get_type(); |
#endif |
provider_types[0] = fsl_type; |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule * module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
//TODO: Does nullifyng this have side effects? |
NULL, //(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
NULL, //(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
#if 0 |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
#endif |
#if 0 |
void fsl_instance_init(FsymlinkExtension *instance) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
#endif |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/branches/0.9.0/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/branches/0.9.0/po/ca.po |
---|
0,0 → 1,36 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 22:59+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Obre el directori apuntat per l'enllaç simbòlic '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Obre la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/nautilus-follow-symlink/branches/0.9.0/po/es.po |
---|
0,0 → 1,38 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 23:00+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Abrir el directorio apuntado por el enlace simbólico '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Abrir la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/nautilus-follow-symlink/branches/0.9.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/branches/0.9.0/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
EXTRA_DIST = dist po/nautilus-follow-symlink.pot |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/branches/0.9.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.7.0:r13 |
Merged /nautilus-follow-symlink/branches/0.8.0:r19 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.8.0/src/follow-symlink.c |
---|
0,0 → 1,226 |
#include "follow-symlink.h" |
// Offset at char 7 to remove file:// |
//static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
extern int errno; |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
iface->get_file_items = fsl_get_file_items; |
iface->get_background_items = fsl_get_background_items; |
} |
/* Implementation of the menu attachment, |
* this is slightly different whith file items and with background (one folder) |
* items, but shares most of the code, so the common part is here. |
*/ |
GList * fsl_get_items_impl(GtkWidget * window, |
NautilusFileInfo * file_info, |
gboolean is_file_item, |
GList * input) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Only file uris |
{ |
// TODO: what about GnomeVFSFileInfo's is_local ? |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
/* TODO: In which situations might the flags field be invalid? |
* Hence, can the older stat version be dumped safely? |
*/ |
g_assert( (gfi->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_FLAGS) > 0 ); |
if ( (gfi->flags & GNOME_VFS_FILE_FLAGS_SYMLINK) == 0 ) { |
FSL_LOG1("GnomeVFS Flags: ! SYMLINK: ", nautilus_file_info_get_uri(file_info)); |
return NULL; |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), |
is_file_item, |
nautilus_file_info_get_name(file_info)); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), file_info); |
return g_list_append(input, item); |
} |
GList * |
fsl_get_background_items(NautilusMenuProvider * provider, |
GtkWidget * window, |
NautilusFileInfo * current_folder) |
{ |
TRACE(); |
if (NULL == current_folder) { // XXX: Does this ever happen? |
FSL_LOG( "No folder selected" ); |
} |
return fsl_get_items_impl(window, current_folder, FALSE, NULL); |
} |
gboolean file_is_directory (gpointer file_data) |
{ |
TRACE(); |
/* |
* Apparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
const GnomeVFSFileInfo * const gfi = nautilus_file_info_get_vfs_file_info(file_data); |
return gfi->type == GNOME_VFS_FILE_TYPE_DIRECTORY; |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL == files) { |
FSL_LOG("No file selected"); |
return NULL; |
} |
if (g_list_length(files) == 1) { |
if (!file_is_directory(files->data)) { |
FSL_LOG("File is not a directory"); |
return NULL; |
} |
return fsl_get_items_impl(window, files->data, TRUE, NULL); |
} |
// More than one selected file |
assert( g_list_length(files) > 1 ); |
FSL_LOG( "More than one file selected" ); |
GList * items = NULL; |
for (int i=0; i<g_list_length(files); ++i) { |
const gpointer file_info = g_list_nth_data(files, i); |
if (!file_is_directory(file_info)) { |
FSL_LOG_SPRINTF1 ( "File %s is not a directory, discarded\n", |
nautilus_file_info_get_name(file_info) ); |
continue; |
} |
FSL_LOG_SPRINTF1( "%s is a directory\n", nautilus_file_info_get_name(file_info) ); |
// TODO: Am I loosing memory? |
GList * ret = fsl_get_items_impl(window, file_info, TRUE, items); |
if (NULL != ret) { |
items = ret; |
} |
} |
// TODO: Although items might contain more than one item only the last one is displayed |
// why? |
return items; |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info); |
// See /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h, |
// this one is the "realpath()" (3), also it isn0t urlencoded |
const gchar const * target = gfi->symlink_name; |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 1 ) ); |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
const gchar * cwd = "."; |
// FIXME: const gchar * cwd = nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET; |
// TODO: does the cwd used for spawn have any side-effect ? |
FSL_LOG_SPRINTF1 ("\tusing pwd=%s\n", cwd ); |
g_spawn_async( cwd, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item, const gchar * base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
char * name; |
char * tooltip; |
if (is_file_item) { |
const gchar * fmt_name = _("Follow symbolic _link '%s'"); |
const gchar * fmt_tooltip = _("Open the directory pointed by the " |
"symbolic link '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
else { |
const gchar * fmt_name = _("Open real path of '%s'"); |
const gchar * fmt_tooltip = _("Open the real path of the folder " |
"pointed by '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name + 1))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name + 1))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
// Trial and error shows that the menu item name must be different |
// when various are to be shown, and also that the name should always be |
// the same for a given file |
static const gchar * ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
// TODO: Check g_alloca() error conditions |
gchar * unique_name = g_alloca(strlen(ITEM_NAME_FMT) + strlen(base_name)); // 10 = strlen("4294967296")); |
g_sprintf(unique_name, ITEM_NAME_FMT, base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(//"FsymlinkExtension::follow_symlink", |
unique_name, |
name, tooltip, NULL); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.8.0/src/follow-symlink.h |
---|
0,0 → 1,38 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include "common.h" |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <glib/gprintf.h> |
#include <errno.h> /* errno (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
#include <assert.h> |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList * fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static GList * fsl_get_background_items(NautilusMenuProvider *, GtkWidget *, NautilusFileInfo *); |
static __inline GList * fsl_get_items_impl(GtkWidget *, NautilusFileInfo *, gboolean,GList*); |
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean, const gchar *); |
static __inline gboolean file_is_directory(gpointer); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.8.0/src/common.h |
---|
0,0 → 1,75 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#if !defined(__inline) |
#define __inline |
#elif defined(_DEBUG) |
#undef __inline |
#define __inline |
#endif |
#if !defined(__fsl_unused) |
// Xref: http://rlove.org/log/2005102601 |
#if __GNUC__ >= 3 |
#define __fsl_unused __attribute__ ((unused)) |
#else |
#define __fsl_unused |
#endif |
#endif |
#ifdef _DEBUG |
/* Debugging facilities */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#define FSL_LOG_SPRINTF1(s1, s2) if (DEBUG_ON_()) g_printf((s1), (s2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#define FSL_LOG_SPRINTF1(a,b) |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.8.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,88 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.8.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,54 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include "common.h" |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_EXT_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.8.0/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.8.0/po/ca.po |
---|
0,0 → 1,36 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 22:59+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Obre el directori apuntat per l'enllaç simbòlic '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Obre la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/nautilus-follow-symlink/tags/0.8.0/po/es.po |
---|
0,0 → 1,38 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-25 05:22+0200\n" |
"PO-Revision-Date: 2006-10-24 23:00+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:188 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:189 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Abrir el directorio apuntado por el enlace simbólico '%s'" |
#: ../src/follow-symlink.c:198 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Abrir la ruta real de '%s'" |
#: ../src/follow-symlink.c:199 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/nautilus-follow-symlink/tags/0.8.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/tags/0.8.0/debian/changelog |
---|
0,0 → 1,52 |
nautilus-follow-symlink (0.8.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 25 Oct 2006 05:03:23 +0200 |
nautilus-follow-symlink (0.7.9-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 23:00:48 +0200 |
nautilus-follow-symlink (0.7.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 21:30:10 +0200 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.8.0/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.8.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/nautilus-follow-symlink/tags/0.8.0/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.8.0/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.8.0/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.8.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.8.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.8.0/dist |
---|
0,0 → 1,57 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
help: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo "(use ./dist TARGET):" |
@echo " gen (default) Create the required structure" |
@echo " clean Remove the files created by gen and by the build process" |
@echo " update-po Update the language files with new translation or moved " |
@echo " string locations (note it also updates the meta-timestamp)" |
@echo " so it can get funny issuing this command when using CVS/SVN" |
@echo " regen 'clean' then 'gen'" |
@echo " help This very message" |
update-po: |
cd po && intltool-update -p |
cd po && for file in *.po ; do \ |
intltool-update --dist `basename $$file .po` ; \ |
done |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
rm -f po/*.gmo po/Makefile po/Makefile.in po/POTFILES |
find . -name 'stamp-??' -exec rm {} \; |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.8.0/configure.in |
---|
0,0 → 1,49 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.8.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
#AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/tags/0.8.0/ChangeLog |
---|
0,0 → 1,41 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.8.0 (25 oct 2006): |
* INTERNAL: Changed the use of lstat() and realpath() to GnomeVFS versions |
* BUGFIX: Resolve realpaths correctly for paths with non-ascii characters |
or spaces |
* FEATURE: Support for multiple file selections, entries for the symbolic |
links in the selected set are added to the context menu |
* BUGFIX: Don't use urlencoded urls for the working dir of the spawned |
nautilus |
* INTERNAL: Use '.' as cwd of the spawned nautilus |
0.7.9 (24 oct 2006): |
* FEATURE: Show the symbolic link's name (unresolved) in context menu and |
description |
0.7.0 (24 oct 2006): |
* FEATURE: Added support for background items (context menu on opened symlinks) |
* BUGFIX: Corrected translation typos |
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode |
0.6.0 (24 oct 2006): |
* FEATURE: Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.8.0/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
EXTRA_DIST = dist po/nautilus-follow-symlink.pot |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/tags/0.8.0/BUILD |
---|
0,0 → 1,26 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.8.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.7.0:r13 |
Merged /nautilus-follow-symlink/branches/0.8.0:r19 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.7.9/po/es.po |
---|
0,0 → 1,39 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 22:55+0200\n" |
"PO-Revision-Date: 2006-10-24 23:00+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:159 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:160 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "" |
"Abrir el directorio apuntado por el enlace simbólico '%s'" |
#: ../src/follow-symlink.c:169 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Abrir la ruta real de '%s'" |
#: ../src/follow-symlink.c:170 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/nautilus-follow-symlink/tags/0.7.9/po/ca.po |
---|
0,0 → 1,36 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 22:55+0200\n" |
"PO-Revision-Date: 2006-10-24 22:59+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:159 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:160 |
#, c-format |
msgid "Open the directory pointed by the symbolic link '%s'" |
msgstr "Obre el directori apuntat per l'enllaç simbòlic '%s'" |
#: ../src/follow-symlink.c:169 |
#, c-format |
msgid "Open real path of '%s'" |
msgstr "Obre la ruta real de '%s'" |
#: ../src/follow-symlink.c:170 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/nautilus-follow-symlink/tags/0.7.9/po/nautilus-follow-symlink.pot |
---|
0,0 → 1,33 |
# SOME DESCRIPTIVE TITLE. |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the PACKAGE package. |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
# |
#, fuzzy |
msgid "" |
msgstr "" |
"Project-Id-Version: PACKAGE VERSION\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 21:27+0200\n" |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
"Language-Team: LANGUAGE <LL@li.org>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=CHARSET\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:156 |
msgid "Follow symbolic _link" |
msgstr "" |
#: ../src/follow-symlink.c:157 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "" |
#: ../src/follow-symlink.c:160 |
msgid "Open real path" |
msgstr "" |
#: ../src/follow-symlink.c:161 |
msgid "Open the real path of the folder pointed by this symbolic link" |
msgstr "" |
/nautilus-follow-symlink/tags/0.7.9/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/tags/0.7.9/debian/changelog |
---|
0,0 → 1,46 |
nautilus-follow-symlink (0.7.9-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 23:00:48 +0200 |
nautilus-follow-symlink (0.7.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 21:30:10 +0200 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.7.9/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.7.9/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/nautilus-follow-symlink/tags/0.7.9/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.7.9/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.7.9/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.7.9/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.7.9/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.7.9/src/follow-symlink.h |
---|
0,0 → 1,37 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include "common.h" |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <glib/gprintf.h> |
#include <sys/stat.h> |
#include <errno.h> /* errno (3) */ |
#include <stdlib.h> /* realpath() (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList * fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static GList * fsl_get_background_items(NautilusMenuProvider *, GtkWidget *, NautilusFileInfo *); |
static GList * fsl_get_items_impl(GtkWidget *, NautilusFileInfo *, gboolean); |
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean, const gchar *); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.9/src/follow-symlink.c |
---|
0,0 → 1,184 |
#include "follow-symlink.h" |
// Offset at char 7 to remove file:// |
static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
extern int errno; |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
iface->get_file_items = fsl_get_file_items; |
iface->get_background_items = fsl_get_background_items; |
} |
/* Implementation of the menu attachment, |
* this is slightly different whith file items and with background (one folder) |
* items, but shares most of the code, so the common part is here. |
*/ |
GList * fsl_get_items_impl(GtkWidget * window, |
NautilusFileInfo * file_info, |
gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_stat; |
// Note ..._get_name doesn't give the full path |
const gchar * const file_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
lstat(file_name, &file_stat); |
if (! S_ISLNK(file_stat.st_mode)) { |
FSL_LOG1( "Not S_ISLNK:", file_name ); |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), |
is_file_item, |
nautilus_file_info_get_name(file_info)); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
file_info); |
return g_list_append(NULL, item); |
} |
GList * |
fsl_get_background_items(NautilusMenuProvider * provider, |
GtkWidget * window, |
NautilusFileInfo * current_folder) |
{ |
TRACE(); |
if (NULL == current_folder) { // XXX: Does this ever happen? |
FSL_LOG( "No folder selected" ); |
} |
return fsl_get_items_impl(window, current_folder, FALSE); |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL==files || g_list_length(files) != 1) { |
FSL_LOG( (NULL==files) ? "No file" : "More than one file" ); |
return NULL; |
} |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
FSL_LOG( "Not directory" ); |
return NULL; |
} |
return fsl_get_items_impl(window, files->data, TRUE); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html> |
*/ |
if (NULL == realpath(link_name, target)) { |
g_printf("ERROR in realpath(): %s\n", strerror(errno)); |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 1 ) ); |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item, const gchar * base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
char * name; |
char * tooltip; |
if (is_file_item) { |
const gchar * fmt_name = _("Follow symbolic _link '%s'"); |
const gchar * fmt_tooltip = _("Open the directory pointed by the " |
"symbolic link '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
else { |
const gchar * fmt_name = _("Open real path of '%s'"); |
const gchar * fmt_tooltip = _("Open the real path of the folder " |
"pointed by '%s'"); |
name = g_malloc(sizeof(gchar) * (strlen(fmt_name) + strlen(base_name + 1))); |
tooltip = g_malloc(sizeof(gchar) * (strlen(fmt_tooltip) + strlen(base_name + 1))); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, base_name); |
} |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.9/src/common.h |
---|
0,0 → 1,61 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#ifndef __inline__ |
#define __inline |
#endif |
#ifdef _DEBUG |
/* Debugging facilities */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.9/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,88 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.9/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,54 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include "common.h" |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_EXT_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.9/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.7.9/dist |
---|
0,0 → 1,38 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
rm -f po/*.gmo po/Makefile po/Makefile.in po/POTFILES |
find . -name 'stamp-??' -exec rm {} \; |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.7.9/configure.in |
---|
0,0 → 1,49 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.7.9") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/tags/0.7.9/ChangeLog |
---|
0,0 → 1,31 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.7.9 (24 oct 2006): |
* Show the symbolic link's name (unresolved) in context menu and |
description |
0.7.0 (24 oct 2006): |
* Added support for background items (context menu on opened symlinks) |
* BUGFIX: Corrected translation typos |
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode |
0.6.0 (24 oct 2006): |
* Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.7.9/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
#EXTRA_DIST = dist |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/tags/0.7.9/BUILD |
---|
0,0 → 1,26 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.7.9 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.7.0:r13 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.7.0/po/es.po |
---|
0,0 → 1,35 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 21:27+0200\n" |
"PO-Revision-Date: 2006-10-24 19:09+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:156 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:157 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "" |
"Abrir el directorio apuntado por el enlace simbólico seleccionado actualmente" |
#: ../src/follow-symlink.c:160 |
msgid "Open real path" |
msgstr "Abrir la ruta real" |
#: ../src/follow-symlink.c:161 |
msgid "Open the real path of the folder pointed by this symbolic link" |
msgstr "Abrir el directoro apuntado por éste enlace simbólico" |
/nautilus-follow-symlink/tags/0.7.0/po/nautilus-follow-symlink.pot |
---|
0,0 → 1,33 |
# SOME DESCRIPTIVE TITLE. |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the PACKAGE package. |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
# |
#, fuzzy |
msgid "" |
msgstr "" |
"Project-Id-Version: PACKAGE VERSION\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 21:27+0200\n" |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
"Language-Team: LANGUAGE <LL@li.org>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=CHARSET\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:156 |
msgid "Follow symbolic _link" |
msgstr "" |
#: ../src/follow-symlink.c:157 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "" |
#: ../src/follow-symlink.c:160 |
msgid "Open real path" |
msgstr "" |
#: ../src/follow-symlink.c:161 |
msgid "Open the real path of the folder pointed by this symbolic link" |
msgstr "" |
/nautilus-follow-symlink/tags/0.7.0/po/ca.po |
---|
0,0 → 1,32 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 21:27+0200\n" |
"PO-Revision-Date: 2006-10-24 19:37+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:156 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:157 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "Obre el directori apuntat per l'enllaç simbòlic seleccionat" |
#: ../src/follow-symlink.c:160 |
msgid "Open real path" |
msgstr "Obre la ruta real" |
#: ../src/follow-symlink.c:161 |
msgid "Open the real path of the folder pointed by this symbolic link" |
msgstr "Obre el directori apuntat per aquest enllaç" |
/nautilus-follow-symlink/tags/0.7.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/tags/0.7.0/debian/changelog |
---|
0,0 → 1,40 |
nautilus-follow-symlink (0.7.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 21:30:10 +0200 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.7.0/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.7.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/nautilus-follow-symlink/tags/0.7.0/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.7.0/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.7.0/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.7.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.7.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.7.0/src/follow-symlink.c |
---|
0,0 → 1,171 |
#include "follow-symlink.h" |
// Offset at char 7 to remove file:// |
static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
extern int errno; |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
iface->get_file_items = fsl_get_file_items; |
iface->get_background_items = fsl_get_background_items; |
} |
/* Implementation of the menu attachment, |
* this is slightly different whith file items and with background (one folder) |
* items, but shares most of the code, so the common part is here. |
*/ |
GList * fsl_get_items_impl(GtkWidget * window, |
NautilusFileInfo * file_info, |
gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_stat; |
// Note ..._get_name doesn't give the full path |
const gchar * const file_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
lstat(file_name, &file_stat); |
if (! S_ISLNK(file_stat.st_mode)) { |
FSL_LOG1( "Not S_ISLNK:", file_name ); |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), is_file_item); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
file_info); |
return g_list_append(NULL, item); |
} |
GList * |
fsl_get_background_items(NautilusMenuProvider * provider, |
GtkWidget * window, |
NautilusFileInfo * current_folder) |
{ |
TRACE(); |
if (NULL == current_folder) { // XXX: Does this ever happen? |
FSL_LOG( "No folder selected" ); |
} |
return fsl_get_items_impl(window, current_folder, FALSE); |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL==files || g_list_length(files) != 1) { |
FSL_LOG( (NULL==files) ? "No file" : "More than one file" ); |
return NULL; |
} |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
FSL_LOG( "Not directory" ); |
return NULL; |
} |
return fsl_get_items_impl(window, files->data, TRUE); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html> |
*/ |
if (NULL == realpath(link_name, target)) { |
g_printf("ERROR in realpath(): %s\n", strerror(errno)); |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window \""; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 2 ) ); |
gchar * offset = g_stpcpy(command_line, BASE_CMD); |
//offset = g_stpcpy(offset, "file://"); // unneeded; also makes nautilus think it may be incorrect |
// if it contains spaces (instead of %20's) |
offset = g_stpcpy(offset, target); |
g_stpcpy(offset, "\""); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
const char *name; |
const char *tooltip; |
if (is_file_item) { |
name = _("Follow symbolic _link"); |
tooltip = _("Open the directory pointed by the currently selected symbolic link"); |
} |
else { |
name = _("Open real path"); |
tooltip = _("Open the real path of the folder pointed by this symbolic link"); |
} |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,88 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.0/src/follow-symlink.h |
---|
0,0 → 1,37 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include "common.h" |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <glib/gprintf.h> |
#include <sys/stat.h> |
#include <errno.h> /* errno (3) */ |
#include <stdlib.h> /* realpath() (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList * fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static GList * fsl_get_background_items(NautilusMenuProvider *, GtkWidget *, NautilusFileInfo *); |
static GList * fsl_get_items_impl(GtkWidget *, NautilusFileInfo *, gboolean); |
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,54 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include "common.h" |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_EXT_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.0/src/common.h |
---|
0,0 → 1,61 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#ifndef __inline__ |
#define __inline |
#endif |
#ifdef _DEBUG |
/* Debugging facilities */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.7.0/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.7.0/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
#EXTRA_DIST = dist |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/tags/0.7.0/dist |
---|
0,0 → 1,37 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
rm -f po/*.gmo po/Makefile po/Makefile.in po/POTFILES |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.7.0/configure.in |
---|
0,0 → 1,49 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.7.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/tags/0.7.0/ChangeLog |
---|
0,0 → 1,27 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.7.0 (24 oct 2006): |
* Added support for background items (context menu on opened symlinks) |
* BUGFIX: Corrected translation typos |
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode |
0.6.0 (24 oct 2006): |
* Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.7.0/BUILD |
---|
0,0 → 1,26 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.7.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.7.0:r13 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.6.0/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev, intltool (>= 0.18), gettext, automaken, autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.6.0/debian/changelog |
---|
0,0 → 1,34 |
nautilus-follow-symlink (0.6.0-out.1) experimental; urgency=low |
* New upstream release |
* debian/control: |
- Added intltool and gettext (new requirements of 0.6) |
- Corrected Build-Depends |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 20:25:12 +0200 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.6.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/nautilus-follow-symlink/tags/0.6.0/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.6.0/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.6.0/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.6.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.6.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.6.0/src/Makefile.am |
---|
0,0 → 1,18 |
# Required to correctly install the locale files |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.6.0/src/common.h |
---|
0,0 → 1,56 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#include "libintl.h" |
#define _(STR) gettext(STR) |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#ifdef _DEBUG |
/* Debugging facilities */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.6.0/src/follow-symlink.c |
---|
0,0 → 1,145 |
#include "follow-symlink.h" |
#include <glib/gprintf.h> |
#include <sys/stat.h> |
#include <errno.h> /* errno (3) */ |
#include <stdlib.h> /* realpath() (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
// Offset at char 7 to remove file:// |
static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
//TODO: iface->get_background_items = fsl_get_background_items; |
iface->get_file_items = fsl_get_file_items; |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL==files || g_list_length(files) != 1) { |
FSL_LOG( (NULL==files) ? "No file" : "More than one file" ); |
return NULL; |
} |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(files->data); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// Xref: http://www.koders.com/c/fidA0AA0A78334E1FA3D668FD10B437638F6D031D77.aspx?s=NautilusFile |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Xref: /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h |
* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
/*if (gfi->type != GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK) {*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
FSL_LOG( "Not directory" ); |
return NULL; |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_info; |
// Note ..._get_name doesn't give the full path |
const gchar * const file_name = nautilus_file_info_get_uri(files->data) + URI_OFFSET; |
lstat(file_name, &file_info); |
if (! S_ISLNK(file_info.st_mode)) { |
FSL_LOG1( "Not S_ISLNK:", file_name ); |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), TRUE); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
files->data); |
return g_list_append(NULL, item); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html> |
*/ |
if (NULL == realpath(link_name, target)) { |
g_printf("ERROR in realpath(): %s\n", strerror(errno)); |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window \""; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 2 ) ); |
gchar * offset = g_stpcpy(command_line, BASE_CMD); |
//offset = g_stpcpy(offset, "file://"); // unneeded; also makes nautilus think it may be incorrect |
// if it contains spaces (instead of %20's) |
offset = g_stpcpy(offset, target); |
g_stpcpy(offset, "\""); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
const char *name; |
const char *tooltip; |
name = _("Follow symbolic _link"); |
tooltip = _("Open the directory pointed by the currently selected symbolic link"); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.6.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,93 |
#include "nautilus-ext-follow-symlink.h" |
#include <locale.h> |
#include <libintl.h> |
#include <glib/gprintf.h> |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
setlocale(LC_ALL, ""); |
bindtextdomain(GETTEXT_PACKAGE, GNOMELOCALEDIR); |
textdomain(GETTEXT_PACKAGE); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.6.0/src/follow-symlink.h |
---|
0,0 → 1,27 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList *fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static NautilusMenuItem* fsl_menu_item_new(GdkScreen *, gboolean); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.6.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,49 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_MODULE_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.6.0/configure.in |
---|
0,0 → 1,49 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.6.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# intltool |
AC_PROG_INTLTOOL(0.18) |
GETTEXT_PACKAGE=nautilus-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
AM_GLIB_GNU_GETTEXT |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
]) |
/nautilus-follow-symlink/tags/0.6.0/ChangeLog |
---|
0,0 → 1,22 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.6.0: |
* Added support for i18n, updated build-dependancies accordingly |
0.5.2 (24 oct 2006): |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.6.0/Makefile.am |
---|
0,0 → 1,26 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
EXTRA_DIST = dist |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
\ |
intltool-extract.in \ |
intltool-merge.in \ |
intltool-update.in \ |
\ |
libtool \ |
libtool.m4 \ |
ltmain.sh \ |
ltoptions.m4 \ |
ltsugar.m4 \ |
ltversion.m4 \ |
\ |
po/Makefile.in.in |
/nautilus-follow-symlink/tags/0.6.0/po/es.po |
---|
0,0 → 1,26 |
# Spanish translations for libnautilus-follow-symlink package |
# Traducciones al español para el paquete libnautilus-follow-symlink. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 19:07+0200\n" |
"PO-Revision-Date: 2006-10-24 19:09+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
"Plural-Forms: nplurals=2; plural=(n != 1);\n" |
#: ../src/follow-symlink.c:135 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:136 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "Abrir el directoro apuntado por el enlace simbólico seleccionado actualmente" |
/nautilus-follow-symlink/tags/0.6.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/nautilus-follow-symlink/tags/0.6.0/po/ca.po |
---|
0,0 → 1,24 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006 THE libnautilus-follow-symlink'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the libnautilus-follow-symlink package. |
# Toni Corvera <outlyer@outlyer.net>, 2006. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: libnautilus-follow-symlink\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 19:07+0200\n" |
"PO-Revision-Date: 2006-10-24 19:37+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:135 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:136 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "Obre el directori apuntat per l'enllça simbòlic seleccionat" |
/nautilus-follow-symlink/tags/0.6.0/po/libnautilus-follow-symlink.pot |
---|
0,0 → 1,25 |
# SOME DESCRIPTIVE TITLE. |
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER |
# This file is distributed under the same license as the PACKAGE package. |
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. |
# |
#, fuzzy |
msgid "" |
msgstr "" |
"Project-Id-Version: PACKAGE VERSION\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2006-10-24 19:07+0200\n" |
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
"Language-Team: LANGUAGE <LL@li.org>\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=CHARSET\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:135 |
msgid "Follow symbolic _link" |
msgstr "" |
#: ../src/follow-symlink.c:136 |
msgid "Open the directory pointed by the currently selected symbolic link" |
msgstr "" |
/nautilus-follow-symlink/tags/0.6.0/BUILD |
---|
0,0 → 1,26 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure --prefix=/usr |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no real flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.6.0/dist |
---|
0,0 → 1,36 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
intltoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
# The following are moved thanks to Makefile.am (var DISTCLEANFILES) |
# (kept for situations in which make distclean fails) |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
rm -f intltool* |
rm -f po/Makefile.in.in |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.6.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.6.0:r10 |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/changelog |
---|
0,0 → 1,25 |
nautilus-follow-symlink (0.5.2-out.2) unstable; urgency=low |
* debian/rules: Install upstream ChangeLog |
* debian/docs: Install upstream BUILD instructions |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:32:54 +0200 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs ChangeLog |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0) |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Build-Depends: gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/ChangeLog |
---|
0,0 → 1,17 |
Iterim milestones: |
0.5.2: |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/Makefile.am |
---|
0,0 → 1,15 |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/follow-symlink.h |
---|
0,0 → 1,27 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList *fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static NautilusMenuItem* fsl_menu_item_new(GdkScreen *, gboolean); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/common.h |
---|
0,0 → 1,53 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#ifdef _DEBUG |
/* Debugging facilities */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/follow-symlink.c |
---|
0,0 → 1,145 |
#include "follow-symlink.h" |
#include <glib/gprintf.h> |
#include <sys/stat.h> |
#include <errno.h> /* errno (3) */ |
#include <stdlib.h> /* realpath() (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
// Offset at char 7 to remove file:// |
static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
//TODO: iface->get_background_items = fsl_get_background_items; |
iface->get_file_items = fsl_get_file_items; |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL==files || g_list_length(files) != 1) { |
FSL_LOG( (NULL==files) ? "No file" : "More than one file" ); |
return NULL; |
} |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(files->data); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// Xref: http://www.koders.com/c/fidA0AA0A78334E1FA3D668FD10B437638F6D031D77.aspx?s=NautilusFile |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Xref: /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h |
* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
/*if (gfi->type != GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK) {*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
FSL_LOG( "Not directory" ); |
return NULL; |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_info; |
// Note ..._get_name doesn't give the full path |
const gchar * const file_name = nautilus_file_info_get_uri(files->data) + URI_OFFSET; |
lstat(file_name, &file_info); |
if (! S_ISLNK(file_info.st_mode)) { |
FSL_LOG1( "Not S_ISLNK:", file_name ); |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), TRUE); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
files->data); |
return g_list_append(NULL, item); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html> |
*/ |
if (NULL == realpath(link_name, target)) { |
g_printf("ERROR in realpath(): %s\n", strerror(errno)); |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window \""; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 2 ) ); |
gchar * offset = g_stpcpy(command_line, BASE_CMD); |
//offset = g_stpcpy(offset, "file://"); // unneeded; also makes nautilus think it may be incorrect |
// if it contains spaces (instead of %20's) |
offset = g_stpcpy(offset, target); |
g_stpcpy(offset, "\""); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
const char *name; |
const char *tooltip; |
name = "-> Follow symbolic _link"; |
tooltip = "Open the directory pointed by the currently selected symbolic link"; |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,86 |
#include "nautilus-ext-follow-symlink.h" |
#include <glib/gprintf.h> |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2+debian.2/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,49 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_MODULE_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2+debian.2/Makefile.am |
---|
0,0 → 1,5 |
SUBDIRS = src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
/nautilus-follow-symlink/tags/0.5.2+debian.2/BUILD |
---|
0,0 → 1,25 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure |
Note that this being a nautilus extension, the --prefix is not really needed |
as there's no real flexibility on where to install them. The appropiate place |
will be checked on install time. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.5.2+debian.2/dist |
---|
0,0 → 1,30 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.5.2+debian.2/configure.in |
---|
0,0 → 1,38 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.5.2") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT(Makefile src/Makefile) |
/nautilus-follow-symlink/tags/0.5.2+debian.2 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/nautilus-follow-symlink/tags/0.5.2/src/follow-symlink.c |
---|
0,0 → 1,145 |
#include "follow-symlink.h" |
#include <glib/gprintf.h> |
#include <sys/stat.h> |
#include <errno.h> /* errno (3) */ |
#include <stdlib.h> /* realpath() (3) */ |
#include <string.h> /* strlen(), strerror() (3) */ |
// Offset at char 7 to remove file:// |
static const unsigned short URI_OFFSET = 7 * sizeof(gchar); |
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
//TODO: iface->get_background_items = fsl_get_background_items; |
iface->get_file_items = fsl_get_file_items; |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (NULL==files || g_list_length(files) != 1) { |
FSL_LOG( (NULL==files) ? "No file" : "More than one file" ); |
return NULL; |
} |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(files->data); |
if (strcmp(uri_scheme, "file") != 0) { |
FSL_LOG( "Not file scheme" ); |
return NULL; |
} |
g_free(uri_scheme); |
} |
// Xref: http://www.koders.com/c/fidA0AA0A78334E1FA3D668FD10B437638F6D031D77.aspx?s=NautilusFile |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Xref: /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h |
* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
/*if (gfi->type != GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK) {*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
FSL_LOG( "Not directory" ); |
return NULL; |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_info; |
// Note ..._get_name doesn't give the full path |
const gchar * const file_name = nautilus_file_info_get_uri(files->data) + URI_OFFSET; |
lstat(file_name, &file_info); |
if (! S_ISLNK(file_info.st_mode)) { |
FSL_LOG1( "Not S_ISLNK:", file_name ); |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), TRUE); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
files->data); |
return g_list_append(NULL, item); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET; |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html> |
*/ |
if (NULL == realpath(link_name, target)) { |
g_printf("ERROR in realpath(): %s\n", strerror(errno)); |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window \""; |
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 2 ) ); |
gchar * offset = g_stpcpy(command_line, BASE_CMD); |
//offset = g_stpcpy(offset, "file://"); // unneeded; also makes nautilus think it may be incorrect |
// if it contains spaces (instead of %20's) |
offset = g_stpcpy(offset, target); |
g_stpcpy(offset, "\""); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
const char *name; |
const char *tooltip; |
name = "-> Follow symbolic _link"; |
tooltip = "Open the directory pointed by the currently selected symbolic link"; |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,86 |
#include "nautilus-ext-follow-symlink.h" |
#include <glib/gprintf.h> |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
FSL_DEBUG_INIT(); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2/src/Makefile.am |
---|
0,0 → 1,15 |
nautilus_extension_lib_LTLIBRARIES = libnautilus-follow-symlink.la |
# Must be installed in nautilus' extension dir |
#nautilus_extension_libdir = $(libdir)/nautilus/extensions-1.0 |
# Cleaner way: |
nautilus_extension_libdir = `pkg-config --variable=extensiondir libnautilus-extension` |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
# There's really no need to have versioned file names |
libnautilus_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libnautilus_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/nautilus-follow-symlink/tags/0.5.2/src/follow-symlink.h |
---|
0,0 → 1,27 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* Static Prototypes */ |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList *fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static NautilusMenuItem* fsl_menu_item_new(GdkScreen *, gboolean); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2/src/common.h |
---|
0,0 → 1,53 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#include <glib/gmessages.h> /* g_print() */ |
#include <glib/gprintf.h> /* g_printf() */ |
#ifdef HAVE_CONFIG_H |
#include "config.h" |
#endif // HAVE_CONFIG_H |
#ifdef _DEBUG |
/* Debugging facilities */ |
#include <stdlib.h> /* getenv() (3) */ |
#include <string.h> /* strcmp() (3) */ |
/* Prefix for messages */ |
#define FSL_ "nautilus-follow-symlink: " |
/* Environment variable, set to 1 to enable verbosity */ |
#define DBGENV_ (getenv("FSL_DBG")) |
/* Check on runtime the environment variable's value */ |
#define DEBUG_ON_() (DBGENV_ != NULL && 0 == strcmp(DBGENV_,"1")) |
/* Informational message shown on initialisation */ |
#define FSL_DEBUG_INIT() { \ |
const int ENABLED = DEBUG_ON_(); \ |
g_print( FSL_ "DEBUG mode is available, and "); \ |
g_print( (ENABLED) ? "enabled.\n" : "disabled.\n"); \ |
g_print( FSL_ "set the environment variable FSL_DBG to \n" \ |
FSL_ "1 to enable it or to any other value to disable it.\n"); \ |
}; |
/* Display the name of the current function name */ |
#define TRACE() if (DEBUG_ON_())\ |
g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__); |
/* Display a message */ |
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str)); |
/* Display a formatted message with one string argument */ |
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2)); |
#else |
/* Debugging facilities disabled */ |
#define TRACE() |
#define FSL_LOG(a) |
#define FSL_LOG1(a,b) |
#define FSL_DEBUG_INIT() |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,49 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_MODULE_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.2/debian/changelog |
---|
0,0 → 1,18 |
nautilus-follow-symlink (0.5.2-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Tue, 24 Oct 2006 18:24:52 +0200 |
nautilus-follow-symlink (0.5.1-out.1) experimental; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 23 Oct 2006 01:20:15 +0200 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.5.2/debian/rules |
---|
0,0 → 1,102 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
test -f configure || ./dist clean gen |
./configure --prefix=/usr --disable-static |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
$(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-$(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/nautilus-follow-symlink/`pkg-config --variable=extensiondir libnautilus-extension`/*.la |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.5.2/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.5.2/debian/docs |
---|
0,0 → 1,0 |
ROADMAP |
/nautilus-follow-symlink/tags/0.5.2/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.5.2/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0) |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Build-Depends: gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.5.2/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.5.2/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.5.2/ChangeLog |
---|
0,0 → 1,17 |
Iterim milestones: |
0.5.2: |
* INTERNAL: Corrected includes and function declarations |
* INTERNAL: Switched to the autotools build system |
* BUGFIX: Retrieve libnautilus-extension's directory for installation |
* BUGFIX: Fixed mistakenly using relative paths for link resolution |
* BUGFIX: Fixed incorrect memory allocation (crashed nautilus sometimes) |
0.5.1 (23 oct 2006): |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.5.2/Makefile.am |
---|
0,0 → 1,5 |
SUBDIRS = src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-1.0 |
/nautilus-follow-symlink/tags/0.5.2/BUILD |
---|
0,0 → 1,25 |
COMPILATION |
=========== |
* If no ./configure exists (i.e. raw svn export), use the dist command: |
$ ./dist |
* Configure |
$ ./configure |
Note that this being a nautilus extension, the --prefix is not really needed |
as there's no real flexibility on where to install them. The appropiate place |
will be checked on install time. |
* Compile |
$ make |
* Install |
$ make install |
Of special interest: |
Pass -D_DEBUG to the precompiler to enable the debugging/verbose |
mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/nautilus-follow-symlink/tags/0.5.2/dist |
---|
0,0 → 1,30 |
#!/usr/bin/make -f |
dist: gen |
# aclocal won't find libtool's m4, at least in debian, unless an |
# extra include path is given, with libtoolize it is "." while |
# whitout it is /usr/share/libtool/m4, altough it will fail |
# on finding ltmain.sh |
gen: |
libtoolize |
aclocal -I . |
autoconf |
autoheader |
automake --add-missing --foreign |
regen: clean gen |
clean: |
make distclean || true |
make clean || true |
cd src && make clean || true |
# |
rm -rf autom4te.cache |
rm -f config.* depcomp install-sh missing src/config.h src/config.h.in |
rm -f aclocal.m4 |
rm -f configure Makefile Makefile.in src/Makefile src/Makefile.in |
# Undo libtoolize |
rm -f libtool.m4 lt*.m4 ltmain.sh libtool |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.5.2/configure.in |
---|
0,0 → 1,38 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.5.2") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# libtool |
AM_PROG_LIBTOOL |
AM_DISABLE_STATIC |
AC_PROG_INSTALL |
AC_LANG_C |
AC_PROG_CC |
# string.h and stdlib.h are used |
dnl defines STDC_HEADERS if ANSI-compliant headers are present |
AC_HEADER_STDC |
dnl Xref: http://www.seul.org/docs/autotut/#libtool |
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing])) |
# glib-2.0: ensure it's present |
dnl and set GLIB_CFLAGS and GLIB_LIBS |
AM_PATH_GLIB_2_0 |
# pkg-config: ensure libnautilus-extension is found by pkg-config |
PKG_CHECK_MODULES(NAUTILUS_EXTENSION, [libnautilus-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
CFLAGS="$CFLAGS $GLIB_CFLAGS $NAUTILUS_EXTENSION_CFLAGS" |
LIBS="$LIBS $GLIB_LIBS $NAUTILUS_EXTENSION_LIBS" |
AC_OUTPUT(Makefile src/Makefile) |
/nautilus-follow-symlink/tags/0.5.2 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
/nautilus-follow-symlink/tags/0.5.1/debian/rules |
---|
0,0 → 1,98 |
#!/usr/bin/make -f |
# -*- makefile -*- |
# Sample debian/rules that uses debhelper. |
# This file was originally written by Joey Hess and Craig Small. |
# As a special exception, when this file is copied by dh-make into a |
# dh-make output file, you may use that output file without restriction. |
# This special exception was added by Craig Small in version 0.37 of dh-make. |
# Uncomment this to turn on verbose mode. |
#export DH_VERBOSE=1 |
CFLAGS = -Wall -g |
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) |
CFLAGS += -O0 |
else |
CFLAGS += -O2 |
endif |
configure: configure-stamp |
configure-stamp: |
dh_testdir |
# Add here commands to configure the package. |
touch configure-stamp |
build: build-stamp |
build-stamp: configure-stamp |
dh_testdir |
# Add here commands to compile the package. |
cd src && $(MAKE) FINAL=1 |
#docbook-to-man debian/nautilus-follow-symlink.sgml > nautilus-follow-symlink.1 |
touch build-stamp |
clean: |
dh_testdir |
dh_testroot |
rm -f build-stamp configure-stamp |
# Add here commands to clean up after the build process. |
-cd src && $(MAKE) clean |
dh_clean |
install: build |
dh_testdir |
dh_testroot |
dh_clean -k |
dh_installdirs |
# Add here commands to install the package into debian/nautilus-follow-symlink. |
cd src && $(MAKE) install DESTDIR=$(CURDIR)/debian/nautilus-follow-symlink |
# Build architecture-independent files here. |
binary-indep: build install |
# We have nothing to do by default. |
# Build architecture-dependent files here. |
binary-arch: build install |
dh_testdir |
dh_testroot |
dh_installchangelogs |
dh_installdocs |
dh_installexamples |
# dh_install |
# dh_installmenu |
# dh_installdebconf |
# dh_installlogrotate |
# dh_installemacsen |
# dh_installpam |
# dh_installmime |
# dh_installinit |
# dh_installcron |
# dh_installinfo |
dh_installman |
dh_link |
dh_strip |
dh_compress |
dh_fixperms |
# dh_perl |
# dh_python |
# dh_makeshlibs |
dh_installdeb |
dh_shlibdeps |
dh_gencontrol |
dh_md5sums |
dh_builddeb |
binary: binary-indep binary-arch |
.PHONY: build clean binary-indep binary-arch binary install configure |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/nautilus-follow-symlink/tags/0.5.1/debian/changelog |
---|
0,0 → 1,6 |
nautilus-follow-symlink (0.5-out.1) experimental; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Sun, 22 Oct 2006 04:11:50 +0200 |
/nautilus-follow-symlink/tags/0.5.1/debian/copyright |
---|
0,0 → 1,27 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be officially downloaded right now, contact the autor to |
get a copy or more information. |
Copyright Holder: Toni Corvera <outlyer@outlyer.net> |
License: |
This package is free software; you can redistribute it and/or modify |
it under the terms of the GNU General Public License as published by |
the Free Software Foundation; either version 2 of the License, or |
(at your option) any later version. |
This package is distributed in the hope that it will be useful, |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
GNU General Public License for more details. |
You should have received a copy of the GNU General Public License |
along with this package; if not, write to the Free Software |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
On Debian systems, the complete text of the GNU General |
Public License can be found in `/usr/share/common-licenses/GPL'. |
/nautilus-follow-symlink/tags/0.5.1/debian/docs |
---|
0,0 → 1,0 |
ROADMAP |
/nautilus-follow-symlink/tags/0.5.1/debian/README.Debian |
---|
0,0 → 1,6 |
nautilus-follow-symlink for Debian |
---------------------------------- |
<possible notes regarding this package - if none, delete this file> |
-- Toni Corvera <outlyer@outlyer.net>, Sat, 21 Oct 2006 23:46:12 +0200 |
/nautilus-follow-symlink/tags/0.5.1/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@outlyer.net> |
Build-Depends: debhelper (>= 4.0.0) |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Build-Depends: gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev, libnautilus-extension-dev |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus |
Description: nautilus plugin to open the location pointed by a symlink |
This extension adds a context menu option to symbolic links to |
folders which opens the pointed folder instead of the symbolic link. |
/nautilus-follow-symlink/tags/0.5.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/nautilus-follow-symlink/tags/0.5.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/nautilus-follow-symlink/tags/0.5.1/ChangeLog |
---|
0,0 → 1,8 |
0.5.1: |
* BUGFIX: Correctly check error in realpath() call |
* INTERNAL: Rearrangement in multiple files, applied static where |
appropiate |
* INTERNAL: Added extra-verbosity, switchable on compile time |
0.5 (22 oct 2006): |
* Initial release |
/nautilus-follow-symlink/tags/0.5.1/src/Makefile |
---|
0,0 → 1,57 |
# Note that building without FINAL=1 creates an uber-verbose version |
ifneq ($(FINAL),1) |
VERSION:=\"0.5.1.interim.debug\" |
else |
VERSION:=\"0.5.1\" |
endif |
CFLAGS=$$(pkg-config --cflags glib-2.0 libnautilus-extension) |
LDFLAGS=$$(pkg-config --libs glib-2.0 libnautilus-extension) |
CFLAGS+=-DPIC -fPIC -g -O -DVERSION=$(VERSION) |
LDFLAGS+=-Wl,--as-needed -g -O |
ifneq ($(FINAL),1) |
CFLAGS+=-D_DEBUG |
endif |
TARGET=libnautilus-follow-symlink |
# REQUIRED TO BUILD! |
TARGET_DIR=/usr/lib/nautilus/extensions-1.0 |
INSTALL_DIR=$(DESTDIR)$(TARGET_DIR) |
CC:=gcc |
all: $(TARGET).so |
$(TARGET).la: follow-symlink.o nautilus-ext-follow-symlink.o |
libtool --mode=link $(CC) $(LDFLAGS) -o $(TARGET).la follow-symlink.lo nautilus-ext-follow-symlink.lo -rpath $(TARGET_DIR) |
$(TARGET).so: $(TARGET).la |
ln -sf .libs/$(TARGET).so . |
follow-symlink.o: follow-symlink.c follow-symlink.h common.h |
libtool --mode=compile $(CC) $(CFLAGS) -c follow-symlink.c |
nautilus-ext-follow-symlink.o: nautilus-ext-follow-symlink.c nautilus-ext-follow-symlink.h common.h |
libtool --mode=compile $(CC) $(CFLAGS) -c nautilus-ext-follow-symlink.c |
install: strip |
mkdir -p $(INSTALL_DIR) |
install -m644 -oroot -groot $(TARGET).so $(INSTALL_DIR)/ |
uninstall: |
rm -f $(INSTALL_DIR)/$(TARGET).so |
rmdir -p $(INSTALL_DIR) || true |
strip: $(TARGET).so |
strip $(TARGET).so |
distclean: clean |
clean: |
rm -f *.la *.lo *.o *.so |
rm -rf .libs |
/nautilus-follow-symlink/tags/0.5.1/src/common.h |
---|
0,0 → 1,17 |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
#include <glib.h> |
#ifdef _DEBUG |
#define TRACE() (g_printf("nautilus-follow-symlink trace: %s()\n", __FUNCTION__)); |
#else |
#define TRACE() |
#endif |
#ifndef VERSION |
#define VERSION "interim.debug" |
#endif |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.1/src/follow-symlink.c |
---|
0,0 → 1,129 |
#include "follow-symlink.h" |
/* Menu initialization */ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface) |
{ |
TRACE(); |
//TODO: iface->get_background_items = fsl_get_background_items; |
iface->get_file_items = fsl_get_file_items; |
} |
/* Bind to menu if needed */ |
GList * |
fsl_get_file_items (NautilusMenuProvider * provider, |
GtkWidget * window, |
GList * files) |
{ |
TRACE(); |
NautilusMenuItem *item; |
// Number of files = g_list_length(files) |
// Directory = nautilus_file_info_is_directory(files->data) |
if (files == NULL || g_list_length(files) != 1) { |
return NULL; |
} |
// Only file uris |
{ |
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(files->data); |
if (strcmp(uri_scheme, "file") != 0) { |
return NULL; |
} |
g_free(uri_scheme); |
} |
// Xref: http://www.koders.com/c/fidA0AA0A78334E1FA3D668FD10B437638F6D031D77.aspx?s=NautilusFile |
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data); |
/* |
* Xref: /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h |
* |
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks |
* are resolved to the target type |
*/ |
/*if (gfi->type != GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK) {*/ |
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) { |
return NULL; |
} |
// We know the file is either a directory or a symlink to a directory |
// TODO: Has glib/gnome any better/faster alternatives? |
{ |
struct stat file_info; |
const gchar * const file_name = nautilus_file_info_get_name(files->data); |
lstat(file_name, &file_info); |
if (! S_ISLNK(file_info.st_mode)) { |
return NULL; |
} |
} |
item = fsl_menu_item_new(gtk_widget_get_screen(window), TRUE); |
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), |
files->data); |
return g_list_append(NULL, item); |
} |
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info) |
{ |
TRACE(); |
//g_print("fsl_callback\n"); |
const size_t URI_OFFSET = 7 * sizeof(gchar); // Offset at char 7 to remove file:// |
const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1); |
gchar ** argv; |
const gchar * link_name = nautilus_file_info_get_uri(file_info); |
gchar * target = g_malloc(PATH_LENGTH_BYTES); |
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while |
* readlink returns the pointed file, which might be a relative path |
*/ |
if (NULL == realpath(link_name + URI_OFFSET, target)) { |
g_assert( FALSE ); |
} |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window "; |
gchar * command_line = g_malloc( sizeof(gchar) * (strlen(BASE_CMD) + strlen(target) + URI_OFFSET + 1) ); |
gchar * offset = g_stpcpy(command_line, BASE_CMD); |
offset = g_stpcpy(offset, "file://"); |
g_stpcpy(offset, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_assert( FALSE ); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n \"%s\"\n", command_line); |
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET, |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
} |
/* Create the new menu item */ |
NautilusMenuItem * |
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
const char *name; |
const char *tooltip; |
name = "-> Follow symbolic _link"; |
tooltip = "Open the directory pointed by the currently selected symbolic link"; |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink", |
name, tooltip, NULL); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.1/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,83 |
#include "nautilus-ext-follow-symlink.h" |
/* Public interface */ |
static GType fsl_type; |
static GType provider_types[1]; |
void nautilus_module_initialize (GTypeModule *module) |
{ |
TRACE(); |
g_printf("Initializing nautilus-follow-symlink extension (v.%s)\n", VERSION); |
fsl_register_type(module); |
provider_types[0] = fsl_get_type(); |
} |
void nautilus_module_shutdown (void) |
{ |
TRACE(); |
/* Module-specific shutdown */ |
g_print ("Shutting down nautilus-follow-symlink extension\n"); |
} |
void nautilus_module_list_types (const GType **types, int *num_types) |
{ |
TRACE(); |
*types = provider_types; |
*num_types = G_N_ELEMENTS(provider_types); |
} |
void fsl_register_type (GTypeModule *module) |
{ |
TRACE(); |
static const GTypeInfo info = { |
sizeof(FsymlinkExtensionClass), |
(GBaseInitFunc) NULL, |
(GBaseFinalizeFunc) NULL, |
(GClassInitFunc) fsl_class_init, |
NULL, |
NULL, |
sizeof (FsymlinkExtension), |
0, |
(GInstanceInitFunc) fsl_instance_init, |
}; |
fsl_type = g_type_module_register_type (module, |
G_TYPE_OBJECT, |
"FsymlinkExtension", |
&info, 0); |
/* Menu provider interface */ |
static const GInterfaceInfo menu_provider_iface_info = { |
(GInterfaceInitFunc)fsl_extension_menu_provider_iface_init, |
NULL, |
NULL, |
}; |
g_type_module_add_interface(module, fsl_type, |
NAUTILUS_TYPE_MENU_PROVIDER, &menu_provider_iface_info); |
/* Other Interfaces */ |
} |
GType fsl_get_type(void) |
{ |
TRACE(); |
return fsl_type; |
} |
static void fsl_instance_init(FsymlinkExtension *cvs) |
{ |
TRACE(); |
} |
static void fsl_class_init(FsymlinkExtensionClass *class) |
{ |
TRACE(); |
} |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.1/src/follow-symlink.h |
---|
0,0 → 1,34 |
#ifndef FOLLOW_SYMLINK_H |
#define FOLLOW_SYMLINK_H |
/* |
* This file contains nautilus-follow-symlink's private interface, |
* its core functionality |
*/ |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include <sys/stat.h> |
#include <stdlib.h> /* realpath() */ |
#include <string.h> /* strlen() */ |
#include "common.h" |
/* Static Prototypes */ |
static GType fsl_get_type(void); |
static void fsl_register_type(GTypeModule *); |
static void fsl_callback(NautilusMenuItem *, NautilusFileInfo *); |
static GList *fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *); |
static NautilusMenuItem* fsl_menu_item_new(GdkScreen *, gboolean); |
/* Exported Prototypes |
* Here the namespace is a bit more explicit just in case |
*/ |
void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *); |
#endif /* FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |
/nautilus-follow-symlink/tags/0.5.1/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,49 |
#ifndef NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#define NAUTILUS_EXT_FOLLOW_SYMLINK_H |
#include <glib-object.h> |
#include <libnautilus-extension/nautilus-menu-provider.h> |
#include "common.h" |
/* |
* This file contains nautilus-follow-symlink's "public" interface, |
* the functions required to bind the extension to nautilus |
*/ |
void nautilus_module_initialize(GTypeModule *); |
void nautilus_module_shutdown(void); |
void nautilus_module_list_types(const GType **, int *); |
/* These ones don't need public visibility */ |
static void fsl_register_type(GTypeModule *); |
static GType fsl_get_type(void); |
/* Data Types */ |
struct _FsymlinkExtensionClass { |
GObjectClass parent_slot; |
}; |
struct _FsymlinkExtension { |
GObject parent_slot; |
}; |
typedef struct _FsymlinkExtensionClass FsymlinkExtensionClass; |
typedef struct _FsymlinkExtension FsymlinkExtension; |
/* Data initializers */ |
static void fsl_class_init (FsymlinkExtensionClass *class); |
static void fsl_instance_init (FsymlinkExtension *cvs); |
/* Defined in the private interface */ |
extern void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface); |
#endif /* NAUTILUS_MODULE_FOLLOW_SYMLINK_H */ |
/* vim:set ts=4 et ai: */ |