Branch: refs/heads/master
Author: Colomban Wendling <ban(a)herbesfolles.org>
Committer: Colomban Wendling <ban(a)herbesfolles.org>
Date: Mon, 25 Jan 2016 22:02:17 UTC
Commit: 5d3df6c130a08756580dbf2fc86e9358e2996fec
https://github.com/geany/geany-plugins/commit/5d3df6c130a08756580dbf2fc86e9…
Log Message:
-----------
Merge pull request #339 from b4n/geanypy/build-with-recent-system-autoconf-archive
geanypy: Update bundled ax_python_devel.m4 to latest upstream
Modified Paths:
--------------
geanypy/m4/ax_python_devel.m4
geanypy/src/Makefile.am
Modified: geanypy/m4/ax_python_devel.m4
100 lines changed, 51 insertions(+), 49 deletions(-)
===================================================================
@@ -12,8 +12,8 @@
# in your configure.ac.
#
# This macro checks for Python and tries to get the include path to
-# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
-# output variables. It also exports $(PYTHON_EXTRA_LIBS) and
+# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
+# variables. It also exports $(PYTHON_EXTRA_LIBS) and
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
#
# You can search for some particular version of Python by passing a
@@ -34,11 +34,12 @@
# LICENSE
#
# Copyright (c) 2009 Sebastian Huber <sebastian-huber(a)web.de>
-# Copyright (c) 2009 Alan W. Irwin <irwin(a)beluga.phys.uvic.ca>
+# Copyright (c) 2009 Alan W. Irwin
# Copyright (c) 2009 Rafael Laboissiere <rafael(a)laboissiere.net>
-# Copyright (c) 2009 Andrew Collier <colliera(a)ukzn.ac.za>
+# Copyright (c) 2009 Andrew Collier
# Copyright (c) 2009 Matteo Settenvini <matteo(a)member.fsf.org>
# Copyright (c) 2009 Horst Knorr <hk_classes(a)knoda.org>
+# Copyright (c) 2013 Daniel Mullner <muellner(a)math.stanford.edu>
#
# 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
@@ -66,7 +67,7 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 8
+#serial 18
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
AC_DEFUN([AX_PYTHON_DEVEL],[
@@ -98,7 +99,7 @@ AC_DEFUN([AX_PYTHON_DEVEL],[
This version of the AC@&t@_PYTHON_DEVEL macro
doesn't work properly with versions of Python before
2.1.0. You may need to re-run configure, setting the
-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
to something else than an empty string.
@@ -153,8 +154,14 @@ $ac_distutils_result])
if test -z "$PYTHON_CPPFLAGS"; then
python_path=`$PYTHON -c "import distutils.sysconfig; \
print (distutils.sysconfig.get_python_inc ());"`
+ plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
+ print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
if test -n "${python_path}"; then
- python_path="-I$python_path"
+ if test "${plat_python_path}" != "${python_path}"; then
+ python_path="-I$python_path -I$plat_python_path"
+ else
+ python_path="-I$python_path"
+ fi
fi
PYTHON_CPPFLAGS=$python_path
fi
@@ -165,7 +172,7 @@ $ac_distutils_result])
# Check for Python library path
#
AC_MSG_CHECKING([for Python library path])
- if test -z "$PYTHON_LDFLAGS"; then
+ if test -z "$PYTHON_LIBS"; then
# (makes two attempts to ensure we've got a version number
# from the interpreter)
ac_python_version=`cat<<EOD | $PYTHON -
@@ -173,11 +180,9 @@ $ac_distutils_result])
# join all versioning strings, on some systems
# major/minor numbers could be in different list elements
from distutils.sysconfig import *
-ret = ''
-for e in get_config_vars ('VERSION'):
- if (e != None):
- ret += e
-print (ret)
+e = get_config_var('VERSION')
+if e is not None:
+ print(e)
EOD`
if test -z "$ac_python_version"; then
@@ -198,55 +203,49 @@ EOD`
# There should be only one
import distutils.sysconfig
-for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
- if e != None:
- print (e)
- break
+e = distutils.sysconfig.get_config_var('LIBDIR')
+if e is not None:
+ print (e)
EOD`
- # Before checking for libpythonX.Y, we need to know
- # the extension the OS we're on uses for libraries
- # (we take the first one, if there's more than one fix me!):
- ac_python_soext=`$PYTHON -c \
- "import distutils.sysconfig; \
- print (distutils.sysconfig.get_config_vars('SO')[[0]])"`
-
# Now, for the library:
- ac_python_soname=`$PYTHON -c \
- "import distutils.sysconfig; \
- print (distutils.sysconfig.get_config_vars('LDLIBRARY')[[0]])"`
+ ac_python_library=`cat<<EOD | $PYTHON -
- # Strip away extension from the end to canonicalize its name:
- ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
+import distutils.sysconfig
+c = distutils.sysconfig.get_config_vars()
+if 'LDVERSION' in c:
+ print ('python'+c[['LDVERSION']])
+else:
+ print ('python'+c[['VERSION']])
+EOD`
# This small piece shamelessly adapted from PostgreSQL python macro;
# credits goes to momjian, I think. I'd like to put the right name
# in the credits, if someone can point me in the right direction... ?
#
- if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
- -a x"$ac_python_library" != x"$ac_python_soname"
+ if test -n "$ac_python_libdir" -a -n "$ac_python_library"
then
# use the official shared library
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
+ PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
else
# old way: use libpython from python_configdir
ac_python_libdir=`$PYTHON -c \
"from distutils.sysconfig import get_python_lib as f; \
import os; \
print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
+ PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
fi
- if test -z "PYTHON_LDFLAGS"; then
+ if test -z "PYTHON_LIBS"; then
AC_MSG_ERROR([
Cannot determine location of your Python DSO. Please check it was installed with
- dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
+ dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
])
fi
fi
- AC_MSG_RESULT([$PYTHON_LDFLAGS])
- AC_SUBST([PYTHON_LDFLAGS])
+ AC_MSG_RESULT([$PYTHON_LIBS])
+ AC_SUBST([PYTHON_LIBS])
#
# Check for site packages
@@ -263,25 +262,25 @@ EOD`
# libraries which must be linked in when embedding
#
AC_MSG_CHECKING(python extra libraries)
- if test -z "$PYTHON_EXTRA_LIBS"; then
- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+ if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
- print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
+ print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
fi
- AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
- AC_SUBST(PYTHON_EXTRA_LIBS)
+ AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+ AC_SUBST(PYTHON_EXTRA_LDFLAGS)
#
# linking flags needed when embedding
#
AC_MSG_CHECKING(python extra linking flags)
- if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+ if test -z "$PYTHON_EXTRA_LIBS"; then
+ PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
print (conf('LINKFORSHARED'))"`
fi
- AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
- AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+ AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+ AC_SUBST(PYTHON_EXTRA_LIBS)
#
# final check to see if everything compiles alright
@@ -289,8 +288,10 @@ EOD`
AC_MSG_CHECKING([consistency of all components of python development environment])
# save current global flags
ac_save_LIBS="$LIBS"
+ ac_save_LDFLAGS="$LDFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+ LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
+ LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
AC_LANG_PUSH([C])
AC_LINK_IFELSE([
@@ -301,6 +302,7 @@ EOD`
# turn back to default flags
CPPFLAGS="$ac_save_CPPFLAGS"
LIBS="$ac_save_LIBS"
+ LDFLAGS="$ac_save_LDFLAGS"
AC_MSG_RESULT([$pythonexists])
@@ -308,8 +310,8 @@ EOD`
AC_MSG_FAILURE([
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
- via the LDFLAGS environment variable.
- Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
+ via the LIBS environment variable.
+ Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
Modified: geanypy/src/Makefile.am
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -8,7 +8,8 @@ geanypy_la_CPPFLAGS = @GEANY_CFLAGS@ @PYGTK_CFLAGS@ @PYTHON_CPPFLAGS@ \
-DGEANYPY_PYTHON_DIR="\"$(libdir)/geany/geanypy\"" \
-DGEANYPY_PLUGIN_DIR="\"$(datadir)/geany/geanypy/plugins\""
geanypy_la_CFLAGS = @GEANYPY_CFLAGS@ @GMODULE_CFLAGS@
-geanypy_la_LIBADD = @GEANY_LIBS@ @PYGTK_LIBS@ @PYTHON_LDFLAGS@ \
+geanypy_la_LIBADD = @GEANY_LIBS@ @PYGTK_LIBS@ \
+ $(PYTHON_LDFLAGS) $(PYTHON_LIBS) \
@PYTHON_EXTRA_LIBS@ @PYTHON_EXTRA_LDFLAGS@ \
@GMODULE_LIBS@
geanypy_la_SOURCES = geanypy-app.c \
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Frank Lanitz <frank(a)frank.uvena.de>
Committer: Frank Lanitz <frank(a)frank.uvena.de>
Date: Tue, 19 Jan 2016 22:52:38 UTC
Commit: 69375765d91a7b8a3607e5d1a074184ab9b3e576
https://github.com/geany/geany-plugins/commit/69375765d91a7b8a3607e5d1a0741…
Log Message:
-----------
Add a note for lineoperations to global README
Modified Paths:
--------------
README
Modified: README
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -69,6 +69,7 @@ Available plugins are:
* ``geniuspaste`` -- the paste to a pastebin plugin
* ``gitchangebar`` -- the GitChangeBar plugin
* ``gtkspell`` -- GeanyVC's spell-check support
+* ``lineoperations`` -- simple line functions that can be applied to an open file
* ``markdown`` -- the Markdown plugin
* ``multiterm`` -- the multiterm plugin
* ``overview``-- the overview plugin
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Colomban Wendling <ban(a)herbesfolles.org>
Committer: Colomban Wendling <ban(a)herbesfolles.org>
Date: Mon, 18 Jan 2016 02:11:14 UTC
Commit: abf424903e3d9cf37339567fe7d4d5f278b1f78c
https://github.com/geany/geany-plugins/commit/abf424903e3d9cf37339567fe7d4d…
Log Message:
-----------
geanypy: Update bundled ax_python_devel.m4 to latest upstream
This actually fixes building on Debian Unstable that ships
ax_python_devel.m4 in autoconf-archive, and apparently aclocal prefers
system directories. So we get the system version, which happens to be
the latest, which changed API.
To avoid breaking older systems that would also ship ax_python_devel.m4
but in an older version with the older API, keep using the old API too.
Modified Paths:
--------------
geanypy/m4/ax_python_devel.m4
geanypy/src/Makefile.am
Modified: geanypy/m4/ax_python_devel.m4
100 lines changed, 51 insertions(+), 49 deletions(-)
===================================================================
@@ -12,8 +12,8 @@
# in your configure.ac.
#
# This macro checks for Python and tries to get the include path to
-# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
-# output variables. It also exports $(PYTHON_EXTRA_LIBS) and
+# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output
+# variables. It also exports $(PYTHON_EXTRA_LIBS) and
# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
#
# You can search for some particular version of Python by passing a
@@ -34,11 +34,12 @@
# LICENSE
#
# Copyright (c) 2009 Sebastian Huber <sebastian-huber(a)web.de>
-# Copyright (c) 2009 Alan W. Irwin <irwin(a)beluga.phys.uvic.ca>
+# Copyright (c) 2009 Alan W. Irwin
# Copyright (c) 2009 Rafael Laboissiere <rafael(a)laboissiere.net>
-# Copyright (c) 2009 Andrew Collier <colliera(a)ukzn.ac.za>
+# Copyright (c) 2009 Andrew Collier
# Copyright (c) 2009 Matteo Settenvini <matteo(a)member.fsf.org>
# Copyright (c) 2009 Horst Knorr <hk_classes(a)knoda.org>
+# Copyright (c) 2013 Daniel Mullner <muellner(a)math.stanford.edu>
#
# 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
@@ -66,7 +67,7 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 8
+#serial 18
AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL])
AC_DEFUN([AX_PYTHON_DEVEL],[
@@ -98,7 +99,7 @@ AC_DEFUN([AX_PYTHON_DEVEL],[
This version of the AC@&t@_PYTHON_DEVEL macro
doesn't work properly with versions of Python before
2.1.0. You may need to re-run configure, setting the
-variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG,
PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
to something else than an empty string.
@@ -153,8 +154,14 @@ $ac_distutils_result])
if test -z "$PYTHON_CPPFLAGS"; then
python_path=`$PYTHON -c "import distutils.sysconfig; \
print (distutils.sysconfig.get_python_inc ());"`
+ plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
+ print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
if test -n "${python_path}"; then
- python_path="-I$python_path"
+ if test "${plat_python_path}" != "${python_path}"; then
+ python_path="-I$python_path -I$plat_python_path"
+ else
+ python_path="-I$python_path"
+ fi
fi
PYTHON_CPPFLAGS=$python_path
fi
@@ -165,7 +172,7 @@ $ac_distutils_result])
# Check for Python library path
#
AC_MSG_CHECKING([for Python library path])
- if test -z "$PYTHON_LDFLAGS"; then
+ if test -z "$PYTHON_LIBS"; then
# (makes two attempts to ensure we've got a version number
# from the interpreter)
ac_python_version=`cat<<EOD | $PYTHON -
@@ -173,11 +180,9 @@ $ac_distutils_result])
# join all versioning strings, on some systems
# major/minor numbers could be in different list elements
from distutils.sysconfig import *
-ret = ''
-for e in get_config_vars ('VERSION'):
- if (e != None):
- ret += e
-print (ret)
+e = get_config_var('VERSION')
+if e is not None:
+ print(e)
EOD`
if test -z "$ac_python_version"; then
@@ -198,55 +203,49 @@ EOD`
# There should be only one
import distutils.sysconfig
-for e in distutils.sysconfig.get_config_vars ('LIBDIR'):
- if e != None:
- print (e)
- break
+e = distutils.sysconfig.get_config_var('LIBDIR')
+if e is not None:
+ print (e)
EOD`
- # Before checking for libpythonX.Y, we need to know
- # the extension the OS we're on uses for libraries
- # (we take the first one, if there's more than one fix me!):
- ac_python_soext=`$PYTHON -c \
- "import distutils.sysconfig; \
- print (distutils.sysconfig.get_config_vars('SO')[[0]])"`
-
# Now, for the library:
- ac_python_soname=`$PYTHON -c \
- "import distutils.sysconfig; \
- print (distutils.sysconfig.get_config_vars('LDLIBRARY')[[0]])"`
+ ac_python_library=`cat<<EOD | $PYTHON -
- # Strip away extension from the end to canonicalize its name:
- ac_python_library=`echo "$ac_python_soname" | sed "s/${ac_python_soext}$//"`
+import distutils.sysconfig
+c = distutils.sysconfig.get_config_vars()
+if 'LDVERSION' in c:
+ print ('python'+c[['LDVERSION']])
+else:
+ print ('python'+c[['VERSION']])
+EOD`
# This small piece shamelessly adapted from PostgreSQL python macro;
# credits goes to momjian, I think. I'd like to put the right name
# in the credits, if someone can point me in the right direction... ?
#
- if test -n "$ac_python_libdir" -a -n "$ac_python_library" \
- -a x"$ac_python_library" != x"$ac_python_soname"
+ if test -n "$ac_python_libdir" -a -n "$ac_python_library"
then
# use the official shared library
ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library"
+ PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library"
else
# old way: use libpython from python_configdir
ac_python_libdir=`$PYTHON -c \
"from distutils.sysconfig import get_python_lib as f; \
import os; \
print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
- PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version"
+ PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
fi
- if test -z "PYTHON_LDFLAGS"; then
+ if test -z "PYTHON_LIBS"; then
AC_MSG_ERROR([
Cannot determine location of your Python DSO. Please check it was installed with
- dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand.
+ dynamic libraries enabled, or try setting PYTHON_LIBS by hand.
])
fi
fi
- AC_MSG_RESULT([$PYTHON_LDFLAGS])
- AC_SUBST([PYTHON_LDFLAGS])
+ AC_MSG_RESULT([$PYTHON_LIBS])
+ AC_SUBST([PYTHON_LIBS])
#
# Check for site packages
@@ -263,25 +262,25 @@ EOD`
# libraries which must be linked in when embedding
#
AC_MSG_CHECKING(python extra libraries)
- if test -z "$PYTHON_EXTRA_LIBS"; then
- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+ if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
- print (conf('LOCALMODLIBS') + ' ' + conf('LIBS'))"`
+ print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
fi
- AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
- AC_SUBST(PYTHON_EXTRA_LIBS)
+ AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+ AC_SUBST(PYTHON_EXTRA_LDFLAGS)
#
# linking flags needed when embedding
#
AC_MSG_CHECKING(python extra linking flags)
- if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+ if test -z "$PYTHON_EXTRA_LIBS"; then
+ PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
conf = distutils.sysconfig.get_config_var; \
print (conf('LINKFORSHARED'))"`
fi
- AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
- AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+ AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+ AC_SUBST(PYTHON_EXTRA_LIBS)
#
# final check to see if everything compiles alright
@@ -289,8 +288,10 @@ EOD`
AC_MSG_CHECKING([consistency of all components of python development environment])
# save current global flags
ac_save_LIBS="$LIBS"
+ ac_save_LDFLAGS="$LDFLAGS"
ac_save_CPPFLAGS="$CPPFLAGS"
- LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS"
+ LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS"
+ LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS"
CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
AC_LANG_PUSH([C])
AC_LINK_IFELSE([
@@ -301,6 +302,7 @@ EOD`
# turn back to default flags
CPPFLAGS="$ac_save_CPPFLAGS"
LIBS="$ac_save_LIBS"
+ LDFLAGS="$ac_save_LDFLAGS"
AC_MSG_RESULT([$pythonexists])
@@ -308,8 +310,8 @@ EOD`
AC_MSG_FAILURE([
Could not link test program to Python. Maybe the main Python library has been
installed in some non-standard library path. If so, pass it to configure,
- via the LDFLAGS environment variable.
- Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
+ via the LIBS environment variable.
+ Example: ./configure LIBS="-L/usr/non-standard-path/python/lib"
============================================================================
ERROR!
You probably have to install the development version of the Python package
Modified: geanypy/src/Makefile.am
3 lines changed, 2 insertions(+), 1 deletions(-)
===================================================================
@@ -8,7 +8,8 @@ geanypy_la_CPPFLAGS = @GEANY_CFLAGS@ @PYGTK_CFLAGS@ @PYTHON_CPPFLAGS@ \
-DGEANYPY_PYTHON_DIR="\"$(libdir)/geany/geanypy\"" \
-DGEANYPY_PLUGIN_DIR="\"$(datadir)/geany/geanypy/plugins\""
geanypy_la_CFLAGS = @GEANYPY_CFLAGS@ @GMODULE_CFLAGS@
-geanypy_la_LIBADD = @GEANY_LIBS@ @PYGTK_LIBS@ @PYTHON_LDFLAGS@ \
+geanypy_la_LIBADD = @GEANY_LIBS@ @PYGTK_LIBS@ \
+ $(PYTHON_LDFLAGS) $(PYTHON_LIBS) \
@PYTHON_EXTRA_LIBS@ @PYTHON_EXTRA_LDFLAGS@ \
@GMODULE_LIBS@
geanypy_la_SOURCES = geanypy-app.c \
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Colomban Wendling <ban(a)herbesfolles.org>
Committer: Colomban Wendling <ban(a)herbesfolles.org>
Date: Thu, 12 Nov 2015 15:10:12 UTC
Commit: 02179379edcf94a0fbb411f3e9e9aaa30f9d90a4
https://github.com/geany/geany-plugins/commit/02179379edcf94a0fbb411f3e9e9a…
Log Message:
-----------
geanynumberedbookmarks: Pass document pointer around where needed
Pass the document pointer instead of always getting the current
document, which may or may not be the one we're working on.
Closes #301.
Modified Paths:
--------------
geanynumberedbookmarks/src/geanynumberedbookmarks.c
Modified: geanynumberedbookmarks/src/geanynumberedbookmarks.c
54 lines changed, 29 insertions(+), 25 deletions(-)
===================================================================
@@ -746,11 +746,12 @@ static guint32 * GetMarkersUsed(ScintillaObject* sci)
/* get next free marker number */
-static gint NextFreeMarker(ScintillaObject* sci)
+static gint NextFreeMarker(GeanyDocument* doc)
{
gint i,l,m,k;
guint32 *markers;
FileData *fd;
+ ScintillaObject *sci=doc->editor->sci;
markers=GetMarkersUsed(sci);
@@ -835,7 +836,7 @@ static gint NextFreeMarker(ScintillaObject* sci)
scintilla_send_message(sci,SCI_MARKERDEFINE,i,SC_MARK_AVAILABLE);
/* find bookmark number, put in k */
- fd=GetFileData(document_get_current()->file_name);
+ fd=GetFileData(doc->file_name);
for(k=0;k<10;k++)
if(fd->iBookmarkMarkerUsed[k]==i)
break;
@@ -871,10 +872,11 @@ static gint NextFreeMarker(ScintillaObject* sci)
}
-static void SetMarker(ScintillaObject* sci,gint bookmarkNumber,gint markerNumber,gint line)
+static void SetMarker(GeanyDocument* doc,gint bookmarkNumber,gint markerNumber,gint line)
{
guint32 *markers;
FileData *fd;
+ ScintillaObject *sci=doc->editor->sci;
/* insert new marker */
scintilla_send_message(sci,SCI_MARKERDEFINEPIXMAP,markerNumber,
@@ -882,7 +884,7 @@ static void SetMarker(ScintillaObject* sci,gint bookmarkNumber,gint markerNumber
scintilla_send_message(sci,SCI_MARKERADD,line,markerNumber);
/* update record of which bookmark uses which marker */
- fd=GetFileData(document_get_current()->file_name);
+ fd=GetFileData(doc->file_name);
fd->iBookmarkMarkerUsed[bookmarkNumber]=markerNumber;
/* update record of which markers are being used */
@@ -892,9 +894,10 @@ static void SetMarker(ScintillaObject* sci,gint bookmarkNumber,gint markerNumber
}
-static void DeleteMarker(ScintillaObject* sci,gint bookmarkNumber,gint markerNumber)
+static void DeleteMarker(GeanyDocument* doc,gint bookmarkNumber,gint markerNumber)
{
guint32 *markers;
+ ScintillaObject *sci=doc->editor->sci;
/* remove marker */
scintilla_send_message(sci,SCI_MARKERDELETEALL,markerNumber,0);
@@ -907,17 +910,18 @@ static void DeleteMarker(ScintillaObject* sci,gint bookmarkNumber,gint markerNum
}
-static void ApplyBookmarks(ScintillaObject* sci,FileData *fd)
+static void ApplyBookmarks(GeanyDocument* doc,FileData *fd)
{
gint i,iLineCount,m;
GtkWidget *dialog;
+ ScintillaObject* sci=doc->editor->sci;
iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
for(i=0;i<10;i++)
if(fd->iBookmark[i]!=-1 && fd->iBookmark[i]<iLineCount)
{
- m=NextFreeMarker(sci);
+ m=NextFreeMarker(doc);
/* if run out of markers report this */
if(m==-1)
{
@@ -925,7 +929,7 @@ static void ApplyBookmarks(ScintillaObject* sci,FileData *fd)
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_ERROR,GTK_BUTTONS_NONE,
_("Unable to apply all markers to '%s' as all being used."),
- document_get_current()->file_name);
+ doc->file_name);
gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Okay"),GTK_RESPONSE_OK);
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
@@ -933,7 +937,7 @@ _("Unable to apply all markers to '%s' as all being used."),
}
/* otherwise ok to set marker */
- SetMarker(sci,i,m,fd->iBookmark[i]);
+ SetMarker(doc,i,m,fd->iBookmark[i]);
}
}
@@ -981,7 +985,7 @@ ill not be loaded.\nPress Ignore to try an load markers anyway."),doc->file_name
/* file not changed since Geany last saved it so saved settings should be fine */
case GTK_RESPONSE_ACCEPT:
/* now set markers */
- ApplyBookmarks(sci,fd);
+ ApplyBookmarks(doc,fd);
/* get fold settings if present and want to use them */
if(fd->pcFolding!=NULL && bRememberFolds==TRUE)
@@ -1042,7 +1046,7 @@ ill not be loaded.\nPress Ignore to try an load markers anyway."),doc->file_name
break;
/* file has changed since Geany last saved but, try to load bookmarks anyway */
case GTK_RESPONSE_REJECT:
- ApplyBookmarks(sci,fd);
+ ApplyBookmarks(doc,fd);
break;
default: /* default - don't try to set markers */
break;
@@ -1301,13 +1305,13 @@ will move the bookmark there if it was set on a different line, or create it if
/* goto numbered bookmark */
-static void GotoBookMark(gint iBookMark)
+static void GotoBookMark(GeanyDocument* doc, gint iBookMark)
{
gint iLine,iLinesVisible,iLineCount,iPosition,iEndOfLine;
- ScintillaObject* sci=document_get_current()->editor->sci;
+ ScintillaObject* sci=doc->editor->sci;
FileData *fd;
- fd=GetFileData(document_get_current()->file_name);
+ fd=GetFileData(doc->file_name);
iLine=scintilla_send_message(sci,SCI_MARKERNEXT,0,1<<(fd->iBookmarkMarkerUsed[iBookMark]));
@@ -1369,11 +1373,11 @@ static void GotoBookMark(gint iBookMark)
/* set (or remove) numbered bookmark */
-static void SetBookMark(gint iBookMark)
+static void SetBookMark(GeanyDocument *doc, gint iBookMark)
{
gint iNewLine,iOldLine,iPosInLine,m;
- ScintillaObject* sci=document_get_current()->editor->sci;
- FileData *fd=GetFileData(document_get_current()->file_name);
+ ScintillaObject* sci=doc->editor->sci;
+ FileData *fd=GetFileData(doc->file_name);
GtkWidget *dialog;
/* see if already such a bookmark present */
@@ -1385,7 +1389,7 @@ static void SetBookMark(gint iBookMark)
/* if no marker then simply add one to current line */
if(iOldLine==-1)
{
- m=NextFreeMarker(sci);
+ m=NextFreeMarker(doc);
/* if run out of markers report this */
if(m==-1)
{
@@ -1399,13 +1403,13 @@ static void SetBookMark(gint iBookMark)
return;
}
/* otherwise ok to set marker */
- SetMarker(sci,iBookMark,m,iNewLine);
+ SetMarker(doc,iBookMark,m,iNewLine);
fd->iBookmarkLinePos[iBookMark]=iPosInLine;
}
/* else if have to remove marker from current line */
else if(iOldLine==iNewLine)
{
- DeleteMarker(sci,iBookMark,fd->iBookmarkMarkerUsed[iBookMark]);
+ DeleteMarker(doc,iBookMark,fd->iBookmarkMarkerUsed[iBookMark]);
}
/* else have to move it to current line */
else
@@ -1414,12 +1418,12 @@ static void SetBookMark(gint iBookMark)
/* have the highest value and be on top */
/* remove old marker */
- DeleteMarker(sci,iBookMark,fd->iBookmarkMarkerUsed[iBookMark]);
+ DeleteMarker(doc,iBookMark,fd->iBookmarkMarkerUsed[iBookMark]);
/* add new marker if moving marker */
- m=NextFreeMarker(sci);
+ m=NextFreeMarker(doc);
/* don't bother checking for failure to find marker as have just released one so */
/* there should be one free */
- SetMarker(sci,iBookMark,m,iNewLine);
+ SetMarker(doc,iBookMark,m,iNewLine);
fd->iBookmarkLinePos[iBookMark]=iPosInLine;
}
}
@@ -1447,7 +1451,7 @@ static gboolean Key_Released_CallBack(GtkWidget *widget, GdkEventKey *ev, gpoint
if(i<0 || i>9)
return FALSE;
- GotoBookMark(i);
+ GotoBookMark(doc, i);
return TRUE;
}
/* control+shift+number */
@@ -1457,7 +1461,7 @@ static gboolean Key_Released_CallBack(GtkWidget *widget, GdkEventKey *ev, gpoint
*/
for(i=0;i<10;i++) if((gint)(ev->keyval)==iShiftNumbers[i])
{
- SetBookMark(i);
+ SetBookMark(doc, i);
return TRUE;
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
Branch: refs/heads/master
Author: Frank Lanitz <frank(a)frank.uvena.de>
Committer: Frank Lanitz <frank(a)frank.uvena.de>
Date: Sun, 17 Jan 2016 19:07:00 UTC
Commit: 7c1d98d8f384250ce159603100fdecdc2392f2ee
https://github.com/geany/geany-plugins/commit/7c1d98d8f384250ce159603100fde…
Log Message:
-----------
Merge pull request #324 from smostertdev/lineoperations
Add new "Lineoperations" plugin
Modified Paths:
--------------
MAINTAINERS
Makefile.am
build/lineoperations.m4
configure.ac
lineoperations/AUTHORS
lineoperations/COPYING
lineoperations/ChangeLog
lineoperations/Makefile.am
lineoperations/NEWS
lineoperations/README
lineoperations/src/Makefile.am
lineoperations/src/linefunctions.c
lineoperations/src/linefunctions.h
lineoperations/src/lineoperations.c
po/POTFILES.in
Modified: MAINTAINERS
7 lines changed, 6 insertions(+), 1 deletions(-)
===================================================================
@@ -41,7 +41,6 @@ M: Colomban Wendling <ban(a)herbesfolles.org>
W:
S: Maintained
-
debugger
P: Alexander Petukhov <devel(a)apetukhov.ru>
M: Alexander Petukhov <devel(a)apetukhov.ru>
@@ -168,6 +167,12 @@ M: Colomban Wendling <ban(a)herbesfolles.org>
W: http://plugins.geany.org/git-changebar.html
S: Maintained
+lineoperations
+P: Sylvan Mostert <smostert.dev(a)gmail.com>
+M: Sylvan Mostert <smostert.dev(a)gmail.com>
+W:
+S: Maintained
+
markdown
P: Matthew Brush <matt(a)geany.org>
M: Matthew Brush <matt(a)geany.org>
Modified: Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -107,6 +107,10 @@ if ENABLE_GITCHANGEBAR
SUBDIRS += git-changebar
endif
+if ENABLE_LINEOPERATIONS
+SUBDIRS += lineoperations
+endif
+
if ENABLE_MARKDOWN
SUBDIRS += markdown
endif
Modified: build/lineoperations.m4
9 lines changed, 9 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,9 @@
+AC_DEFUN([GP_CHECK_LINEOPERATIONS],
+[
+ GP_ARG_DISABLE([LineOperations], [auto])
+ GP_COMMIT_PLUGIN_STATUS([LineOperations])
+ AC_CONFIG_FILES([
+ lineoperations/Makefile
+ lineoperations/src/Makefile
+ ])
+])
Modified: configure.ac
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -54,6 +54,7 @@ GP_CHECK_GEANYVC
GP_CHECK_GEANYPG
GP_CHECK_GENIUSPASTE
GP_CHECK_GITCHANGEBAR
+GP_CHECK_LINEOPERATIONS
GP_CHECK_MARKDOWN
GP_CHECK_MULTITERM
GP_CHECK_OVERVIEW
Modified: lineoperations/AUTHORS
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1 @@
+Sylvan Mostert <smostert.dev(a)gmail.com>
\ No newline at end of file
Modified: lineoperations/COPYING
340 lines changed, 340 insertions(+), 0 deletions(-)
===================================================================
@@ -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.
Modified: lineoperations/ChangeLog
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online
Modified: lineoperations/Makefile.am
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,4 @@
+include $(top_srcdir)/build/vars.auxfiles.mk
+
+SUBDIRS = src
+plugin = lineoperations
Modified: lineoperations/NEWS
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online
Modified: lineoperations/README
222 lines changed, 222 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,222 @@
+===============
+Line Operations
+===============
+
+.. contents::
+
+About
+=====
+
+Line Operations is an assortment of simple line functions that can be
+applied to an open file.
+
+Features
+========
+
+* Remove Duplicate Lines, sorted
+* Remove Duplicate Lines, ordered
+* Remove Unique Lines
+* Remove Empty Lines
+* Remove Whitespace Lines
+* Sort Lines Ascending
+* Sort Lines Descending
+
+Usage
+=====
+
+After the plugins has been installed successfully, load the plugin via
+Geany's plugin manager and a new menu item in the Tools menu will
+appear. Click on each menu item to apply the operation on whole file.
+See descriptions below to see operations for each menu item.
+
+Notes
+-----
+
+ * Line Operations will **not** make changes to a file until you save
+ the file.
+
+
+Operation Details
+=================
+
+Remove Duplicate Lines
+----------------------
+
+The first occurrence of each duplicate line will remain in the file.
+The **Sorted** option will sort the file and remove duplicate lines
+[fast on large files]. The **Ordered** option will keep the same order
+of lines [slow on large files].
+
+ Example: Suppose a file has the following lines. (#comments added for
+ clarity)
+
+ ::
+
+ Line 2
+ Line 1
+ Line 2 #removed
+ Line 3
+ Line 1 #removed
+ Line 2 #removed
+
+ The **Remove Duplicate Lines, sorted** will change the file into this:
+
+ ::
+
+ Line 1
+ Line 2
+ Line 3
+
+ The **Remove Duplicate Lines, ordered** will change the file into
+ this:
+
+ ::
+
+ Line 2
+ Line 1
+ Line 3
+
+
+
+Remove Unique Lines
+-------------------
+
+Removes all lines that appear only once.
+
+ Example: Suppose a file has the following lines. (#comments added for
+ clarity)
+
+ ::
+
+ Line 2
+ Line 1
+ Line 2
+ Line 3 #removed
+ Line 1
+ Line 2
+
+ The **Remove Unique Lines** will change the file into this:
+
+ ::
+
+ Line 2
+ Line 1
+ Line 2
+ Line 1
+ Line 2
+
+Remove Empty Lines
+------------------
+
+Removes all lines that only contain a newline character, and no other
+characters.
+
+ Example: Suppose a file has the following lines. (#comments, and
+ \\n newline characters added for clarity)
+
+ ::
+
+ Line 2\n
+ Line 1\n
+ \n #removed
+ \n #NOT removed (contains spaces)
+ Line 1\n
+ Line 2\n
+
+ The **Remove Empty Lines** will change the file into this:
+
+ ::
+
+ Line 2\n
+ Line 1\n
+ \n
+ Line 1\n
+ Line 2\n
+
+
+Remove Whitespace Lines
+-----------------------
+
+Removes all lines that have only whitespace characters.
+
+
+ Example: Suppose a file has the following lines. (#comments, and \\n
+ newline characters added for clarity)
+
+ ::
+
+ Line 2\n
+ Line 1\n
+ \n #removed
+ \n #removed (contains only whitespace chars)
+ \t \n #removed (contains only whitespace chars)
+ Line 1\n #NOT removed (contains non whitespace chars)
+ Line 2\n
+
+ The **Remove Whitespace Lines** will change the file into this:
+
+ ::
+
+ Line 2\n
+ Line 1\n
+ Line 1\n
+ Line 2\n
+
+Sort Lines
+----------
+
+Sorts lines ascending or descending based on ASCII values
+(lexicographic sort).
+
+
+ Example: Suppose a file has the following lines.
+
+ ::
+
+ line 1
+ line 2
+ line
+ line 3
+ line
+
+ The **Sort Lines Ascending** will change the file into this:
+
+ ::
+
+ line
+ line
+ line 1
+ line 2
+ line 3
+
+
+ The **Sort Lines Descending** will change the file into this:
+
+ ::
+
+ line 3
+ line 2
+ line 1
+ line
+ line
+
+
+License
+=======
+
+The Line Operations plugin is distributed 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.
+A copy of this license can be found in the file COPYING included with
+the source code of this program.
+
+Ideas, questions, patches and bug reports
+=========================================
+
+Please direct all questions, bug reports and patches to the plugin
+author using the email address listed below or to the Geany mailing
+list to get some help from other Geany users, or report them at
+https://github.com/geany/geany-plugins/issues.
+
+
+
Modified: lineoperations/src/Makefile.am
12 lines changed, 12 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,12 @@
+include $(top_srcdir)/build/vars.build.mk
+
+geanyplugins_LTLIBRARIES = lineoperations.la
+
+lineoperations_la_SOURCES = \
+ linefunctions.h \
+ linefunctions.c \
+ lineoperations.c
+
+lineoperations_la_LIBADD = $(COMMONLIBS)
+
+include $(top_srcdir)/build/cppcheck.mk
Modified: lineoperations/src/linefunctions.c
327 lines changed, 327 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,327 @@
+/*
+ * linefunctions.c - Line operations, remove duplicate lines, empty lines, lines with only whitespace, sort lines.
+ *
+ * Copyright 2015 Sylvan Mostert <smostert.dev(a)gmail.com>
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
+#include "linefunctions.h"
+
+
+/* altered from geany/src/editor.c, ensure new line at file end */
+static void ensure_final_newline(GeanyEditor *editor, gint max_lines)
+{
+ gint end_document = sci_get_position_from_line(editor->sci, max_lines);
+ gboolean append_newline = end_document >
+ sci_get_position_from_line(editor->sci, max_lines - 1);
+
+ if (append_newline)
+ {
+ const gchar *eol = editor_get_eol_char(editor);
+ sci_insert_text(editor->sci, end_document, eol);
+ }
+}
+
+
+/* comparison function to be used in qsort */
+static gint compare_asc(const void * a, const void * b)
+{
+ return strcmp(*(const gchar **) a, *(const gchar **) b);
+}
+
+
+/* comparison function to be used in qsort */
+static gint compare_desc(const void * a, const void * b)
+{
+ return strcmp(*(const gchar **) b, *(const gchar **) a);
+}
+
+
+/* Remove Duplicate Lines, sorted */
+void rmdupst(GeanyDocument *doc) {
+ gint total_num_chars; /* number of characters in the document */
+ gint total_num_lines; /* number of lines in the document */
+ gchar **lines; /* array to hold all lines in the document */
+ gchar *new_file; /* *final* string to replace current document */
+ gchar *nf_end; /* points to end of new_file */
+ gchar *lineptr; /* temporary line pointer */
+ gint i; /* iterator */
+
+ total_num_chars = sci_get_length(doc->editor->sci);
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+ lines = g_malloc(sizeof(gchar *) * total_num_lines);
+ new_file = g_malloc(sizeof(gchar) * (total_num_chars+1));
+ new_file[0] = '\0';
+ nf_end = new_file;
+ lineptr = (gchar *)"";
+
+
+ /* if file is not empty, ensure that the file ends with newline */
+ if(total_num_lines != 1)
+ ensure_final_newline(doc->editor, total_num_lines);
+
+ /* copy *all* lines into **lines array */
+ for(i = 0; i < total_num_lines; i++)
+ lines[i] = sci_get_line(doc->editor->sci, i);
+
+ /* sort **lines ascending */
+ qsort(lines, total_num_lines, sizeof(gchar *), compare_asc);
+
+ /* loop through **lines, join first occurances into one str (new_file) */
+ for(i = 0; i < total_num_lines; i++)
+ if(strcmp(lines[i], lineptr) != 0)
+ {
+ lineptr = lines[i];
+ nf_end = g_stpcpy(nf_end, lines[i]);
+ }
+
+ /* set new document */
+ sci_set_text(doc->editor->sci, new_file);
+
+ /* free used memory */
+ for(i = 0; i < total_num_lines; i++)
+ g_free(lines[i]);
+ g_free(lines);
+ g_free(new_file);
+}
+
+
+/* Remove Duplicate Lines, ordered */
+void rmdupln(GeanyDocument *doc) {
+ gint total_num_chars; /* number of characters in the document */
+ gint total_num_lines; /* number of lines in the document */
+ gchar **lines; /* array to hold all lines in the document */
+ gchar *new_file; /* *final* string to replace current document */
+ gchar *nf_end; /* points to end of new_file */
+ gint i; /* iterator */
+ gint j; /* iterator */
+ gboolean *to_remove; /* flag to 'mark' which lines to remove */
+
+ total_num_chars = sci_get_length(doc->editor->sci);
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+ lines = g_malloc(sizeof(gchar *) * total_num_lines);
+ new_file = g_malloc(sizeof(gchar) * (total_num_chars+1));
+ new_file[0] = '\0';
+ nf_end = new_file;
+
+
+ /* if file is not empty, ensure that the file ends with newline */
+ if(total_num_lines != 1)
+ ensure_final_newline(doc->editor, total_num_lines);
+
+ /* copy *all* lines into **lines array */
+ for(i = 0; i < total_num_lines; i++)
+ lines[i] = sci_get_line(doc->editor->sci, i);
+
+ /* allocate and set *to_remove to all FALSE
+ * to_remove[i] represents whether lines[i] should be removed */
+ to_remove = g_malloc(sizeof(gboolean) * total_num_lines);
+ for(i = 0; i < (total_num_lines); i++)
+ to_remove[i] = FALSE;
+
+ /* find which **lines are duplicate, and mark them as duplicate */
+ for(i = 0; i < total_num_lines; i++) /* loop through **lines */
+ /* make sure that the line is not already duplicate */
+ if(!to_remove[i])
+ /* find the rest of same lines */
+ for(j = (i+1); j < total_num_lines; j++)
+ if(!to_remove[j] && strcmp(lines[i], lines[j]) == 0)
+ to_remove[j] = TRUE; /* line is duplicate, mark to remove */
+
+ /* copy **lines into 'new_file' if it is not FALSE(not duplicate) */
+ for(i = 0; i < total_num_lines; i++)
+ if(!to_remove[i])
+ nf_end = g_stpcpy(nf_end, lines[i]);
+
+ /* set new document */
+ sci_set_text(doc->editor->sci, new_file);
+
+ /* free used memory */
+ for(i = 0; i < total_num_lines; i++)
+ g_free(lines[i]);
+ g_free(lines);
+ g_free(new_file);
+ g_free(to_remove);
+}
+
+
+/* Remove Unique Lines */
+void rmunqln(GeanyDocument *doc) {
+ gint total_num_chars; /* number of characters in the document */
+ gint total_num_lines; /* number of lines in the document */
+ gchar **lines; /* array to hold all lines in the document */
+ gchar *new_file; /* *final* string to replace current document */
+ gchar *nf_end; /* points to end of new_file */
+ gint i; /* iterator */
+ gint j; /* iterator */
+ gboolean *to_remove; /* to 'mark' which lines to remove */
+
+ total_num_chars = sci_get_length(doc->editor->sci);
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+ lines = g_malloc(sizeof(gchar *) * total_num_lines);
+ new_file = g_malloc(sizeof(gchar) * (total_num_chars+1));
+ new_file[0] = '\0';
+ nf_end = new_file;
+
+
+ /* if file is not empty, ensure that the file ends with newline */
+ if(total_num_lines != 1)
+ ensure_final_newline(doc->editor, total_num_lines);
+
+ /* copy *all* lines into **lines array */
+ for(i = 0; i < total_num_lines; i++)
+ lines[i] = sci_get_line(doc->editor->sci, i);
+
+
+ /* allocate and set *to_remove to all TRUE
+ * to_remove[i] represents whether lines[i] should be removed */
+ to_remove = g_malloc(sizeof(gboolean) * total_num_lines);
+ for(i = 0; i < total_num_lines; i++)
+ to_remove[i] = TRUE;
+
+ /* find all unique lines and set them to FALSE (not to be removed) */
+ for(i = 0; i < total_num_lines; i++)
+ /* make sure that the line is not already determined to be unique */
+ if(to_remove[i])
+ for(j = (i+1); j < total_num_lines; j++)
+ if(to_remove[j] && strcmp(lines[i], lines[j]) == 0)
+ {
+ to_remove[i] = FALSE;
+ to_remove[j] = FALSE;
+ }
+
+ /* copy **lines into 'new_file' if it is not FALSE(not duplicate) */
+ for(i = 0; i < total_num_lines; i++)
+ if(!to_remove[i])
+ nf_end = g_stpcpy(nf_end, lines[i]);
+
+ /* set new document */
+ sci_set_text(doc->editor->sci, new_file);
+
+ /* free used memory */
+ for(i = 0; i < total_num_lines; i++)
+ g_free(lines[i]);
+ g_free(lines);
+ g_free(new_file);
+ g_free(to_remove);
+}
+
+
+/* Remove Empty Lines */
+void rmemtyln(GeanyDocument *doc) {
+ gint total_num_lines; /* number of lines in the document */
+ gint i; /* iterator */
+
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+
+ sci_start_undo_action(doc->editor->sci);
+
+ for(i = 0; i < total_num_lines; i++) /* loop through opened doc */
+ {
+ if(sci_get_position_from_line(doc->editor->sci, i) ==
+ sci_get_line_end_position(doc->editor->sci, i))
+ {
+ scintilla_send_message(doc->editor->sci,
+ SCI_DELETERANGE,
+ sci_get_position_from_line(doc->editor->sci, i),
+ sci_get_line_length(doc->editor->sci, i));
+ total_num_lines--;
+ i--;
+ }
+ }
+
+ sci_end_undo_action(doc->editor->sci);
+}
+
+
+/* Remove Whitespace Lines */
+void rmwhspln(GeanyDocument *doc) {
+ gint total_num_lines; /* number of lines in the document */
+ gint indent;
+ gint i; /* iterator */
+
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+
+ sci_start_undo_action(doc->editor->sci);
+
+ for(i = 0; i < total_num_lines; i++) /* loop through opened doc */
+ {
+ indent = scintilla_send_message(doc->editor->sci,
+ SCI_GETLINEINDENTPOSITION,
+ i, 0);
+
+ if(indent -
+ sci_get_position_from_line(doc->editor->sci, i) ==
+ sci_get_line_end_position(doc->editor->sci, i)-
+ sci_get_position_from_line(doc->editor->sci, i))
+ {
+ scintilla_send_message(doc->editor->sci,
+ SCI_DELETERANGE,
+ sci_get_position_from_line(doc->editor->sci, i),
+ sci_get_line_length(doc->editor->sci, i));
+ total_num_lines--;
+ i--;
+ }
+
+ }
+
+
+ sci_end_undo_action(doc->editor->sci);
+}
+
+
+/* Sort Lines Ascending and Descending */
+void sortlines(GeanyDocument *doc, gboolean asc) {
+ gint total_num_chars; /* number of characters in the document */
+ gint total_num_lines; /* number of lines in the document */
+ gchar **lines; /* array to hold all lines in the document */
+ gchar *new_file; /* *final* string to replace current document */
+ gint i; /* iterator */
+
+ total_num_chars = sci_get_length(doc->editor->sci);
+ total_num_lines = sci_get_line_count(doc->editor->sci);
+ lines = g_malloc(sizeof(gchar *) * (total_num_lines+1));
+ new_file = g_malloc(sizeof(gchar) * (total_num_chars+1));
+ new_file[0] = '\0';
+
+ /* if file is not empty, ensure that the file ends with newline */
+ if(total_num_lines != 1)
+ ensure_final_newline(doc->editor, total_num_lines);
+
+ /* copy *all* lines into **lines array */
+ for(i = 0; i < total_num_lines; i++)
+ lines[i] = sci_get_line(doc->editor->sci, i);
+
+ /* sort **lines array */
+ if(asc)
+ qsort(lines, total_num_lines, sizeof(gchar *), compare_asc);
+ else
+ qsort(lines, total_num_lines, sizeof(gchar *), compare_desc);
+
+ /* join **lines into one string (new_file) */
+ lines[total_num_lines] = NULL;
+ new_file = g_strjoinv("", lines);
+
+ /* set new document */
+ sci_set_text(doc->editor->sci, new_file);
+
+ /* free used memory */
+ for(i = 0; i < total_num_lines; i++)
+ g_free(lines[i]);
+ g_free(lines);
+ g_free(new_file);
+}
Modified: lineoperations/src/linefunctions.h
55 lines changed, 55 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,55 @@
+/*
+ * linefunctions.h - Line operations, remove duplicate lines, empty lines, lines with only whitespace, sort lines.
+ *
+ * Copyright 2015 Sylvan Mostert <smostert.dev(a)gmail.com>
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
+
+#ifndef LINEFUNCTIONS_H
+#define LINEFUNCTIONS_H
+
+#include "geanyplugin.h"
+#include "Scintilla.h"
+#include <stdlib.h> /* qsort */
+#include <string.h>
+
+
+/* Remove Duplicate Lines, sorted */
+void rmdupst(GeanyDocument *doc);
+
+
+/* Remove Duplicate Lines, ordered */
+void rmdupln(GeanyDocument *doc);
+
+
+/* Remove Unique Lines */
+void rmunqln(GeanyDocument *doc);
+
+
+/* Remove Empty Lines */
+void rmemtyln(GeanyDocument *doc);
+
+
+/* Remove Whitespace Lines */
+void rmwhspln(GeanyDocument *doc);
+
+
+/* Sort Lines Ascending and Descending */
+void sortlines(GeanyDocument *doc, gboolean asc);
+
+#endif
Modified: lineoperations/src/lineoperations.c
134 lines changed, 134 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,134 @@
+/*
+ * lineoperations.c - Line operations, remove duplicate lines, empty lines, lines with only whitespace, sort lines.
+ *
+ * Copyright 2015 Sylvan Mostert <smostert.dev(a)gmail.com>
+ *
+ * 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 Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+
+#include "geanyplugin.h"
+#include "Scintilla.h"
+#include "linefunctions.h"
+
+
+static GtkWidget *main_menu_item = NULL;
+
+
+/* call custom func */
+static void
+action_func_item(GtkMenuItem *menuitem, gpointer gdata)
+{
+ void (*func)(GeanyDocument *) = gdata;
+ GeanyDocument *doc = NULL;
+ doc = document_get_current();
+
+ if(doc) func(doc);
+}
+
+
+/* Sort Lines */
+static void
+action_sort_item(GtkMenuItem *menuitem, gpointer gdata)
+{
+ GeanyDocument *doc = NULL;
+ doc = document_get_current();
+
+ if(doc) sortlines(doc, GPOINTER_TO_INT(gdata));
+}
+
+
+static gboolean
+lo_init(GeanyPlugin *plugin, gpointer gdata)
+{
+ GeanyData *geany_data = plugin->geany_data;
+
+ GtkWidget *submenu;
+ guint i;
+ struct {
+ const gchar *label;
+ GCallback cb_activate;
+ gpointer cb_data;
+ } menu_items[] = {
+ { N_("Remove Duplicate Lines, _Sorted"),
+ G_CALLBACK(action_func_item), (gpointer) rmdupst },
+ { N_("Remove Duplicate Lines, _Ordered"),
+ G_CALLBACK(action_func_item), (gpointer) rmdupln },
+ { N_("Remove _Unique Lines"),
+ G_CALLBACK(action_func_item), (gpointer) rmunqln },
+ { NULL },
+ { N_("Remove _Empty Lines"),
+ G_CALLBACK(action_func_item), (gpointer) rmemtyln },
+ { N_("Remove _Whitespace Lines"),
+ G_CALLBACK(action_func_item), (gpointer) rmwhspln },
+ { NULL },
+ { N_("Sort Lines _Ascending"),
+ G_CALLBACK(action_sort_item), GINT_TO_POINTER(1) },
+ { N_("Sort Lines _Descending"),
+ G_CALLBACK(action_sort_item), GINT_TO_POINTER(0) }
+ };
+
+ main_menu_item = gtk_menu_item_new_with_mnemonic(_("_Line Operations"));
+ gtk_widget_show(main_menu_item);
+
+ submenu = gtk_menu_new();
+ gtk_widget_show(submenu);
+
+ for (i = 0; i < G_N_ELEMENTS(menu_items); i++)
+ {
+ GtkWidget *item;
+
+ if (! menu_items[i].label) /* separator */
+ item = gtk_separator_menu_item_new();
+ else
+ {
+ item = gtk_menu_item_new_with_mnemonic(_(menu_items[i].label));
+ g_signal_connect(item, "activate", menu_items[i].cb_activate, menu_items[i].cb_data);
+ ui_add_document_sensitive(item);
+ }
+
+ gtk_widget_show(item);
+ gtk_menu_shell_append(GTK_MENU_SHELL(submenu), item);
+ }
+
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(main_menu_item), submenu);
+ gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu), main_menu_item);
+
+ return TRUE;
+}
+
+
+static void
+lo_cleanup(GeanyPlugin *plugin, gpointer pdata)
+{
+ if(main_menu_item) gtk_widget_destroy(main_menu_item);
+}
+
+
+G_MODULE_EXPORT
+void geany_load_module(GeanyPlugin *plugin)
+{
+ main_locale_init(LOCALEDIR, GETTEXT_PACKAGE);
+
+ plugin->info->name = _("Line Operations");
+ plugin->info->description = _("Line Operations provides a handful of functions that can be applied to a document such as, removing duplicate lines, removing empty lines, removing lines with only whitespace, and sorting lines.");
+ plugin->info->version = "0.1";
+ plugin->info->author = _("Sylvan Mostert <smostert.dev(a)gmail.com>");
+
+ plugin->funcs->init = lo_init;
+ plugin->funcs->cleanup = lo_cleanup;
+
+ GEANY_PLUGIN_REGISTER(plugin, 225);
+}
Modified: po/POTFILES.in
3 lines changed, 3 insertions(+), 0 deletions(-)
===================================================================
@@ -221,6 +221,9 @@ geniuspaste/src/geniuspaste.c
[type: gettext/glade]git-changebar/data/prefs.ui
git-changebar/src/gcb-plugin.c
+# LineOperations
+lineoperations/src/lineoperations.c
+
# Markdown
markdown/src/conf.c
markdown/src/plugin.c
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).