SF.net SVN: geany-plugins:[2290] trunk/geany-plugins

frlan at users.sourceforge.net frlan at xxxxx
Wed Oct 19 20:23:31 UTC 2011


Revision: 2290
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=2290&view=rev
Author:   frlan
Date:     2011-10-19 20:23:31 +0000 (Wed, 19 Oct 2011)
Log Message:
-----------
Remove geanycfp as its replaced by geanymacro and geanynumberbookmarks

Modified Paths:
--------------
    trunk/geany-plugins/configure.ac

Removed Paths:
-------------
    trunk/geany-plugins/build/geanycfp.m4
    trunk/geany-plugins/geanycfp/ABOUT
    trunk/geany-plugins/geanycfp/AUTHORS
    trunk/geany-plugins/geanycfp/COPYING
    trunk/geany-plugins/geanycfp/ChangeLog
    trunk/geany-plugins/geanycfp/INSTALL
    trunk/geany-plugins/geanycfp/Makefile.am
    trunk/geany-plugins/geanycfp/NEWS
    trunk/geany-plugins/geanycfp/README
    trunk/geany-plugins/geanycfp/src/Makefile.am
    trunk/geany-plugins/geanycfp/src/geanycfp.c
    trunk/geany-plugins/geanycfp/wscript_build
    trunk/geany-plugins/geanycfp/wscript_configure

Deleted: trunk/geany-plugins/build/geanycfp.m4
===================================================================
--- trunk/geany-plugins/build/geanycfp.m4	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/build/geanycfp.m4	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,9 +0,0 @@
-AC_DEFUN([GP_CHECK_GEANYCFP],
-[
-    GP_ARG_DISABLE([geanycfp], [no])
-    GP_STATUS_PLUGIN_ADD([GeanyCFP], [$enable_geanycfp])
-    AC_CONFIG_FILES([
-        geanycfp/Makefile
-        geanycfp/src/Makefile
-    ])
-])

Modified: trunk/geany-plugins/configure.ac
===================================================================
--- trunk/geany-plugins/configure.ac	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/configure.ac	2011-10-19 20:23:31 UTC (rev 2290)
@@ -28,7 +28,6 @@
 GP_CHECK_CODENAV
 GP_CHECK_DEBUGGER
 GP_CHECK_DEVHELP
-GP_CHECK_GEANYCFP
 GP_CHECK_GEANYDOC
 GP_CHECK_GEANYEXTRASEL
 GP_CHECK_GEANYGDB

Deleted: trunk/geany-plugins/geanycfp/ABOUT
===================================================================
--- trunk/geany-plugins/geanycfp/ABOUT	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/ABOUT	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,66 +0,0 @@
-geanycfp is a plugin to provide some features found in a Text Editor for Windows
-in Geany. CFP is short for ConText feature parity.
-It provides the following features:
-
-	*  Up to 10 numbered bookmarks per file to make code navigaing easier
-	*  User recordable macros so that users can record and then with a key press
-	   repeat them
-	*  Remembering fold states in code files (this isn't a feature in ConText, but
-	   I find it useful)
-
-Numbered Bookmarks:
-Normaly if you had more than one bookmark, you would have to cycle through them
-until you reached the one you wanted. With this plugin you can go straight to
-the bookmark that you want with a single key combination.
-
-To set a numbered bookmark press Ctrl+Shift+(a number from 0 to 9). You will
-see a marker apear next to the line number. If you press Ctrl+Shift+(a number)
-on a line that already has that bookmark number then it removes the bookmark,
-otherwise it will move the bookmark there if it was set on a different line, or
-create it if it had not already been set.
-
-Only the bookmark with the highest number on a line will be shown, but you can
-have more than one bookmark per line. This plugin does not interfer with regular
-bookmarks. When a file is saved, Geany will remember the numbered bookmarks and
-make sure that they are set the next time you open the file. If the file has
-been changed since you last edited it in geany, when the file is opened it will
-check to see if it should not try to set the bookmarks (as the line numbers may
-have changed, or even not be there anymore), or ignore the warning and try and
-set them where they were last time the file was saved by geany.
-
-Macros:
-These are sequences of actions that can then be repeated with a single key
-combination. So if you had dozens of lines where you wanted to delete the last
-2 characters, you could simple start recording, press End, Backspace,
-Backspace, down line and then stop recording. Then simply trigger the macro and
-it would automaticaly edit the line and move to the next.
-
-Select Record Macro from the Tools menu and you will be prompted with a dialog
-box. You need to specify a key combination that isn't being used, and a name
-for the macro to help you identify it. Then press Record. What you do in the
-editor is then recorded until you select Stop Recording Macro from the Tools
-menu. Simply pressing the specified key combination will re-run the macro.
-
-To edit the macros you already have select Edit Macro from the Tools menu. You
-can select a macro and delete it, or re-record it. You can also click on a
-macro's name and change it, or the key combination and re-define that asuming
-that the new name or key combination are not already in use.
-
-
-You can alter the default behaviur of this plugin by selecting Plugin Manager
-under the Tools menu, selecting this plugin, and cliking Preferences.
-You can change:
-Remember fold state - if this is set then this plugin will remember the state
-    of any folds along with the numbered bookmarks and set them when the file
-    is next loaded.
-Center view when goto bookmark - If this is set it will try to make sure that
-    the numbered bookmark that you are going to is in the center of the screen,
-    otherwise it will simply be on the screen somewhere.
-Save Macros when close Geany - If this is selected then Geany will save any
-    recorded macros and reload them for use the next time you open Geany, if
-    not they will be lost when Geany is closed.
-Ask before replaceing existing Macros - If this is selected then if you try
-    recording a macro over an existing one it will check before over-writing
-    it, giving you the option of trying a different name or key trigger
-    combination, otherwise it will simply erase any existing macros with the
-    same name, or the same key trigger combination.

Deleted: trunk/geany-plugins/geanycfp/AUTHORS
===================================================================
--- trunk/geany-plugins/geanycfp/AUTHORS	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/AUTHORS	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1 +0,0 @@
-William Fraser  <william(dot)fraser(at)virgin(dot)net>

Deleted: trunk/geany-plugins/geanycfp/COPYING
===================================================================
--- trunk/geany-plugins/geanycfp/COPYING	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/COPYING	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,340 +0,0 @@
-		    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.

Deleted: trunk/geany-plugins/geanycfp/ChangeLog
===================================================================
--- trunk/geany-plugins/geanycfp/ChangeLog	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/ChangeLog	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,3 +0,0 @@
-2011-01-15  William Fraser  <william(dot)fraser(at)virgin(dot)net>
-
- * Added plugin to geany-plugin svn.

Deleted: trunk/geany-plugins/geanycfp/INSTALL
===================================================================
--- trunk/geany-plugins/geanycfp/INSTALL	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/INSTALL	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,23 +0,0 @@
-These installation instructions are written for a Linux system, but
-should work also on other plattforms as Windows is.
-
-Building the plugin requires Geany 0.20 or above (Geany Plugin API v147
-or higher).
-
-You need the build environment installed as described at:
-http://www.geany.org/manual/reference/howto.html
-
-The following two lines when executed from the shell compile the plugin:
-
-gcc -c geanycfp.c -Wformat=0 -fPIC `pkg-config --cflags geany`
-gcc geanycfp.o -o geanycfp.so -shared `pkg-config --libs geany`
-
-The following line moves it into geany's plugin directory
-
-sudo cp geanycfp.so `pkg-config --variable=libdir geany`/geany/
-
-The following lines clean up files used during compilation:
-
-rm geanycfp.o
-rm geanycfp.so
-

Deleted: trunk/geany-plugins/geanycfp/Makefile.am
===================================================================
--- trunk/geany-plugins/geanycfp/Makefile.am	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/Makefile.am	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,8 +0,0 @@
-if ENABLE_GEANYCFP
-include $(top_srcdir)/build/vars.auxfiles.mk
-else
-include $(top_srcdir)/build/vars.docs.mk
-endif
-
-SUBDIRS = src
-plugin = geanycfp

Deleted: trunk/geany-plugins/geanycfp/NEWS
===================================================================
Deleted: trunk/geany-plugins/geanycfp/README
===================================================================
--- trunk/geany-plugins/geanycfp/README	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/README	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,66 +0,0 @@
-geanycfp is a plugin to provide some features found in a Text Editor for Windows
-in Geany. CFP is short for ConText feature parity.
-It provides the following features:
-
-	*  Up to 10 numbered bookmarks per file to make code navigaing easier
-	*  User recordable macros so that users can record and then with a key press
-	   repeat them
-	*  Remembering fold states in code files (this isn't a feature in ConText, but
-	   I find it useful)
-
-Numbered Bookmarks:
-Normaly if you had more than one bookmark, you would have to cycle through them
-until you reached the one you wanted. With this plugin you can go straight to
-the bookmark that you want with a single key combination.
-
-To set a numbered bookmark press Ctrl+Shift+(a number from 0 to 9). You will
-see a marker apear next to the line number. If you press Ctrl+Shift+(a number)
-on a line that already has that bookmark number then it removes the bookmark,
-otherwise it will move the bookmark there if it was set on a different line, or
-create it if it had not already been set.
-
-Only the bookmark with the highest number on a line will be shown, but you can
-have more than one bookmark per line. This plugin does not interfer with regular
-bookmarks. When a file is saved, Geany will remember the numbered bookmarks and
-make sure that they are set the next time you open the file. If the file has
-been changed since you last edited it in geany, when the file is opened it will
-check to see if it should not try to set the bookmarks (as the line numbers may
-have changed, or even not be there anymore), or ignore the warning and try and
-set them where they were last time the file was saved by geany.
-
-Macros:
-These are sequences of actions that can then be repeated with a single key
-combination. So if you had dozens of lines where you wanted to delete the last
-2 characters, you could simple start recording, press End, Backspace,
-Backspace, down line and then stop recording. Then simply trigger the macro and
-it would automaticaly edit the line and move to the next.
-
-Select Record Macro from the Tools menu and you will be prompted with a dialog
-box. You need to specify a key combination that isn't being used, and a name
-for the macro to help you identify it. Then press Record. What you do in the
-editor is then recorded until you select Stop Recording Macro from the Tools
-menu. Simply pressing the specified key combination will re-run the macro.
-
-To edit the macros you already have select Edit Macro from the Tools menu. You
-can select a macro and delete it, or re-record it. You can also click on a
-macro's name and change it, or the key combination and re-define that asuming
-that the new name or key combination are not already in use.
-
-
-You can alter the default behaviur of this plugin by selecting Plugin Manager
-under the Tools menu, selecting this plugin, and cliking Preferences.
-You can change:
-Remember fold state - if this is set then this plugin will remember the state
-    of any folds along with the numbered bookmarks and set them when the file
-    is next loaded.
-Center view when goto bookmark - If this is set it will try to make sure that
-    the numbered bookmark that you are going to is in the center of the screen,
-    otherwise it will simply be on the screen somewhere.
-Save Macros when close Geany - If this is selected then Geany will save any
-    recorded macros and reload them for use the next time you open Geany, if
-    not they will be lost when Geany is closed.
-Ask before replaceing existing Macros - If this is selected then if you try
-    recording a macro over an existing one it will check before over-writing
-    it, giving you the option of trying a different name or key trigger
-    combination, otherwise it will simply erase any existing macros with the
-    same name, or the same key trigger combination.

Deleted: trunk/geany-plugins/geanycfp/src/Makefile.am
===================================================================
--- trunk/geany-plugins/geanycfp/src/Makefile.am	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/src/Makefile.am	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,12 +0,0 @@
-include $(top_srcdir)/build/vars.build.mk
-
-if ENABLE_GEANYCFP
-geanyplugins_LTLIBRARIES = geanycfp.la
-else
-EXTRA_LTLIBRARIES = geanycfp.la
-endif
-
-geanycfp_la_SOURCES = geanycfp.c
-geanycfp_la_LIBADD = $(COMMONLIBS)
-
-include $(top_srcdir)/build/cppcheck.mk

Deleted: trunk/geany-plugins/geanycfp/src/geanycfp.c
===================================================================
--- trunk/geany-plugins/geanycfp/src/geanycfp.c	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/src/geanycfp.c	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,2156 +0,0 @@
-/*
- * This code is supplied as is, and is used at your own risk.
- * The GNU GPL version 2 rules apply to this code (see http://fsf.org/>
- * You can alter it, and pass it on as you want.
- * If you alter it, or pass it on, the only restriction is that this disclamour and licence be
- * left intact
- *
- * Features of Macro implementation adapted from gPHPedit (currently maintained by Anoop John)
- *
- * william.fraser at virgin.net
- * 2010-11-01
-*/
-
-
-#include "geanyplugin.h"
-#include "utils.h"
-#include "Scintilla.h"
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <string.h>
-#include <gdk/gdkkeysyms.h>
-#include <gtk/gtk.h>
-
-static const gint base64_char_to_int[]=
-{
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
-  255,255,255,255,255,255,255,255,255,255,255, 62,255,255,255, 63,
-   52, 53, 54, 55, 56, 57, 58, 59, 60, 61,255,255,255,  0,255,255,
-  255,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
-   15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,255,255,255,255,255,
-  255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
-   41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,255,255,255,255,255
-};
-
-static const gchar base64_int_to_char[]=
-  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-/* offset for marker numbers used - to bypass markers used by normal bookmarksetc */
-#define BOOKMARK_BASE 10
-
-/* define structures used in this plugin */
-typedef struct FileData
-{
-	gchar *pcFileName;    /* holds filename */
-	gint iBookmark[10];   /* holds bookmark lines or -1 for not set */
-	gchar *pcFolding;     /* holds which folds are open and which not */
-	gint LastChangedTime; /* time file was last changed by this editor */
-	struct FileData * NextNode;
-} FileData;
-
-/* structure to hold list of Scintilla objects that have had icons set for bookmarks */
-typedef struct SCIPOINTERHOLDER
-{
-	ScintillaObject* sci;
-	struct SCIPOINTERHOLDER * NextNode;
-} SCIPOINTERHOLDER;
-
-/* structure to hold details of Macro event */
-typedef struct
-{
-	gint message;
-	/* I'm leaving wparam commented out as this may prove useful if it's used by a Scintilla
-	 * message that's recorded in a macro that I'm not aware of yet
-	*/
-	/*	gulong wparam; */
-	glong lparam;
-} MacroEvent;
-
-/* structure to hold details of a macro */
-typedef struct
-{
-	gchar *name;
-	/* trigger codes */
-	guint keyval;
-	guint state;
-	GSList *MacroEvents;
-} Macro;
-
-GeanyPlugin     *geany_plugin;
-GeanyData       *geany_data;
-GeanyFunctions  *geany_functions;
-
-PLUGIN_VERSION_CHECK(147)
-
-PLUGIN_SET_INFO("CTFP",_("ConText Feature parity plugin"),
-                "0.1","William Fraser <william.fraser at virgin.net>");
-
-/* Plugin user alterable settings */
-static gboolean bCenterWhenGotoBookmark=TRUE;
-static gboolean bRememberFolds=TRUE;
-static gboolean bSaveMacros=TRUE;
-static gboolean bQueryOverwriteMacros=TRUE;
-
-/* internal variables */
-static gint iShiftNumbers[]={41,33,34,163,36,37,94,38,42,40};
-static SCIPOINTERHOLDER *sciList=NULL;
-static FileData *fdKnownFilesSettings=NULL;
-static gulong key_release_signal_id;
-static GtkWidget *Record_Macro_menu_item=NULL;
-static GtkWidget *Stop_Record_Macro_menu_item=NULL;
-static GtkWidget *Edit_Macro_menu_item=NULL;
-static Macro *RecordingMacro=NULL;
-static GSList *mList=NULL;
-static gboolean bMacrosHaveChanged=FALSE;
-
-/* default config file */
-const gchar default_config[] =
-	"[Settings]\n"
-	"Center_When_Goto_Bookmark = true\n"
-	"Remember_Folds = true\n"
-	"Save_Macros = true\n"
-	"Question_Macro_Overwrite = true\n"
-	"Number_of_files = 0\n"
-	"[FileData]\n"
-	"[Macros]";
-
-/* Definitions for bookmark images */
-static gchar * aszMarkerImage0[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B****BBBB****B..",
-	"B****BB**BB****B.",
-	"B****B****B****B.",
-	"B****B****B****B.",
-	"B****B*BB*B****B.",
-	"B****B****B****B.",
-	"B****B****B****B.",
-	"B****B****B****B.",
-	"B****BB**BB****B.",
-	".B****BBBB****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage1[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B*****BB*****B..",
-	"B*****BBB******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	".B****BBBBB***B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage2[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B****BBBB****B..",
-	"B****BB**BB****B.",
-	"B*********B****B.",
-	"B*********B****B.",
-	"B********BB****B.",
-	"B*******BB*****B.",
-	"B******BB******B.",
-	"B*****BB*******B.",
-	"B****BB********B.",
-	".B***BBBBBB***B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage3[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B****BBBB****B..",
-	"B****BB**BB****B.",
-	"B*********B****B.",
-	"B********BB****B.",
-	"B*****BBBB*****B.",
-	"B********BB****B.",
-	"B*********B****B.",
-	"B*********B****B.",
-	"B****BB**BB****B.",
-	".B****BBBB****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage4[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B******BB****B..",
-	"B*******BB*****B.",
-	"B******B*B*****B.",
-	"B******B*B*****B.",
-	"B*****B**B*****B.",
-	"B*****B**B*****B.",
-	"B****BBBBBB****B.",
-	"B********B*****B.",
-	"B********B*****B.",
-	".B*******B****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage5[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B***BBBBBB***B..",
-	"B****B*********B.",
-	"B****B*********B.",
-	"B****B*********B.",
-	"B****BBBBB*****B.",
-	"B********BB****B.",
-	"B*********B****B.",
-	"B*********B****B.",
-	"B****BB**BB****B.",
-	".B****BBBB****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage6[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B*****BBBB***B..",
-	"B*****BB*******B.",
-	"B****BB********B.",
-	"B****B*********B.",
-	"B****BBBBB*****B.",
-	"B****BB**BB****B.",
-	"B****B****B****B.",
-	"B****B****B****B.",
-	"B****BB**BB****B.",
-	".B****BBBB****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage7[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B***BBBBBB***B..",
-	"B*********B****B.",
-	"B********B*****B.",
-	"B*******B******B.",
-	"B*******B******B.",
-	"B******B*******B.",
-	"B*****B********B.",
-	"B*****B********B.",
-	"B****B*********B.",
-	".B***B********B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage8[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B****BBBB****B..",
-	"B****BB**BB****B.",
-	"B****B****B****B.",
-	"B****BB**BB****B.",
-	"B*****BBBB*****B.",
-	"B****BB**BB****B.",
-	"B****B****B****B.",
-	"B****B****B****B.",
-	"B****BB**BB****B.",
-	".B****BBBB****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-static gchar * aszMarkerImage9[] =
-{
-	"17 14 3 1", /* width height colours characters-per-pixel */
-	". c None",
-	"B c #000000",
-	"* c #FFFF00",
-	"...BBBBBBBBBB....",
-	"..B**********B...",
-	".B****BBBB****B..",
-	"B****BB**BB****B.",
-	"B****B****B****B.",
-	"B****BB**BB****B.",
-	"B*****BBBBB****B.",
-	"B*********B****B.",
-	"B*********B****B.",
-	"B********BB****B.",
-	"B*******BB*****B.",
-	".B***BBBB*****B..",
-	"..B**********B...",
-	"...BBBBBBBBBB...."
-};
-
-static gchar ** aszMarkerImages[]=
-{
-	aszMarkerImage0,aszMarkerImage1,aszMarkerImage2,aszMarkerImage3,aszMarkerImage4,
-	aszMarkerImage5,aszMarkerImage6,aszMarkerImage7,aszMarkerImage8,aszMarkerImage9
-};
-
-/* clear macro events list and free up any memory they are using */
-static GSList * ClearMacroList(GSList *gsl)
-{
-	MacroEvent *me;
-	GSList * gslTemp=gsl;
-
-	while(gslTemp!=NULL)
-	{
-		me=gslTemp->data;
-		/* check to see if it's a message that has string attached, and free it if so */
-		if(me->message==SCI_REPLACESEL)
-			g_free((void*)(me->lparam));
-
-		g_free((void*)(gslTemp->data));
-		gslTemp=g_slist_next(gslTemp);
-	}
-
-     g_slist_free(gsl);
-
-    return NULL;
-}
-
-
-/* create new Macro */
-static Macro * CreateMacro(void)
-{
-	Macro *m;
-
-	if((m=(Macro*)(g_malloc(sizeof *m)))!=NULL)
-	{
-		m->name=NULL;
-		m->MacroEvents=NULL;
-		return m;
-	}
-	return NULL;
-}
-
-
-/* delete macro */
-static Macro * FreeMacro(Macro *m)
-{
-	if(m==NULL)
-		return NULL;
-
-	g_free(m->name);
-	ClearMacroList(m->MacroEvents);
-	g_free(m);
-
-	return NULL;
-}
-
-
-/* add a macro to the list of defined macros */
-static void AddMacroToList(Macro *m)
-{
-	mList=g_slist_append(mList,m);
-}
-
-
-/* remove macro from list of defined macros */
-static void RemoveMacroFromList(Macro *m)
-{
-	mList=g_slist_remove(mList,m);
-}
-
-
-/* returns a macro in the defined list by name, or NULL if no macro exists with the specified name
-*/
-static Macro * FindMacroByName(gchar *name)
-{
-	GSList *gsl=mList;
-
-	if(name==NULL)
-		return NULL;
-
-	while(gsl!=NULL)
-	{
-		if(strcmp(name,((Macro*)(gsl->data))->name)==0)
-			return gsl->data;
-
-		gsl=g_slist_next(gsl);
-	}
-
-	return NULL;
-}
-
-
-/* returns a macro in the defined list by key press combination, or NULL if no macro exists
- * with the specified key combination */
-static Macro * FindMacroByKey(guint keyval,guint state)
-{
-	GSList *gsl=mList;
-
-	while(gsl!=NULL)
-	{
-		if(((Macro*)(gsl->data))->keyval==keyval && ((Macro*)(gsl->data))->state==state)
-			return gsl->data;
-
-		gsl=g_slist_next(gsl);
-	}
-
-	return NULL;
-}
-
-
-/* completely wipe all saved macros and ascosiated memory */
-static void ClearAllMacros(void)
-{
-	GSList *gsl=mList;
-
-	while(gsl!=NULL)
-	{
-		FreeMacro((Macro*)(gsl->data));
-		gsl=g_slist_next(gsl);
-	}
-	g_slist_free(mList);
-	mList=NULL;
-}
-
-
-/* Repeat a macro to the editor */
-static void ReplayMacro(Macro *m)
-{
-	MacroEvent *me;
-	GSList *gsl=m->MacroEvents;
-	ScintillaObject* sci=document_get_current()->editor->sci;
-
-	scintilla_send_message(sci,SCI_BEGINUNDOACTION,0,0);
-
-	while(gsl!=NULL)
-	{
-		me=gsl->data;
-/* may be needed if come across any scintilla messages that use wparam */
-/*        scintilla_send_message(sci,me->message,me->wparam,me->lparam); */
-		scintilla_send_message(sci,me->message,0,me->lparam);
-		gsl=g_slist_next(gsl);
-	}
-
-	scintilla_send_message(sci,SCI_ENDUNDOACTION,0,0);
-}
-
-
-/* convert string so that it can be saved as text in a comma separated text entry in an ini file
- * resultant string needs to be freed after use
-*/
-static gchar * MakeStringSaveable(gchar *s)
-{
-	gchar *cTemp;
-	gchar **pszBits;
-
-	/* use GLib routine to do most of the work
-	 * (sort out all special characters, and non-ASCII characters)
-	*/
-	cTemp=g_strescape(s,"");
-	/* now make sure that all instances of ',' are replaced by octal version so that can use ',' as
-	 * a separator
-	 * first break the string up at the commas
-	*/
-	pszBits=g_strsplit(cTemp,",",0);
-	/* can now free up cTemp */
-	g_free(cTemp);
-	/* now combine bits together with octal verion of comma in-between */
-	cTemp=g_strjoinv("\\054",pszBits);
-	/* free up memory used by bits */
-	g_strfreev(pszBits);
-
-	return cTemp;
-}
-
-
-/* create a macro event from an array of stings. This command may move past more than one array
- * entry if the macro event details require it
-*/
-static MacroEvent * GetMacroEventFromString(gchar **s,gint *k)
-{
-	MacroEvent *me;
-
-	me=g_new0(MacroEvent,1);
-	/* get event number */
-	me->message=strtoll(s[(*k)++],NULL,10);
-
-	/* now handle lparam if required */
-	switch(me->message)
-	{
-		case SCI_REPLACESEL:
-			/* get text */
-			me->lparam=(glong)(g_strcompress(s[(*k)++]));
-			break;
-		/* default handler for messages without extra data */
-		default:
-			me->lparam=0;
-			break;
-	}
-
-	/* return MacroEvent object */
-	return me;
-}
-
-
-/* convert a Macro event to a string that can be savable in a comma separated ini file entry
- * resultant string needs to be freed afterwards
-*/
-static gchar *MacroEventToString(MacroEvent *me)
-{
-	gchar *szMacroNumber;
-	gchar *szNumberAndData;
-	gchar *pTemp;
-
-	/* save off macro code */
-	szMacroNumber=g_strdup_printf("%i",me->message);
-
-	/* now handle lparam if required */
-	switch(me->message)
-	{
-		case SCI_REPLACESEL:
-			/* first get string reprisentation of data */
-			pTemp=MakeStringSaveable((gchar*)(me->lparam));
-			/* now merge code and data */
-			szNumberAndData=g_strdup_printf("%s,%s",szMacroNumber,pTemp);
-			/* free memory */
-			g_free(szMacroNumber);
-			g_free(pTemp);
-			return szNumberAndData;
-		/* default handler for messages without extra data */
-		default:
-			return szMacroNumber;
-	}
-}
-
-
-/* check editor notifications and remember editor events */
-static gboolean Notification_Handler(GObject *obj, GeanyEditor *editor, SCNotification *nt,
-                                     gpointer user_data)
-{
-  MacroEvent *me;
-
-	/* ignore non macro recording messages */
-	if(nt->nmhdr.code!=SCN_MACRORECORD)
-		return FALSE;
-
-	/* probably overkill as should not recieve SCN_MACRORECORD messages unless recording macros */
-	if(RecordingMacro==NULL)
-		return FALSE;
-
-	/* check to see if it's a code we're happy to deal with */
-	switch(nt->message)
-	{
-		case SCI_REPLACESEL:
-		case SCI_CUT:
-		case SCI_COPY:
-		case SCI_PASTE:
-		case SCI_CLEAR:
-		case SCI_LINEDOWN:
-		case SCI_LINEDOWNEXTEND:
-		case SCI_LINEUP:
-		case SCI_LINEUPEXTEND:
-		case SCI_CHARLEFT:
-		case SCI_CHARLEFTEXTEND:
-		case SCI_CHARRIGHT:
-		case SCI_CHARRIGHTEXTEND:
-		case SCI_WORDLEFT:
-		case SCI_WORDLEFTEXTEND:
-		case SCI_WORDRIGHT:
-		case SCI_WORDRIGHTEXTEND:
-		case SCI_HOME:
-		case SCI_HOMEEXTEND:
-		case SCI_LINEEND:
-		case SCI_LINEENDEXTEND:
-		case SCI_DOCUMENTSTART:
-		case SCI_DOCUMENTSTARTEXTEND:
-		case SCI_DOCUMENTEND:
-		case SCI_DOCUMENTENDEXTEND:
-		case SCI_PAGEUP:
-		case SCI_PAGEUPEXTEND:
-		case SCI_PAGEDOWN:
-		case SCI_PAGEDOWNEXTEND:
-		case SCI_EDITTOGGLEOVERTYPE:
-		case SCI_CANCEL:
-		case SCI_DELETEBACK:
-		case SCI_TAB:
-		case SCI_BACKTAB:
-		case SCI_NEWLINE:
-		case SCI_FORMFEED:
-		case SCI_VCHOME:
-		case SCI_VCHOMEEXTEND:
-		case SCI_ZOOMIN:
-		case SCI_ZOOMOUT:
-		case SCI_DELWORDLEFT:
-		case SCI_DELWORDRIGHT:
-		case SCI_LINECUT:
-		case SCI_LINEDELETE:
-		case SCI_LINETRANSPOSE:
-		case SCI_LOWERCASE:
-		case SCI_UPPERCASE:
-		case SCI_LINESCROLLDOWN:
-		case SCI_LINESCROLLUP:
-		case SCI_DELETEBACKNOTLINE:
-		case SCI_HOMEDISPLAY:
-		case SCI_HOMEDISPLAYEXTEND:
-		case SCI_LINEENDDISPLAY:
-		case SCI_LINEENDDISPLAYEXTEND:
-			break;
-		default:
-			dialogs_show_msgbox(GTK_MESSAGE_INFO,_("Unrecognised message\n%i %i %i"),nt->message,
-			                    (gint)(nt->wParam),(gint)(nt->lParam));
-			return FALSE;
-	}
-	me=g_new0(MacroEvent,1);
-	me->message=nt->message;
-/*    me->wparam=nt->wParam; */
-	/* Special handling for text inserting, duplicate inserted string */
-	me->lparam=(me->message==SCI_REPLACESEL)?((glong) g_strdup((gchar *)(nt->lParam))) : nt->lParam;
-
-	/* more efficient to create reverse list and reverse it at the end */
-	RecordingMacro->MacroEvents=g_slist_prepend(RecordingMacro->MacroEvents,me);
-
-	return FALSE;
-}
-
-
-/* convert GTK <Alt><Control><Shift>lowercase char to standard Alt+Ctrl+Shift+uppercase char
- * format resultant string needs to be freed
-*/
-static gchar *GetPretyKeyName(guint keyval,guint state)
-{
-	gboolean bAlt,bCtrl,bShift;
-	gchar *cTemp;
-	gchar *cName;
-	gchar *cPretyName;
-
-	/* get basic keypress description */
-	cName=gtk_accelerator_name(keyval,state);
-
-	/* cName now holds the name but in the <Control><Shift>h format.
-	* Pretify to Ctrl+Shift+H like in menus
-	*/
-	bAlt=((gchar*)g_strrstr(cName,"<Alt>")!=NULL);
-	bCtrl=((gchar*)g_strrstr(cName,"<Control>")!=NULL);
-	bShift=((gchar*)g_strrstr(cName,"<Shift>")!=NULL);
-
-	/* find out where the modifyer key description ends. */
-	cTemp=g_strrstr(cName,">");
-	/* if there are no modifyers then point to start of string */
-	if(cTemp==NULL)
-		cTemp=cName;
-	else
-		cTemp++;
-
-	/* put string back together but pretier */
-	cPretyName=g_strdup_printf("%s%s%s%c%s",(bShift?"Shift+":""),(bCtrl?"Ctrl+":""),
-							(bAlt?"Alt+":""),g_ascii_toupper(cTemp[0]),
-							&(g_ascii_strdown(cTemp,-1)[1]));
-
-	/* tidy up */
-	g_free(cName);
-
-	/* return pretified name */
-	return cPretyName;
-}
-
-
-/* return a FileData structure for a file
- * if not come across this file before then create one, otherwise return existing structure with
- * data in it
- * returns NULL on error
-*/
-static FileData * GetFileData(gchar *pcFileName)
-{
-	FileData *fdTemp=fdKnownFilesSettings;
-	gint i;
-
-	/* First handle if main pointer doesn't point to anything */
-	if(fdTemp==NULL)
-	{
-		if((fdKnownFilesSettings=(FileData*)(g_malloc(sizeof *fdTemp)))!=NULL)
-		{
-			fdKnownFilesSettings->pcFileName=g_strdup(pcFileName);
-			for(i=0;i<10;i++)
-				fdKnownFilesSettings->iBookmark[i]=-1;
-
-			fdKnownFilesSettings->pcFolding=NULL;
-			fdKnownFilesSettings->LastChangedTime=-1;
-			fdKnownFilesSettings->NextNode=NULL;
-		}
-		return fdKnownFilesSettings;
-	}
-
-	/* move through chain to the correct entry or the end of a chain */
-	while(TRUE)
-	{
-		/* if have found relavent FileData, then exit */
-		if(utils_str_equal(pcFileName,fdTemp->pcFileName)==TRUE)
-			return fdTemp;
-
-		/* if end of chain, then add new entry, and return it. */
-		if(fdTemp->NextNode==NULL)
-		{
-			if((fdTemp->NextNode=(FileData*)(g_malloc(sizeof *fdTemp)))!=NULL)
-			{
-				fdTemp->NextNode->pcFileName=g_strdup(pcFileName);
-				for(i=0;i<10;i++)
-					fdTemp->NextNode->iBookmark[i]=-1;
-
-				fdTemp->NextNode->pcFolding=NULL;
-				fdTemp->NextNode->LastChangedTime=-1;
-				fdTemp->NextNode->NextNode=NULL;
-			}
-			return fdTemp->NextNode;
-
-		}
-		fdTemp=fdTemp->NextNode;
-
-	}
-}
-
-
-/* save settings (preferences, file data such as fold states, marker positions, and macro data) */
-static void SaveSettings(void)
-{
-	GKeyFile *config = NULL;
-	gchar *config_file = NULL;
-	gchar *data;
-	gint iFiles=0;
-	FileData* fdTemp=fdKnownFilesSettings;
-	gchar *cKey;
-	gchar szMarkers[1000];
-	gchar *pszMarkers;
-	gchar *pcTemp;
-	gint i,k;
-	GSList *gsl=mList;
-	GSList *gslTemp;
-	gchar **pszMacroStrings;
-	Macro *m;
-
-	/* create new config from default settings */
-	config=g_key_file_new();
-
-	/* now set settings */
-	g_key_file_set_boolean(config,"Settings","Center_When_Goto_Bookmark",bCenterWhenGotoBookmark);
-	g_key_file_set_boolean(config,"Settings","Remember_Folds",bRememberFolds);
-	g_key_file_set_boolean(config,"Settings","Save_Macros",bSaveMacros);
-	g_key_file_set_boolean(config,"Settings","Question_Macro_Overwrite",bQueryOverwriteMacros);
-
-	/* now save file data */
-	while(fdTemp!=NULL)
-	{
-		cKey=g_strdup_printf("A%d",iFiles);
-		/* save filename */
-		g_key_file_set_string(config,"FileData",cKey,fdTemp->pcFileName);
-		/* save folding data */
-		cKey[0]='B';
-		if(NZV(fdTemp->pcFolding))
-			g_key_file_set_string(config,"FileData",cKey,fdTemp->pcFolding);
-
-		/* save last saved time */
-		cKey[0]='C';
-		g_key_file_set_integer(config,"FileData",cKey,fdTemp->LastChangedTime);
-		/* save bookmarks */
-		cKey[0]='D';
-		pszMarkers=szMarkers;
-		pszMarkers[0]=0;
-		for(i=0;i<10;i++)
-		{
-			if(fdTemp->iBookmark[i]!=-1)
-			{
-				sprintf(pszMarkers,"%d",fdTemp->iBookmark[i]);
-				while(pszMarkers[0]!=0)
-					pszMarkers++;
-			}
-
-			pszMarkers[0]=',';
-			pszMarkers[1]=0;
-			pszMarkers++;
-		}
-		/* don't need a ',' after last position (have '\0' instead) */
-		pszMarkers--;
-		pszMarkers[0]=0;
-		g_key_file_set_string(config,"FileData",cKey,szMarkers);
-
-		g_free(cKey);
-
-		/* point to next FileData entry or NULL if end of chain */
-		iFiles++;
-		fdTemp=fdTemp->NextNode;
-	}
-	/* Record the number of file entries     */
-	g_key_file_set_integer(config,"Settings","Number_of_files",iFiles);
-
-	/* now save macros */
-	if(bSaveMacros==TRUE)
-	{
-		i=0;
-
-		/* iterate through macros and save them */
-		while(gsl!=NULL)
-		{
-			m=(Macro*)(gsl->data);
-			cKey=g_strdup_printf("A%d",i);
-
-			/* save macro name */
-			pcTemp=MakeStringSaveable(m->name);
-			g_key_file_set_string(config,"Macros",cKey,pcTemp);
-			g_free(pcTemp);
-			/* save trigger data */
-			cKey[0]='B';
-			g_key_file_set_integer(config,"Macros",cKey,m->keyval);
-			cKey[0]='C';
-			g_key_file_set_integer(config,"Macros",cKey,m->state);
-			/* convert macros to saveable format
-			* first generate list of all macrodetails
-			*/
-			pszMacroStrings=(gchar **)
-							(g_malloc(sizeof(gchar *)*(g_slist_length(m->MacroEvents)+1)));
-			gslTemp=m->MacroEvents;
-			k=0;
-			while(gslTemp!=NULL)
-			{
-				pszMacroStrings[k++]=MacroEventToString((MacroEvent*)(gslTemp->data));
-				gslTemp=g_slist_next(gslTemp);
-			}
-
-			/* null terminate array for g_strfreev to work */
-			pszMacroStrings[k]=NULL;
-			/* now transfer to single string */
-			pcTemp=g_strjoinv(",",pszMacroStrings);
-			/* save data */
-			cKey[0]='D';
-			g_key_file_set_string(config,"Macros",cKey,pcTemp);
-			/* free up memory */
-			g_free(pcTemp);
-			g_strfreev(pszMacroStrings);
-			g_free(cKey);
-
-			/* move to next macro */
-			i++;
-			gsl=g_slist_next(gsl);
-		}
-	}
-
-	/* turn config into data */
-	data=g_key_file_to_data(config,NULL,NULL);
-
-	/* calculate setting directory name */
-	config_file=g_build_filename(geany->app->configdir,"plugins","ConText_Feature_Parity",NULL);
-	/* ensure directory exists */
-	g_mkdir_with_parents(config_file,0755);
-
-	/* make config_file hold name of settings file */
-	setptr(config_file,g_build_filename(config_file,"settings.conf",NULL));
-
-	/* write data */
-	utils_write_file(config_file, data);
-
-	/* free memory */
-	g_free(config_file);
-	g_key_file_free(config);
-	g_free(data);
-
-	/* Macros have now been saved */
-	bMacrosHaveChanged=FALSE;
-}
-
-
-/* load settings (preferences, file data, and macro data) */
-static void LoadSettings(void)
-{
-	gchar *pcTemp;
-	gchar *pcKey;
-	gint i,k,l;
-	gchar *config_file=NULL;
-	GKeyFile *config=NULL;
-	FileData *fdTemp;
-	Macro *m;
-	gchar **pcMacroCommands;
-
-	/* Make config_file hold directory name of settings file */
-	config_file=g_build_filename(geany->app->configdir,"plugins","ConText_Feature_Parity",NULL);
-	/* ensure directory exists */
-	g_mkdir_with_parents(config_file,0755);
-
-	/* make config_file hold name of settings file */
-	setptr(config_file,g_build_filename(config_file,"settings.conf",NULL));
-
-	/* either load settings file, or create one from default */
-	config=g_key_file_new();
-	if(!g_key_file_load_from_file(config,config_file, G_KEY_FILE_KEEP_COMMENTS,NULL))
-		g_key_file_load_from_data(config,default_config,sizeof(default_config),
-								G_KEY_FILE_KEEP_COMMENTS,NULL);
-
-	/* extract settings */
-	bCenterWhenGotoBookmark=utils_get_setting_boolean(config,"Settings",
-													"Center_When_Goto_Bookmark",FALSE);
-	bRememberFolds=utils_get_setting_boolean(config,"Settings","Remember_Folds",FALSE);
-	bQueryOverwriteMacros=utils_get_setting_boolean(config,"Settings",
-													"Question_Macro_Overwrite",FALSE);
-	bSaveMacros=utils_get_setting_boolean(config,"Settings","Save_Macros",FALSE);
-
-	/* extract data about files */
-	k=utils_get_setting_integer(config,"Settings","Number_of_files",0);
-	if(k!=0) for(i=0;i<k;i++)
-	{
-		pcKey=g_strdup_printf("A%d",i);
-		/* get filename */
-		pcTemp=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		if(pcTemp==NULL)
-		{
-			g_free(pcKey);
-			continue;
-		}
-
-		fdTemp=GetFileData(pcTemp);
-		/* get folding data */
-		pcKey[0]='B';
-		fdTemp->pcFolding=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		/* load last saved time */
-		pcKey[0]='C';
-		fdTemp->LastChangedTime=utils_get_setting_integer(config,"FileData",pcKey,-1);
-		/* get bookmarks */
-		pcKey[0]='D';
-		pcTemp=(gchar*)(utils_get_setting_string(config,"FileData",pcKey,NULL));
-		g_free(pcKey);
-		/* pcTemp contains comma seperated numbers (or blank for -1) */
-		pcKey=pcTemp;
-		if(pcTemp!=NULL) for(l=0;l<10;l++)
-		{
-			/* Bookmark entries are initialized to -1, so only need to parse non-empty slots */
-			if(pcKey[0]!=',' && pcKey[0]!=0)
-			{
-				fdTemp->iBookmark[l]=strtoll(pcKey,NULL,10);
-				while(pcKey[0]!=0 && pcKey[0]!=',')
-					pcKey++;
-			}
-
-			pcKey++;
-		}
-		g_free(pcTemp);
-	}
-
-	/* extract macros */
-	i=0;
-	while(TRUE)
-	{
-		pcKey=g_strdup_printf("A%d",i);
-		i++;
-		/* get macro name */
-		pcTemp=(gchar*)(utils_get_setting_string(config,"Macros",pcKey,NULL));
-		/* if null then have reached end of macros */
-		if(pcTemp==NULL)
-		{
-			g_free(pcKey);
-			break;
-		}
-
-		m=CreateMacro();
-		m->name=pcTemp;
-		/* load triggers */
-		pcKey[0]='B';
-		m->keyval=utils_get_setting_integer(config,"Macros",pcKey,0);
-		pcKey[0]='C';
-		m->state=utils_get_setting_integer(config,"Macros",pcKey,0);
-		/* Load macro list */
-		pcKey[0]='D';
-		pcTemp=(gchar*)(utils_get_setting_string(config,"Macros",pcKey,NULL));
-		g_free(pcKey);
-		/* break into individual macro data */
-		pcMacroCommands=g_strsplit(pcTemp,",",0);
-		/* can now free up pcTemp */
-		g_free(pcTemp);
-		/* now go through macro data generating macros */
-		for(k=0,m->MacroEvents=NULL;pcMacroCommands[k]!=NULL;)
-			m->MacroEvents=g_slist_prepend(m->MacroEvents,GetMacroEventFromString(pcMacroCommands,
-																				&k));
-		/* list created in reverse as more efficient, now turn it around */
-		m->MacroEvents=g_slist_reverse(m->MacroEvents);
-		/* macro now complete, add it to the list */
-		AddMacroToList(m);
-		/* free up memory used by pcMacroCommands */
-		g_strfreev(pcMacroCommands);
-	}
-
-	/* free memory */
-	g_free(config_file);
-	g_key_file_free(config);
-}
-
-
-/* Define Markers for an editor */
-static void DefineMarkers(ScintillaObject* sci)
-{
-	gint i;
-	for(i=0;i<10;i++)
-		scintilla_send_message(sci,SCI_MARKERDEFINEPIXMAP,i+BOOKMARK_BASE,
-							(glong)(aszMarkerImages[i]));
-}
-
-
-/* Make sure that have setup markers if not come across this particular editor
- * Keep track of editors we've encountered and set markers for
-*/
-static void CheckEditorSetup(void)
-{
-	SCIPOINTERHOLDER *sciTemp;
-	ScintillaObject* sci=document_get_current()->editor->sci;
-
-	/* no recorded editors so make note of editor */
-	if(sciList==NULL)
-	{
-		if((sciList=(SCIPOINTERHOLDER *)(g_malloc(sizeof *sciTemp)))!=NULL)
-		{
-			sciList->sci=sci;
-			sciList->NextNode=NULL;
-			DefineMarkers(sci);
-		}
-
-		return;
-	}
-
-	sciTemp=sciList;
-	while(sciTemp->NextNode!=NULL)
-	{
-		/* if have come across this editor before, then it will have had it's markers set and we
-		 * don't need to do any more
-		*/
-		if(sciTemp->sci==sci)
-			return;
-
-		sciTemp=sciTemp->NextNode;
-	}
-	/* if have come across this editor before, then it will have had it's markers set and we don't
-	 * need to do any more
-	*/
-	if(sciTemp->sci==sci)
-		return;
-
-	/* not come across this editor */
-	if((sciTemp->NextNode=g_malloc(sizeof *sciTemp->NextNode))!=NULL)
-	{
-		sciTemp->NextNode->sci=sci;
-		sciTemp->NextNode->NextNode=NULL;
-		DefineMarkers(sci);
-	}
-}
-
-
-/* handler for when a document has been opened
- * this checks to see if a document has been altered since it was last saved in geany (as plugin
- * data may then be out of date for file)
- * It then applies file settings
-*/
-static void on_document_open(GObject *obj, GeanyDocument *doc, gpointer user_data)
-{
-	FileData *fd;
-	gint i,l=GTK_RESPONSE_ACCEPT,iLineCount;
-	ScintillaObject* sci=doc->editor->sci;
-	struct stat sBuf;
-	GtkWidget *dialog;
-	gchar *cFoldData=NULL;
-	gint iBits,iFlags,iBitCounter;
-
-	/* ensure have markers set */
-	CheckEditorSetup();
-	DefineMarkers(sci);
-
-	/* check to see if file has changed since geany last saved it */
-	fd=GetFileData(doc->file_name);
-	if(stat(doc->file_name,&sBuf)==0 && fd!=NULL && fd->LastChangedTime!=-1 &&
-    fd->LastChangedTime!=sBuf.st_mtime)
-	{
-		/* notify user that file has been changed */
-		dialog=gtk_message_dialog_new(GTK_WINDOW(geany->main_widgets->window),
-									GTK_DIALOG_DESTROY_WITH_PARENT,
-									GTK_MESSAGE_ERROR,
-									GTK_BUTTONS_NONE,
-									_("'%s' has been edited since it was last saved by geany. Marker positions may \
-be unreliable and will not be loaded.\nPress Ignore to try an load markers anyway."),
-									doc->file_name);
-		gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Okay"),GTK_RESPONSE_OK);
-		gtk_dialog_add_button(GTK_DIALOG(dialog),_("_Ignore"),GTK_RESPONSE_REJECT);
-		l=gtk_dialog_run(GTK_DIALOG(dialog));
-		gtk_widget_destroy(dialog);
-	}
-
-	switch(l)
-	{
-		/* file not changed since Geany last saved it so saved settings should be fine */
-		case GTK_RESPONSE_ACCEPT:
-			/* now set markers */
-			for(i=0;i<10;i++)
-				if(fd->iBookmark[i]!=-1)
-					scintilla_send_message(sci,SCI_MARKERADD,fd->iBookmark[i],i+BOOKMARK_BASE);
-
-			/* get fold settings if present and want to use them */
-			if(fd->pcFolding==NULL || bRememberFolds==FALSE)
-				break;
-
-      cFoldData=fd->pcFolding;
-
-		  /* first ensure fold positions exist */
-			scintilla_send_message(sci,SCI_COLOURISE,0,-1);
-
-			iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
-
-			/* go through lines setting fold status */
-			for(i=0,iBitCounter=6;i<iLineCount;i++)
-			{
-				iFlags=scintilla_send_message(sci,SCI_GETFOLDLEVEL,i,0);
-				/* ignore non-folding lines */
-				if((iFlags & SC_FOLDLEVELHEADERFLAG)==0)
-          continue;
-
-        /* get next 6 fold states if needed */
-				if(iBitCounter==6)
-				{
-				  iBitCounter=0;
-          iBits=base64_char_to_int[(gint)(*cFoldData)];
-          cFoldData++;
-				}
-
-				/* set fold if needed */
-				if(((iBits>>iBitCounter)&1)==0)
-					scintilla_send_message(sci,SCI_TOGGLEFOLD,i,0);
-
-				/* increment counter */
-				iBitCounter++;
-			}
-
-			break;
-		/* file has changed since Geany last saved but, try to load bookmarks anyway */
-		case GTK_RESPONSE_REJECT:
-			iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
-			for(i=0;i<10;i++)
-				if(fd->iBookmark[i]!=-1 && fd->iBookmark[i]<iLineCount)
-					scintilla_send_message(sci,SCI_MARKERADD,fd->iBookmark[i],i);
-
-			break;
-		default: /* default - don't try to set markers */
-			break;
-	}
-}
-
-
-/* handler for when a document has been saved
- * This saves off fold state, and marker positions for the file
-*/
-static void on_document_save(GObject *obj, GeanyDocument *doc, gpointer user_data)
-{
-	FileData *fdTemp;
-	gint i,iLineCount,iFlags,iBitCounter=0;
-	ScintillaObject* sci=doc->editor->sci;
-	struct stat sBuf;
-	GByteArray *gbaFoldData=g_byte_array_sized_new(1000);
-	guint8 guiFold=0;
-
-	/* update markerpos */
-	fdTemp=GetFileData(doc->file_name);
-	for(i=0;i<10;i++)
-		fdTemp->iBookmark[i]=scintilla_send_message(sci,SCI_MARKERNEXT,0,1<<(i+BOOKMARK_BASE));
-
-	/* update fold state */
-	iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
-	/* go through each line */
-	for(i=0;i<iLineCount;i++)
-	{
-		iFlags=scintilla_send_message(sci,SCI_GETFOLDLEVEL,i,0);
-		/* ignore line if not a folding point */
-		if((iFlags & SC_FOLDLEVELHEADERFLAG)==0)
-			continue;
-
-		iFlags=scintilla_send_message(sci,SCI_GETFOLDEXPANDED,i,0);
-		/* remember if folded or not */
-		guiFold|=(iFlags&1)<<iBitCounter;
-		iBitCounter++;
-		if(iBitCounter<6)
-			continue;
-
-		/* if have 6 bits then store these */
-		iBitCounter=0;
-		guiFold=(guint8)base64_int_to_char[guiFold];
-		g_byte_array_append(gbaFoldData,&guiFold,1);
-		guiFold=0;
-	}
-
-	/* flush buffer */
-	if(iBitCounter!=0)
-	{
-		guiFold=(guint8)base64_int_to_char[guiFold];
-    g_byte_array_append(gbaFoldData,&guiFold,1);
-  }
-
-	/* transfer data to text string */
-	fdTemp->pcFolding=g_strndup((gchar*)(gbaFoldData->data),gbaFoldData->len);
-
-	/* free byte array space */
-	g_byte_array_free(gbaFoldData,TRUE);
-
-	/* make note of time last saved */
-	if(stat(doc->file_name,&sBuf)==0)
-		fdTemp->LastChangedTime=sBuf.st_mtime;
-
-	/* save settings */
-	SaveSettings();
-}
-
-
-PluginCallback plugin_callbacks[] =
-{
-	{ "document-open", (GCallback) &on_document_open, FALSE, NULL },
-	{ "document-save", (GCallback) &on_document_save, FALSE, NULL },
-	{ "editor-notify", (GCallback) &Notification_Handler, FALSE, NULL },
-	{ NULL, NULL, FALSE, NULL }
-};
-
-/* returns current line number */
-static gint GetLine(ScintillaObject* sci)
-{
-	return scintilla_send_message(sci,SCI_LINEFROMPOSITION,
-								scintilla_send_message(sci,SCI_GETCURRENTPOS,10,0),0);
-}
-
-
-/* handle button presses in the preferences dialog box */
-static void on_configure_response(GtkDialog *dialog, gint response, gpointer user_data)
-{
-	gboolean bSettingsHaveChanged;
-	GtkCheckButton *cb1,*cb2,*cb3,*cb4;
-
-	if(response!=GTK_RESPONSE_OK && response!=GTK_RESPONSE_APPLY)
-		return;
-
-	/* retreive pointers to check boxes */
-	cb1=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"CFLP_cb1"));
-	cb2=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"CFLP_cb2"));
-	cb3=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"CFLP_cb3"));
-	cb4=(GtkCheckButton*)(g_object_get_data(G_OBJECT(dialog),"CFLP_cb4"));
-
-	/* first see if settings are going to change */
-	bSettingsHaveChanged=(bRememberFolds!=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1)));
-	bSettingsHaveChanged|=(bCenterWhenGotoBookmark!=gtk_toggle_button_get_active(
-														GTK_TOGGLE_BUTTON(cb2)));
-	bSaveMacros|=(bCenterWhenGotoBookmark!=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb3)));
-	bQueryOverwriteMacros|=(bCenterWhenGotoBookmark!=gtk_toggle_button_get_active(
-														GTK_TOGGLE_BUTTON(cb4)));
-
-	/* set new settings settings */
-	bRememberFolds=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb1));
-	bCenterWhenGotoBookmark=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb2));
-	bSaveMacros=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb3));
-	bQueryOverwriteMacros=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb4));
-
-	/* now save new settings if they have changed */
-	if(bSettingsHaveChanged)
-		SaveSettings();
-}
-
-
-/* return a widget containing settings for plugin that can be changed */
-GtkWidget *plugin_configure(GtkDialog *dialog)
-{
-	GtkWidget *vbox;
-	GtkWidget *cb1,*cb2,*cb3,*cb4;
-
-	vbox=gtk_vbox_new(FALSE, 6);
-
-	cb1=gtk_check_button_new_with_label(_("remember fold state"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb1),bRememberFolds);
-	gtk_box_pack_start(GTK_BOX(vbox),cb1,FALSE,FALSE,2);
-	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"CFLP_cb1",cb1);
-
-	cb2=gtk_check_button_new_with_label(_("Center view when goto bookmark"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb2),bCenterWhenGotoBookmark);
-	gtk_box_pack_start(GTK_BOX(vbox),cb2,FALSE,FALSE,2);
-	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"CFLP_cb2",cb2);
-
-	cb3=gtk_check_button_new_with_label(_("Save Macros when close Geany"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb3),bSaveMacros);
-	gtk_box_pack_start(GTK_BOX(vbox),cb3,FALSE,FALSE,2);
-	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"CFLP_cb3",cb3);
-
-	cb4=gtk_check_button_new_with_label(_("Ask before replaceing existing Macros"));
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(cb4),bQueryOverwriteMacros);
-	gtk_box_pack_start(GTK_BOX(vbox),cb4,FALSE,FALSE,2);
-	/* save pointer to check_button */
-	g_object_set_data(G_OBJECT(dialog),"CFLP_cb4",cb4);
-
-	gtk_widget_show_all(vbox);
-
-	g_signal_connect(dialog,"response",G_CALLBACK(on_configure_response),NULL);
-
-	return vbox;
-}
-
-
-/* display help box */
-void plugin_help(void)
-{
-	GtkWidget *dialog,*label,*scroll;
-
-	/* create dialog box */
-  dialog=gtk_dialog_new_with_buttons(_("ConTEXT feature parity help"),
-        GTK_WINDOW(geany->main_widgets->window),
-        GTK_DIALOG_DESTROY_WITH_PARENT,
-        GTK_STOCK_OK,GTK_RESPONSE_ACCEPT,
-        NULL);
-
-	/* create label */
-	label=gtk_label_new(
-		_("This Plugin implements two useful features.\n\n"
-		"Firstly it allows you to use 10 numbered bookmarks. Normaly if you had more than one \
-bookmark, you would have to cycle through them until you reached the one you wanted. With this \
-plugin you can go straight to the bookmark that you want with a single key combination. To set a \
-numbered bookmark press Ctrl+Shift+a number from 0 to 9. You will see a marker apear next to the \
-line number. If you press Ctrl+Shift+a number on a line that already has that bookmark number then\
- it removes the bookmark, otherwise it will move the bookmark there if it was set on a different \
-line, or create it if it had not already been set. Only the bookmark with the highest number on a \
-line will be shown, but you can have more than one bookmark per line. This plugin does not \
-interfer with regular bookmarks. When a file is saved, Geany will remember the numbered bookmarks \
-and make sure that they are set the next time you open the file.\n\n"
-		"Secondly this plugin alows you to record and use your own macros. These are sequences of \
-actions that can then be repeated with a single key combination. So if you had dozens of lines \
-where you wanted to delete the last 2 characters, you could simple start recording, press End, \
-Backspace, Backspace, down line and then stop recording. Then simply trigger the macro and it \
-would automaticaly edit the line and move to the next. Select Record Macro from the Tools menu \
-and you will be prompted with a dialog box. You need to specify a key combination that isn't being\
- used, and a name for the macro to help you identify it. Then press Record. What you do in the \
-editor is then recorded until you select Stop Recording Macro from the Tools menu. Simply pressing\
- the specified key combination will re-run the macro. To edit the macros you have select Edit \
-Macro from the Tools menu. You can select a macro and delete it, or re-record it. You can also \
-click on a macro's name and change it, or the key combination and re-define that asuming that it's\
- not already in use.\n\n"
-		"You can alter the default behaviur of this plugin by selecting Plugin Manager under the \
-Tools menu, selecting this plugin, and cliking Preferences. You can change:\nRemember fold state -\
- if this is set then this plugin will remember the state of any folds along with the numbered \
-bookmarks and set them when the file is next loaded.\nCenter view when goto bookmark - If this is \
-set it will try to make sure that the numbered bookmark that you are going to is in the center of \
-the screen, otherwise it will simply be on the screen somewhere.\nSave Macros when close Geany - \
-If this is selected then Geany will save any recorded macros and reload them for use the next time\
- you open Geany, if not they will be lost when Geany is closed.\nAsk before replaceing existing \
-Macros - If this is selected then if you try recording a macro over an existing one it will check \
-before over-writing it, giving you the option of trying a different name or key trigger \
-combination, otherwise it will simply erase any existing macros with the same name, or the same \
-key trigger combination."));
-	gtk_label_set_line_wrap(GTK_LABEL(label),TRUE);
-	gtk_widget_show(label);
-
-	/* create scrolled window to display label */
-	scroll=gtk_scrolled_window_new(NULL,NULL);
-	gtk_scrolled_window_set_policy((GtkScrolledWindow*)scroll,GTK_POLICY_NEVER,
-								GTK_POLICY_AUTOMATIC);
-	gtk_scrolled_window_add_with_viewport((GtkScrolledWindow*)scroll,label);
-
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),scroll);
-	gtk_widget_show(scroll);
-
-	/* set dialog size (leave width default) */
-	gtk_widget_set_size_request(dialog,-1,300);
-
-	/* display the dialog */
-	gtk_dialog_run(GTK_DIALOG(dialog));
-	gtk_widget_destroy(dialog);
-}
-
-
-/* goto numbered bookmark */
-static void GotoBookMark(gint iBookMark)
-{
-	gint iLine,iLinesVisible,iLineCount;
-	ScintillaObject* sci=document_get_current()->editor->sci;
-
-	iLine=scintilla_send_message(sci,SCI_MARKERNEXT,0,1<<(iBookMark+BOOKMARK_BASE));
-
-	/* ignore if no marker placed for requested bookmark */
-	if(iLine==-1)
-		return;
-
-	/* move to bookmark */
-	scintilla_send_message(sci,SCI_GOTOLINE,iLine,0);
-
-	if(bCenterWhenGotoBookmark==FALSE)
-		return;
-
-	/* try and center bookmark on screen */
-	iLinesVisible=scintilla_send_message(sci,SCI_LINESONSCREEN,0,0);
-	iLineCount=scintilla_send_message(sci,SCI_GETLINECOUNT,0,0);
-	iLine-=iLinesVisible/2;
-	/* make sure view is not beyond start or end of document */
-	if(iLine+iLinesVisible>iLineCount)
-		iLine=iLineCount-iLinesVisible;
-	if(iLine<0)
-		iLine=0;
-
-	scintilla_send_message(sci,SCI_SETFIRSTVISIBLELINE,iLine,0);
-}
-
-
-/* set (or remove) numbered bookmark */
-static void SetBookMark(gint iBookMark)
-{
-	gint iNewLine,iOldLine;
-	ScintillaObject* sci=document_get_current()->editor->sci;
-
-	/* see if already such a bookmark present */
-	iOldLine=scintilla_send_message(sci,SCI_MARKERNEXT,0,1<<(iBookMark+BOOKMARK_BASE));
-	iNewLine=GetLine(sci);
-	/* if no marker then simply add one to current line */
-	if(iOldLine==-1)
-	{
-		CheckEditorSetup();
-		scintilla_send_message(sci,SCI_MARKERADD,iNewLine,iBookMark+BOOKMARK_BASE);
-	}
-	/* else either have to remove marker from current line, or move it to current line */
-	else
-	{
-		/* remove old marker */
-		scintilla_send_message(sci,SCI_MARKERDELETEALL,iBookMark+BOOKMARK_BASE,0);
-		/* add new marker if moving marker */
-		if(iOldLine!=iNewLine) scintilla_send_message(sci,SCI_MARKERADD,iNewLine,iBookMark+BOOKMARK_BASE);
-	}
-}
-
-
-/* handle key press
- * used to see if macro is being triggered and to control numbered bookmarks
-*/
-static gboolean Key_Released_CallBack(GtkWidget *widget, GdkEventKey *ev, gpointer data)
-{
-	GeanyDocument *doc;
-	gint i;
-	Macro *m;
-
-	m=FindMacroByKey(ev->keyval,ev->state);
-
-	/* if it's a macro trigger then run macro */
-	if(m!=NULL)
-	{
-		ReplayMacro(m);
-/* ?is this needed */
-/*    g_signal_stop_emission_by_name((GObject *)widget,"key-release-event"); */
-		return TRUE;
-	}
-
-	doc=document_get_current();
-	if(doc==NULL)
-		return FALSE;
-
-	if(ev->type!=GDK_KEY_RELEASE)
-		return FALSE;
-
-	/* control and number pressed */
-	if(ev->state==4)
-	{
-		i=((gint)(ev->keyval))-'0';
-		if(i<0 || i>9)
-			return FALSE;
-
-		GotoBookMark(i);
-		return TRUE;
-	}
-	/* control+shift+number */
-	if(ev->state==5) {
-		/* could use hardware keycode instead of keyvals but if unable to get keyode then don't
-		 * have logical default to fall back on
-		*/
-		for(i=0;i<10;i++) if((gint)(ev->keyval)==iShiftNumbers[i])
-		{
-			SetBookMark(i);
-			return TRUE;
-		}
-
-	}
-	return FALSE;
-}
-
-
-/* return TRUE if this key combination is not bing used by anything else (and so can be used by
- * this plugin as a macro trigger)
-*/
-static gboolean UseableAccel(guint key,guint mod)
-{
-	gint i,k;
-	guint u,t;
-	GSList *gsl;
-
-	/* check if in use by accelerator groups */
-	gsl=gtk_accel_groups_from_object((GObject*)geany->main_widgets->window);
-	/* loop through all the accelerator groups until we either find one that matches the key (k!=0)
-	 * or we don't (k==0)
-	*/
-	for(u=0,k=0;u<g_slist_length(gsl);u++)
-	{
-		gtk_accel_group_query((GtkAccelGroup*)((g_slist_nth(gsl,u))->data),key,mod,&t);
-		if(t!=0)
-			return FALSE; /* combination in use so don't accept as macro trigger */
-	}
-
-	/* now check to see if numbered bookmark key is atempted
-	 *
-	 * control and number pressed
-	*/
-	if(mod==4)
-	{
-		i=((gint)key)-'0';
-		if(i>=0 && i<=9)
-			return FALSE;
-	}
-
-	/* control+shift+number */
-	if(mod==5)
-	{
-		/* could use hardware keycode instead of keyvals but if unable to get keyode then don't
-		 * have a logical default to fall back on
-		*/
-		for(i=0;i<10;i++) if((gint)key==iShiftNumbers[i])
-			return FALSE;
-	}
-
-	/* there are a lot of unmodified keys, and shift+key combinations in use by the editor.
-	 * Rather than list them all individually that the editor uses, ban all except the
-	 * shift+function keys
-	*/
-	if(mod==1 || mod==0)
-	{
-		if(key<GDK_F1 || key>GDK_F35)
-			return FALSE;
-	}
-
-	/* there are a several control keys that could be pressed but should not be used on their own
-	 * check for them
-	*/
-	if(key==GDK_Shift_L || key==GDK_Shift_R || key==GDK_Control_L || key==GDK_Control_R ||
-		key==GDK_Caps_Lock || key==GDK_Shift_Lock || key==GDK_Meta_L || key==GDK_Meta_R ||
-		key==GDK_Alt_L || key==GDK_Alt_R || key==GDK_Super_L || key==GDK_Super_R ||
-		key==GDK_Hyper_L || key==GDK_Hyper_R)
-		return FALSE;
-
-	/* ctrl+M is used by normal bookmarks */
-	if(mod==4 && key=='m')
-		return FALSE;
-
-	/* now should have a valid keyval/state combination */
-	return TRUE;
-}
-
-
-/* handle changes to an Entry dialog so that it handles accelerator key combinations */
-static gboolean Entry_Key_Pressed_CallBack(GtkWidget *widget, GdkEventKey *ev, gpointer data)
-{
-	gchar *cName;
-
-	/* make sure that tab is handled by regular handler to ensure can tab through entry boxes and
-	 * buttons
-	*/
-	if((ev->state==0 || ev->state==1) && ev->keyval==GDK_Tab)
-		return FALSE;
-
-	/* first see if key combination is valid for use in macros */
-	if(UseableAccel(ev->keyval,ev->state)==FALSE)
-		return TRUE;
-
-	cName=GetPretyKeyName(ev->keyval,ev->state);
-	/* set text in entry */
-	gtk_entry_set_text((GtkEntry*)widget,cName);
-
-	/* tidy up memory */
-	g_free(cName);
-
-	/* make note of keys pressed */
-	RecordingMacro->keyval=ev->keyval;
-	RecordingMacro->state=ev->state;
-
-	return TRUE;
-}
-
-
-/* display dialog and handle the gathering of data prior to recording a macro */
-static gboolean InitializeMacroRecord(void)
-{
-	GtkWidget *dialog,*gtke,*gtke2,*hbox,*gtkl;
-	gint iReply=GTK_RESPONSE_OK;
-	Macro *m;
-	gboolean bReplaceName,bReplaceTrigger;
-
-	/* ensure have empty recording macro */
-	FreeMacro(RecordingMacro);
-	RecordingMacro=CreateMacro();
-	/* set with default values */
-	RecordingMacro->keyval=0;
-	RecordingMacro->state=0;
-
-	/* create dialog box */
-	dialog=gtk_dialog_new();
-	gtk_window_set_title(GTK_WINDOW(dialog),_("Record Macro"));
-
-	/* create buttons */
-	gtk_dialog_add_button(GTK_DIALOG(dialog),_("Record"),GTK_RESPONSE_OK);
-	gtk_dialog_add_button(GTK_DIALOG(dialog),_("Cancel"),GTK_RESPONSE_CANCEL);
-
-	/* create box to hold macro trigger entry box and label */
-	hbox=gtk_hbox_new(FALSE,0);
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),hbox);
-	gtk_widget_show(hbox);
-
-	gtkl=gtk_label_new(_("Macro Trigger:"));
-	gtk_box_pack_start(GTK_BOX(hbox),gtkl,FALSE,FALSE,2);
-	gtk_widget_show(gtkl);
-
-	gtke=gtk_entry_new();
-	g_signal_connect(gtke,"key-press-event",G_CALLBACK(Entry_Key_Pressed_CallBack),NULL);
-	gtk_box_pack_start(GTK_BOX(hbox),gtke,FALSE,FALSE,2);
-	gtk_widget_show(gtke);
-
-	/* create box to hold macro name entry box, and label */
-	hbox=gtk_hbox_new(FALSE,0);
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),hbox);
-	gtk_widget_show(hbox);
-
-	gtkl=gtk_label_new(_("Macro Name:"));
-	gtk_box_pack_start(GTK_BOX(hbox),gtkl,FALSE,FALSE,2);
-	gtk_widget_show(gtkl);
-
-	gtke2=gtk_entry_new();
-	gtk_box_pack_start(GTK_BOX(hbox),gtke2,FALSE,FALSE,2);
-	gtk_widget_show(gtke2);
-
-	/* run dialog, and wait for box to be canceled or for user to press record.
-	 * Check to make sure you're not over-writing existing macro trigger or name
-	*/
-	while(iReply==GTK_RESPONSE_OK)
-	{
-		iReply=gtk_dialog_run(GTK_DIALOG(dialog));
-
-		if(iReply==GTK_RESPONSE_OK)
-		{
-			/* first check if any trigger has been defined, and don't go further until we have a
-			 * trigger
-			*/
-			if(RecordingMacro->keyval==0 && RecordingMacro->state==0)
-			{
-				dialogs_show_msgbox(GTK_MESSAGE_INFO,
-									_("You must define a key trigger combination"));
-				continue;
-			}
-
-			bReplaceName=FALSE;
-			bReplaceTrigger=FALSE;
-			m=FindMacroByName((gchar*)gtk_entry_get_text((GtkEntry*)gtke2));
-			/* check if macro name already exists */
-			if(m!=NULL)
-			{
-				if(bQueryOverwriteMacros==FALSE)
-					bReplaceName=TRUE;
-				else
-					bReplaceName=dialogs_show_question(
-						_("Macro name \"%s\"\n is already in use.\nReplace?"),
-						gtk_entry_get_text((GtkEntry*)gtke2));
-
-				/* don't want to replace so loop back to allow user to change or cancel */
-				if(bReplaceName==FALSE)
-					continue;
-			}
-
-			/* check if trigger key combination is already used */
-			m=FindMacroByKey(RecordingMacro->keyval,RecordingMacro->state);
-			if(m!=NULL)
-			{
-				if(bQueryOverwriteMacros==FALSE)
-					bReplaceTrigger=TRUE;
-				else
-					bReplaceTrigger=dialogs_show_question(
-						_("Macro trigger \"%s\"\n is already in use.\nReplace?"),
-						gtk_entry_get_text((GtkEntry*)gtke));
-
-				/* don't want to replace so loop back to allow user to change or cancel */
-				if(bReplaceTrigger==FALSE)
-					continue;
-			}
-
-			/* remove old macros. By now will definately want to replace either */
-			if(bReplaceName==TRUE)
-			{
-				m=FindMacroByName((gchar*)gtk_entry_get_text((GtkEntry*)gtke2));
-				RemoveMacroFromList(m);
-				FreeMacro(m);
-			}
-
-			if(bReplaceTrigger==TRUE)
-			{
-				m=FindMacroByKey(RecordingMacro->keyval,RecordingMacro->state);
-				RemoveMacroFromList(m);
-				FreeMacro(m);
-			}
-
-			/* record macro name, trigger keys already recorded */
-			RecordingMacro->name=g_strdup((gchar*)gtk_entry_get_text((GtkEntry*)gtke2));
-			/* break out of loop */
-			break;
-		}
-	}
-
-	/* tidy up */
-	gtk_widget_destroy(dialog);
-
-	/* clear macro details if not going to record a macro */
-	if(iReply!=GTK_RESPONSE_OK)
-		RecordingMacro=FreeMacro(RecordingMacro);
-
-	return (iReply==GTK_RESPONSE_OK);
-}
-
-
-/* handle starting and stopping macro recording */
-static void DoMacroRecording(GtkMenuItem *menuitem, gpointer gdata)
-{
-	if(RecordingMacro==NULL)
-	{
-		/* start recording process, but quit if error, or user cancels */
-		if(!InitializeMacroRecord())
-			return;
-
-		/* start actual recording */
-		scintilla_send_message(document_get_current()->editor->sci,SCI_STARTRECORD,0,0);
-    gtk_widget_hide(Record_Macro_menu_item);
-    gtk_widget_show(Stop_Record_Macro_menu_item);
-	}
-	else {
-		scintilla_send_message(document_get_current()->editor->sci,SCI_STOPRECORD,0,0);
-		/* Recorded in reverse as more efficient */
-		RecordingMacro->MacroEvents=g_slist_reverse(RecordingMacro->MacroEvents);
-		/* add macro to list */
-		AddMacroToList(RecordingMacro);
-		/* set ready to record new macro (don't free as macro has been saved in macrolist) */
-		RecordingMacro=NULL;
-    gtk_widget_show(Record_Macro_menu_item);
-    gtk_widget_hide(Stop_Record_Macro_menu_item);
-
-		/* Macros have been changed */
-		bMacrosHaveChanged=TRUE;
-	}
-}
-
-
-/* handle a change in a macro name in the edit macro dialog */
-static void Name_Render_Edited_CallBack(GtkCellRendererText *cell,gchar *iter_id,gchar *new_text,
-                                        gpointer data)
-{
-	GtkTreeView *treeview=(GtkTreeView *)data;
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-	Macro *m,*mTemp;
-	GSList *gsl=mList;
-
-	/* Get the iterator */
-	model=gtk_tree_view_get_model(treeview);
-	gtk_tree_model_get_iter_from_string(model,&iter,iter_id);
-
-	/* get Macro for this line */
-	gtk_tree_model_get(model,&iter,2,&m,-1);
-
-	/* return if line is uneditable */
-	if(m==NULL)
-		return;
-
-	/* now check that no other macro is using this name */
-	while(gsl!=NULL)
-	{
-		mTemp=(Macro*)(gsl->data);
-		if(mTemp!=m && strcmp(new_text,mTemp->name)==0)
-			return;
-
-		gsl=g_slist_next(gsl);
-	}
-
-	/* set new name */
-	m->name=g_strdup(new_text);
-
-	/* Update the model */
-	gtk_list_store_set(GTK_LIST_STORE(model),&iter,0,new_text,-1);
-
-	bMacrosHaveChanged=TRUE;
-}
-
-/* only allow render edit if GTK high enough version */
-#if GTK_CHECK_VERSION(2,10,0)
-/* handle a change in macro trigger accelerator key in the edit macro dialog */
-static void Accel_Render_Edited_CallBack(GtkCellRendererAccel *cell,gchar *iter_id,guint key,
-                                         GdkModifierType mods,guint keycode,gpointer data)
-{
-	gchar *cTemp;
-	GtkTreeView *treeview=(GtkTreeView *)data;
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-	Macro *m,*mTemp;
-	GSList *gsl=mList;
-
-	/* check if is useable accelerator */
-	if(UseableAccel(key,mods)==FALSE)
-		return;
-
-	/* Get the iterator */
-	model=gtk_tree_view_get_model(treeview);
-	gtk_tree_model_get_iter_from_string(model,&iter,iter_id);
-
-	/* get Macro for this line */
-	gtk_tree_model_get(model,&iter,2,&m,-1);
-
-	/* return if line is uneditable */
-	if(m==NULL)
-		return;
-
-	/* now check that no other macro is using this key combination */
-	while(gsl!=NULL)
-	{
-		mTemp=(Macro*)(gsl->data);
-		if(mTemp!=m && mTemp->keyval==key && mTemp->state==mods)
-			return;
-
-		gsl=g_slist_next(gsl);
-	}
-
-	/* set new trigger values */
-	m->keyval=key;
-	m->state=mods;
-
-	/* Update the model */
-	cTemp=GetPretyKeyName(key,mods);
-	gtk_list_store_set(GTK_LIST_STORE(model),&iter,1,cTemp,-1);
-	g_free(cTemp);
-
-	bMacrosHaveChanged=TRUE;
-}
-#endif
-
-/* do editing of existing macros */
-static void DoEditMacro(GtkMenuItem *menuitem, gpointer gdata)
-{
-	GtkWidget *table,*dialog;
-	GtkTreeViewColumn *column;
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *selection;
-	GtkTreeIter iter;
-	GtkListStore *ls;
-	gint i;
-	GSList *gsl=mList;
-	Macro *m;
-	gchar *cTemp;
-	gboolean bEditable;
-
-	/* create dialog box */
-	dialog=gtk_dialog_new();
-	gtk_window_set_title(GTK_WINDOW(dialog),_("Edit Macros"));
-
-	/* create store to hold table data (3rd column holds pointer to macro or NULL if not editable)
-	*/
-	ls=gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_POINTER);
-
-	/* add data to store either empty line, or list of macros */
-	if(gsl==NULL)
-	{
-		gtk_list_store_append(ls,&iter);  /* Acquire an iterator  */
-		gtk_list_store_set(ls,&iter,0,"",1,"",2,NULL,-1);
-	}
-
-	while(gsl!=NULL)
-	{
-		gtk_list_store_append(ls,&iter);  /*  Acquire an iterator */
-		m=(Macro*)(gsl->data);
-		cTemp=GetPretyKeyName(m->keyval,m->state);
-		gtk_list_store_set(ls,&iter,0,m->name,1,cTemp,2,m,-1);
-		g_free(cTemp);
-		gsl=g_slist_next(gsl);
-	}
-
-	/* create table */
-	table=gtk_tree_view_new_with_model(GTK_TREE_MODEL(ls));
-/* only allow grid lines if GTK high enough version (cosmetic so no biggie if absent)*/
-#if GTK_CHECK_VERSION(2,10,0)
-	gtk_tree_view_set_grid_lines(GTK_TREE_VIEW(table),GTK_TREE_VIEW_GRID_LINES_BOTH);
-#endif
-
-	/* add columns */
-	renderer=gtk_cell_renderer_text_new();
-	column=gtk_tree_view_column_new_with_attributes(_("Macro Name"),renderer,"text",0,NULL);
-	g_signal_connect(renderer,"edited",G_CALLBACK(Name_Render_Edited_CallBack),table);
-	g_object_set(renderer,"editable",TRUE,NULL);
-	gtk_tree_view_append_column(GTK_TREE_VIEW(table),column);
-
-	renderer= gtk_cell_renderer_accel_new();
-	column=gtk_tree_view_column_new_with_attributes(_("Key Trigger"),renderer,"text",1,NULL);
-/* only allow render edit if GTK high enough version. Shame to loose this function, but not the
- * end of the world. I may time permitting write my own custom renderer
-*/
-#if GTK_CHECK_VERSION(2,10,0)
-	g_signal_connect(renderer,"accel-edited",G_CALLBACK(Accel_Render_Edited_CallBack),table);
-	g_object_set(renderer,"editable",TRUE,NULL);
-#else
-	g_object_set(renderer,"editable",FALSE,NULL);
-#endif
-
-	gtk_tree_view_append_column(GTK_TREE_VIEW(table),column);
-
-	/* set selection mode */
-	gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(table)),
-								GTK_SELECTION_SINGLE);
-
-	/* add table to dialog */
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),table);
-	gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox),table,FALSE,FALSE,2);
-	gtk_widget_show(table);
-
-	/* add buttons */
-	gtk_dialog_add_button(GTK_DIALOG(dialog),_("Re-Record"),GTK_RESPONSE_OK);
-	gtk_dialog_add_button(GTK_DIALOG(dialog),_("Delete"),GTK_RESPONSE_REJECT);
-	gtk_dialog_add_button(GTK_DIALOG(dialog),_("Cancel"),GTK_RESPONSE_CANCEL);
-
-	i=GTK_RESPONSE_REJECT;
-	while(i==GTK_RESPONSE_REJECT)
-	{
-		/* wait for button to be pressed */
-		i=gtk_dialog_run(GTK_DIALOG(dialog));
-
-		/* exit if not doing any action */
-		if(i!=GTK_RESPONSE_OK && i!=GTK_RESPONSE_REJECT)
-			break;
-
-		/* find out what's been selected */
-		selection=gtk_tree_view_get_selection(GTK_TREE_VIEW(table));
-		/* check if line has been selected */
-		if(gtk_tree_selection_get_selected(selection,NULL,&iter))
-		{
-			/* get macro name */
-			gtk_tree_model_get(GTK_TREE_MODEL(ls),&iter,0,&cTemp,2,&bEditable,-1);
-			/* handle delete macro */
-			if(i==GTK_RESPONSE_REJECT && bEditable)
-			{
-				/* remove from table */
-				gtk_list_store_remove(GTK_LIST_STORE(ls),&iter);
-				/* remove macro */
-				m=FindMacroByName(cTemp);
-				RemoveMacroFromList(m);
-				FreeMacro(m);
-				/* Signal that macros have changed (and need to be saved) */
-				bMacrosHaveChanged=TRUE;
-			}
-
-			/* handle re-record macro */
-			if(i==GTK_RESPONSE_OK && bEditable)
-			{
-				m=FindMacroByName(cTemp);
-				/* ensure have empty recording macro */
-				FreeMacro(RecordingMacro);
-				RecordingMacro=CreateMacro();
-				/* set values */
-				RecordingMacro->keyval=m->keyval;
-				RecordingMacro->state=m->state;
-				RecordingMacro->name=g_strdup(m->name);
-				/* remove existing macro (so newly recorded one takes it's place) */
-				RemoveMacroFromList(m);
-				FreeMacro(m);
-				/* start actual recording */
-				scintilla_send_message(document_get_current()->editor->sci,SCI_STARTRECORD,0,0);
-	      gtk_widget_hide(Record_Macro_menu_item);
-	      gtk_widget_show(Stop_Record_Macro_menu_item);
-			}
-
-			/* free memory */
-			g_free(cTemp);
-		}
-
-	}
-
-	gtk_widget_destroy(dialog);
-}
-
-
-/* set up this plugin */
-void plugin_init(GeanyData *data)
-{
-	gint i,k,iResults=0;
-	GdkKeymapKey *gdkkmkResults;
-
-	/* Load settings */
-	LoadSettings();
-
-	/* Calculate what shift '0' to '9 will be (£ is above 3 on uk keyboard, but it's # or ~ on us
-	 * keyboard.)
-	 * there must be an easier way than this of working this out, but I've not figured it out.
-	*/
-
-	/* go through '0' to '9', work out hardware keycode, then find out what shift+this keycode
-	 * results in
-	*/
-	for(i=0;i<10;i++)
-	{
-		/* Get keymapkey data for number key */
-		k=gdk_keymap_get_entries_for_keyval(NULL,'0'+i,&gdkkmkResults,&iResults);
-		/* error retrieving hardware keycode, so leave as standard uk character for shift + number */
-		if(k==0)
-			continue;
-
-		/* unsure, just in case it does return 0 results but reserve memory  */
-		if(iResults==0)
-		{
-			g_free(gdkkmkResults);
-			continue;
-		}
-
-		/* now use k to indicate GdkKeymapKey we're after */
-		k=0; /* default if only one hit found */
-		if(iResults>1)
-			/* cycle through results if more than one matches */
-			for(k=0;k<iResults;k++)
-				/* have found number without using shift, ctrl, Alt etc, so shold be it. */
-				if(gdkkmkResults[k].level==0)
-					break;
-
-		/* error figuring out which keycode to use so default to standard uk */
-		if(k==iResults)
-		{
-			g_free(gdkkmkResults);
-			continue;
-		}
-
-		/* set shift pressed */
-		gdkkmkResults[k].level=1;
-		/* now get keycode for shift + number */
-		iResults=gdk_keymap_lookup_key(NULL,&(gdkkmkResults[k]));
-		/* if valid keycode, enter into list of shift + numbers */
-		if(iResults!=0)
-			iShiftNumbers[i]=iResults;
-
-		/* free resources */
-		g_free(gdkkmkResults);
-	}
-
-	/* add record macro menu entry */
-	Record_Macro_menu_item=gtk_menu_item_new_with_mnemonic(_("Record _Macro"));
-	gtk_widget_show(Record_Macro_menu_item);
-	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),Record_Macro_menu_item);
-	g_signal_connect(Record_Macro_menu_item,"activate",G_CALLBACK(DoMacroRecording),NULL);
-
-	/* add stop record macromenu entry */
-	Stop_Record_Macro_menu_item=gtk_menu_item_new_with_mnemonic(_("Stop Recording _Macro"));
-	gtk_widget_hide(Stop_Record_Macro_menu_item);
-	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),Stop_Record_Macro_menu_item);
-	g_signal_connect(Stop_Record_Macro_menu_item,"activate",G_CALLBACK(DoMacroRecording),NULL);
-
-	/* add Edit Macro menu entry */
-	Edit_Macro_menu_item=gtk_menu_item_new_with_mnemonic(_("_Edit Macros"));
-	gtk_widget_show(Edit_Macro_menu_item);
-	gtk_container_add(GTK_CONTAINER(geany->main_widgets->tools_menu),Edit_Macro_menu_item);
-	g_signal_connect(Edit_Macro_menu_item,"activate",G_CALLBACK(DoEditMacro),NULL);
-
-	/* set key press monitor handle */
-	key_release_signal_id=g_signal_connect(geany->main_widgets->window,"key-release-event",
-										G_CALLBACK(Key_Released_CallBack),NULL);
-}
-
-
-/* clean up on exiting this plugin */
-void plugin_cleanup(void)
-{
-	gint k;
-	guint i;
-	ScintillaObject* sci;
-	SCIPOINTERHOLDER *sciTemp;
-	SCIPOINTERHOLDER *sciNext;
-	FileData *fdTemp=fdKnownFilesSettings;
-	FileData *fdTemp2;
-
-	/* if macros have changed then save off */
-	if(bMacrosHaveChanged==TRUE && bSaveMacros==TRUE)
-		SaveSettings();
-
-	/* uncouple keypress monitor */
-	g_signal_handler_disconnect(geany->main_widgets->window,key_release_signal_id);
-
-	/* go through all documents removing markers (?needed) */
-	for(i=0;i<GEANY(documents_array)->len;i++)
-		if(documents[i]->is_valid) {
-			sci=documents[i]->editor->sci;
-			for(k=0;k<9;k++)
-			  scintilla_send_message(sci,SCI_MARKERDELETEALL,BOOKMARK_BASE+k,0);
-
-		}
-
-	/* Clear memory used for list of editors */
-	sciTemp=sciList;
-	while(sciTemp!=NULL)
-	{
-		sciNext=sciTemp->NextNode;
-		free(sciTemp);
-		sciTemp=sciNext;
-	}
-
-	/* Clear memory used to hold file details */
-	while(fdTemp!=NULL)
-	{
-		/* free filename */
-		g_free(fdTemp->pcFileName);
-		/* free folding information if present */
-		if(fdTemp->pcFolding!=NULL)
-			g_free(fdTemp->pcFolding);
-
-		fdTemp2=fdTemp->NextNode;
-		/* free memory block  */
-		g_free(fdTemp);
-		fdTemp=fdTemp2;
-	}
-
-	/* clear menu entries */
-	gtk_widget_destroy(Record_Macro_menu_item);
-	gtk_widget_destroy(Edit_Macro_menu_item);
-
-	/* Clear any macros that are recording */
-	RecordingMacro=FreeMacro(RecordingMacro);
-
-	/* clean up memory used by macros */
-	ClearAllMacros();
-}

Deleted: trunk/geany-plugins/geanycfp/wscript_build
===================================================================
--- trunk/geany-plugins/geanycfp/wscript_build	2011-10-19 19:12:44 UTC (rev 2289)
+++ trunk/geany-plugins/geanycfp/wscript_build	2011-10-19 20:23:31 UTC (rev 2290)
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# WAF build script for geany-plugins - geanycfp
-#
-# Copyright 2010 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
-# Copyright 2011 Frank Lanitz <frank(at)frank(dot)uvena(dot)de>
-#
-# 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.
-#
-# $Id$
-
-from build.wafutils import build_plugin
-
-
-name = 'geanycfp'
-includes = ['geanycfp/src']
-
-build_plugin(bld, name, includes=includes)

Deleted: trunk/geany-plugins/geanycfp/wscript_configure
===================================================================
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Plugins-Commits mailing list