/ATTIC/MOVED_TO_GIT |
---|
0,0 → 1,4 |
Projects here have been moved to git at https://git.outlyer.net |
And in some cases also mirrored at https://github.com/outlyer-net |
/ATTIC/nautilus-follow-symlink/trunk/.gitignore |
---|
0,0 → 1,16 |
# Files produced during deb packaging |
/*.deb |
/*.ddeb |
/*.build |
/*.buildinfo |
/*.changes |
/*/debian/files |
/*/debian/.debhelper |
/*/debian/*-follow-symlink/ |
/*/debian/*.substvars |
/*/debian/*.log |
build-stamp |
configure-stamp |
configure~ |
/ATTIC/nautilus-follow-symlink/trunk/caja/configure.ac |
---|
0,0 → 1,107 |
dnl $Id: configure.ac 2517 2012-08-12 02:56:55Z toni $ |
AC_INIT(caja-follow-symlink, [1.2.1]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev: 2517 $) |
AC_CONFIG_HEADER(src/config.h) |
AC_CONFIG_MACRO_DIR([m4]) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
dnl if test -z "$CPPFLAGS" ; then |
dnl # NOTE: -pedantic will error when it encounters #warning because it |
dnl # it is a GCC extension, nautilus-extension uses #warning |
dnl # CPPFLAGS="-pedantic-errors" |
dnl fi |
if test -z "$CFLAGS" ; then |
# NOTE: Getting warnings about granular inclusion of nautilus-extension |
# headers and deprecated ones, coming from nautilus-extension, not my |
# code |
#CFLAGS="-Werror -Winline" |
CFLAGS="-Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
# -O2 Showed problems in Fedora 17 (GCC 4.7) (not in previous versions nor in |
# Debian's GCC 4.7.1 though (?) |
# (solution was adding extern definition of ferror_unlocked |
CFLAGS="-I\"$PWD/src/caja-layer\" -O2 -Wall -std=gnu99 $CFLAGS" |
# -z relro -> read-only relocation ld flag |
LDFLAGS="-Wl,--as-needed -Wl,-z,relro $LDFLAGS" |
# FIXME: Getting multiple definitions for basic functions like read and getcwd, |
# not sure where they come from |
# --allow-multiple-definition sounds like a bad idea, though |
LDFLAGS="-Wl,--allow-multiple-definition $LDFLAGS" |
# 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=caja-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
#AM_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# pkg-config: ensure libcaja-extension is found by pkg-config |
PKG_CHECK_MODULES(CAJA_EXTENSION, [libcaja-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
#CFLAGS="$CFLAGS $CAJA_EXTENSION_CFLAGS" |
#LIBS="$LIBS $CAJA_EXTENSION_LIBS" |
dnl GTK-3 migration safeguard <http://live.gnome.org/GnomeGoals/UseGseal> |
CFLAGS="$CFLAGS -DGSEAL_ENABLE" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# Caja: $CAJA_EXTENSION_CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# Caja: $CAJA_EXTENSION_LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
caja-follow-symlink.spec |
]) |
/ATTIC/nautilus-follow-symlink/trunk/caja/.gitignore |
---|
0,0 → 1,129 |
caja-follow-symlink-*.tar.gz |
*.spec |
# results of patching via bootstrap.sh |
ltmain.sh.orig |
ltmain.sh.rej |
# autogenerated: |
libtool |
m4/ |
po/Makefile.in.in |
po/POTFILES |
po/*.gmo |
po/stamp-* |
src/.libs |
src/config.h* |
src/stamp-* |
# /autogenerated |
# Default ignores from Forgejo |
# ---> Autotools |
# http://www.gnu.org/software/automake |
Makefile.in |
/ar-lib |
/mdate-sh |
/py-compile |
/test-driver |
/ylwrap |
.deps/ |
.dirstamp |
# http://www.gnu.org/software/autoconf |
autom4te.cache |
/autoscan.log |
/autoscan-*.log |
/aclocal.m4 |
/compile |
/config.cache |
/config.guess |
/config.h.in |
/config.log |
/config.status |
/config.sub |
/configure |
/configure.scan |
/depcomp |
/install-sh |
/missing |
/stamp-h1 |
# https://www.gnu.org/software/libtool/ |
/ltmain.sh |
# http://www.gnu.org/software/texinfo |
/texinfo.tex |
# http://www.gnu.org/software/m4/ |
m4/libtool.m4 |
m4/ltoptions.m4 |
m4/ltsugar.m4 |
m4/ltversion.m4 |
m4/lt~obsolete.m4 |
# Generated Makefile |
# (meta build system like autotools, |
# can automatically generate from config.status script |
# (which is called by configure script)) |
Makefile |
# ---> C |
# Prerequisites |
*.d |
# Object files |
*.o |
*.ko |
*.obj |
*.elf |
# Linker output |
*.ilk |
*.map |
*.exp |
# Precompiled Headers |
*.gch |
*.pch |
# Libraries |
*.lib |
*.a |
*.la |
*.lo |
# Shared objects (inc. Windows DLLs) |
*.dll |
*.so |
*.so.* |
*.dylib |
# Executables |
*.exe |
*.out |
*.app |
*.i*86 |
*.x86_64 |
*.hex |
# Debug files |
*.dSYM/ |
*.su |
*.idb |
*.pdb |
# Kernel Module Compile Results |
*.mod* |
*.cmd |
.tmp_versions/ |
modules.order |
Module.symvers |
Mkfile.old |
dkms.conf |
/ATTIC/nautilus-follow-symlink/trunk/caja/caja-follow-symlink.spec.in |
---|
0,0 → 1,94 |
# |
# spec file for caja-follow-symlink rpm |
# |
# based on the spec file for nautilus-follow-symlink |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
%define api_version 2.0 |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag} |
Summary: caja plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./caja-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, caja-devel, gtk3-devel |
Requires: caja-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/caja/extensions-%{api_version}/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/caja/extensions-%{api_version}/*.so |
%changelog |
* Thu Aug 9 2012 Toni Corvera <outlyer@gmail.com> - 1.2.1 |
- Removed the *upstream revision |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
/ATTIC/nautilus-follow-symlink/trunk/caja/INSTALL |
---|
0,0 → 1,0 |
link ../nautilus/INSTALL |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/bootstrap.sh |
---|
0,0 → 1,0 |
link ../nautilus/bootstrap.sh |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/ChangeLog |
---|
0,0 → 1,0 |
link ../nautilus/ChangeLog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/refresh-layer.bash |
---|
0,0 → 1,27 |
#!/bin/bash |
# |
# This script shouldn't be executed unless new function calls |
# or types are added |
exec >layer.h |
echo "Generating Nautilus to Caja preprocessor directives..." >&2 |
egrep --no-filename -o 'Nautilus[A-Z][^ ]*' *.c *.h |\ |
sort | uniq |\ |
sed -r -e 's/Nautilus([A-Z][^ ]*)/#define Nautilus\1 Caja\1/' |
egrep --no-filename -o 'nautilus_[^(]*' *.c *.h | grep -v ' ' |\ |
sort | uniq |\ |
sed -r -e 's/nautilus_(.*)/#define nautilus_\1 caja_\1/' |
egrep --no-filename -o 'NAUTILUS_TYPE_[A-Z_]*' *.c *.h |\ |
sort | uniq |\ |
sed -r -e 's/NAUTILUS_(.*)/#define NAUTILUS_\1 CAJA_\1/' |
cat <<EOF |
#undef NAUTILUS_COMMAND |
#undef FSL_MSG_PREFIX |
#define NAUTILUS_COMMAND "caja" |
#define FSL_MSG_PREFIX "caja-follow-symlink" |
EOF |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/follow-symlink.c |
---|
0,0 → 1,0 |
link ../../nautilus/src/follow-symlink.c |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,0 |
link ../../nautilus/src/nautilus-ext-follow-symlink.c |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/caja-layer/libnautilus-extension/nautilus-menu-provider.h |
---|
0,0 → 1,3 |
#include <libcaja-extension/caja-menu-provider.h> |
#include "layer.h" |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/Makefile.am |
---|
0,0 → 1,23 |
# $Id: Makefile.am 1307 2009-04-30 19:38:17Z toni $ # |
# |
# Required to correctly install the locale files (and to access them) |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
caja_extension_lib_LTLIBRARIES = libcaja-follow-symlink.la |
# Must be installed in caja' extension dir |
#caja_extension_libdir = $(libdir)/caja/extensions-1.0 |
# Cleaner way: |
caja_extension_libdir = `pkg-config --variable=extensiondir libcaja-extension` |
noinst_HEADERS=*.h caja-layer/libnautilus-extension/nautilus-menu-provider.h |
libcaja_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
libcaja_follow_symlink_la_LIBADD = $(CAJA_EXTENSION_LIBS) |
libcaja_follow_symlink_la_CFLAGS = $(CAJA_EXTENSION_CFLAGS) |
# There's really no need to have versioned file names |
libcaja_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libcaja_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/follow-symlink.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/follow-symlink.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/nautilus-ext-follow-symlink.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/common.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/common.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/src/layer.h |
---|
0,0 → 1,16 |
#define NautilusFileInfo CajaFileInfo |
#define NautilusMenuItem CajaMenuItem |
#define NautilusMenuProvider CajaMenuProvider |
#define NautilusMenuProviderIface CajaMenuProviderIface |
#define nautilus_file_info_get_file_type caja_file_info_get_file_type |
#define nautilus_file_info_get_location caja_file_info_get_location |
#define nautilus_file_info_get_name caja_file_info_get_name |
#define nautilus_file_info_get_parent_location caja_file_info_get_parent_location |
#define nautilus_file_info_get_uri caja_file_info_get_uri |
#define nautilus_file_info_get_uri_scheme caja_file_info_get_uri_scheme |
#define nautilus_file_info_is_directory caja_file_info_is_directory |
#define nautilus_menu_item_new caja_menu_item_new |
#define nautilus_module_initialize caja_module_initialize |
#define nautilus_module_list_types caja_module_list_types |
#define nautilus_module_shutdown caja_module_shutdown |
#define NAUTILUS_TYPE_MENU_PROVIDER CAJA_TYPE_MENU_PROVIDER |
/ATTIC/nautilus-follow-symlink/trunk/caja/Makefile.am |
---|
0,0 → 1,33 |
SUBDIRS = po src |
ACLOCAL_AMFLAGS = -I m4 |
EXTRA_DIST = \ |
po/ChangeLog README \ |
po/POTFILES.in po/*.po \ |
kludges/* \ |
bootstrap.sh \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
C_EXTENSIONDIR=`pkg-config --variable=extensiondir libcaja-extension` |
forceinstall: all |
pkg-config --atleast-version=1.2 libcaja-extension |
sudo install -m644 src/.libs/libcaja-follow-symlink.so $(C_EXTENSIONDIR)/ |
-killall -9 caja |
forceuninstall: |
sudo $(RM) $(C_EXTENSIONDIR)/libcaja-follow-symlink.so |
-killall -9 caja |
#ACLOCAL_AMFLAGS = -I m4 |
/ATTIC/nautilus-follow-symlink/trunk/caja/README |
---|
0,0 → 1,2 |
Note this package is generated directly from nautilus-follow-symlink, |
that's why it references nautilus in multiple files. |
/ATTIC/nautilus-follow-symlink/trunk/caja/LGPL |
---|
0,0 → 1,0 |
link ../nautilus/LGPL |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/kludges |
---|
0,0 → 1,0 |
link ../nautilus/kludges |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/po/ca.po |
---|
0,0 → 1,0 |
link ../../nautilus/po/ca.po |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/po/es.po |
---|
0,0 → 1,0 |
link ../../nautilus/po/es.po |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/po/ChangeLog |
---|
0,0 → 1,0 |
link ../../nautilus/po/ChangeLog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/po/POTFILES.in |
---|
0,0 → 1,0 |
link ../../nautilus/po/POTFILES.in |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/rules |
---|
0,0 → 1,110 |
#!/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 |
# http://wiki.debian.org/Hardening#dpkg-buildflags |
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) |
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) |
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) |
# Worarounds (couter-measures to Debian's [Sid] hardened flags |
# as of this writing) |
# doing funny stuff with printf-like funcions will make |
# gcc paranoid, -Werror=format-security is defined in |
# dpkg-buildflags |
CFLAGS+=-Wno-error=format-security |
# _FORTIFY_SOURCE=2 is defined in dpkg-buildflags, it produces |
# bogus multiple-definition errors for unistd.h functions |
CPPFLAGS+=-U_FORTIFY_SOURCE |
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 \ |
CFLAGS="$(CFLAGS)" \ |
CPPFLAGS="$(CPPFLAGS)" \ |
LDFLAGS="$(LDFLAGS)" |
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/caja-follow-symlink.sgml > caja-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/caja-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/caja-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/caja-follow-symlink/`pkg-config --variable=extensiondir libcaja-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 |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/README.Debian |
---|
0,0 → 1,12 |
caja-follow-symlink for Debian |
------------------------------ |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.gmail>, Sun, 12 Aug 2012 14:52:03 +0200 |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/mate |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 5.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libcaja-extension-dev, intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/caja-follow-symlink/ |
Package: caja-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends} |
Description: caja 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. |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/dirs |
---|
0,0 → 1,0 |
link ../../nautilus/debian/dirs |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/compat |
---|
0,0 → 1,0 |
link ../../nautilus/debian/compat |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/changelog |
---|
0,0 → 1,0 |
link ../../nautilus/debian/changelog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/copyright |
---|
0,0 → 1,0 |
link ../../nautilus/debian/copyright |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/debian/docs |
---|
0,0 → 1,0 |
link ../../nautilus/debian/docs |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/caja/AUTHORS |
---|
0,0 → 1,0 |
link ../nautilus/AUTHORS |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/ChangeLog |
---|
0,0 → 1,54 |
2024-04-19: Release 1.2.1 |
* Updated to build with newer gcc |
2012-08-18: Release 1.2.0 |
* Added compatibility with Caja |
* Bugfix: |
- Correctly escape resolved paths |
* Compatibility: |
- GNOME3 support tested |
Builds in either GNOME2 or GNOME3 correctly |
- Fixed weird compilation error seen on Fedora 17 |
* Packaging: |
- Added bootstrap.sh for easy re-generation of configure scripts in |
case the default ones are problematic |
- RPM: Support both GNOME2 and GNOME3 installations |
* Other: |
- Added libtool workaround to reduce the number of libraries |
linked against |
2011-04-07: Pre-Release 1.2.0-pre.1 |
* Compatibility: |
- Refresh to build against GNOME 3, preliminary support |
2009-04-30: Release 1.1.0 |
* Bugfix: |
- Use stock icon instead of hard-wired icon location |
* Packaging: |
- Re-gettextized: added po/ChangeLog |
- Deb package cleanup |
- RPM packaging support |
- Provide configure script by default |
* Compatibility: |
- Dropped support for nautilus-extension 1.0 completely |
* Other: |
- Reworked autoconf/automake with looser requirements |
- Support cross-compilation |
2008-05-04: Release 1.0.99-pre.1 (1.1.0 pre-release) |
* Other: |
- Adapted to work with GNOME 2.22 and above |
For older GNOME versions, 1.0.2 should be used |
2007-05-12: Release 1.0.2 |
* Bugfix: Fixed icon location, was broken on newer systems |
2006-12-14: Release 1.0.1 |
* Bugfixes: |
- Show correctly file names with underscores |
- Fixed compilation on 64bits archs (__unused can't be defined) |
- Require automake 1.9, which was actually used |
2006-11-10: Release 1.0 |
[First public release] |
# vim:set ts=4 et ai: # |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/configure.ac |
---|
0,0 → 1,106 |
dnl $Id$ |
AC_INIT(nautilus-follow-symlink, [1.2.1]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev$) |
AC_CONFIG_HEADER(src/config.h) |
AC_CONFIG_MACRO_DIR([m4]) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
dnl if test -z "$CPPFLAGS" ; then |
dnl # NOTE: -pedantic will error when it encounters #warning because it |
dnl # it is a GCC extension, nautilus-extension uses #warning |
dnl # CPPFLAGS="-pedantic-errors" |
dnl fi |
if test -z "$CFLAGS" ; then |
# NOTE: Getting warnings about granular inclusion of nautilus-extension |
# headers and deprecated ones, coming from nautilus-extension, not my |
# code |
#CFLAGS="-Werror -Winline" |
CFLAGS="-Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
# -O2 Showed problems in Fedora 17 (GCC 4.7) (not in previous versions nor in |
# Debian's GCC 4.7.1 though (?) |
# (solution was adding extern definition of ferror_unlocked |
CFLAGS="-O2 -Wall -std=gnu99 $CFLAGS" |
# -z relro -> read-only relocation ld flag |
LDFLAGS="-Wl,--as-needed -Wl,-z,relro $LDFLAGS" |
# FIXME: Getting multiple definitions for basic functions like read and getcwd, |
# not sure where they come from |
# --allow-multiple-definition sounds like a bad idea, though |
LDFLAGS="-Wl,--allow-multiple-definition $LDFLAGS" |
# 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_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# 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" |
#LIBS="$LIBS" |
dnl GTK-3 migration safeguard <http://live.gnome.org/GnomeGoals/UseGseal> |
CFLAGS="$CFLAGS -DGSEAL_ENABLE" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# Nautilus: $NAUTILUS_EXTENSION_CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# Nautilus: $NAUTILUS_EXTENSION_LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
nautilus-follow-symlink.spec |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/changelog |
---|
0,0 → 1,62 |
nautilus-follow-symlink (1.2.1-pon.1) stable; urgency=low |
* New release. |
-- Toni Corvera <outlyer@gmail.com> Fri, 19 Apr 2024 20:36:30 +0200 |
nautilus-follow-symlink (1.2.0-pon.1) unstable; urgency=low |
* GNOME3-ready release. Finally. |
* Bumped compatibility level to 5 |
* debian/rules: Added system-provided compiler flags |
* debian/changelog: Changed upstream suffix to "pon" |
* debian/control: Removed explicit dependency on nautilus |
-- Toni Corvera <outlyer@gmail.com> Thu, 09 Aug 2012 19:02:40 +0200 |
nautilus-follow-symlink (1.2.0+pre.1-upstream.1) unstable; urgency=low |
* Preliminary support for GNOME3. |
-- Toni Corvera <outlyer@gmail.com> Thu, 07 Apr 2011 03:24:23 +0200 |
nautilus-follow-symlink (1.1.0-upstream.1) unstable; urgency=low |
* New release. |
* debian/control: Drop build-depencies on autotools |
* debian/copyright: Updated template |
* debian/README.Debian: Notes on being unofficial+upstream |
-- Toni Corvera <outlyer@gmail.com> Thu, 30 Apr 2009 15:50:14 +0200 |
nautilus-follow-symlink (1.0.99+pre.2-upstream.0) experimental; urgency=low |
* New pre-release |
* Corrected package pre-version number order |
-- Toni Corvera <outlyer@gmail.com> Wed, 04 Jun 2008 13:20:28 +0200 |
nautilus-follow-symlink (1.0.99-upstream.0-pre.1) experimental; urgency=low |
* First pre-release for GNOME 2.22. |
-- Toni Corvera <outlyer@gmail.com> Sat, 03 May 2008 21:48:02 +0200 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/compat |
---|
0,0 → 1,0 |
7 |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 5.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libnautilus-extension-dev (>= 2.21), intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/nautilus-follow-symlink/ |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends} |
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. |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/rules |
---|
0,0 → 1,110 |
#!/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 |
# http://wiki.debian.org/Hardening#dpkg-buildflags |
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) |
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) |
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) |
# Worarounds (couter-measures to Debian's [Sid] hardened flags |
# as of this writing) |
# doing funny stuff with printf-like funcions will make |
# gcc paranoid, -Werror=format-security is defined in |
# dpkg-buildflags |
CFLAGS+=-Wno-error=format-security |
# _FORTIFY_SOURCE=2 is defined in dpkg-buildflags, it produces |
# bogus multiple-definition errors for unistd.h functions |
CPPFLAGS+=-U_FORTIFY_SOURCE |
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 \ |
CFLAGS="$(CFLAGS)" \ |
CPPFLAGS="$(CPPFLAGS)" \ |
LDFLAGS="$(LDFLAGS)" |
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 |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/copyright |
---|
0,0 → 1,35 |
This package was debianized by Toni Corvera <outlyer@gmail.com> on |
Thu, 30 Apr 2009 15:47:55 +0200. |
It can be downloaded from <http://p.outlyer.net/nautilus-follow-symlink> |
Upstream Author: |
Toni Corvera <outlyer@gmail.com> |
Copyright: |
Copyright (C) 2006, 2008, 2009 Toni Corvera |
License: |
This package is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
The Debian packaging is (C) 2006-2009, Toni Corvera <outlyer@gmail.com> and |
is licensed under the GPL, see `/usr/share/common-licenses/GPL'. |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/docs |
---|
0,0 → 1,0 |
AUTHORS |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/README.Debian |
---|
0,0 → 1,12 |
nautilus-follow-symlink for Debian |
---------------------------------- |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.net>, Thu, 30 Apr 2009 15:46:03 +0200 |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/.gitignore |
---|
0,0 → 1,129 |
nautilus-follow-symlink-*.tar.gz |
*.spec |
# results of patching via bootstrap.sh |
ltmain.sh.orig |
ltmain.sh.rej |
# autogenerated: |
libtool |
m4/ |
po/Makefile.in.in |
po/POTFILES |
po/*.gmo |
po/stamp-* |
src/.libs |
src/config.h* |
src/stamp-* |
# /autogenerated |
# Default ignores from Forgejo |
# ---> Autotools |
# http://www.gnu.org/software/automake |
Makefile.in |
/ar-lib |
/mdate-sh |
/py-compile |
/test-driver |
/ylwrap |
.deps/ |
.dirstamp |
# http://www.gnu.org/software/autoconf |
autom4te.cache |
/autoscan.log |
/autoscan-*.log |
/aclocal.m4 |
/compile |
/config.cache |
/config.guess |
/config.h.in |
/config.log |
/config.status |
/config.sub |
/configure |
/configure.scan |
/depcomp |
/install-sh |
/missing |
/stamp-h1 |
# https://www.gnu.org/software/libtool/ |
/ltmain.sh |
# http://www.gnu.org/software/texinfo |
/texinfo.tex |
# http://www.gnu.org/software/m4/ |
m4/libtool.m4 |
m4/ltoptions.m4 |
m4/ltsugar.m4 |
m4/ltversion.m4 |
m4/lt~obsolete.m4 |
# Generated Makefile |
# (meta build system like autotools, |
# can automatically generate from config.status script |
# (which is called by configure script)) |
Makefile |
# ---> C |
# Prerequisites |
*.d |
# Object files |
*.o |
*.ko |
*.obj |
*.elf |
# Linker output |
*.ilk |
*.map |
*.exp |
# Precompiled Headers |
*.gch |
*.pch |
# Libraries |
*.lib |
*.a |
*.la |
*.lo |
# Shared objects (inc. Windows DLLs) |
*.dll |
*.so |
*.so.* |
*.dylib |
# Executables |
*.exe |
*.out |
*.app |
*.i*86 |
*.x86_64 |
*.hex |
# Debug files |
*.dSYM/ |
*.su |
*.idb |
*.pdb |
# Kernel Module Compile Results |
*.mod* |
*.cmd |
.tmp_versions/ |
modules.order |
Module.symvers |
Mkfile.old |
dkms.conf |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/nautilus-follow-symlink.spec.in |
---|
0,0 → 1,94 |
# |
# spec file for nautilus-follow-symlink rpm |
# |
# based on the spec file for mp3plot <http://p.outlyer.net/mp3plot> |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
%define api_version %(pkg-config --atleast-version=3.0 libnautilus-extension && echo 3.0 || echo 2.0) |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag} |
Summary: nautilus plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./nautilus-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, nautilus-devel, gtk3-devel |
Requires: nautilus-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/nautilus/extensions-%{api_version}/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/nautilus/extensions-%{api_version}/*.so |
%changelog |
* Thu Aug 9 2012 Toni Corvera <outlyer@gmail.com> - 1.2.1 |
- Removed the *upstream revision |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/follow-symlink.c |
---|
0,0 → 1,359 |
/* $Id$ |
* |
* follow-symlink.c |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009, 2011, 2012 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
#include <gio/gio.h> |
#include <gtk/gtk.h> |
// Symbolic name of the icon, use to be in /usr/share/icons/gnome/[16x16]/emblems/ |
#define FSL_ICON_NAME "emblem-symbolic-link" |
extern int errno; |
// References for gio and the newer nautilus-extension: (required to support GNOME 2.22) |
// http://library.gnome.org/devel/gio/unstable/GFile.html |
// http://library.gnome.org/devel/gio/unstable/GFileInfo.html |
// http://library.gnome.org/devel/libnautilus-extension/unstable/libnautilus-extension-nautilus-file-info.html |
#if 0 // See comments below |
/* Obtains the icon path |
* The returned string should be freed with g_free() |
* |
* If the real icon path can't be obtained, a symbolic icon name is returned |
* instead. |
* |
* XXX: This is technically unneeded, passing FSL_ICON_NAME is enough for nautilus |
* to resolve the icon in GNOME3. |
* But neither method seems to work anymore in GNOME2 for some |
* reason, other plugins don't show icons either so I guess that's normal. |
*/ |
static gchar * fsl_icon_name() { |
TRACE(); |
GtkIconTheme * git = gtk_icon_theme_get_default(); // Don't deallocate |
g_assert( NULL != git ); |
GtkIconInfo * gii = gtk_icon_theme_lookup_icon(git, |
FSL_ICON_NAME, |
16, // Size |
GTK_ICON_LOOKUP_GENERIC_FALLBACK); // Flags |
if (NULL == gii) { |
// Lookup failed |
return g_strdup(FSL_ICON_NAME); |
} |
// gtk_icon_info_get_filename() returns an string owned by |
// GTK. It was quickly overwritten in my tests. |
// g_strdup() is safe to be called on NULL (return NULL) |
gchar * fn = g_strdup(gtk_icon_info_get_filename(gii)); |
gtk_icon_info_free(gii); |
if (NULL == fn) { // No filename associated |
return g_strdup(FSL_ICON_NAME); |
} |
return fn; |
} |
#endif |
/* 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 with 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); |
} |
// TODO: Once the older code is deprecated, some nautilus_* function can be |
// translated to their g_file_* counterparts. |
// Only process symlinks to directories, we know already the file is a |
// directory or a symlink to one |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
if (!g_file_info_get_is_symlink(gfi)) { |
FSL_LOG("No " G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK " attribute 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 file_data) |
{ |
TRACE(); |
/* |
* The "effective" type is returned, a symlink to a directory is a directory |
*/ |
return G_FILE_TYPE_DIRECTORY == nautilus_file_info_get_file_type(file_data); |
} |
/* |
* 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; |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
// The result will relative if the symlink is, must use the correct CWD |
const char * target = g_file_info_get_symlink_target(gfi); |
GFile * parent = nautilus_file_info_get_parent_location(file_info); |
gchar * escaped_tgt = g_shell_quote(target); |
gchar * command_line = g_strdup_printf(NAUTILUS_COMMAND " --no-desktop --no-default-window %s", escaped_tgt); |
g_free(escaped_tgt); |
if (G_UNLIKELY(FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL))) { |
g_free(command_line); |
g_printerr("Failed preparing " NAUTILUS_COMMAND " command-line.\n"); |
g_return_if_reached(); |
} |
//g_printf(FSL_MSG_PREFIX ": Spawning with [PWD=%s]\n `%s`\n", g_file_get_path(parent), command_line); |
g_printf(FSL_MSG_PREFIX ": Spawning with\n `%s`\n", command_line); |
g_spawn_async( g_file_get_path(parent), // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
// g_try_malloc would allow nautilus to stay up even if some allocation fails |
// but we'd be in trouble anyway. Apparently returning NULL is not an option either. |
name = g_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON_NAME); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* nautilus-ext-follow-symlink.c |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/Makefile.am |
---|
0,0 → 1,23 |
# $Id$ # |
# |
# Required to correctly install the locale files (and to access them) |
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` |
noinst_HEADERS=*.h |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
libnautilus_follow_symlink_la_LIBADD = $(NAUTILUS_EXTENSION_LIBS) |
libnautilus_follow_symlink_la_CFLAGS = $(NAUTILUS_EXTENSION_CFLAGS) |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* nautilus-ext-follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/src/common.h |
---|
0,0 → 1,253 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009, 2011, 2012 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#if 0 // Separate includes. Might be problematic depending on flags |
# include <glib/gmessages.h> /* g_print() */ |
# include <glib/gprintf.h> /* g_printf() */ |
#else |
# include <glib.h> |
#endif |
// Used to allow simpler nautilus/caja code sharing |
#define NAUTILUS_COMMAND "nautilus" |
#define FSL_MSG_PREFIX "nautilus-follow-symlink" |
#if 1 // Tricky workaround |
// I truly have no clue why on earth I need this, but on Fedora 17, |
// with GCC 4.7.0, when -O2 is used a "multiple definition" of |
// ferror_unlocked will be triggered. |
// Adding -fcommon didn't help |
# include <stdio.h> |
extern int ferror_unlocked(FILE*); |
#endif |
#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 |
// Not including this produces multiple definition errors as of 2008 (it didn't |
// at the time of the previous release) |
#ifdef HAVE_SYS_STAT_H |
#include <sys/stat.h> |
#endif // HAVE_SYS_STAT_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)) |
// __unused gives errors in x86_64 |
#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 // _DEBUG |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/AUTHORS |
---|
0,0 → 1,2 |
nautilus-follow-symlink is Copyright (c) 2006, 2007, 2009, 2011, 2012 Toni Corvera <outlyer@gmail.com>. |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/INSTALL |
---|
0,0 → 1,29 |
BUILD / INSTALLATION INSTRUCTIONS |
================================= |
Binaries for some distributions are provided in nautilus-follow-symlink's |
homepage <http://p.outlyer.net/nautilus-follow-symlink>. |
Building |
======== |
Follow the usual GNU build instructions: |
$ ./configure --prefix=/usr |
(or: $ ./configure --prefix=`pkg-config --variable prefix libnautilus-extension`) |
$ make |
# make install |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
COMPILER NOTES |
============== |
* This program has only been tested with gcc |
* Define _DEBUG in the preprocessor to enable the debugging/verbose mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/bootstrap.sh |
---|
0,0 → 1,11 |
#!/bin/sh -x |
PATCH=kludges/libtool-honor-as-needed.patch |
# Run this script to run the auto* tools in a correct order |
echo "Trying to re-generate the build scripts..." >&2 |
test -f ltmain.sh && patch -R <"$PATCH" |
autoreconf --install --symlink --verbose |
patch < "$PATCH" |
intltoolize --automake |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/Makefile.am |
---|
0,0 → 1,31 |
SUBDIRS = po src |
ACLOCAL_AMFLAGS = -I m4 |
EXTRA_DIST = \ |
po/ChangeLog \ |
bootstrap.sh \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
N_EXTENSIONDIR=`pkg-config --variable=extensiondir libnautilus-extension` |
forceinstall: all |
pkg-config --atleast-version=2.21 libnautilus-extension |
sudo install -m644 src/.libs/libnautilus-follow-symlink.so $(N_EXTENSIONDIR)/ |
-killall -9 nautilus |
forceuninstall: |
sudo $(RM) $(N_EXTENSIONDIR)/libnautilus-follow-symlink.so |
-killall -9 nautilus |
#ACLOCAL_AMFLAGS = -I m4 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/dist.mk |
---|
0,0 → 1,62 |
#!/usr/bin/make -f |
# $Id$ |
all: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo " (use ./dist.mk <TARGET>):" |
@echo " gen Run the autotools" |
@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 " force-gen Like gen, but overwrite even up-to-date files" |
@echo |
@echo "The rest of important rules are provided by the generated Makefile" |
@echo " (i.e.: $$ make <TARGET>)" |
@echo " harshtest (To be used during development) Copy the library to the system" |
@echo " and kill nautilus to re-load it" |
@echo " and the standard GNU rules:" |
@echo " dist Create the distribution tarball" |
@echo " distcheck Create tarball, check it builds and it installs. Add a DESTDIR" |
@echo " or it will try to install in the system" |
_gen_common: |
intltoolize --automake |
gen: |
autoreconf --install --verbose --symlink |
$(MAKE) -f dist.mk _gen_common |
force-gen: |
autoreconf --install --verbose --force --symlink |
$(MAKE) -f dist.mk _gen_common |
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: |
-debclean |
-make distclean |
cd src && make clean || true |
# |
$(RM) -r autom4te.cache |
$(RM) config.* depcomp install-sh missing src/config.h src/config.h.in |
$(RM) aclocal.m4 |
$(RM) configure Makefile Makefile.in src/Makefile src/Makefile.in |
$(RM) 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) libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
$(RM) intltool* |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/kludges/README |
---|
0,0 → 1,13 |
libtool-honor-as-needed.patch contains a patch against ltmain.sh (generated |
on bootstrap to make use of libtool), so that it doesn't reorder |
"-Wl,--as-needed", a linker flag that removes unnecessary dependencies. |
It only applies to libraries listed after it, but libtool always pushes |
it after the libs in the command line, so it does nothing, normally. |
References: |
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=347650 |
"Debian bug #347650: libtool: Incorrect argument reordering" |
[Source of patch] |
http://sigquit.wordpress.com/2011/02/16/why-asneeded-doesnt-work-as-expected-for-your-libraries-on-your-autotools-project/ |
"Why --as-needed doesn't work as expected for your libraries on your autotools project" |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/kludges/libtool-honor-as-needed.patch |
---|
0,0 → 1,30 |
--- ltmain.sh.orig 2012-08-14 11:36:48.211924221 +0200 |
+++ ltmain.sh 2012-08-14 11:42:48.663918234 +0200 |
@@ -5800,6 +5800,11 @@ |
arg=$func_stripname_result |
;; |
+ -Wl,--as-needed|-Wl,--no-as-needed) |
+ deplibs="$deplibs $arg" |
+ continue |
+ ;; |
+ |
-Wl,*) |
func_stripname '-Wl,' '' "$arg" |
args=$func_stripname_result |
@@ -6163,6 +6168,15 @@ |
lib= |
found=no |
case $deplib in |
+ -Wl,--as-needed|-Wl,--no-as-needed) |
+ if test "$linkmode,$pass" = "prog,link"; then |
+ compile_deplibs="$deplib $compile_deplibs" |
+ finalize_deplibs="$deplib $finalize_deplibs" |
+ else |
+ deplibs="$deplib $deplibs" |
+ fi |
+ continue |
+ ;; |
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) |
if test "$linkmode,$pass" = "prog,link"; then |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/po/ca.po |
---|
0,0 → 1,37 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006,2012 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,2012. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: nautilus-follow-symlink 1.2.1\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2012-08-11 13:56+0200\n" |
"PO-Revision-Date: 2012-08-11 13:56+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"Language: ca\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:269 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:270 |
#, 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:273 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:274 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/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,2012 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,2012. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: nautilus-follow-symlink 1.2.1\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2012-08-11 13:56+0200\n" |
"PO-Revision-Date: 2012-08-11 13:56+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"Language: es\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:269 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:270 |
#, 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:273 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:274 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/po/ChangeLog |
---|
0,0 → 1,11 |
2009-04-30 gettextize <bug-gnu-gettext@gnu.org> |
* Makefile.in.in: Upgrade to gettext-0.17. |
* boldquot.sed: New file, from gettext-0.17. |
* en@boldquot.header: New file, from gettext-0.17. |
* en@quot.header: New file, from gettext-0.17. |
* insert-header.sin: New file, from gettext-0.17. |
* quot.sed: New file, from gettext-0.17. |
* remove-potcdate.sin: New file, from gettext-0.17. |
* Rules-quot: New file, from gettext-0.17. |
/ATTIC/nautilus-follow-symlink/trunk/nautilus/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/trunk/.github/workflows/ci-build.yaml |
---|
0,0 → 1,26 |
--- |
# See: |
# - https://forgejo.org/docs/latest/user/actions/ |
name: CI |
# Build on each push |
on: [push] |
env: |
RETENTION_DAYS: 3 |
jobs: |
build: |
runs-on: ubuntu-latest |
# Not using a matrix to keep things simple and reuse steps in this CI |
steps: |
- uses: actions/checkout@v3 |
- run: apt-get -y update |
- run: apt-get -y install --no-install-recommends intltool libcaja-extension-dev libnautilus-extension-dev |
- run: test -d caja && test -d nautilus |
- run: cd caja && ./bootstrap.sh |
- run: cd nautilus && ./bootstrap.sh |
- run: cd caja && ./configure && make |
- run: cd nautilus && ./configure && make |
/ATTIC/nautilus-follow-symlink/trunk/.forgejo/workflows/package-tagged-releases.yaml |
---|
0,0 → 1,133 |
--- |
# See: |
# - https://forgejo.org/docs/latest/user/actions/ |
name: Package |
# FIXME: Currently build fails on the rpm/fedora job |
on: |
push: |
# releases only |
tags: |
- '1*' |
env: |
RETENTION_DAYS: 3 |
jobs: |
# Package tarball, we can work from there without relying on node (actions) |
tarball: |
runs-on: docker |
steps: |
- uses: https://code.forgejo.org/actions/checkout@v3 |
- run: test -d caja && test -d nautilus |
- run: apt-get -y update |
- run: apt-get -y install --no-install-recommends intltool libcaja-extension-dev libnautilus-extension-dev |
- run: cd caja && ./bootstrap.sh |
- run: cd nautilus && ./bootstrap.sh |
- run: cd caja && ./configure |
- run: cd nautilus && ./configure |
- run: cd caja && make dist |
- run: cd nautilus && make dist |
# Artifact handling via upload/download |
# - actions: https://code.forgejo.org/actions/upload-artifact |
# https://code.forgejo.org/actions/download-artifact |
# - reference example: https://code.forgejo.org/forgejo/end-to-end/src/branch/main/actions/example-artifacts/.forgejo/workflows/test.yml |
# v4 is not supported in forgejo |
- name: 'Upload tarball: caja' |
uses: actions/upload-artifact@v3 |
with: |
name: 'caja-tarball' |
path: 'caja/caja-follow-symlink*.tar*' |
# If not specified will use the server-configured value (90 by default) |
retention-days: ${{ env.RETENTION_DAYS }} |
- name: 'Upload tarball: nautilus' |
uses: actions/upload-artifact@v3 |
with: |
name: 'nautilus-tarball' |
path: 'nautilus/nautilus-follow-symlink*.tar*' |
retention-days: ${{ env.RETENTION_DAYS }} |
# Leverage we're running on Debian to build and package deb |
build-deb: |
name: Build deb (and test-build) |
needs: tarball |
runs-on: docker |
strategy: |
matrix: |
variant: ['caja', 'nautilus'] |
steps: |
- name: Download all artifacts |
uses: actions/download-artifact@v3 |
with: |
name: ${{ matrix.variant }}-tarball |
# no path specified => workspace |
# Figure out the version used in tarballs and directories |
#- run: grep AC_INIT nautilus-*/configure.ac | sed -r 's/^.*\[(.*)].*/\1/' |
- id: version |
run: > |
echo 'version='$( \ |
ls *.tar.gz \ |
| awk -F - '{print $NF}' \ |
| sed 's/.tar.gz$//' \ |
) >> $GITHUB_OUTPUT |
- id: dir |
run: | |
echo 'name=${{ matrix.variant }}-follow-symlink-${{ steps.version.outputs.version }}' >> $GITHUB_OUTPUT |
- run: tar xvf ${{ steps.dir.outputs.name }}.tar.gz |
- run: echo ${{ steps.dir.outputs.name }} ; ls -l ${{ steps.dir.outputs.name }} |
- run: apt-get update |
# Build-deps |
- run: > |
apt-get -y install --no-install-recommends lib${{ matrix.variant }}-extension-dev intltool debhelper devscripts build-essential |
- run: cd '${{ steps.dir.outputs.name }}' && ./configure |
# The deb package will compile but it may/will override flags |
# Let the CI workflow handle that |
#- name: Test compilation with default flags |
# run: cd '${{ steps.dir.outputs.name }}' && make |
- name: Build deb package |
run: cd '${{ steps.dir.outputs.name }}' && debuild -us -uc -b |
- name: Upload deb artifacts |
uses: actions/upload-artifact@v3 |
with: |
name: '${{ matrix.variant }}-deb' |
path: '${{ matrix.variant }}-follow-symlink_*' |
retention-days: ${{ env.RETENTION_DAYS }} |
build-rpm: |
name: Build rpm |
needs: tarball |
runs-on: docker |
container: |
image: 'fedora:latest' |
strategy: |
matrix: |
variant: ['caja', 'nautilus'] |
steps: |
# Can't run actions without node and git |
- name: Prepare to run actions |
run: dnf install -y nodejs git |
- run: git --version && node --version |
- name: Download all artifacts |
uses: actions/download-artifact@v3 |
with: |
name: ${{ matrix.variant }}-tarball |
# no path specified => workspace |
# Figure out the version used in tarballs and directories |
#- run: grep AC_INIT nautilus-*/configure.ac | sed -r 's/^.*\[(.*)].*/\1/' |
- id: version |
run: > |
echo 'version='$( \ |
ls *.tar.gz \ |
| awk -F - '{print $NF}' \ |
| sed 's/.tar.gz$//' \ |
) >> $GITHUB_OUTPUT |
- id: dir |
run: | |
echo 'name=${{ matrix.variant }}-follow-symlink-${{ steps.version.outputs.version }}' >> $GITHUB_OUTPUT |
- run: dnf install -y rpm-build intltool libtool ${{ matrix.variant }}-devel |
- run: rpmbuild -tb '${{ steps.dir.outputs.name }}.tar.gz' |
- uses: actions/upload-artifact@v3 |
with: |
name: '${{ matrix.variant }}-rpm' |
path: '~/rpmbuild/RPMS/*' |
retention-days: ${{ env.RETENTION_DAYS }} |
/ATTIC/nautilus-follow-symlink/trunk/.forgejo/workflows/ci-build.yaml |
---|
0,0 → 1,26 |
--- |
# See: |
# - https://forgejo.org/docs/latest/user/actions/ |
name: CI |
# Build on each push |
on: [push] |
env: |
RETENTION_DAYS: 3 |
jobs: |
build: |
runs-on: docker |
# Not using a matrix to keep things simple and reuse steps in this CI |
steps: |
- uses: https://code.forgejo.org/actions/checkout@v3 |
- run: apt-get -y update |
- run: apt-get -y install --no-install-recommends intltool libcaja-extension-dev libnautilus-extension-dev |
- run: test -d caja && test -d nautilus |
- run: cd caja && ./bootstrap.sh |
- run: cd nautilus && ./bootstrap.sh |
- run: cd caja && ./configure && make |
- run: cd nautilus && ./configure && make |
/ATTIC/nautilus-follow-symlink/trunk/README.md |
---|
0,0 → 1,56 |
# nautilus-follow-symlink / caja-follow-symlink |
[debian-repository]: https://packages.outlyer.net/ |
_nautilus-follow-symlink_ is a nautilus (GNOME Desktop) extension. |
_caja-follow-symlink_ is a caja (MATE Desktop) extension. |
They adds a menu entry on symbolic links to directories which open the pointed directory (the real path). |
They do so both when right clicking on the folder icon or on the contents of an opened symbolic link. |
![Visualisation](https://p.outlyer.net/_media/nautilus-follow-symlink/screenshots-montage.png) |
Homepage: https://p.outlyer.net/nautilus-follow-symlink |
## Installation |
I provide both `deb` and `rpm` packages to download and install manually, e.g.: |
```shell |
dpkg -i nautilus-follow-symlink_1.2.0-pon.1_amd64.deb |
``` |
For deb-based distributions you may add my [repository][debian-repository] to your sources: |
```shell |
echo 'deb http://packages.outlyer.net/debian stable main contrib' | sudo tee /etc/apt/sources.list.d/packages.outlyer.net.list |
sudo wget http://packages.outlyer.net/public_key.gpg -O /etc/apt/trusted.gpg.d/packages.outlyer.net.gpg |
sudo apt update |
``` |
## Building from source |
Download the tarball and follow the traditional `configure` + `make` workflow, e.g.: |
```shell |
tar xvf nautilus-follow-symlink-1.2.0.tar.gz |
cd nautilus-follow-symlink-1.2.0 |
./configure |
make |
sudo make install |
``` |
## Building from the git repository |
Building from the raw source in the repository requires the GNU `auto*` set of tools. |
```shell |
git clone https://git.outlyer.net/outlyer/nautilus-follow-symlink/ |
cd nautilus-follow-symlink/nautilus |
./bootstrap.sh |
./configure |
make |
sudo make install |
``` |
/ATTIC/nautilus-follow-symlink/trunk |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.2-pre.1:r43 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
Merged /nautilus-follow-symlink/branches/1.2.0:r46 |
Merged /nautilus-follow-symlink/branches/1.0.99-pre.1:r37 |
Merged /nautilus-follow-symlink/branches/1.1:r40 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 5.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libnautilus-extension-dev (>= 2.21), intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/nautilus-follow-symlink/ |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends} |
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. |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/compat |
---|
0,0 → 1,0 |
5 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/changelog |
---|
0,0 → 1,56 |
nautilus-follow-symlink (1.2.0-pon.1) unstable; urgency=low |
* GNOME3-ready release. Finally. |
* Bumped compatibility level to 5 |
* debian/rules: Added system-provided compiler flags |
* debian/changelog: Changed upstream suffix to "pon" |
* debian/control: Removed explicit dependency on nautilus |
-- Toni Corvera <outlyer@gmail.com> Thu, 09 Aug 2012 19:02:40 +0200 |
nautilus-follow-symlink (1.2.0+pre.1-upstream.1) unstable; urgency=low |
* Preliminary support for GNOME3. |
-- Toni Corvera <outlyer@gmail.com> Thu, 07 Apr 2011 03:24:23 +0200 |
nautilus-follow-symlink (1.1.0-upstream.1) unstable; urgency=low |
* New release. |
* debian/control: Drop build-depencies on autotools |
* debian/copyright: Updated template |
* debian/README.Debian: Notes on being unofficial+upstream |
-- Toni Corvera <outlyer@gmail.com> Thu, 30 Apr 2009 15:50:14 +0200 |
nautilus-follow-symlink (1.0.99+pre.2-upstream.0) experimental; urgency=low |
* New pre-release |
* Corrected package pre-version number order |
-- Toni Corvera <outlyer@gmail.com> Wed, 04 Jun 2008 13:20:28 +0200 |
nautilus-follow-symlink (1.0.99-upstream.0-pre.1) experimental; urgency=low |
* First pre-release for GNOME 2.22. |
-- Toni Corvera <outlyer@gmail.com> Sat, 03 May 2008 21:48:02 +0200 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/rules |
---|
0,0 → 1,110 |
#!/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 |
# http://wiki.debian.org/Hardening#dpkg-buildflags |
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) |
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) |
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) |
# Worarounds (couter-measures to Debian's [Sid] hardened flags |
# as of this writing) |
# doing funny stuff with printf-like funcions will make |
# gcc paranoid, -Werror=format-security is defined in |
# dpkg-buildflags |
CFLAGS+=-Wno-error=format-security |
# _FORTIFY_SOURCE=2 is defined in dpkg-buildflags, it produces |
# bogus multiple-definition errors for unistd.h functions |
CPPFLAGS+=-U_FORTIFY_SOURCE |
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 \ |
CFLAGS="$(CFLAGS)" \ |
CPPFLAGS="$(CPPFLAGS)" \ |
LDFLAGS="$(LDFLAGS)" |
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 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/copyright |
---|
0,0 → 1,35 |
This package was debianized by Toni Corvera <outlyer@gmail.com> on |
Thu, 30 Apr 2009 15:47:55 +0200. |
It can be downloaded from <http://p.outlyer.net/nautilus-follow-symlink> |
Upstream Author: |
Toni Corvera <outlyer@gmail.com> |
Copyright: |
Copyright (C) 2006, 2008, 2009 Toni Corvera |
License: |
This package is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
The Debian packaging is (C) 2006-2009, Toni Corvera <outlyer@gmail.com> and |
is licensed under the GPL, see `/usr/share/common-licenses/GPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/docs |
---|
0,0 → 1,0 |
AUTHORS |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/README.Debian |
---|
0,0 → 1,12 |
nautilus-follow-symlink for Debian |
---------------------------------- |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.net>, Thu, 30 Apr 2009 15:46:03 +0200 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/configure.ac |
---|
0,0 → 1,97 |
dnl $Id$ |
AC_INIT(nautilus-follow-symlink, [1.2.0]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev$) |
AC_CONFIG_HEADER(src/config.h) |
AC_CONFIG_MACRO_DIR([m4]) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
if test -z "$CPPFLAGS" ; then |
CPPFLAGS="-pedantic-errors" |
fi |
if test -z "$CFLAGS" ; then |
CFLAGS="-Werror -Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
# -O2 Showed problems in Fedora 17 (GCC 4.7) (not in previous versions nor in |
# Debian's GCC 4.7.1 though (?) |
# (solution was adding extern definition of ferror_unlocked |
CFLAGS="-O2 -Wall -std=gnu99 $CFLAGS" |
# -z relro -> read-only relocation ld flag |
LDFLAGS="-Wl,--as-needed -Wl,-z,relro $LDFLAGS" |
# 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_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# 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" |
#LIBS="$LIBS" |
dnl GTK-3 migration safeguard <http://live.gnome.org/GnomeGoals/UseGseal> |
CFLAGS="$CFLAGS -DGSEAL_ENABLE" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# Nautilus: $NAUTILUS_EXTENSION_CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# Nautilus: $NAUTILUS_EXTENSION_LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
nautilus-follow-symlink.spec |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/AUTHORS |
---|
0,0 → 1,2 |
nautilus-follow-symlink is Copyright (c) 2006, 2007, 2009, 2011, 2012 Toni Corvera <outlyer@gmail.com>. |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/INSTALL |
---|
0,0 → 1,29 |
BUILD / INSTALLATION INSTRUCTIONS |
================================= |
Binaries for some distributions are provided in nautilus-follow-symlink's |
homepage <http://p.outlyer.net/nautilus-follow-symlink>. |
Building |
======== |
Follow the usual GNU build instructions: |
$ ./configure --prefix=/usr |
(or: $ ./configure --prefix=`pkg-config --variable prefix libnautilus-extension`) |
$ make |
# make install |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
COMPILER NOTES |
============== |
* This program has only been tested with gcc |
* Define _DEBUG in the preprocessor to enable the debugging/verbose mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/bootstrap.sh |
---|
0,0 → 1,11 |
#!/bin/sh -x |
PATCH=kludges/libtool-honor-as-needed.patch |
# Run this script to run the auto* tools in a correct order |
echo "Trying to re-generate the build scripts..." >&2 |
test -f ltmain.sh && patch -R <"$PATCH" |
autoreconf --install --symlink --verbose |
patch < "$PATCH" |
intltoolize --automake |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/nautilus-follow-symlink.spec.in |
---|
0,0 → 1,94 |
# |
# spec file for nautilus-follow-symlink rpm |
# |
# based on the spec file for mp3plot <http://p.outlyer.net/mp3plot> |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
%define api_version %(pkg-config --atleast-version=3.0 libnautilus-extension && echo 3.0 || echo 2.0) |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag} |
Summary: nautilus plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./nautilus-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, nautilus-devel, gtk2-devel |
Requires: nautilus-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/nautilus/extensions-%{api_version}/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/nautilus/extensions-%{api_version}/*.so |
%changelog |
* Thu Aug 9 2012 Toni Corvera <outlyer@gmail.com> - 1.2.1 |
- Removed the *upstream revision |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/ChangeLog |
---|
0,0 → 1,51 |
2012-08-18: Release 1.2.0 |
* Added compatibility with Caja |
* Bugfix: |
- Correctly escape resolved paths |
* Compatibility: |
- GNOME3 support tested |
Builds in either GNOME2 or GNOME3 correctly |
- Fixed weird compilation error seen on Fedora 17 |
* Packaging: |
- Added bootstrap.sh for easy re-generation of configure scripts in |
case the default ones are problematic |
- RPM: Support both GNOME2 and GNOME3 installations |
* Other: |
- Added libtool workaround to reduce the number of libraries |
linked against |
2011-04-07: Pre-Release 1.2.0-pre.1 |
* Compatibility: |
- Refresh to build against GNOME 3, preliminary support |
2009-04-30: Release 1.1.0 |
* Bugfix: |
- Use stock icon instead of hard-wired icon location |
* Packaging: |
- Re-gettextized: added po/ChangeLog |
- Deb package cleanup |
- RPM packaging support |
- Provide configure script by default |
* Compatibility: |
- Dropped support for nautilus-extension 1.0 completely |
* Other: |
- Reworked autoconf/automake with looser requirements |
- Support cross-compilation |
2008-05-04: Release 1.0.99-pre.1 (1.1.0 pre-release) |
* Other: |
- Adapted to work with GNOME 2.22 and above |
For older GNOME versions, 1.0.2 should be used |
2007-05-12: Release 1.0.2 |
* Bugfix: Fixed icon location, was broken on newer systems |
2006-12-14: Release 1.0.1 |
* Bugfixes: |
- Show correctly file names with underscores |
- Fixed compilation on 64bits archs (__unused can't be defined) |
- Require automake 1.9, which was actually used |
2006-11-10: Release 1.0 |
[First public release] |
# vim:set ts=4 et ai: # |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/follow-symlink.c |
---|
0,0 → 1,359 |
/* $Id$ |
* |
* follow-symlink.c |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009, 2011, 2012 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
#include <gio/gio.h> |
#include <gtk/gtk.h> |
// Symbolic name of the icon, use to be in /usr/share/icons/gnome/[16x16]/emblems/ |
#define FSL_ICON_NAME "emblem-symbolic-link" |
extern int errno; |
// References for gio and the newer nautilus-extension: (required to support GNOME 2.22) |
// http://library.gnome.org/devel/gio/unstable/GFile.html |
// http://library.gnome.org/devel/gio/unstable/GFileInfo.html |
// http://library.gnome.org/devel/libnautilus-extension/unstable/libnautilus-extension-nautilus-file-info.html |
#if 0 // See comments below |
/* Obtains the icon path |
* The returned string should be freed with g_free() |
* |
* If the real icon path can't be obtained, a symbolic icon name is returned |
* instead. |
* |
* XXX: This is technically unneeded, passing FSL_ICON_NAME is enough for nautilus |
* to resolve the icon in GNOME3. |
* But neither method seems to work anymore in GNOME2 for some |
* reason, other plugins don't show icons either so I guess that's normal. |
*/ |
static gchar * fsl_icon_name() { |
TRACE(); |
GtkIconTheme * git = gtk_icon_theme_get_default(); // Don't deallocate |
g_assert( NULL != git ); |
GtkIconInfo * gii = gtk_icon_theme_lookup_icon(git, |
FSL_ICON_NAME, |
16, // Size |
GTK_ICON_LOOKUP_GENERIC_FALLBACK); // Flags |
if (NULL == gii) { |
// Lookup failed |
return g_strdup(FSL_ICON_NAME); |
} |
// gtk_icon_info_get_filename() returns an string owned by |
// GTK. It was quickly overwritten in my tests. |
// g_strdup() is safe to be called on NULL (return NULL) |
gchar * fn = g_strdup(gtk_icon_info_get_filename(gii)); |
gtk_icon_info_free(gii); |
if (NULL == fn) { // No filename associated |
return g_strdup(FSL_ICON_NAME); |
} |
return fn; |
} |
#endif |
/* 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 with 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); |
} |
// TODO: Once the older code is deprecated, some nautilus_* function can be |
// translated to their g_file_* counterparts. |
// Only process symlinks to directories, we know already the file is a |
// directory or a symlink to one |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
if (!g_file_info_get_is_symlink(gfi)) { |
FSL_LOG("No " G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK " attribute 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(); |
/* |
* The "effective" type is returned, a symlink to a directory is a directory |
*/ |
return G_FILE_TYPE_DIRECTORY == nautilus_file_info_get_file_type(file_data); |
} |
/* |
* 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; |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
// The result will relative if the symlink is, must use the correct CWD |
const char * target = g_file_info_get_symlink_target(gfi); |
GFile * parent = nautilus_file_info_get_parent_location(file_info); |
gchar * escaped_tgt = g_shell_quote(target); |
gchar * command_line = g_strdup_printf(NAUTILUS_COMMAND " --no-desktop --no-default-window %s", escaped_tgt); |
g_free(escaped_tgt); |
if (G_UNLIKELY(FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL))) { |
g_free(command_line); |
g_printerr("Failed preparing " NAUTILUS_COMMAND " command-line.\n"); |
g_return_if_reached(); |
} |
//g_printf(FSL_MSG_PREFIX ": Spawning with [PWD=%s]\n `%s`\n", g_file_get_path(parent), command_line); |
g_printf(FSL_MSG_PREFIX ": Spawning with\n `%s`\n", command_line); |
g_spawn_async( g_file_get_path(parent), // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
// g_try_malloc would allow nautilus to stay up even if some allocation fails |
// but we'd be in trouble anyway. Apparently returning NULL is not an option either. |
name = g_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON_NAME); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* nautilus-ext-follow-symlink.c |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/Makefile.am |
---|
0,0 → 1,23 |
# $Id$ # |
# |
# Required to correctly install the locale files (and to access them) |
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` |
noinst_HEADERS=*.h |
libnautilus_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
libnautilus_follow_symlink_la_LIBADD = $(NAUTILUS_EXTENSION_LIBS) |
libnautilus_follow_symlink_la_CFLAGS = $(NAUTILUS_EXTENSION_CFLAGS) |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* nautilus-ext-follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/common.h |
---|
0,0 → 1,253 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009, 2011, 2012 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
#if 0 // Separate includes. Might be problematic depending on flags |
# include <glib/gmessages.h> /* g_print() */ |
# include <glib/gprintf.h> /* g_printf() */ |
#else |
# include <glib.h> |
#endif |
// Used to allow simpler nautilus/caja code sharing |
#define NAUTILUS_COMMAND "nautilus" |
#define FSL_MSG_PREFIX "nautilus-follow-symlink" |
#if 1 // Tricky workaround |
// I truly have no clue why on earth I need this, but on Fedora 17, |
// with GCC 4.7.0, when -O2 is used a "multiple definition" of |
// ferror_unlocked will be triggered. |
// Adding -fcommon didn't help |
# include <stdio.h> |
extern int ferror_unlocked(FILE*); |
#endif |
#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 |
// Not including this produces multiple definition errors as of 2008 (it didn't |
// at the time of the previous release) |
#ifdef HAVE_SYS_STAT_H |
#include <sys/stat.h> |
#endif // HAVE_SYS_STAT_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)) |
// __unused gives errors in x86_64 |
#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 // _DEBUG |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/Makefile.am |
---|
0,0 → 1,31 |
SUBDIRS = po src |
ACLOCAL_AMFLAGS = -I m4 |
EXTRA_DIST = \ |
po/ChangeLog \ |
bootstrap.sh \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
N_EXTENSIONDIR=`pkg-config --variable=extensiondir libnautilus-extension` |
forceinstall: all |
pkg-config --atleast-version=2.21 libnautilus-extension |
sudo install -m644 src/.libs/libnautilus-follow-symlink.so $(N_EXTENSIONDIR)/ |
-killall -9 nautilus |
forceuninstall: |
sudo $(RM) $(N_EXTENSIONDIR)/libnautilus-follow-symlink.so |
-killall -9 nautilus |
#ACLOCAL_AMFLAGS = -I m4 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/dist.mk |
---|
0,0 → 1,62 |
#!/usr/bin/make -f |
# $Id$ |
all: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo " (use ./dist.mk <TARGET>):" |
@echo " gen Run the autotools" |
@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 " force-gen Like gen, but overwrite even up-to-date files" |
@echo |
@echo "The rest of important rules are provided by the generated Makefile" |
@echo " (i.e.: $$ make <TARGET>)" |
@echo " harshtest (To be used during development) Copy the library to the system" |
@echo " and kill nautilus to re-load it" |
@echo " and the standard GNU rules:" |
@echo " dist Create the distribution tarball" |
@echo " distcheck Create tarball, check it builds and it installs. Add a DESTDIR" |
@echo " or it will try to install in the system" |
_gen_common: |
intltoolize --automake |
gen: |
autoreconf --install --verbose --symlink |
$(MAKE) -f dist.mk _gen_common |
force-gen: |
autoreconf --install --verbose --force --symlink |
$(MAKE) -f dist.mk _gen_common |
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: |
-debclean |
-make distclean |
cd src && make clean || true |
# |
$(RM) -r autom4te.cache |
$(RM) config.* depcomp install-sh missing src/config.h src/config.h.in |
$(RM) aclocal.m4 |
$(RM) configure Makefile Makefile.in src/Makefile src/Makefile.in |
$(RM) 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) libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
$(RM) intltool* |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/kludges/README |
---|
0,0 → 1,13 |
libtool-honor-as-needed.patch contains a patch against ltmain.sh (generated |
on bootstrap to make use of libtool), so that it doesn't reorder |
"-Wl,--as-needed", a linker flag that removes unnecessary dependencies. |
It only applies to libraries listed after it, but libtool always pushes |
it after the libs in the command line, so it does nothing, normally. |
References: |
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=347650 |
"Debian bug #347650: libtool: Incorrect argument reordering" |
[Source of patch] |
http://sigquit.wordpress.com/2011/02/16/why-asneeded-doesnt-work-as-expected-for-your-libraries-on-your-autotools-project/ |
"Why --as-needed doesn't work as expected for your libraries on your autotools project" |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/kludges/libtool-honor-as-needed.patch |
---|
0,0 → 1,30 |
--- ltmain.sh.orig 2012-08-14 11:36:48.211924221 +0200 |
+++ ltmain.sh 2012-08-14 11:42:48.663918234 +0200 |
@@ -5800,6 +5800,11 @@ |
arg=$func_stripname_result |
;; |
+ -Wl,--as-needed|-Wl,--no-as-needed) |
+ deplibs="$deplibs $arg" |
+ continue |
+ ;; |
+ |
-Wl,*) |
func_stripname '-Wl,' '' "$arg" |
args=$func_stripname_result |
@@ -6163,6 +6168,15 @@ |
lib= |
found=no |
case $deplib in |
+ -Wl,--as-needed|-Wl,--no-as-needed) |
+ if test "$linkmode,$pass" = "prog,link"; then |
+ compile_deplibs="$deplib $compile_deplibs" |
+ finalize_deplibs="$deplib $finalize_deplibs" |
+ else |
+ deplibs="$deplib $deplibs" |
+ fi |
+ continue |
+ ;; |
-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) |
if test "$linkmode,$pass" = "prog,link"; then |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/po/ca.po |
---|
0,0 → 1,37 |
# Catalan translations for libnautilus-follow-symlink package. |
# Copyright (C) 2006,2012 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,2012. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: nautilus-follow-symlink 1.2.1\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2012-08-11 13:56+0200\n" |
"PO-Revision-Date: 2012-08-11 13:56+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Catalan <outlyer@outlyer.net>\n" |
"Language: ca\n" |
"MIME-Version: 1.0\n" |
"Content-Type: text/plain; charset=UTF-8\n" |
"Content-Transfer-Encoding: 8bit\n" |
#: ../src/follow-symlink.c:269 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:270 |
#, 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:273 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:274 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/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,2012 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,2012. |
# |
msgid "" |
msgstr "" |
"Project-Id-Version: nautilus-follow-symlink 1.2.1\n" |
"Report-Msgid-Bugs-To: \n" |
"POT-Creation-Date: 2012-08-11 13:56+0200\n" |
"PO-Revision-Date: 2012-08-11 13:56+0200\n" |
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n" |
"Language-Team: Spanish <outlyer@outlyer.net>\n" |
"Language: es\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:269 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:270 |
#, 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:273 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:274 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/po/ChangeLog |
---|
0,0 → 1,11 |
2009-04-30 gettextize <bug-gnu-gettext@gnu.org> |
* Makefile.in.in: Upgrade to gettext-0.17. |
* boldquot.sed: New file, from gettext-0.17. |
* en@boldquot.header: New file, from gettext-0.17. |
* en@quot.header: New file, from gettext-0.17. |
* insert-header.sin: New file, from gettext-0.17. |
* quot.sed: New file, from gettext-0.17. |
* remove-potcdate.sin: New file, from gettext-0.17. |
* Rules-quot: New file, from gettext-0.17. |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/nautilus/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/INSTALL |
---|
0,0 → 1,0 |
link ../nautilus/INSTALL |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/bootstrap.sh |
---|
0,0 → 1,0 |
link ../nautilus/bootstrap.sh |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/ChangeLog |
---|
0,0 → 1,0 |
link ../nautilus/ChangeLog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/refresh-layer.bash |
---|
0,0 → 1,27 |
#!/bin/bash |
# |
# This script shouldn't be executed unless new function calls |
# or types are added |
exec >layer.h |
echo "Generating Nautilus to Caja preprocessor directives..." >&2 |
egrep --no-filename -o 'Nautilus[A-Z][^ ]*' *.c *.h |\ |
sort | uniq |\ |
sed -r -e 's/Nautilus([A-Z][^ ]*)/#define Nautilus\1 Caja\1/' |
egrep --no-filename -o 'nautilus_[^(]*' *.c *.h | grep -v ' ' |\ |
sort | uniq |\ |
sed -r -e 's/nautilus_(.*)/#define nautilus_\1 caja_\1/' |
egrep --no-filename -o 'NAUTILUS_TYPE_[A-Z_]*' *.c *.h |\ |
sort | uniq |\ |
sed -r -e 's/NAUTILUS_(.*)/#define NAUTILUS_\1 CAJA_\1/' |
cat <<EOF |
#undef NAUTILUS_COMMAND |
#undef FSL_MSG_PREFIX |
#define NAUTILUS_COMMAND "caja" |
#define FSL_MSG_PREFIX "caja-follow-symlink" |
EOF |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/follow-symlink.c |
---|
0,0 → 1,0 |
link ../../nautilus/src/follow-symlink.c |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,0 |
link ../../nautilus/src/nautilus-ext-follow-symlink.c |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/caja-layer/libnautilus-extension/nautilus-menu-provider.h |
---|
0,0 → 1,3 |
#include <libcaja-extension/caja-menu-provider.h> |
#include "layer.h" |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/Makefile.am |
---|
0,0 → 1,23 |
# $Id: Makefile.am 1307 2009-04-30 19:38:17Z toni $ # |
# |
# Required to correctly install the locale files (and to access them) |
CPPFLAGS+=-DGNOMELOCALEDIR=\""$(datadir)/locale"\" |
caja_extension_lib_LTLIBRARIES = libcaja-follow-symlink.la |
# Must be installed in caja' extension dir |
#caja_extension_libdir = $(libdir)/caja/extensions-1.0 |
# Cleaner way: |
caja_extension_libdir = `pkg-config --variable=extensiondir libcaja-extension` |
noinst_HEADERS=*.h caja-layer/libnautilus-extension/nautilus-menu-provider.h |
libcaja_follow_symlink_la_SOURCES = follow-symlink.c nautilus-ext-follow-symlink.c |
libcaja_follow_symlink_la_LIBADD = $(CAJA_EXTENSION_LIBS) |
libcaja_follow_symlink_la_CFLAGS = $(CAJA_EXTENSION_CFLAGS) |
# There's really no need to have versioned file names |
libcaja_follow_symlink_la_LDFLAGS = -avoid-version |
# See e.g. <http://www.seul.org/docs/autotut/#libtool> for version instructions |
#libcaja_follow_symlink_la_LDFLAGS = -version-info 0:0:0 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/follow-symlink.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/follow-symlink.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/nautilus-ext-follow-symlink.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/common.h |
---|
0,0 → 1,0 |
link ../../nautilus/src/common.h |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/src/layer.h |
---|
0,0 → 1,16 |
#define NautilusFileInfo CajaFileInfo |
#define NautilusMenuItem CajaMenuItem |
#define NautilusMenuProvider CajaMenuProvider |
#define NautilusMenuProviderIface CajaMenuProviderIface |
#define nautilus_file_info_get_file_type caja_file_info_get_file_type |
#define nautilus_file_info_get_location caja_file_info_get_location |
#define nautilus_file_info_get_name caja_file_info_get_name |
#define nautilus_file_info_get_parent_location caja_file_info_get_parent_location |
#define nautilus_file_info_get_uri caja_file_info_get_uri |
#define nautilus_file_info_get_uri_scheme caja_file_info_get_uri_scheme |
#define nautilus_file_info_is_directory caja_file_info_is_directory |
#define nautilus_menu_item_new caja_menu_item_new |
#define nautilus_module_initialize caja_module_initialize |
#define nautilus_module_list_types caja_module_list_types |
#define nautilus_module_shutdown caja_module_shutdown |
#define NAUTILUS_TYPE_MENU_PROVIDER CAJA_TYPE_MENU_PROVIDER |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/Makefile.am |
---|
0,0 → 1,33 |
SUBDIRS = po src |
ACLOCAL_AMFLAGS = -I m4 |
EXTRA_DIST = \ |
po/ChangeLog README \ |
po/POTFILES.in po/*.po \ |
kludges/* \ |
bootstrap.sh \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
C_EXTENSIONDIR=`pkg-config --variable=extensiondir libcaja-extension` |
forceinstall: all |
pkg-config --atleast-version=1.2 libcaja-extension |
sudo install -m644 src/.libs/libcaja-follow-symlink.so $(C_EXTENSIONDIR)/ |
-killall -9 caja |
forceuninstall: |
sudo $(RM) $(C_EXTENSIONDIR)/libcaja-follow-symlink.so |
-killall -9 caja |
#ACLOCAL_AMFLAGS = -I m4 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/README |
---|
0,0 → 1,2 |
Note this package is generated directly from nautilus-follow-symlink, |
that's why it references nautilus in multiple files. |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/LGPL |
---|
0,0 → 1,0 |
link ../nautilus/LGPL |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/kludges |
---|
0,0 → 1,0 |
link ../nautilus/kludges |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/po/ca.po |
---|
0,0 → 1,0 |
link ../../nautilus/po/ca.po |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/po/es.po |
---|
0,0 → 1,0 |
link ../../nautilus/po/es.po |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/po/ChangeLog |
---|
0,0 → 1,0 |
link ../../nautilus/po/ChangeLog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/po/POTFILES.in |
---|
0,0 → 1,0 |
link ../../nautilus/po/POTFILES.in |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/caja-follow-symlink.spec.in |
---|
0,0 → 1,94 |
# |
# spec file for caja-follow-symlink rpm |
# |
# based on the spec file for nautilus-follow-symlink |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
%define api_version 2.0 |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag} |
Summary: caja plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./caja-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, caja-devel, gtk2-devel |
Requires: caja-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/caja/extensions-%{api_version}/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/caja/extensions-%{api_version}/*.so |
%changelog |
* Thu Aug 9 2012 Toni Corvera <outlyer@gmail.com> - 1.2.1 |
- Removed the *upstream revision |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/rules |
---|
0,0 → 1,110 |
#!/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 |
# http://wiki.debian.org/Hardening#dpkg-buildflags |
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) |
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) |
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS) |
# Worarounds (couter-measures to Debian's [Sid] hardened flags |
# as of this writing) |
# doing funny stuff with printf-like funcions will make |
# gcc paranoid, -Werror=format-security is defined in |
# dpkg-buildflags |
CFLAGS+=-Wno-error=format-security |
# _FORTIFY_SOURCE=2 is defined in dpkg-buildflags, it produces |
# bogus multiple-definition errors for unistd.h functions |
CPPFLAGS+=-U_FORTIFY_SOURCE |
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 \ |
CFLAGS="$(CFLAGS)" \ |
CPPFLAGS="$(CPPFLAGS)" \ |
LDFLAGS="$(LDFLAGS)" |
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/caja-follow-symlink.sgml > caja-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/caja-follow-symlink. |
$(MAKE) install DESTDIR=$(CURDIR)/debian/caja-follow-symlink |
# There's really no need for the .la file |
rm -f $(CURDIR)/debian/caja-follow-symlink/`pkg-config --variable=extensiondir libcaja-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 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/README.Debian |
---|
0,0 → 1,12 |
caja-follow-symlink for Debian |
------------------------------ |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.gmail>, Sun, 12 Aug 2012 14:52:03 +0200 |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/mate |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 5.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libcaja-extension-dev, intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/caja-follow-symlink/ |
Package: caja-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends} |
Description: caja 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. |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/dirs |
---|
0,0 → 1,0 |
link ../../nautilus/debian/dirs |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/compat |
---|
0,0 → 1,0 |
link ../../nautilus/debian/compat |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/changelog |
---|
0,0 → 1,0 |
link ../../nautilus/debian/changelog |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/copyright |
---|
0,0 → 1,0 |
link ../../nautilus/debian/copyright |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/debian/docs |
---|
0,0 → 1,0 |
link ../../nautilus/debian/docs |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/configure.ac |
---|
0,0 → 1,97 |
dnl $Id: configure.ac 2517 2012-08-12 02:56:55Z toni $ |
AC_INIT(caja-follow-symlink, [1.2.0]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev: 2517 $) |
AC_CONFIG_HEADER(src/config.h) |
AC_CONFIG_MACRO_DIR([m4]) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
if test -z "$CPPFLAGS" ; then |
CPPFLAGS="-pedantic-errors" |
fi |
if test -z "$CFLAGS" ; then |
CFLAGS="-Werror -Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
# -O2 Showed problems in Fedora 17 (GCC 4.7) (not in previous versions nor in |
# Debian's GCC 4.7.1 though (?) |
# (solution was adding extern definition of ferror_unlocked |
CFLAGS="-I\"$PWD/src/caja-layer\" -O2 -Wall -std=gnu99 $CFLAGS" |
# -z relro -> read-only relocation ld flag |
LDFLAGS="-Wl,--as-needed -Wl,-z,relro $LDFLAGS" |
# 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=caja-follow-symlink |
AC_SUBST(GETTEXT_PACKAGE) |
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [gettext domain]) |
ALL_LINGUAS="ca es" dnl Implied en |
#AM_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# pkg-config: ensure libcaja-extension is found by pkg-config |
PKG_CHECK_MODULES(CAJA_EXTENSION, [libcaja-extension]) |
#AC_DEFINE(_GNU_SOURCE) |
dnl Incorporate the result of tests |
#CFLAGS="$CFLAGS $CAJA_EXTENSION_CFLAGS" |
#LIBS="$LIBS $CAJA_EXTENSION_LIBS" |
dnl GTK-3 migration safeguard <http://live.gnome.org/GnomeGoals/UseGseal> |
CFLAGS="$CFLAGS -DGSEAL_ENABLE" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# Caja: $CAJA_EXTENSION_CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# Caja: $CAJA_EXTENSION_LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
caja-follow-symlink.spec |
]) |
/ATTIC/nautilus-follow-symlink/tags/1.2.0/caja/AUTHORS |
---|
0,0 → 1,0 |
link ../nautilus/AUTHORS |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.2-pre.1:r43 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
Merged /nautilus-follow-symlink/branches/1.2.0:r46 |
Merged /nautilus-follow-symlink/branches/1.0.99-pre.1:r37 |
Merged /nautilus-follow-symlink/branches/1.1:r40 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/changelog |
---|
0,0 → 1,46 |
nautilus-follow-symlink (1.2.0+pre.1-upstream.1) unstable; urgency=low |
* Preliminary support for GNOME3. |
-- Toni Corvera <outlyer@gmail.com> Thu, 07 Apr 2011 03:24:23 +0200 |
nautilus-follow-symlink (1.1.0-upstream.1) unstable; urgency=low |
* New release. |
* debian/control: Drop build-depencies on autotools |
* debian/copyright: Updated template |
* debian/README.Debian: Notes on being unofficial+upstream |
-- Toni Corvera <outlyer@gmail.com> Thu, 30 Apr 2009 15:50:14 +0200 |
nautilus-follow-symlink (1.0.99+pre.2-upstream.0) experimental; urgency=low |
* New pre-release |
* Corrected package pre-version number order |
-- Toni Corvera <outlyer@gmail.com> Wed, 04 Jun 2008 13:20:28 +0200 |
nautilus-follow-symlink (1.0.99-upstream.0-pre.1) experimental; urgency=low |
* First pre-release for GNOME 2.22. |
-- Toni Corvera <outlyer@gmail.com> Sat, 03 May 2008 21:48:02 +0200 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 4.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libnautilus-extension-dev (>= 2.21), intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/nautilus-follow-symlink/ |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus (>= 2.91) |
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. |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/copyright |
---|
0,0 → 1,35 |
This package was debianized by Toni Corvera <outlyer@gmail.com> on |
Thu, 30 Apr 2009 15:47:55 +0200. |
It can be downloaded from <http://p.outlyer.net/nautilus-follow-symlink> |
Upstream Author: |
Toni Corvera <outlyer@gmail.com> |
Copyright: |
Copyright (C) 2006, 2008, 2009 Toni Corvera |
License: |
This package is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
The Debian packaging is (C) 2006-2009, Toni Corvera <outlyer@gmail.com> and |
is licensed under the GPL, see `/usr/share/common-licenses/GPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/docs |
---|
0,0 → 1,0 |
AUTHORS |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/README.Debian |
---|
0,0 → 1,12 |
nautilus-follow-symlink for Debian |
---------------------------------- |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.net>, Thu, 30 Apr 2009 15:46:03 +0200 |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/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 |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/follow-symlink.c |
---|
0,0 → 1,349 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
#include <gio/gio.h> |
// Symbolic name of the icon, use to be in /usr/share/icons/gnome/[16x16]/emblems/ |
#define FSL_ICON_NAME "emblem-symbolic-link" |
extern int errno; |
// References for gio and the newer nautilus-extension: (required to support GNOME 2.22) |
// http://library.gnome.org/devel/gio/unstable/GFile.html |
// http://library.gnome.org/devel/gio/unstable/GFileInfo.html |
// http://library.gnome.org/devel/libnautilus-extension/unstable/libnautilus-extension-nautilus-file-info.html |
/* 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 with 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); |
} |
// TODO: Once the older code is deprecated, some nautilus_* function can be |
// translated to their g_file_* counterparts. |
// Only process symlinks to directories, we know already the file is a |
// direcoty or a symlink to one |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
if (!g_file_info_get_is_symlink(gfi)) { |
FSL_LOG("No " G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK " attribute 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(); |
/* |
* The "effective" type is returned, a symlink to a directory is a directory |
*/ |
return G_FILE_TYPE_DIRECTORY == nautilus_file_info_get_file_type(file_data); |
} |
/* |
* 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; |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
// The result will relative if the symlink is, must use the correct CWD |
const char * target = g_file_info_get_symlink_target(gfi); |
GFile * parent = nautilus_file_info_get_parent_location(file_info); |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( g_file_get_path(parent), // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON_NAME); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON_NAME); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/common.h |
---|
0,0 → 1,236 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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 |
// Not including this produces multiple definition errors as of 2008 (it didn't |
// at the time of the previous release) |
#ifdef HAVE_SYS_STAT_H |
#include <sys/stat.h> |
#endif // HAVE_SYS_STAT_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)) |
// __unused gives errors in x86_64 |
#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 // _DEBUG |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/Makefile.am |
---|
0,0 → 1,21 |
# $Id$ # |
# |
# Required to correctly install the locale files (and to access them) |
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 |
noinst_HEADERS=*.h |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/nautilus-follow-symlink.spec.in |
---|
0,0 → 1,89 |
# |
# spec file for nautilus-follow-symlink rpm |
# |
# based on the spec file for mp3plot <http://p.outlyer.net/mp3plot> |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag}~upstream |
Summary: nautilus plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./nautilus-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, nautilus-devel, gtk2-devel |
Requires: nautilus-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/nautilus/extensions-3.0/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/nautilus/extensions-3.0/*.so |
%changelog |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/ChangeLog |
---|
0,0 → 1,35 |
2011-04-07: Release 1.2.0-pre.1 |
* Compatibility: |
- Refresh to build against GNOME 3, preliminary support |
2009-04-30: Release 1.1.0 |
* Bugfix: |
- Use stock icon instead of hard-wired icon location |
* Packaging: |
- Re-gettextized: added po/ChangeLog |
- Deb package cleanup |
- RPM packaging support |
- Provide configure script by default |
* Compatibility: |
- Dropped support for nautilus-extension 1.0 completely |
* Other: |
- Reworked autoconf/automake with looser requirements |
- Support cross-compilation |
2008-05-04: Release 1.0.99-pre.1 (1.1.0 pre-release) |
* Other: |
- Adapted to work with GNOME 2.22 and above |
For older GNOME versions, 1.0.2 should be used |
2007-05-12: Release 1.0.2 |
* Bugfix: Fixed icon location, was broken on newer systems |
2006-12-14: Release 1.0.1 |
* Bugfixes: |
- Show correctly file names with underscores |
- Fixed compilation on 64bits archs (__unused can't be defined) |
- Require automake 1.9, which was actually used |
2006-11-10: Release 1.0 |
[First public release] |
# vim:set ts=4 et ai: # |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/Makefile.am |
---|
0,0 → 1,26 |
SUBDIRS = po src |
EXTRA_DIST = \ |
po/ChangeLog \ |
intltool-extract.in \ |
intltool-update.in \ |
intltool-merge.in \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
harshtest: |
make |
sudo cp src/.libs/libnautilus-follow-symlink.so /usr/lib/nautilus/extensions-3.0/ |
-killall -9 nautilus |
#ACLOCAL_AMFLAGS = -I m4 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/configure.ac |
---|
0,0 → 1,90 |
dnl $Id$ |
AC_INIT(nautilus-follow-symlink, [1.2-pre.1]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev$) |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
if test -z "$CPPFLAGS" ; then |
CPPFLAGS="-pedantic-errors" |
fi |
if test -z "$CFLAGS" ; then |
CFLAGS="-Werror -Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
CFLAGS="-O2 -Wall -std=gnu99 $CFLAGS" |
LDFLAGS="-Wl,--as-needed $LDFLAGS" |
# 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_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# 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" |
dnl GTK-3 migration safeguard <http://live.gnome.org/GnomeGoals/UseGseal> |
CFLAGS="$CFLAGS -DGSEAL_ENABLE" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
nautilus-follow-symlink.spec |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/po/ChangeLog |
---|
0,0 → 1,11 |
2009-04-30 gettextize <bug-gnu-gettext@gnu.org> |
* Makefile.in.in: Upgrade to gettext-0.17. |
* boldquot.sed: New file, from gettext-0.17. |
* en@boldquot.header: New file, from gettext-0.17. |
* en@quot.header: New file, from gettext-0.17. |
* insert-header.sin: New file, from gettext-0.17. |
* quot.sed: New file, from gettext-0.17. |
* remove-potcdate.sin: New file, from gettext-0.17. |
* Rules-quot: New file, from gettext-0.17. |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/po/ca.po |
---|
0,0 → 1,44 |
# 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: 2009-04-30 15:13+0200\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:242 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:243 |
#, 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:246 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:247 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:307 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:308 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/po/es.po |
---|
0,0 → 1,46 |
# 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: 2009-04-30 15:13+0200\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:242 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:243 |
#, 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:246 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:247 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:307 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:308 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/AUTHORS |
---|
0,0 → 1,2 |
nautilus-follow-symlink is Copyright (c) 2006, 2007, 2009 Toni Corvera <outlyer@gmail.com>. |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/INSTALL |
---|
0,0 → 1,29 |
BUILD / INSTALLATION INSTRUCTIONS |
================================= |
Binaries for some distributions are provided in nautilus-follow-symlink's |
homepage <http://p.outlyer.net/nautilus-follow-symlink>. |
Building |
======== |
Follow the usual GNU build instructions: |
$ ./configure --prefix=/usr |
(or: $ ./configure --prefix=`pkg-config --variable prefix libnautilus-extension`) |
$ make |
# make install |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
COMPILER NOTES |
============== |
* This program has only been tested with gcc |
* Define _DEBUG in the precompiler to enable the debugging/verbose mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/dist.mk |
---|
0,0 → 1,62 |
#!/usr/bin/make -f |
# $Id$ |
all: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo " (use ./dist.mk <TARGET>):" |
@echo " gen Run the autotools" |
@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 " force-gen Like gen, but overwrite even up-to-date files" |
@echo |
@echo "The rest of important rules are provided by the generated Makefile" |
@echo " (i.e.: $$ make <TARGET>)" |
@echo " harshtest (To be used during development) Copy the library to the system" |
@echo " and kill nautilus to re-load it" |
@echo " and the standard GNU rules:" |
@echo " dist Create the distribution tarball" |
@echo " distcheck Create tarball, check it builds and it installs. Add a DESTDIR" |
@echo " or it will try to install in the system" |
_gen_common: |
intltoolize --automake |
gen: |
autoreconf --install --verbose --symlink |
$(MAKE) -f dist.mk _gen_common |
force-gen: |
autoreconf --install --verbose --force --symlink |
$(MAKE) -f dist.mk _gen_common |
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: |
-debclean |
-make distclean |
cd src && make clean || true |
# |
$(RM) -r autom4te.cache |
$(RM) config.* depcomp install-sh missing src/config.h src/config.h.in |
$(RM) aclocal.m4 |
$(RM) configure Makefile Makefile.in src/Makefile src/Makefile.in |
$(RM) 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) libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
$(RM) intltool* |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.2-pre.1 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.2-pre.1:r43 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
Merged /nautilus-follow-symlink/branches/1.0.99-pre.1:r37 |
Merged /nautilus-follow-symlink/branches/1.1:r40 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.1/po/ca.po |
---|
0,0 → 1,44 |
# 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: 2009-04-30 15:13+0200\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:242 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:243 |
#, 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:246 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:247 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:307 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:308 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.1/po/es.po |
---|
0,0 → 1,46 |
# 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: 2009-04-30 15:13+0200\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:242 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:243 |
#, 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:246 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:247 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:307 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:308 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.1/po/ChangeLog |
---|
0,0 → 1,11 |
2009-04-30 gettextize <bug-gnu-gettext@gnu.org> |
* Makefile.in.in: Upgrade to gettext-0.17. |
* boldquot.sed: New file, from gettext-0.17. |
* en@boldquot.header: New file, from gettext-0.17. |
* en@quot.header: New file, from gettext-0.17. |
* insert-header.sin: New file, from gettext-0.17. |
* quot.sed: New file, from gettext-0.17. |
* remove-potcdate.sin: New file, from gettext-0.17. |
* Rules-quot: New file, from gettext-0.17. |
/ATTIC/nautilus-follow-symlink/tags/1.1/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/control |
---|
0,0 → 1,14 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 4.0.0), gcc, pkg-config, libglib2.0-dev (>= 2.16), libnautilus-extension-dev (>= 2.21), intltool (>= 0.18), gettext |
Standards-Version: 3.6.2 |
Homepage: http://p.outlyer.net/nautilus-follow-symlink/ |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus (>= 2.21) |
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. |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/changelog |
---|
0,0 → 1,40 |
nautilus-follow-symlink (1.1.0-upstream.1) unstable; urgency=low |
* New release. |
* debian/control: Drop build-depencies on autotools |
* debian/copyright: Updated template |
* debian/README.Debian: Notes on being unofficial+upstream |
-- Toni Corvera <outlyer@gmail.com> Thu, 30 Apr 2009 15:50:14 +0200 |
nautilus-follow-symlink (1.0.99+pre.2-upstream.0) experimental; urgency=low |
* New pre-release |
* Corrected package pre-version number order |
-- Toni Corvera <outlyer@gmail.com> Wed, 04 Jun 2008 13:20:28 +0200 |
nautilus-follow-symlink (1.0.99-upstream.0-pre.1) experimental; urgency=low |
* First pre-release for GNOME 2.22. |
-- Toni Corvera <outlyer@gmail.com> Sat, 03 May 2008 21:48:02 +0200 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/copyright |
---|
0,0 → 1,35 |
This package was debianized by Toni Corvera <outlyer@gmail.com> on |
Thu, 30 Apr 2009 15:47:55 +0200. |
It can be downloaded from <http://p.outlyer.net/nautilus-follow-symlink> |
Upstream Author: |
Toni Corvera <outlyer@gmail.com> |
Copyright: |
Copyright (C) 2006, 2008, 2009 Toni Corvera |
License: |
This package is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
The Debian packaging is (C) 2006-2009, Toni Corvera <outlyer@gmail.com> and |
is licensed under the GPL, see `/usr/share/common-licenses/GPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/docs |
---|
0,0 → 1,0 |
AUTHORS |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/README.Debian |
---|
0,0 → 1,12 |
nautilus-follow-symlink for Debian |
---------------------------------- |
This is an unofficial debian package created directly from the upstream |
source, by the upstream author. |
I'm no Debian Developer so I can't guarantee a strict following of the |
Debian Policy. |
I use Debian Sid, when possible I try to build against packages available in |
Debian Stable but sometimes published packages will only work in Unstable. |
-- Toni Corvera <outlyer@outlyer.net>, Thu, 30 Apr 2009 15:46:03 +0200 |
/ATTIC/nautilus-follow-symlink/tags/1.1/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 |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/follow-symlink.c |
---|
0,0 → 1,350 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
#include <gio/gio.h> |
#include <gtk/gtkicontheme.h> |
// Symbolic name of the icon, use to be in /usr/share/icons/gnome/[16x16]/emblems/ |
#define FSL_ICON_NAME "emblem-symbolic-link" |
extern int errno; |
// References for gio and the newer nautilus-extension: (required to support GNOME 2.22) |
// http://library.gnome.org/devel/gio/unstable/GFile.html |
// http://library.gnome.org/devel/gio/unstable/GFileInfo.html |
// http://library.gnome.org/devel/libnautilus-extension/unstable/libnautilus-extension-nautilus-file-info.html |
/* 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 with 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); |
} |
// TODO: Once the older code is deprecated, some nautilus_* function can be |
// translated to their g_file_* counterparts. |
// Only process symlinks to directories, we know already the file is a |
// direcoty or a symlink to one |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
if (!g_file_info_get_is_symlink(gfi)) { |
FSL_LOG("No " G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK " attribute 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(); |
/* |
* The "effective" type is returned, a symlink to a directory is a directory |
*/ |
return G_FILE_TYPE_DIRECTORY == nautilus_file_info_get_file_type(file_data); |
} |
/* |
* 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; |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
// The result will relative if the symlink is, must use the correct CWD |
const char * target = g_file_info_get_symlink_target(gfi); |
GFile * parent = nautilus_file_info_get_parent_location(file_info); |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( g_file_get_path(parent), // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON_NAME); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON_NAME); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/Makefile.am |
---|
0,0 → 1,21 |
# $Id$ # |
# |
# Required to correctly install the locale files (and to access them) |
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 |
noinst_HEADERS=*.h |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/common.h |
---|
0,0 → 1,236 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006, 2008, 2009 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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 |
// Not including this produces multiple definition errors as of 2008 (it didn't |
// at the time of the previous release) |
#ifdef HAVE_SYS_STAT_H |
#include <sys/stat.h> |
#endif // HAVE_SYS_STAT_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)) |
// __unused gives errors in x86_64 |
#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 // _DEBUG |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/configure.ac |
---|
0,0 → 1,88 |
dnl $Id$ |
AC_INIT(nautilus-follow-symlink, [1.1]) |
AC_CONFIG_SRCDIR([src/follow-symlink.c]) |
dnl Cross-compilation |
AC_CANONICAL_SYSTEM |
AC_CANONICAL_BUILD |
AC_ARG_PROGRAM |
AM_INIT_AUTOMAKE([1.7 foreign]) |
AC_REVISION(SVN $Rev$) |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS, if none provided (note to self: ':=' is not portable) |
if test -z "$CPPFLAGS" ; then |
CPPFLAGS="-pedantic-errors" |
fi |
if test -z "$CFLAGS" ; then |
CFLAGS="-Werror -Winline" |
fi |
dnl Extra flags always set (might be overridden by user's) |
dnl CPPFLAGS="$CPPFLAGS" |
CFLAGS="-O2 -Wall -std=gnu99 $CFLAGS" |
LDFLAGS="-Wl,--as-needed $LDFLAGS" |
# 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_GNU_GETTEXT_VERSION dnl autoreconf only runs autopoint if this is present |
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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# 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" |
cat <<EOF |
############################################################################## |
# Config: |
# |
# Flags: |
# CFLAGS = $CFLAGS |
# CPPFLAGS = $CPPFLAGS |
# LDFLAGS = $LDFLAGS |
# LIBS = $LIBS |
# LDADD = $LDADD |
# CC = $CC |
# CPP = $CPP |
############################################################################## |
EOF |
AC_OUTPUT([Makefile |
src/Makefile |
po/Makefile.in |
nautilus-follow-symlink.spec |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/AUTHORS |
---|
0,0 → 1,2 |
nautilus-follow-symlink is Copyright (c) 2006, 2007, 2009 Toni Corvera <outlyer@gmail.com>. |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/INSTALL |
---|
0,0 → 1,29 |
BUILD / INSTALLATION INSTRUCTIONS |
================================= |
Binaries for some distributions are provided in nautilus-follow-symlink's |
homepage <http://p.outlyer.net/nautilus-follow-symlink>. |
Building |
======== |
Follow the usual GNU build instructions: |
$ ./configure --prefix=/usr |
(or: $ ./configure --prefix=`pkg-config --variable prefix libnautilus-extension`) |
$ make |
# make install |
Note that this being a nautilus extension, the --prefix is not really used |
at installation time as there's no flexibility on where to install them |
(the appropiate place will be checked on install time). BUT it should match |
gnome's locale dir. |
COMPILER NOTES |
============== |
* This program has only been tested with gcc |
* Define _DEBUG in the precompiler to enable the debugging/verbose mode. |
CPPFLAGS="-D_DEBUG" ./configure |
/ATTIC/nautilus-follow-symlink/tags/1.1/nautilus-follow-symlink.spec.in |
---|
0,0 → 1,89 |
# |
# spec file for nautilus-follow-symlink rpm |
# |
# based on the spec file for mp3plot <http://p.outlyer.net/mp3plot> |
# |
%define is_mandrake %(test -e /etc/mandrake-release && echo 1 || echo 0) |
%define is_suse %(test -e /etc/SuSE-release && echo 1 || echo 0) |
%define is_fedora 0%{?fedora} |
%define is_redhat 0%{?rhl} |
%define is_rhel 0%{?rhel} |
%define distname generic |
%define disttag .generic_lsb |
%if %{is_fedora} |
%define distname fedora |
%define disttag %{dist} |
%endif |
%if %{is_redhat} |
%define distname redhat |
%define disttag %{dist} |
%endif |
%if %{is_mandrake} |
%define distname mandrake |
%define disttag .mdk |
%endif |
%if %{is_suse} |
%define distname suse |
%define disttag .suse |
%endif |
%if %{is_rhel} |
%define distname rhel |
%define disttag %{dist} |
%endif |
Name: @PACKAGE@ |
Version: @VERSION@ |
Release: 1%{?disttag}~upstream |
Summary: nautilus plugin to open the location pointed by a symlink |
Group: User Interface/Desktops |
License: LGPL |
URL: http://p.outlyer.net./nautilus-follow-symlink/ |
Source0: %{url}/files/%{name}-%{version}.tar.gz |
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) |
BuildRequires: intltool, libtool, nautilus-devel, gtk2-devel |
Requires: nautilus-extensions |
AutoReqProv: yes |
Prefix: /usr |
%description |
This extension adds a context menu option to symbolic links to folders which |
opens the pointed folder instead of the symbolic link. |
%prep |
echo Building %{name}-%{version}-%{release} |
%setup -q -n %{name}-%{version} |
%build |
%configure |
make %{?_smp_mflags} |
%install |
make install DESTDIR=%buildroot |
rm -f $RPM_BUILD_ROOT/%{_libdir}/nautilus/extensions-2.0/*.{l,}a |
# create %{name}.lang with the locale data. To be included by %files |
%find_lang %{name} |
%clean |
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf $RPM_BUILD_ROOT |
%files -f %{name}.lang |
%defattr(-,root,root,-) |
%doc AUTHORS ChangeLog |
%_libdir/nautilus/extensions-2.0/*.so |
%changelog |
* Thu Apr 30 2009 Toni Corvera <outlyer@gmail.com> - 1.1-1~upstream |
- Packaging cleanup |
* Wed Jun 4 2008 Toni Corvera <outlyer@gmail.com> - 1.0.99+pre.2-1upstream |
- Initial package |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/ChangeLog |
---|
0,0 → 1,31 |
2009-04-30: Release 1.1.0 |
* Bugfix: |
- Use stock icon instead of hard-wired icon location |
* Packaging: |
- Re-gettextized: added po/ChangeLog |
- Deb package cleanup |
- RPM packaging support |
- Provide configure script by default |
* Compatibility: |
- Dropped support for nautilus-extension 1.0 completely |
* Other: |
- Reworked autoconf/automake with looser requirements |
- Support cross-compilation |
2008-05-04: Release 1.0.99-pre.1 (1.1.0 pre-release) |
* Other: |
- Adapted to work with GNOME 2.22 and above |
For older GNOME versions, 1.0.2 should be used |
2007-05-12: Release 1.0.2 |
* Bugfix: Fixed icon location, was broken on newer systems |
2006-12-14: Release 1.0.1 |
* Bugfixes: |
- Show correctly file names with underscores |
- Fixed compilation on 64bits archs (__unused can't be defined) |
- Require automake 1.9, which was actually used |
2006-11-10: Release 1.0 |
[First public release] |
# vim:set ts=4 et ai: # |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/Makefile.am |
---|
0,0 → 1,26 |
SUBDIRS = po src |
EXTRA_DIST = \ |
po/ChangeLog \ |
intltool-extract.in \ |
intltool-update.in \ |
intltool-merge.in \ |
@PACKAGE@.spec.in @PACKAGE@.spec \ |
debian/changelog debian/control debian/compat debian/copyright \ |
debian/dirs debian/docs debian/README.Debian debian/rules |
# Extra files to get rid of when distcleaning |
DISTCLEANFILES = \ |
intltool-extract \ |
intltool-merge \ |
intltool-update \ |
po/.intltool-merge-cache |
harshtest: |
make |
sudo cp src/.libs/libnautilus-follow-symlink.so /usr/lib/nautilus/extensions-2.0/ |
killall -9 nautilus |
#ACLOCAL_AMFLAGS = -I m4 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/dist.mk |
---|
0,0 → 1,62 |
#!/usr/bin/make -f |
# $Id$ |
all: |
@echo "This file is used to aid in the setup of the build" |
@echo "environment, there are the following available targets" |
@echo " (use ./dist.mk <TARGET>):" |
@echo " gen Run the autotools" |
@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 " force-gen Like gen, but overwrite even up-to-date files" |
@echo |
@echo "The rest of important rules are provided by the generated Makefile" |
@echo " (i.e.: $$ make <TARGET>)" |
@echo " harshtest (To be used during development) Copy the library to the system" |
@echo " and kill nautilus to re-load it" |
@echo " and the standard GNU rules:" |
@echo " dist Create the distribution tarball" |
@echo " distcheck Create tarball, check it builds and it installs. Add a DESTDIR" |
@echo " or it will try to install in the system" |
_gen_common: |
intltoolize --automake |
gen: |
autoreconf --install --verbose --symlink |
$(MAKE) -f dist.mk _gen_common |
force-gen: |
autoreconf --install --verbose --force --symlink |
$(MAKE) -f dist.mk _gen_common |
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: |
-debclean |
-make distclean |
cd src && make clean || true |
# |
$(RM) -r autom4te.cache |
$(RM) config.* depcomp install-sh missing src/config.h src/config.h.in |
$(RM) aclocal.m4 |
$(RM) configure Makefile Makefile.in src/Makefile src/Makefile.in |
$(RM) 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) libtool.m4 lt*.m4 ltmain.sh libtool |
# Undo intltoolize |
$(RM) intltool* |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.1/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.1 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
Merged /nautilus-follow-symlink/branches/1.0.99-pre.1:r37 |
Merged /nautilus-follow-symlink/branches/1.1:r40 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/control |
---|
0,0 → 1,13 |
Source: nautilus-follow-symlink |
Section: contrib/gnome |
Priority: extra |
Maintainer: Toni Corvera <outlyer@gmail.com> |
Build-Depends: debhelper (>= 4.0.0), gcc, libtool, pkg-config, libc6-dev, libglib2.0-dev (>= 2.16), libnautilus-extension-dev (>= 2.21), intltool (>= 0.18), gettext, automake (>= 1.9), autoconf |
Standards-Version: 3.6.2 |
Package: nautilus-follow-symlink |
Architecture: any |
Depends: ${shlibs:Depends}, ${misc:Depends}, nautilus (>= 2.21) |
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. |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/changelog |
---|
0,0 → 1,24 |
nautilus-follow-symlink (1.0.99-upstream.0-pre.1) experimental; urgency=low |
* First pre-release for GNOME 2.22. |
-- Toni Corvera <outlyer@gmail.com> Sat, 03 May 2008 21:48:02 +0200 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/copyright |
---|
0,0 → 1,26 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be downloaded right now from <http://proyectos.outlyer.net/nautilus-follow-symlink>. |
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 Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/follow-symlink.c |
---|
0,0 → 1,411 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006-2008 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
#include <gio/gio.h> |
extern int errno; |
// References for gio and the newer nautilus-extension: (required to support GNOME 2.22) |
// http://library.gnome.org/devel/gio/unstable/GFile.html |
// http://library.gnome.org/devel/gio/unstable/GFileInfo.html |
// http://library.gnome.org/devel/libnautilus-extension/unstable/libnautilus-extension-nautilus-file-info.html |
/* 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 with 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); |
} |
#ifndef NX_1_0 |
// TODO: Once the older code is deprecated, some nautilus_* function can be |
// translated to their g_file_* counterparts. |
// Only process symlinks to directories, we know already the file is a |
// direcoty or a symlink to one |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
if (!g_file_info_get_is_symlink(gfi)) { |
FSL_LOG("No " G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK " attribute in %s", |
nautilus_file_info_get_uri(file_info)); |
return NULL; |
} |
#else |
// 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; |
} |
#endif |
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(); |
#ifndef NX_1_0 // Nautilus extension v1.0, deprected |
/* |
* The "effective" type is returned, a symlink to a directory is a directory |
*/ |
return G_FILE_TYPE_DIRECTORY == nautilus_file_info_get_file_type(file_data); |
#else |
/* |
* 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; |
#endif |
} |
/* |
* 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(); |
#ifndef NX_1_0 |
gchar ** argv; |
GFile * gf = nautilus_file_info_get_location(file_info); // Get the pointed GFile |
// FIXME: Can NULL be passed as last argument??? |
GFileInfo* gfi = g_file_query_info(gf, |
G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET, |
G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS, // <== Important :P |
NULL, |
NULL); // Retrieve the symlink attribute |
// The result will relative if the symlink is, must use the correct CWD |
const char * target = g_file_info_get_symlink_target(gfi); |
GFile * parent = nautilus_file_info_get_parent_location(file_info); |
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( g_file_get_path(parent), // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
#else |
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'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( NULL, // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
NULL, NULL, NULL, NULL); |
g_free(command_line); |
g_strfreev(argv); |
#endif |
} |
/* |
* 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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/common.h |
---|
0,0 → 1,239 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006-2008 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#ifndef FOLLOW_SYMLINK_COMMON_H |
#define FOLLOW_SYMLINK_COMMON_H |
/* |
* This file defines common debug utilities. |
* Also, includes config.h. |
*/ |
// Define NX_1_0 to use the older code, for nautilus-extension 1.0 |
// It will be removed soon though |
#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 |
// Not including this produces multiple definition errors as of 2008 (it didn't |
// at the time of the previous release) |
#ifdef HAVE_SYS_STAT_H |
#include <sys/stat.h> |
#endif // HAVE_SYS_STAT_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)) |
// __unused gives errors in x86_64 |
#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 // _DEBUG |
#endif /* FOLLOW_SYMLINK_COMMON_H */ |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/Makefile.am |
---|
0,0 → 1,20 |
# $Id$ # |
# |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/dist |
---|
0,0 → 1,97 |
#!/usr/bin/make -f |
# $Id$ |
UPSTREAM_URL=http://p.outlyer.net/nautilus-follow-symlink |
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-1.9 |
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 |
package-source: clean |
if [ -d .svn ]; then echo "WARNING: Using SVN working copy" >&2 && sleep 2s ; fi |
cd ../ && tar zcvf `basename $$OLDPWD`.tar.gz \ |
--label 'nautilus-follow-symlink <$(UPSTREAM_URL)>' \ |
--totals \ |
--group 0 \ |
--owner 0 \ |
--exclude='.svn' \ |
--exclude='devel_docs' \ |
--exclude='.*' \ |
`basename $$OLDPWD`/ |
# Aliases |
src: package-source |
source: package-source |
tarball: package-source |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/configure.in |
---|
0,0 → 1,56 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE([ 1.9 libnautilus-follow-symlink ], "1.0.99") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror -Winline" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# FIXME: Make this better |
FSL_ICON="/usr/share/icons/gnome/16x16/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 |
dnl The newer API in GNOME 2.22 requires 2.16 (maybe 2.14?), |
dnl gio is the only module required (probably) |
AM_PATH_GLIB_2_0(2.16.0, [], [], gio) |
# 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 |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/INSTALL |
---|
0,0 → 1,23 |
BUILD / INSTALLATION INSTRUCTIONS |
================================= |
First and foremost, if you use Debian or a derived distribution try first |
the upstream packages found at the project's homepage |
<http://p.outlyer.net/nautilus-follow-symlink>. Or try building a deb |
package yourself ($ dpkg-buildpackage -rfakeroot) |
Building |
======== |
Run the included script "dist", this should create the missing files needed |
to prepare the configuration. If some tool required to build is missing it |
should also point it. |
$ ./dist |
The follow the usual GNU build instructions: |
$ ./configure --prefix=/usr/local |
$ make |
# make install |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/ChangeLog |
---|
0,0 → 1,15 |
1.1.0: (pre-release) |
* Adapted to work with GNOME 2.22, support for older GNOME versions |
is dropped in newer releases; 1.0.2 can be used since it provides |
the same functionality. |
1.0.2: (2007-05-12) |
* BUGFIX: Fixed icon location, was broken on newer systems |
1.0.1: (2006-12-14) |
* BUGFIX: Show correctly file names with underscores |
* BUGFIX: Fixed compilation on 64bits archs (__unused can't be defined) |
* BUGFIX: Require automake 1.9, which was actually used |
1.0: Initial public release (2006-11-10) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/Makefile.am |
---|
0,0 → 1,22 |
SUBDIRS = po src |
# This doesn't work as expected |
libdir = @libdir@/nautilus/extensions-2.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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/po/ca.po |
---|
0,0 → 1,44 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/po/es.po |
---|
0,0 → 1,46 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1/BUILD |
---|
0,0 → 1,37 |
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. |
* Error-on-warning is used by default, keep in mind in case some future |
gcc version gets more picky. |
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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.99-pre.1 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
Merged /nautilus-follow-symlink/branches/1.0.99-pre.1:r37 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/debian/changelog |
---|
0,0 → 1,18 |
nautilus-follow-symlink (1.0.2-out.1) unstable; urgency=low |
* New upstream release. |
-- Toni Corvera <outlyer@outlyer.net> Sat, 12 May 2007 21:35:32 +0200 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/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, automake1.9, 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. |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/debian/copyright |
---|
0,0 → 1,26 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be downloaded right now from <http://proyectos.outlyer.net/nautilus-follow-symlink>. |
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 Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/dist |
---|
0,0 → 1,91 |
#!/usr/bin/make -f |
# $Id$ |
UPSTREAM_URL=http://p.outlyer.net/nautilus-follow-symlink |
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-1.9 |
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 |
package-source: clean |
if [ -d .svn ]; then echo "WARNING: Using SVN working copy" >&2 && sleep 2s ; fi |
cd ../ && tar zcvf `basename $$OLDPWD`.tar.gz \ |
--label 'nautilus-follow-symlink <$(UPSTREAM_URL)>' \ |
--totals \ |
--group 0 \ |
--owner 0 \ |
--exclude='.svn' \ |
--exclude='devel_docs' \ |
--exclude='.*' \ |
`basename $$OLDPWD`/ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE([ 1.9 libnautilus-follow-symlink ], "1.0.2") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror -Winline" |
LDFLAGS="$LDFLAGS -Wl,--as-needed" |
# FIXME: Make this better |
FSL_ICON="/usr/share/icons/gnome/16x16/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 |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/ChangeLog |
---|
0,0 → 1,10 |
1.0.2: (2007-05-12) |
* BUGFIX: Fixed icon location, was broken on newer systems |
1.0.1: (2006-12-14) |
* BUGFIX: Show correctly file names with underscores |
* BUGFIX: Fixed compilation on 64bits archs (__unused can't be defined) |
* BUGFIX: Require automake 1.9, which was actually used |
1.0: Initial public release (2006-11-10) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/follow-symlink.c |
---|
0,0 → 1,327 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
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'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( NULL, // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/common.h |
---|
0,0 → 1,230 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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)) |
// __unused gives errors in x86_64 |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/Makefile.am |
---|
0,0 → 1,20 |
# $Id$ # |
# |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/po/ca.po |
---|
0,0 → 1,44 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/po/es.po |
---|
0,0 → 1,46 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.0.2/BUILD |
---|
0,0 → 1,37 |
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. |
* Error-on-warning is used by default, keep in mind in case some future |
gcc version gets more picky. |
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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.2 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
Merged /nautilus-follow-symlink/branches/1.0.2:r34 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/follow-symlink.c |
---|
0,0 → 1,327 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
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'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( NULL, // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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 * a_base_name) |
{ |
TRACE(); |
NautilusMenuItem *ret; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
gchar * base_name = (gchar*)a_base_name; |
// Replace any _ in the file name with __ (to display correctly in the |
// context menu) |
{ |
// Count them |
size_t count = 0; |
for (size_t i=0; i<strlen(base_name); ++i) { |
if (*(base_name + i) == '_') { |
++count; |
} |
} |
// Escape the string if needed |
if (count > 0) { |
gchar * escaped_name = g_malloc( (strlen(base_name) + count)*sizeof(gchar) ); |
gchar * src = base_name, * dst = escaped_name; |
while (count > 0) { |
const gchar c = *src; |
if (c == '_') { |
*dst = '_'; |
dst++; |
--count; |
} |
*dst = *src; |
dst++; src++; |
} |
g_stpcpy(dst, src); |
base_name = escaped_name; |
} |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, a_base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, a_base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, a_base_name); |
g_sprintf(unique_name, ITEM_NAME_FMT, a_base_name); |
// (name, label, tip, icon) |
ret = nautilus_menu_item_new(unique_name, name, tooltip, FSL_ICON); |
if (base_name != a_base_name) { |
g_free(base_name); |
} |
g_free(unique_name); |
g_free(name); |
g_free(tooltip); |
//g_object_set_data(G_OBJECT(ret), "FsymlinkExtension::screen", screen); |
return ret; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/common.h |
---|
0,0 → 1,230 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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)) |
// __unused gives errors in x86_64 |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/Makefile.am |
---|
0,0 → 1,20 |
# $Id$ # |
# |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/po/ca.po |
---|
0,0 → 1,44 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/po/es.po |
---|
0,0 → 1,46 |
# 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-12-01 23:52+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:219 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:220 |
#, 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:223 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:224 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:284 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:285 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/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, automake1.9, 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. |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/debian/changelog |
---|
0,0 → 1,12 |
nautilus-follow-symlink (1.0.1-out.1) unstable; urgency=low |
* New upstream version |
* debian/control: Bumped Build-Depends to automake1.9 |
-- Toni Corvera <outlyer@outlyer.net> Fri, 1 Dec 2006 23:40:48 +0100 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/debian/copyright |
---|
0,0 → 1,26 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be downloaded right now from <http://proyectos.outlyer.net/nautilus-follow-symlink>. |
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 Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/dist |
---|
0,0 → 1,91 |
#!/usr/bin/make -f |
# $Id$ |
UPSTREAM_URL=http://proyectos.outlyer.net/nautilus-follow-symlink |
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-1.9 |
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 |
package-source: clean |
if [ -d .svn ]; then echo "WARNING: Using SVN working copy" >&2 && sleep 2s ; fi |
cd ../ && tar zcvf `basename $$OLDPWD`.tar.gz \ |
--label 'nautilus-follow-symlink <$(UPSTREAM_URL)>' \ |
--totals \ |
--group 0 \ |
--owner 0 \ |
--exclude='.svn' \ |
--exclude='devel_docs' \ |
--exclude='.*' \ |
`basename $$OLDPWD`/ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE([ 1.9 libnautilus-follow-symlink ], "1.0.1") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror -Winline" |
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 |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/ChangeLog |
---|
0,0 → 1,7 |
1.0.1: |
* BUGFIX: Show correctly file names with underscores |
* BUGFIX: Fixed compilation on 64bits archs (__unused can't be defined) |
* BUGFIX: Require automake 1.9, which was actually used |
1.0: Initial public release |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.0.1/BUILD |
---|
0,0 → 1,37 |
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. |
* Error-on-warning is used by default, keep in mind in case some future |
gcc version gets more picky. |
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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.1 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
Merged /nautilus-follow-symlink/branches/1.0.1:r31 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/debian/changelog |
---|
0,0 → 1,5 |
nautilus-follow-symlink (1.0.0-out.1) unstable; urgency=low |
* Initial release |
-- Toni Corvera <outlyer@outlyer.net> Wed, 1 Nov 2006 21:21:48 +0100 |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/debian/copyright |
---|
0,0 → 1,26 |
This package was debianized by Toni Corvera <outlyer@outlyer.net> on |
Sat, 21 Oct 2006 23:46:12 +0200. |
It can be downloaded right now from <http://proyectos.outlyer.net/nautilus-follow-symlink>. |
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 Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/1.0.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. |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/follow-symlink.h |
---|
0,0 → 1,74 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,83 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/common.h |
---|
0,0 → 1,229 |
/* $Id$ |
* |
* common.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/follow-symlink.c |
---|
0,0 → 1,290 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
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'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( NULL, // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, 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; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,121 |
/* $Id$ |
* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/src/Makefile.am |
---|
0,0 → 1,20 |
# $Id$ # |
# |
# 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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.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 |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/dist |
---|
0,0 → 1,91 |
#!/usr/bin/make -f |
# $Id$ |
UPSTREAM_URL=http://proyectos.outlyer.net/nautilus-follow-symlink |
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 |
package-source: clean |
if [ -d .svn ]; then echo "WARNING: Using SVN working copy" >&2 && sleep 2s ; fi |
cd ../ && tar zcvf `basename $$OLDPWD`.tar.gz \ |
--label 'nautilus-follow-symlink <$(UPSTREAM_URL)>' \ |
--totals \ |
--group 0 \ |
--owner 0 \ |
--exclude='.svn' \ |
--exclude='devel_docs' \ |
--exclude='.*' \ |
`basename $$OLDPWD`/ |
Property changes: |
Added: svn:executable |
+* |
\ No newline at end of property |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "1.0.0") |
AC_CONFIG_HEADER(src/config.h) |
dnl default FLAGS |
CPPFLAGS="$CPPFLAGS -std=gnu99 -pedantic-errors -Wall" |
CFLAGS="$CFLAGS -O -Wall -Werror -Winline" |
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 |
]) |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/ChangeLog |
---|
0,0 → 1,2 |
1.0: Initial public release |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/po/ca.po |
---|
0,0 → 1,44 |
# 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-30 13:46+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:218 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:219 |
#, 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:222 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:223 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:249 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:250 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/po/es.po |
---|
0,0 → 1,46 |
# 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-30 13:46+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:218 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:219 |
#, 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:222 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:223 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:249 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:250 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/1.0.0/BUILD |
---|
0,0 → 1,37 |
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. |
* Error-on-warning is used by default, keep in mind in case some future |
gcc version gets more picky. |
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 |
/ATTIC/nautilus-follow-symlink/tags/1.0.0 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.7.9:r16 |
Merged /nautilus-follow-symlink/branches/1.0.0:r28 |
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.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/debian/changelog |
---|
0,0 → 1,64 |
nautilus-follow-symlink (0.10.0-out.1) unstable; urgency=low |
* New upstream release |
-- Toni Corvera <outlyer@outlyer.net> Mon, 30 Oct 2006 14:01:58 +0100 |
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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 Lesser 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser 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 Lesser General |
Public License can be found in `/usr/share/common-licenses/LGPL'. |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/0.10.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. |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/src/follow-symlink.c |
---|
0,0 → 1,289 |
/* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#include "follow-symlink.h" |
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'"; |
const gsize mem_block_size = printf_string_upper_bound(BASE_CMD, target); |
gchar * command_line = g_try_malloc( mem_block_size ); |
if (NULL == command_line) { |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory " |
"for command line, can't spawn new nautilus.\n", __LINE__); |
// Redundant, but issues a CRITICAL message |
g_return_if_fail( NULL != command_line ); |
} |
g_sprintf(command_line, BASE_CMD, target); |
if (FALSE == g_shell_parse_argv(command_line, NULL, &argv, NULL)) { |
g_free(command_line); |
g_printerr("Failed in creating the arguments for the child nautilus.\n"); |
//g_return_if_fail( FALSE ); |
g_return_if_reached(); |
} |
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line); |
g_spawn_async( NULL, // Inherit CWD |
argv, |
NULL, |
G_SPAWN_SEARCH_PATH, //| G_SPAWN_DO_NOT_REAP_CHILD, |
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; |
gchar * name, * tooltip, * fmt_name, * fmt_tooltip, * unique_name; |
if (is_file_item) { |
fmt_name = _("Follow symbolic _link '%s'"); |
fmt_tooltip = _("Open the directory pointed by the symbolic link '%s'"); |
} |
else { |
fmt_name = _("Open _real path of '%s'"); |
fmt_tooltip = _("Open the real path of the folder pointed by '%s'"); |
} |
// Trial and error showed that the menu item name must be different |
// when various are to be shown (multiple selections), and also that the |
// name should always be the same for a given file, hence the base name is |
// appended to the command name |
static const gchar * const ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s"; |
name = g_try_malloc( printf_string_upper_bound(fmt_name, base_name) ); |
tooltip = g_try_malloc( printf_string_upper_bound(fmt_tooltip, base_name) ); |
unique_name = g_try_malloc( printf_string_upper_bound(ITEM_NAME_FMT, base_name) ); |
if (NULL == name || NULL == tooltip || NULL == unique_name) { |
// Let's try to keep nautilus going if no allocation is possible |
if (name) g_free(name); |
if (tooltip) g_free(tooltip); |
if (unique_name) g_free(unique_name); |
g_printerr(__FILE__ ":%d: Failed to allocate enough memory for " |
"the new menu item, dummier menu item in use.\n", __LINE__); |
// Can't return NULL neither a nautilus_menu_item_new(NULL,NULL,NULL,NULL) |
ret = nautilus_menu_item_new("Fsymlink::allocation_error", |
_("Follow symbolic _link"), |
_("Open the symbolic link"), |
FSL_ICON); |
g_return_val_if_fail(NULL!=name && NULL!=tooltip && NULL!=unique_name, |
ret); |
} |
g_sprintf(name, fmt_name, base_name); |
g_sprintf(tooltip, fmt_tooltip, 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; |
} |
/*** Utility(-es) ***/ |
/* |
* Wrapper for g_printf_string_upper_bound with a variadic signature |
* |
* Returns the maximum space needed to store the formatted string |
*/ |
gsize printf_string_upper_bound(const gchar * format, ...) { |
va_list ap; |
va_start(ap, format); |
gsize retval = g_printf_string_upper_bound(format, ap); |
va_end(ap); |
return retval; |
} |
/* vim:set ts=4 et ai: */ |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/src/nautilus-ext-follow-symlink.c |
---|
0,0 → 1,120 |
/* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/src/follow-symlink.h |
---|
0,0 → 1,73 |
/* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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); |
static gsize printf_string_upper_bound(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: */ |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/src/nautilus-ext-follow-symlink.h |
---|
0,0 → 1,82 |
/* |
* follow-symlink.h |
* nautilus-follow-symlink: Nautilus extension which allows opening the real |
* path of symbolic links |
* |
* Copyright (C) 2006 Toni Corvera |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
* |
* Author: Toni Corvera <outlyer@outlyer.net> |
*/ |
#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: */ |
/ATTIC/nautilus-follow-symlink/tags/0.10.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: */ |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/po/ca.po |
---|
0,0 → 1,44 |
# 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-30 13:46+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:218 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Segueix l'en_llaç simbòlic '%s'" |
#: ../src/follow-symlink.c:219 |
#, 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:222 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Obre la _ruta real de '%s'" |
#: ../src/follow-symlink.c:223 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Obre el directori apuntat per '%s'" |
#: ../src/follow-symlink.c:249 |
msgid "Follow symbolic _link" |
msgstr "Segueix l'en_llaç simbòlic" |
#: ../src/follow-symlink.c:250 |
msgid "Open the symbolic link" |
msgstr "Obre l'enllaç simbòlic" |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/po/es.po |
---|
0,0 → 1,46 |
# 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-30 13:46+0100\n" |
"PO-Revision-Date: 2006-10-30 13:42+0100\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:218 |
#, c-format |
msgid "Follow symbolic _link '%s'" |
msgstr "Seguir en_lace simbólico '%s'" |
#: ../src/follow-symlink.c:219 |
#, 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:222 |
#, c-format |
msgid "Open _real path of '%s'" |
msgstr "Abrir la _ruta real de '%s'" |
#: ../src/follow-symlink.c:223 |
#, c-format |
msgid "Open the real path of the folder pointed by '%s'" |
msgstr "Abrir el directoro apuntado por '%s'" |
#: ../src/follow-symlink.c:249 |
msgid "Follow symbolic _link" |
msgstr "Seguir en_lace simbólico" |
#: ../src/follow-symlink.c:250 |
msgid "Open the symbolic link" |
msgstr "Abrir el enlace simbólico" |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/LGPL |
---|
0,0 → 1,510 |
GNU LESSER GENERAL PUBLIC LICENSE |
Version 2.1, February 1999 |
Copyright (C) 1991, 1999 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. |
[This is the first released version of the Lesser GPL. It also counts |
as the successor of the GNU Library Public License, version 2, hence |
the version number 2.1.] |
Preamble |
The licenses for most software are designed to take away your |
freedom to share and change it. By contrast, the GNU General Public |
Licenses are intended to guarantee your freedom to share and change |
free software--to make sure the software is free for all its users. |
This license, the Lesser General Public License, applies to some |
specially designated software packages--typically libraries--of the |
Free Software Foundation and other authors who decide to use it. You |
can use it too, but we suggest you first think carefully about whether |
this license or the ordinary General Public License is the better |
strategy to use in any particular case, based on the explanations |
below. |
When we speak of free software, we are referring to freedom of use, |
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 and use pieces of |
it in new free programs; and that you are informed that you can do |
these things. |
To protect your rights, we need to make restrictions that forbid |
distributors to deny you these rights or to ask you to surrender these |
rights. These restrictions translate to certain responsibilities for |
you if you distribute copies of the library or if you modify it. |
For example, if you distribute copies of the library, whether gratis |
or for a fee, you must give the recipients all the rights that we gave |
you. You must make sure that they, too, receive or can get the source |
code. If you link other code with the library, you must provide |
complete object files to the recipients, so that they can relink them |
with the library after making changes to the library and recompiling |
it. And you must show them these terms so they know their rights. |
We protect your rights with a two-step method: (1) we copyright the |
library, and (2) we offer you this license, which gives you legal |
permission to copy, distribute and/or modify the library. |
To protect each distributor, we want to make it very clear that |
there is no warranty for the free library. Also, if the library is |
modified by someone else and passed on, the recipients should know |
that what they have is not the original version, so that the original |
author's reputation will not be affected by problems that might be |
introduced by others. |
Finally, software patents pose a constant threat to the existence of |
any free program. We wish to make sure that a company cannot |
effectively restrict the users of a free program by obtaining a |
restrictive license from a patent holder. Therefore, we insist that |
any patent license obtained for a version of the library must be |
consistent with the full freedom of use specified in this license. |
Most GNU software, including some libraries, is covered by the |
ordinary GNU General Public License. This license, the GNU Lesser |
General Public License, applies to certain designated libraries, and |
is quite different from the ordinary General Public License. We use |
this license for certain libraries in order to permit linking those |
libraries into non-free programs. |
When a program is linked with a library, whether statically or using |
a shared library, the combination of the two is legally speaking a |
combined work, a derivative of the original library. The ordinary |
General Public License therefore permits such linking only if the |
entire combination fits its criteria of freedom. The Lesser General |
Public License permits more lax criteria for linking other code with |
the library. |
We call this license the "Lesser" General Public License because it |
does Less to protect the user's freedom than the ordinary General |
Public License. It also provides other free software developers Less |
of an advantage over competing non-free programs. These disadvantages |
are the reason we use the ordinary General Public License for many |
libraries. However, the Lesser license provides advantages in certain |
special circumstances. |
For example, on rare occasions, there may be a special need to |
encourage the widest possible use of a certain library, so that it |
becomes a de-facto standard. To achieve this, non-free programs must |
be allowed to use the library. A more frequent case is that a free |
library does the same job as widely used non-free libraries. In this |
case, there is little to gain by limiting the free library to free |
software only, so we use the Lesser General Public License. |
In other cases, permission to use a particular library in non-free |
programs enables a greater number of people to use a large body of |
free software. For example, permission to use the GNU C Library in |
non-free programs enables many more people to use the whole GNU |
operating system, as well as its variant, the GNU/Linux operating |
system. |
Although the Lesser General Public License is Less protective of the |
users' freedom, it does ensure that the user of a program that is |
linked with the Library has the freedom and the wherewithal to run |
that program using a modified version of the Library. |
The precise terms and conditions for copying, distribution and |
modification follow. Pay close attention to the difference between a |
"work based on the library" and a "work that uses the library". The |
former contains code derived from the library, whereas the latter must |
be combined with the library in order to run. |
GNU LESSER GENERAL PUBLIC LICENSE |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
0. This License Agreement applies to any software library or other |
program which contains a notice placed by the copyright holder or |
other authorized party saying it may be distributed under the terms of |
this Lesser General Public License (also called "this License"). |
Each licensee is addressed as "you". |
A "library" means a collection of software functions and/or data |
prepared so as to be conveniently linked with application programs |
(which use some of those functions and data) to form executables. |
The "Library", below, refers to any such software library or work |
which has been distributed under these terms. A "work based on the |
Library" means either the Library or any derivative work under |
copyright law: that is to say, a work containing the Library or a |
portion of it, either verbatim or with modifications and/or translated |
straightforwardly into another language. (Hereinafter, translation is |
included without limitation in the term "modification".) |
"Source code" for a work means the preferred form of the work for |
making modifications to it. For a library, 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 library. |
Activities other than copying, distribution and modification are not |
covered by this License; they are outside its scope. The act of |
running a program using the Library is not restricted, and output from |
such a program is covered only if its contents constitute a work based |
on the Library (independent of the use of the Library in a tool for |
writing it). Whether that is true depends on what the Library does |
and what the program that uses the Library does. |
1. You may copy and distribute verbatim copies of the Library's |
complete 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 distribute a copy of this License along with the |
Library. |
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 Library or any portion |
of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. |
b) You must cause the files modified to carry prominent notices |
stating that you changed the files and the date of any change. |
c) You must cause the whole of the work to be licensed at no |
charge to all third parties under the terms of this License. |
d) If a facility in the modified Library refers to a function or a |
table of data to be supplied by an application program that uses |
the facility, other than as an argument passed when the facility |
is invoked, then you must make a good faith effort to ensure that, |
in the event an application does not supply such function or |
table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
(For example, a function in a library to compute square roots has |
a purpose that is entirely well-defined independent of the |
application. Therefore, Subsection 2d requires that any |
application-supplied function or table used by this function must |
be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
These requirements apply to the modified work as a whole. If |
identifiable sections of that work are not derived from the Library, |
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 Library, 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 Library. |
In addition, mere aggregation of another work not based on the Library |
with the Library (or with a work based on the Library) on a volume of |
a storage or distribution medium does not bring the other work under |
the scope of this License. |
3. You may opt to apply the terms of the ordinary GNU General Public |
License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so |
that they refer to the ordinary GNU General Public License, version 2, |
instead of to this License. (If a newer version than version 2 of the |
ordinary GNU General Public License has appeared, then you can specify |
that version instead if you wish.) Do not make any other change in |
these notices. |
Once this change is made in a given copy, it is irreversible for |
that copy, so the ordinary GNU General Public License applies to all |
subsequent copies and derivative works made from that copy. |
This option is useful when you wish to copy part of the code of |
the Library into a program that is not a library. |
4. You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form |
under the terms of Sections 1 and 2 above provided that you 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. |
If distribution of 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 satisfies the requirement to |
distribute the source code, even though third parties are not |
compelled to copy the source along with the object code. |
5. A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or |
linked with it, is called a "work that uses the Library". Such a |
work, in isolation, is not a derivative work of the Library, and |
therefore falls outside the scope of this License. |
However, linking a "work that uses the Library" with the Library |
creates an executable that is a derivative of the Library (because it |
contains portions of the Library), rather than a "work that uses the |
library". The executable is therefore covered by this License. |
Section 6 states terms for distribution of such executables. |
When a "work that uses the Library" uses material from a header file |
that is part of the Library, the object code for the work may be a |
derivative work of the Library even though the source code is not. |
Whether this is true is especially significant if the work can be |
linked without the Library, or if the work is itself a library. The |
threshold for this to be true is not precisely defined by law. |
If such an object file uses only numerical parameters, data |
structure layouts and accessors, and small macros and small inline |
functions (ten lines or less in length), then the use of the object |
file is unrestricted, regardless of whether it is legally a derivative |
work. (Executables containing this object code plus portions of the |
Library will still fall under Section 6.) |
Otherwise, if the work is a derivative of the Library, you may |
distribute the object code for the work under the terms of Section 6. |
Any executables containing that work also fall under Section 6, |
whether or not they are linked directly with the Library itself. |
6. As an exception to the Sections above, you may also combine or |
link a "work that uses the Library" with the Library to produce a |
work containing portions of the Library, and distribute that work |
under terms of your choice, provided that the terms permit |
modification of the work for the customer's own use and reverse |
engineering for debugging such modifications. |
You must give prominent notice with each copy of the work that the |
Library is used in it and that the Library and its use are covered by |
this License. You must supply a copy of this License. If the work |
during execution displays copyright notices, you must include the |
copyright notice for the Library among them, as well as a reference |
directing the user to the copy of this License. Also, you must do one |
of these things: |
a) Accompany the work with the complete corresponding |
machine-readable source code for the Library including whatever |
changes were used in the work (which must be distributed under |
Sections 1 and 2 above); and, if the work is an executable linked |
with the Library, with the complete machine-readable "work that |
uses the Library", as object code and/or source code, so that the |
user can modify the Library and then relink to produce a modified |
executable containing the modified Library. (It is understood |
that the user who changes the contents of definitions files in the |
Library will not necessarily be able to recompile the application |
to use the modified definitions.) |
b) Use a suitable shared library mechanism for linking with the |
Library. A suitable mechanism is one that (1) uses at run time a |
copy of the library already present on the user's computer system, |
rather than copying library functions into the executable, and (2) |
will operate properly with a modified version of the library, if |
the user installs one, as long as the modified version is |
interface-compatible with the version that the work was made with. |
c) Accompany the work with a written offer, valid for at least |
three years, to give the same user the materials specified in |
Subsection 6a, above, for a charge no more than the cost of |
performing this distribution. |
d) If distribution of the work is made by offering access to copy |
from a designated place, offer equivalent access to copy the above |
specified materials from the same place. |
e) Verify that the user has already received a copy of these |
materials or that you have already sent this user a copy. |
For an executable, the required form of the "work that uses the |
Library" must include any data and utility programs needed for |
reproducing the executable from it. However, as a special exception, |
the materials to be 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. |
It may happen that this requirement contradicts the license |
restrictions of other proprietary libraries that do not normally |
accompany the operating system. Such a contradiction means you cannot |
use both them and the Library together in an executable that you |
distribute. |
7. You may place library facilities that are a work based on the |
Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined |
library, provided that the separate distribution of the work based on |
the Library and of the other library facilities is otherwise |
permitted, and provided that you do these two things: |
a) Accompany the combined library with a copy of the same work |
based on the Library, uncombined with any other library |
facilities. This must be distributed under the terms of the |
Sections above. |
b) Give prominent notice with the combined library of the fact |
that part of it is a work based on the Library, and explaining |
where to find the accompanying uncombined form of the same work. |
8. You may not copy, modify, sublicense, link with, or distribute |
the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or |
distribute the Library 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. |
9. 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 Library or its derivative works. These actions are |
prohibited by law if you do not accept this License. Therefore, by |
modifying or distributing the Library (or any work based on the |
Library), you indicate your acceptance of this License to do so, and |
all its terms and conditions for copying, distributing or modifying |
the Library or works based on it. |
10. Each time you redistribute the Library (or any work based on the |
Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library |
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 with |
this License. |
11. 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 Library at all. For example, if a patent |
license would not permit royalty-free redistribution of the Library 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 Library. |
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. |
12. If the distribution and/or use of the Library is restricted in |
certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library 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. |
13. The Free Software Foundation may publish revised and/or new |
versions of the Lesser 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 Library |
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 Library does not specify a |
license version number, you may choose any version ever published by |
the Free Software Foundation. |
14. If you wish to incorporate parts of the Library into other free |
programs whose distribution conditions are incompatible with these, |
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 |
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. |
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR |
OTHER PARTIES PROVIDE THE LIBRARY "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 |
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME |
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
16. 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 LIBRARY 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 |
LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries |
If you develop a new library, and you want it to be of the greatest |
possible use to the public, we recommend making it free software that |
everyone can redistribute and change. You can do so by permitting |
redistribution under these terms (or, alternatively, under the terms |
of the ordinary General Public License). |
To apply these terms, attach the following notices to the library. |
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 library's name and a brief idea of what it does.> |
Copyright (C) <year> <name of author> |
This library is free software; you can redistribute it and/or |
modify it under the terms of the GNU Lesser General Public |
License as published by the Free Software Foundation; either |
version 2.1 of the License, or (at your option) any later version. |
This library 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 |
Lesser General Public License for more details. |
You should have received a copy of the GNU Lesser General Public |
License along with this library; 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. |
You should also get your employer (if you work as a programmer) or |
your school, if any, to sign a "copyright disclaimer" for the library, |
if necessary. Here is a sample; alter the names: |
Yoyodyne, Inc., hereby disclaims all copyright interest in the |
library `Frob' (a library for tweaking knobs) written by James |
Random Hacker. |
<signature of Ty Coon>, 1 April 1990 |
Ty Coon, President of Vice |
That's all there is to it! |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/BUILD |
---|
0,0 → 1,37 |
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. |
* Error-on-warning is used by default, keep in mind in case some future |
gcc version gets more picky. |
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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/configure.in |
---|
0,0 → 1,54 |
AC_INIT(src/follow-symlink.c) |
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.10.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 |
]) |
/ATTIC/nautilus-follow-symlink/tags/0.10.0/ChangeLog |
---|
0,0 → 1,58 |
Iterim milestones |
These private versions, the version numbering bumps just denote |
that a development milestone is achieved |
0.10.0: |
* BUGFIX/INTERNAL: Try not to throw nautilus on allocation errors |
* INTERNAL: Inherit CWD from parent nautilus |
* INTERNAL: Adjusted allocation for printf upper_bounds |
* INTERNAL: Display a simpler menu entry if allocation fails, won't work |
selections |
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 |
* LEGAL: Relicensed as LGPL, added license to all source files |
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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.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 |
/ATTIC/nautilus-follow-symlink/tags/0.10.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.9.0:r22 |
Merged /nautilus-follow-symlink/branches/0.10.0:r25 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/0.9.0/debian/docs |
---|
0,0 → 1,0 |
BUILD |
/ATTIC/nautilus-follow-symlink/tags/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. |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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'. |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/0.9.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.9.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/nautilus-follow-symlink/tags/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: */ |
/ATTIC/nautilus-follow-symlink/tags/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: */ |
/ATTIC/nautilus-follow-symlink/tags/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: */ |
/ATTIC/nautilus-follow-symlink/tags/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: */ |
/ATTIC/nautilus-follow-symlink/tags/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: */ |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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 |
]) |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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. |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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'" |
/ATTIC/nautilus-follow-symlink/tags/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'" |
/ATTIC/nautilus-follow-symlink/tags/0.9.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/nautilus-follow-symlink/tags/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 |
/ATTIC/nautilus-follow-symlink/tags/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.9.0:r22 |
Merged /nautilus-follow-symlink/branches/0.5.2+debian.2:r7 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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'" |
/ATTIC/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'" |
/ATTIC/nautilus-follow-symlink/tags/0.8.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.8.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.8.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.8.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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 |
/ATTIC/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 |
]) |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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'" |
/ATTIC/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'" |
/ATTIC/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 "" |
/ATTIC/nautilus-follow-symlink/tags/0.7.9/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.7.9/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.7.9/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.7.9/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
]) |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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" |
/ATTIC/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 "" |
/ATTIC/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ç" |
/ATTIC/nautilus-follow-symlink/tags/0.7.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.7.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.7.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.7.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
]) |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.6.0/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.6.0/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.6.0/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
]) |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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" |
/ATTIC/nautilus-follow-symlink/tags/0.6.0/po/POTFILES.in |
---|
0,0 → 1,0 |
src/follow-symlink.c |
/ATTIC/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" |
/ATTIC/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 "" |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/docs |
---|
0,0 → 1,2 |
ROADMAP |
BUILD |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.5.2+debian.2/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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) |
/ATTIC/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 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/nautilus-follow-symlink/tags/0.5.2/debian/docs |
---|
0,0 → 1,0 |
ROADMAP |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.5.2/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.5.2/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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) |
/ATTIC/nautilus-follow-symlink/tags/0.5.2 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /nautilus-follow-symlink/branches/0.5.2:r4 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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'. |
/ATTIC/nautilus-follow-symlink/tags/0.5.1/debian/docs |
---|
0,0 → 1,0 |
ROADMAP |
/ATTIC/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 |
/ATTIC/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. |
/ATTIC/nautilus-follow-symlink/tags/0.5.1/debian/dirs |
---|
0,0 → 1,0 |
usr/lib |
/ATTIC/nautilus-follow-symlink/tags/0.5.1/debian/compat |
---|
0,0 → 1,0 |
4 |
/ATTIC/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 |
/ATTIC/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 |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/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: */ |
/ATTIC/wp-allow-dangerous-uploads/trunk/GNUmakefile |
---|
0,0 → 1,15 |
#!/usr/bin/env make -f |
plugin=allow_dangerous_uploads |
all: pkg |
pkg: |
zip -9 -r "$(plugin).zip" "$(plugin)" --exclude '*/.svn/*' |
clean: |
$(RM) "$(plugin).zip" |
.PHONY: pkg clean all |
# vim:set ts=4 noet ai: # |
Property changes: |
Added: svn:executable |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/wp-allow-dangerous-uploads/trunk/allow_dangerous_uploads/allow_dangerous_uploads.php |
---|
0,0 → 1,46 |
<?php |
/* |
Plugin Name: Allow dangeours uploads |
Plugin URI: http://p.outlyer.net/wordpress/ |
Description: Re-allow the upload of exe and swf files, a capability removed for security reasons (cross-site scripting) in WordPress 3.6.1. See <a href="http://codex.wordpress.org/Version_3.6.1">wordpress 3.6.1 release notes</a> |
Version: 1 |
Author: Toni Corvera |
Author URI: http://corvera.eu |
*/ |
/* |
* Copyright 2013 Toni Corvera <outlyer@gmail.com> |
* |
* This program is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
*/ |
add_filter('upload_mimes', 'net_outlyer_uns_upload_mime'); |
/** |
* @see http://codex.wordpress.org/Plugin_API/Filter_Reference/upload_mimes |
*/ |
function net_outlyer_uns_upload_mime($existing_mimes = array()) { |
//if (get_option('allow_swf_upload') == 1) |
if (!isset($existing_mimes['swf'])) { |
$existing_mimes['swf'] = 'application/x-shockwave-flash'; |
} |
if (!isset($existing_mimes['exe'])) { |
$existing_mimes['exe'] = 'application/x-dosexec'; |
} |
return $existing_mimes; |
} |
// vim:set ts=4 noet ai: //?> |
Property changes: |
Added: svn:keywords |
+Rev Id Date |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/branches/03/style.css |
---|
0,0 → 1,55 |
/* |
Theme Name: Cazuela Remixed |
Theme URI: http://outlyer.net/ |
Description: Modified version of Cazuela for use at outlyer.net |
Author: Toni Corvera |
Author URI: http://corvera.eu |
Template: cazuela |
Version: 3 |
*/ |
/* =Imports styles from the parent theme |
-------------------------------------------------------------- */ |
@import url('../cazuela/style.css'); |
/* =Theme customization starts here |
-------------------------------------------------------------- */ |
/* Special class: Avoid hyphenation */ |
.nohyphens { |
-webkit-hyphens: none; |
-moz-hyphens: none; |
-ms-hyphens: none; |
hyphens: none; |
} |
/* Layout: Content - Primary Sidebar */ |
.layout-cp .content-area { |
float: left; |
margin: 0 -30% 0 0; |
width: 100%; |
} |
.layout-cp #content { |
margin: 0 30% 0 0; |
} |
.layout-cp #secondary { |
float: right; |
width: 26%; |
} |
img.wp-smiley { |
display: inline; |
} |
pre { |
font-size: 13px; |
font-size: 1.3rem; |
line-height: 1.3; |
margin-bottom: 1.3em; |
padding: 1.3em; |
border: 1px solid #ddd; |
} |
#footer-credits { |
font-size: 0.8em; |
} |
/ATTIC/wp-theme-cazuela-remixed/branches/03/UPSTREAM_IS_1.0.3 |
---|
--- wp-theme-cazuela-remixed/branches/03/upstream-templates/footer.php (nonexistent) |
+++ wp-theme-cazuela-remixed/branches/03/upstream-templates/footer.php (revision 736) |
@@ -0,0 +1,56 @@ |
+<?php |
+/** |
+ * The template for displaying the footer. |
+ * |
+ * Contains the closing of the id=main div and all content after |
+ * |
+ * @package Cazuela |
+ * @since Cazuela 1.0 |
+ */ |
+?> |
+ |
+ </div><!-- .inner --> |
+ </div><!-- #main .site-main --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_before_footer(); |
+ ?> |
+ |
+ <footer id="colophon" class="site-footer" role="contentinfo"> |
+ <?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
+ <div class="inner clearfix"> |
+ <section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
+ <?php dynamic_sidebar( 'footer-widget-area' ); ?> |
+ </section><!-- #footer-widgets --> |
+ </div><!-- .inner --> |
+ <?php endif; ?> |
+ |
+ <div id="footer-nav" class="inner clearfix"> |
+ <?php |
+ // Footer menu |
+ wp_nav_menu( array( |
+ 'theme_location' => 'footer', |
+ 'container' => 'nav', |
+ 'container_class' => 'footer-navigation', |
+ 'fallback_cb' => '' |
+ ) ); |
+ ?> |
+ |
+ <div id="footer-credits"> |
+ <a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
+ </div><!-- #footer-credits --> |
+ </div><!-- #footer-nav --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_after_footer(); |
+ ?> |
+ </footer><!-- #colophon .site-footer --> |
+ |
+</div><!-- #page .hfeed .site --> |
+ |
+<?php wp_footer(); ?> |
+ |
+</body> |
+</html> |
\ No newline at end of file |
/ATTIC/wp-theme-cazuela-remixed/branches/03/upstream-templates/comments.php |
---|
0,0 → 1,77 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/branches/03/upstream-templates/header.php |
---|
0,0 → 1,82 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/branches/03/upstream-templates/.htaccess |
---|
0,0 → 1,3 |
Order Deny,Allow |
Deny From All |
/ATTIC/wp-theme-cazuela-remixed/branches/03/footer.php |
---|
0,0 → 1,57 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
Customized |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/branches/03/images |
---|
Property changes: |
Added: svn:ignore |
+favicon.ico |
/ATTIC/wp-theme-cazuela-remixed/branches/03/comments.php |
---|
0,0 → 1,80 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<hr /> |
<p style="font-size:small;">Please note: New comments won't appear immediately, they have to be manually approved (usually done quickly).</p> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/branches/03/header.php |
---|
0,0 → 1,94 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<?php |
/* |
This is a child theme => |
- get_template_directory_uri() -> cazuela |
- get_stylesheet_directory_uri() -> cazuela-remixed |
<!--[if !IE]>--><link rel="icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.png" /><!--<![endif]--> |
<!--[if IE]><link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /><![endif]--> |
*/ |
?> |
<link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/branches/03/screenshot.png |
---|
0,0 → 1,0 |
link ../cazuela/screenshot.png |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/branches/03 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /wp-theme-cazuela-remixed/branches/02+1.0.3:r234-236 |
Merged /wp-theme-cazuela-remixed/branches/02:r77-230 |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/style.css |
---|
0,0 → 1,55 |
/* |
Theme Name: Cazuela Remixed |
Theme URI: http://outlyer.net/ |
Description: Modified version of Cazuela for use at outlyer.net |
Author: Toni Corvera |
Author URI: http://corvera.eu |
Template: cazuela |
Version: 2 |
*/ |
/* =Imports styles from the parent theme |
-------------------------------------------------------------- */ |
@import url('../cazuela/style.css'); |
/* =Theme customization starts here |
-------------------------------------------------------------- */ |
/* Special class: Avoid hyphenation */ |
.nohyphens { |
-webkit-hyphens: none; |
-moz-hyphens: none; |
-ms-hyphens: none; |
hyphens: none; |
} |
/* Layout: Content - Primary Sidebar */ |
.layout-cp .content-area { |
float: left; |
margin: 0 -30% 0 0; |
width: 100%; |
} |
.layout-cp #content { |
margin: 0 30% 0 0; |
} |
.layout-cp #secondary { |
float: right; |
width: 26%; |
} |
img.wp-smiley { |
display: inline; |
} |
pre { |
font-size: 13px; |
font-size: 1.3rem; |
line-height: 1.3; |
margin-bottom: 1.3em; |
padding: 1.3em; |
border: 1px solid #ddd; |
} |
#footer-credits { |
font-size: 0.8em; |
} |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/upstream-templates/footer.php |
---|
0,0 → 1,56 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/upstream-templates/comments.php |
---|
0,0 → 1,77 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/upstream-templates/header.php |
---|
0,0 → 1,82 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/upstream-templates/.htaccess |
---|
0,0 → 1,3 |
Order Deny,Allow |
Deny From All |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/footer.php |
---|
0,0 → 1,57 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
Customized |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/images |
---|
Property changes: |
Added: svn:ignore |
+favicon.ico |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/comments.php |
---|
0,0 → 1,80 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<hr /> |
<p style="font-size:small;">Please note: New comments won't appear immediately, they have to be manually approved (usually done quickly).</p> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/header.php |
---|
0,0 → 1,94 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<?php |
/* |
This is a child theme => |
- get_template_directory_uri() -> cazuela |
- get_stylesheet_directory_uri() -> cazuela-remixed |
<!--[if !IE]>--><link rel="icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.png" /><!--<![endif]--> |
<!--[if IE]><link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /><![endif]--> |
*/ |
?> |
<link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3/screenshot.png |
---|
0,0 → 1,0 |
link ../cazuela/screenshot.png |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/branches/02+1.0.3 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /wp-theme-cazuela-remixed/branches/02:r77-230 |
/ATTIC/wp-theme-cazuela-remixed/tags/02/UPSTREAM_IS_1.0.3 |
---|
--- wp-theme-cazuela-remixed/tags/02/upstream-templates/footer.php (nonexistent) |
+++ wp-theme-cazuela-remixed/tags/02/upstream-templates/footer.php (revision 736) |
@@ -0,0 +1,56 @@ |
+<?php |
+/** |
+ * The template for displaying the footer. |
+ * |
+ * Contains the closing of the id=main div and all content after |
+ * |
+ * @package Cazuela |
+ * @since Cazuela 1.0 |
+ */ |
+?> |
+ |
+ </div><!-- .inner --> |
+ </div><!-- #main .site-main --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_before_footer(); |
+ ?> |
+ |
+ <footer id="colophon" class="site-footer" role="contentinfo"> |
+ <?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
+ <div class="inner clearfix"> |
+ <section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
+ <?php dynamic_sidebar( 'footer-widget-area' ); ?> |
+ </section><!-- #footer-widgets --> |
+ </div><!-- .inner --> |
+ <?php endif; ?> |
+ |
+ <div id="footer-nav" class="inner clearfix"> |
+ <?php |
+ // Footer menu |
+ wp_nav_menu( array( |
+ 'theme_location' => 'footer', |
+ 'container' => 'nav', |
+ 'container_class' => 'footer-navigation', |
+ 'fallback_cb' => '' |
+ ) ); |
+ ?> |
+ |
+ <div id="footer-credits"> |
+ <a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
+ </div><!-- #footer-credits --> |
+ </div><!-- #footer-nav --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_after_footer(); |
+ ?> |
+ </footer><!-- #colophon .site-footer --> |
+ |
+</div><!-- #page .hfeed .site --> |
+ |
+<?php wp_footer(); ?> |
+ |
+</body> |
+</html> |
\ No newline at end of file |
/ATTIC/wp-theme-cazuela-remixed/tags/02/upstream-templates/comments.php |
---|
0,0 → 1,77 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/tags/02/upstream-templates/header.php |
---|
0,0 → 1,82 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/tags/02/upstream-templates/.htaccess |
---|
0,0 → 1,3 |
Order Deny,Allow |
Deny From All |
/ATTIC/wp-theme-cazuela-remixed/tags/02/footer.php |
---|
0,0 → 1,57 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
Customized |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/tags/02/style.css |
---|
0,0 → 1,55 |
/* |
Theme Name: Cazuela Remixed |
Theme URI: http://outlyer.net/ |
Description: Modified version of Cazuela for use at outlyer.net |
Author: Toni Corvera |
Author URI: http://corvera.eu |
Template: cazuela |
Version: 2 |
*/ |
/* =Imports styles from the parent theme |
-------------------------------------------------------------- */ |
@import url('../cazuela/style.css'); |
/* =Theme customization starts here |
-------------------------------------------------------------- */ |
/* Special class: Avoid hyphenation */ |
.nohyphens { |
-webkit-hyphens: none; |
-moz-hyphens: none; |
-ms-hyphens: none; |
hyphens: none; |
} |
/* Layout: Content - Primary Sidebar */ |
.layout-cp .content-area { |
float: left; |
margin: 0 -30% 0 0; |
width: 100%; |
} |
.layout-cp #content { |
margin: 0 30% 0 0; |
} |
.layout-cp #secondary { |
float: right; |
width: 26%; |
} |
img.wp-smiley { |
display: inline; |
} |
pre { |
font-size: 13px; |
font-size: 1.3rem; |
line-height: 1.3; |
margin-bottom: 1.3em; |
padding: 1.3em; |
border: 1px solid #ddd; |
} |
#footer-credits { |
font-size: 0.8em; |
} |
/ATTIC/wp-theme-cazuela-remixed/tags/02/images |
---|
Property changes: |
Added: svn:ignore |
+favicon.ico |
/ATTIC/wp-theme-cazuela-remixed/tags/02/comments.php |
---|
0,0 → 1,80 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<hr /> |
<p style="font-size:small;">Please note: New comments won't appear immediately, they have to be manually approved (usually done quickly).</p> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/tags/02/header.php |
---|
0,0 → 1,94 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<?php |
/* |
This is a child theme => |
- get_template_directory_uri() -> cazuela |
- get_stylesheet_directory_uri() -> cazuela-remixed |
<!--[if !IE]>--><link rel="icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.png" /><!--<![endif]--> |
<!--[if IE]><link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /><![endif]--> |
*/ |
?> |
<link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/tags/02/screenshot.png |
---|
0,0 → 1,0 |
link ../cazuela/screenshot.png |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/tags/02 |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /wp-theme-cazuela-remixed/branches/02+1.0.3:r234-236 |
Merged /wp-theme-cazuela-remixed/branches/02:r77-230 |
/ATTIC/wp-theme-cazuela-remixed/tags/01/footer.php |
---|
0,0 → 1,56 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
Customized <a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/tags/01/upstream-templates/footer.php |
---|
0,0 → 1,56 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/tags/01/upstream-templates/.htaccess |
---|
0,0 → 1,3 |
Order Deny,Allow |
Deny From All |
/ATTIC/wp-theme-cazuela-remixed/tags/01/style.css |
---|
0,0 → 1,47 |
/* |
Theme Name: Cazuela Remixed |
Theme URI: http://outlyer.net/ |
Description: Modified version of Cazuela for use at outlyer.net |
Author: Toni Corvera |
Author URI: http://corvera.eu |
Template: cazuela |
Version: 1 |
*/ |
/* =Imports styles from the parent theme |
-------------------------------------------------------------- */ |
@import url('../cazuela/style.css'); |
/* =Theme customization starts here |
-------------------------------------------------------------- */ |
/* Layout: Content - Primary Sidebar */ |
.layout-cp .content-area { |
float: left; |
margin: 0 -30% 0 0; |
width: 100%; |
} |
.layout-cp #content { |
margin: 0 30% 0 0; |
} |
.layout-cp #secondary { |
float: right; |
width: 26%; |
} |
img.wp-smiley { |
display: inline; |
} |
pre { |
font-size: 13px; |
font-size: 1.3rem; |
line-height: 1.3; |
margin-bottom: 1.3em; |
padding: 1.3em; |
border: 1px solid #ddd; |
} |
#footer-credits { |
font-size: 0.8em; |
} |
/ATTIC/wp-theme-cazuela-remixed/tags/01/screenshot.png |
---|
0,0 → 1,0 |
link ../cazuela/screenshot.png |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/trunk/UPSTREAM_IS_1.0.3 |
---|
--- wp-theme-cazuela-remixed/trunk/upstream-templates/footer.php (nonexistent) |
+++ wp-theme-cazuela-remixed/trunk/upstream-templates/footer.php (revision 736) |
@@ -0,0 +1,56 @@ |
+<?php |
+/** |
+ * The template for displaying the footer. |
+ * |
+ * Contains the closing of the id=main div and all content after |
+ * |
+ * @package Cazuela |
+ * @since Cazuela 1.0 |
+ */ |
+?> |
+ |
+ </div><!-- .inner --> |
+ </div><!-- #main .site-main --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_before_footer(); |
+ ?> |
+ |
+ <footer id="colophon" class="site-footer" role="contentinfo"> |
+ <?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
+ <div class="inner clearfix"> |
+ <section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
+ <?php dynamic_sidebar( 'footer-widget-area' ); ?> |
+ </section><!-- #footer-widgets --> |
+ </div><!-- .inner --> |
+ <?php endif; ?> |
+ |
+ <div id="footer-nav" class="inner clearfix"> |
+ <?php |
+ // Footer menu |
+ wp_nav_menu( array( |
+ 'theme_location' => 'footer', |
+ 'container' => 'nav', |
+ 'container_class' => 'footer-navigation', |
+ 'fallback_cb' => '' |
+ ) ); |
+ ?> |
+ |
+ <div id="footer-credits"> |
+ <a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
+ </div><!-- #footer-credits --> |
+ </div><!-- #footer-nav --> |
+ |
+ <?php |
+ // Before Footer theme hook callback |
+ thsp_hook_after_footer(); |
+ ?> |
+ </footer><!-- #colophon .site-footer --> |
+ |
+</div><!-- #page .hfeed .site --> |
+ |
+<?php wp_footer(); ?> |
+ |
+</body> |
+</html> |
\ No newline at end of file |
/ATTIC/wp-theme-cazuela-remixed/trunk/upstream-templates/comments.php |
---|
0,0 → 1,77 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/trunk/upstream-templates/header.php |
---|
0,0 → 1,82 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/trunk/upstream-templates/.htaccess |
---|
0,0 → 1,3 |
Order Deny,Allow |
Deny From All |
/ATTIC/wp-theme-cazuela-remixed/trunk/footer.php |
---|
0,0 → 1,57 |
<?php |
/** |
* The template for displaying the footer. |
* |
* Contains the closing of the id=main div and all content after |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
</div><!-- .inner --> |
</div><!-- #main .site-main --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_before_footer(); |
?> |
<footer id="colophon" class="site-footer" role="contentinfo"> |
<?php if ( is_active_sidebar( 'footer-widget-area' ) ) : ?> |
<div class="inner clearfix"> |
<section id="footer-widget-area" class="<?php echo thsp_count_widgets( 'footer-widget-area' ); ?>"> |
<?php dynamic_sidebar( 'footer-widget-area' ); ?> |
</section><!-- #footer-widgets --> |
</div><!-- .inner --> |
<?php endif; ?> |
<div id="footer-nav" class="inner clearfix"> |
<?php |
// Footer menu |
wp_nav_menu( array( |
'theme_location' => 'footer', |
'container' => 'nav', |
'container_class' => 'footer-navigation', |
'fallback_cb' => '' |
) ); |
?> |
<div id="footer-credits"> |
Customized |
<a href="<?php echo esc_url( __( 'http://thematosoup.com/themes/cazuela/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Cazuela — free, responsive WordPress theme', 'cazuela' ); ?>" rel="nofollow"><?php echo __( 'Cazuela theme', 'cazuela' ); ?></a> powered by <a href="<?php echo esc_url( __( 'http://wordpress.org/', 'cazuela' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'cazuela' ); ?>"><?php _e( 'WordPress', 'cazuela' ); ?></a> |
</div><!-- #footer-credits --> |
</div><!-- #footer-nav --> |
<?php |
// Before Footer theme hook callback |
thsp_hook_after_footer(); |
?> |
</footer><!-- #colophon .site-footer --> |
</div><!-- #page .hfeed .site --> |
<?php wp_footer(); ?> |
</body> |
</html> |
/ATTIC/wp-theme-cazuela-remixed/trunk/style.css |
---|
0,0 → 1,55 |
/* |
Theme Name: Cazuela Remixed |
Theme URI: http://outlyer.net/ |
Description: Modified version of Cazuela for use at outlyer.net |
Author: Toni Corvera |
Author URI: http://corvera.eu |
Template: cazuela |
Version: 2 |
*/ |
/* =Imports styles from the parent theme |
-------------------------------------------------------------- */ |
@import url('../cazuela/style.css'); |
/* =Theme customization starts here |
-------------------------------------------------------------- */ |
/* Special class: Avoid hyphenation */ |
.nohyphens { |
-webkit-hyphens: none; |
-moz-hyphens: none; |
-ms-hyphens: none; |
hyphens: none; |
} |
/* Layout: Content - Primary Sidebar */ |
.layout-cp .content-area { |
float: left; |
margin: 0 -30% 0 0; |
width: 100%; |
} |
.layout-cp #content { |
margin: 0 30% 0 0; |
} |
.layout-cp #secondary { |
float: right; |
width: 26%; |
} |
img.wp-smiley { |
display: inline; |
} |
pre { |
font-size: 13px; |
font-size: 1.3rem; |
line-height: 1.3; |
margin-bottom: 1.3em; |
padding: 1.3em; |
border: 1px solid #ddd; |
} |
#footer-credits { |
font-size: 0.8em; |
} |
/ATTIC/wp-theme-cazuela-remixed/trunk/images |
---|
Property changes: |
Added: svn:ignore |
+favicon.ico |
/ATTIC/wp-theme-cazuela-remixed/trunk/comments.php |
---|
0,0 → 1,80 |
<?php |
/** |
* The template for displaying Comments. |
* |
* The area of the page that contains both current comments |
* and the comment form. The actual display of comments is |
* handled by a callback to thsp_comment() which is |
* located in the functions.php file. |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?> |
<?php |
/* |
* If the current post is protected by a password and |
* the visitor has not yet entered the password we will |
* return early without loading the comments. |
*/ |
if ( post_password_required() ) |
return; |
?> |
<div id="comments" class="comments-area"> |
<?php if ( have_comments() ) : ?> |
<h2 class="comments-title"> |
<?php |
printf( |
_n( 'One thought on “%2$s”', '%1$s thoughts on “%2$s”', get_comments_number(), 'cazuela' ), |
number_format_i18n( get_comments_number() ), |
'<span>' . get_the_title() . '</span>' |
); |
?> |
</h2> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-above" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-before .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<ol class="commentlist"> |
<?php |
/* Loop through and list the comments. Tell wp_list_comments() |
* to use thsp_comment_cb() to format the comments. |
* If you want to overload this in a child theme then you can |
* define thsp_comment() and that will be used instead. |
* See thsp_comment_cb() in inc/template-tags.php for more. |
*/ |
wp_list_comments( array( 'callback' => 'thsp_comment_cb' ) ); |
?> |
</ol><!-- .commentlist --> |
<?php if ( get_comment_pages_count() > 1 && get_option( 'page_comments' ) ) : // are there comments to navigate through ?> |
<nav role="navigation" id="comment-nav-below" class="site-navigation comment-navigation"> |
<h1 class="assistive-text"><?php _e( 'Comment navigation', 'cazuela' ); ?></h1> |
<div class="nav-previous"><?php previous_comments_link( __( '← Older Comments', 'cazuela' ) ); ?></div> |
<div class="nav-next"><?php next_comments_link( __( 'Newer Comments →', 'cazuela' ) ); ?></div> |
</nav><!-- #comment-nav-below .site-navigation .comment-navigation --> |
<?php endif; // check for comment navigation ?> |
<?php endif; // have_comments() ?> |
<?php |
// If comments are closed and there are comments, let's leave a little note, shall we? |
if ( ! comments_open() && '0' != get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) : |
?> |
<p class="nocomments"><?php _e( 'Comments are closed.', 'cazuela' ); ?></p> |
<?php endif; ?> |
<hr /> |
<p style="font-size:small;">Please note: New comments won't appear immediately, they have to be manually approved (usually done quickly).</p> |
<?php comment_form(); ?> |
</div><!-- #comments .comments-area --> |
/ATTIC/wp-theme-cazuela-remixed/trunk/header.php |
---|
0,0 → 1,94 |
<?php |
/** |
* The Header for our theme. |
* |
* Displays all of the <head> section and everything up till <div id="main"> |
* |
* @package Cazuela |
* @since Cazuela 1.0 |
*/ |
?><!DOCTYPE html> |
<html <?php language_attributes(); ?>> |
<head> |
<meta charset="<?php bloginfo( 'charset' ); ?>" /> |
<meta name="viewport" content="width=device-width" /> |
<title><?php wp_title( '|', true, 'right' ); ?></title> |
<link rel="profile" href="http://gmpg.org/xfn/11" /> |
<link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> |
<?php |
/* |
This is a child theme => |
- get_template_directory_uri() -> cazuela |
- get_stylesheet_directory_uri() -> cazuela-remixed |
<!--[if !IE]>--><link rel="icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.png" /><!--<![endif]--> |
<!--[if IE]><link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /><![endif]--> |
*/ |
?> |
<link rel="shortcut icon" href="<?php echo get_stylesheet_directory_uri(); ?>/images/favicon.ico" type="image/vnd.microsoft.icon" /> |
<!--[if lt IE 9]> |
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script> |
<![endif]--> |
<?php wp_head(); ?> |
</head> |
<body <?php body_class(); ?>> |
<div id="page" class="hfeed site"> |
<header id="masthead" class="site-header" role="banner"> |
<?php |
// Before Header theme hook callback |
thsp_hook_before_header(); |
?> |
<div class="inner clearfix"> |
<hgroup> |
<?php |
// Get current theme options values |
$thsp_theme_options = thsp_cbp_get_options_values(); |
if ( '' != $thsp_theme_options['logo_image'] ) { |
$logo_image = thsp_get_logo_image( $thsp_theme_options['logo_image'] ); ?> |
<a class="header-image" href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"> |
<img src="<?php echo $logo_image[0]; ?>" width="<?php echo $logo_image[1]; ?>" height="<?php echo $logo_image[2]; ?>" alt="<?php bloginfo( 'name' ); ?>" /> |
</a> |
<?php } else { // if ( ! isset( $thsp_theme_options['logo_image'] ) ?> |
<h1 class="site-title"><a href="<?php echo esc_url( home_url( '/' ) ); ?>" title="<?php echo esc_attr( get_bloginfo( 'name', 'display' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?></a></h1> |
<?php } ?> |
<?php if ( '' != get_bloginfo( 'description' ) ) { ?> |
<h2 class="site-description"><?php bloginfo( 'description' ); ?></h2> |
<?php } ?> |
</hgroup> |
<?php |
// Header image |
$header_image = get_header_image(); |
if ( ! empty( $header_image ) ) : ?> |
<a href="<?php echo esc_url( home_url( '/' ) ); ?>"><img src="<?php echo esc_url( $header_image ); ?>" class="header-image" width="<?php echo get_custom_header()->width; ?>" height="<?php echo get_custom_header()->height; ?>" alt="" /></a> |
<?php endif; ?> |
<nav role="navigation" class="site-navigation main-navigation"> |
<h1 class="assistive-text"><?php _e( '<span>☰</span> Menu', 'cazuela' ); ?></h1> |
<div class="assistive-text skip-link"><a href="#content" title="<?php esc_attr_e( 'Skip to content', 'cazuela' ); ?>"><?php _e( 'Skip to content', 'cazuela' ); ?></a></div> |
<?php |
wp_nav_menu( array( |
'theme_location' => 'main', |
'container' => '', |
'fallback_cb' => 'wp_page_menu' |
) ); |
?> |
</nav><!-- .site-navigation .main-navigation --> |
</div><!-- .inner --> |
</header><!-- #masthead .site-header --> |
<?php |
// After Header theme hook callback |
thsp_hook_after_header(); |
?> |
<div id="main" class="site-main"> |
<div class="inner clearfix"> |
/ATTIC/wp-theme-cazuela-remixed/trunk/screenshot.png |
---|
0,0 → 1,0 |
link ../cazuela/screenshot.png |
Property changes: |
Added: svn:special |
+* |
\ No newline at end of property |
/ATTIC/wp-theme-cazuela-remixed/trunk |
---|
Property changes: |
Added: svn:mergeinfo |
Merged /wp-theme-cazuela-remixed/branches/02+1.0.3:r234-236 |
Merged /wp-theme-cazuela-remixed/branches/02:r77-230 |