Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Comment out (or uncomment) the currently selected lines


  • Please log in to reply
1 reply to this topic
Chris
  • Administrators
  • 10727 posts
  • Last active:
  • Joined: 02 Mar 2004
Here is a little script that some might find useful.
; INTRO

; This script allows a section of lines to be easily commented out or uncommented by

; automatically inserting a leading semicolon in front of each.  The hotkeys it uses

; seem somewhat standard, at least among Microsoft Visual products (maybe Borland and

; other visual source code editors use them too).

;

; USAGE

; When the right type of window is active (see the first few lines of the script):

; Pressing Ctrl-K followed by Ctrl-C will comment out the currently selected lines.

; Pressing Ctrl-K followed by Ctrl-U will uncomment the currently selected lines.

;

; NOTES

; It uses the clipboard because some editors (e.g. Metapad) aren't compatibible with

; "ControlGet Selected".  If your editor is something with a normal edit field, you

; could try using "ControlGet, selected" instead.

; Requires AutoHotkey v1.0.21 and Windows NT/2000/XP or later.



$^k::

SetTitleMatchMode, 2

IfWinNotActive, pad  ; Replace this with whatever filtering criteria you want.

{

	Send ^k

	return

}

Transform, CtrlC, chr, 3

Transform, CtrlU, chr, 21

Input, input, L1 M

if input = %CtrlC%

{

	; Doesn't get the right text in Metapad, perhaps due to being RichEdit:

	;ControlGet, selected, selected

	clipboard =

	Send ^c

	ClipWait, 1

	if ErrorLevel <> 0

		return

	NewClip =

	WaitingForFirstCharOfLine = y

	AutoTrim, off

	Loop, parse, clipboard

	{

		if WaitingForFirstCharOfLine = y

		{

			if A_LoopField not in %A_Space%,%A_Tab%

			{

				NewClip = %NewClip%;

				WaitingForFirstCharOfLine = n

			}

		}

		else if A_LoopField = `n

			WaitingForFirstCharOfLine = y

		NewClip = %NewClip%%A_LoopField%

	}

	clipboard = %NewClip%

	Send, ^v

}

else if input = %CtrlU%

{

	clipboard =

	Send ^c

	ClipWait, 1

	if ErrorLevel <> 0

		return

	NewClip =

	WaitingForFirstCharOfLine = y

	AutoTrim, off

	Loop, parse, clipboard

	{

		if WaitingForFirstCharOfLine = y

		{

			if A_LoopField not in %A_Space%,%A_Tab%

			{

				if A_LoopField <> `;

					NewClip = %NewClip%%A_LoopField%

				WaitingForFirstCharOfLine = n

			}

			else

				NewClip = %NewClip%%A_LoopField%

		}

		else

		{

			if A_LoopField = `n

				WaitingForFirstCharOfLine = y

			NewClip = %NewClip%%A_LoopField%

		}

	}

	clipboard = %NewClip%

	Send, ^v

}

return


ibr
  • Members
  • 5 posts
  • Last active: Aug 01 2010 01:55 PM
  • Joined: 12 Aug 2009
I was looking for a script that did exactly this, but while testing I noticed that Notepad++ already does this for you by pressing CTRL+Q. Also, it supports a lot of different languages (which will be based on the file extension, or your selection in the "Language" menu).

But without trying to implement this script, I would probably never have realized it - I should play around in the menus more often :oops:

(I realize that the original post is almost six years old, but this reply might be helpful for others.)