emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

HideShow Click to show/hide


From: JD Smith
Subject: HideShow Click to show/hide
Date: Mon, 20 Nov 2006 14:30:27 -0700
User-agent: Pan/0.14.2.91 (As She Crawled Across the Table)

HideShow seems to have an issue when collapsing blocks, in C or
elsewhere, with Shift-mouse-2.  Consider this:

int main(int argc, char argv[]) {
  int i=0;
  for (i=0;i<5;i++) {
    printf("Got %d\n",i);
  }
}

Shift-Middle clicking anywhere after the first brace at the end of main
properly produces:

int main(int argc, char argv[]) {...

S-mouse-2 on that line anywhere again unfolds it.  But now in the for
statement:

int main(int argc, char argv[]) {
  int i=0;
  for (i=0;i<5;i++) {...
}

There is nowhere you can Shift-click to recover the for block.  It
always collapses the main block instead.  The only reason it worked in
the main case is because it was the outermost block, so it can't find
a prior block to collapse.

I believe a simple change to first move to the end of the line should
fix this:

*** hideshow.el 10 Feb 2006 02:00:30 -0700      1.58
--- hideshow.el 26 Oct 2006 12:49:10 -0700      
***************
*** 706,711 ****
--- 706,712 ----
        (if (and c-reg (nth 0 c-reg))
            ;; point is inside a comment, and that comment is hidable
            (goto-char (nth 0 c-reg))
+       (end-of-line)
          (when (and (not c-reg)
                     (hs-find-block-beginning)
                     (looking-at hs-block-start-regexp))


This isn't really perfect, because it doesn't work naturally for continued
lines before the block, e.g.

int main(int argc, char argv[]) {
  int i=0;
  for (i=0;i<5;i++) 
    {
    printf("Got %d\n",i);
  }
}

Really you'd want uncollapse the block below point if point is on a
continued line (like the for... above) which begins the block.  Not
sure of an easy way to do this, but this simple fix at least gives you
*somewhere* to click (on the line with the ellipsis).

JD






reply via email to

[Prev in Thread] Current Thread [Next in Thread]