[Geany] Code folding doesn't work right.

Daniel Carrera dcarrera at xxxxx
Wed Aug 4 10:32:30 UTC 2010


On Wed, Aug 4, 2010 at 11:28 AM, Lex Trotman <elextr at gmail.com> wrote:
> Ok, thats because they are NEW fold points, the old ones you had
> rolled up were removed when you turned the whole file into a string.
>
> New fold points are always open otherwise as you typed the program it
> would fold up on you.

I don't understand at all. What is a "new" fold point vs an "old" fold
point? I'm talking about functions that have been in the file for more
than a day. Isn't that "old" enough? Why does Geany keep unfolding
everything? Are you saying that every single function in my program is
a "new" fold point? How do I make them old?


> This isn't a problem with other languages, except for Python triple
> quotes, because AFAIK no other language embeds newlines in strings, so
> the extent of an opened string is limited to one line and the fold
> points don't disappear since they are on other lines.


PHP does too, and Ruby as well, and JavaScript, and I suspect probably
Lua. So that's at least six languages. It is news to me that you can't
have a multi-line string in Java/C/C++. That sounds strange.


> Sadly I don't see an easy fix for the problem, what do other editors
> do?  Maybe we can steal their algorithm if it works better.

NetBeans doesn't have this problem. I don't know what algorithm they
use, but I can tell you how it behaves. Say I start with the following
PHP program:

<?

function test($var) {
    // Do nothing.
    // Do nothing.
    // Do nothing.
}

?>

Then I fold the function:

<?

+ function test($var) { ... }

?>

Then I insert a string on top. The function remains folded:


<?
$string = "Hello

+ function test($var) { ... }

?>

And the only way the function is expanded is if I *close* the string,
on the other side of the function:

<?
$string = "Hello

function test($var) {
    // Do nothing.
    // Do nothing.
    // Do nothing.
}

";

?>


It seems to me that NetBeans figures out that the quotes are not
properly closed (proven by the fact that the file ends in an
un-terminated string) and it waits until the string is closed before
deciding what to do with fold points. That's my best guess at their
algorithm.

Cheers,
Daniel.
-- 
Intolerant people should be shot.



More information about the Users mailing list