You can enable Hide-Show for C/C++ code by adding the following to your .emacs:
(add-hook 'c-mode-common-hook (lambda() (local-set-key (kbd "C-c <right>") 'hs-show-block) (local-set-key (kbd "C-c <left>") 'hs-hide-block) (local-set-key (kbd "C-c <up>") 'hs-hide-all) (local-set-key (kbd "C-c <down>") 'hs-show-all) (hs-minor-mode t)))You can hide or show either the current block, or the whole file. To show the former, consider a C-function:
int my_function (int a, int b) { return a + b; }Now, when calling hs-hide-block, we get:
int my_function (int a, int b)...HideShow has one problem: the truly bizarre default key bindings, such as 'C-c @ ESC C-s' for hs-show-all. This is the reason I am adding these alternative key bindings in the add-hook above - 'C-c' and the arrow keys; alternatively, you could use the 'Super'-key instead of C-c.
If you'd like to hide everything by default when you open a file, you can do so by adding
(hs-hide-all)to the above hook function.
Side-note: Even though there are many keys on your keyboard, there is a finite number of easy combinations, especially when the arrow-keys are involved. They are popular, and not just by emacs -- for example, window managers often use Ctrl-Alt-<arrow-key> for switching between virtual desktops. So, it's good to think a little bit where to 'spend' your easiest key bindings.
8 comments:
Thanks for the great tip.
I introduced this great tip to Korean emacs user in myblog.
( http://tkhwang.tistory.com/35 )
It seems that you didn't open trackback. T_T;
@tkhwang: nice -- and i've enabled the trackback support.
How would you take a few lines of variable declarations and turn that into a hideable block?
@Terrence Brannon: well, hide-show is for hiding *blocks*; for most languages, it would not make much sense to put the variables in a separate block, so hide-show is not a good solution for that.
Instead, you could look at e.g, folding mode, but that requires specially formatted comments.
yeah, I tried to put my comments in a "block":
# variable decls {
my $x = 12;
my $y = 33;
my $z =33;
# }
but the mode tries to interpret comments as a block and expects a certain number of lines for the comments
yes, i may have to goto folding mode, but I really liked this.
Isn't this something similar to what we see in org-mode. The headings are shown and hidden in cyclic manner?
I wonder if we could adapt your solution to a case where we could do the same in f90-mode or c-mode etc.
Thanks for the tip!
I am wonder if it's easy or not to customize the color of the 3 dots ? I think that it would be better to view something that differs from three real dots, no?
It should be cool also if we can start the buffer in hs-hide-all except for the comments of the code which are sometimes more important than the function definition itself, it is easy to customize ?
@Anonymous: you can customize how it looks, see the documentation for the variable hs-set-up-overlay. It does require some elisp though.
Post a Comment