IntelliSense -- by Rajat (XP/2k/NT 이상)

이 스크립트는 AutoHotkey 스크립트를 편집하는 동안 감시하다가 명령어 다음에 쉼표나 스페이스를 타자하는 순간, 그 명령어의 매개변수 리스트를 보여줍니다 게다가 Ctrl+F1 (또는 여러분의 선택에 따라 다른 핫키)를 누르면 그 명령어의 도움말을 보여줍니다. 매개변수 리스트를 취소하려면 Escape 또는 Enter를 누르십시오.

이 스크립트를 내려받기  |  다른 샘플 스크립트  |  홈으로

; Requires v1.0.41+

; CONFIGURATION SECTION: 스크립트를 다움 변수로 재단합니다.

; 아래의 핫키를 누르면 현재 명령어의 도움말을 보여줍니다:
I_HelpHotkey = ^F1

; 아래의 문자열이 활성창의 제목에 존재해야
; 타자하는 동안 IntelliSense가 작동합니다.  비워 두면
; IntelliSense는 모든 창에 작동합니다. Pad로 만들면 
; Metapad, Notepad, 그리고 Textpad 같은 편집기에서 작동합니다.  .ahk로 만들면
; 오직 .ahk 파일이 Notepad, Metapad, 등등에 열려 있을 경우에만 작동합니다.
I_Editor = pad

; 트레이에 다른 스크립트와 차별을 위해 이 스크립트에 대하여 다른 아이콘을 사용하고 싶으면
; 아래에 파일 이름을 제공하십시오. (비워 두면 아이콘이 없습니다).
; 예를 들어: E:\stuff\Pics\icons\GeoIcons\Information.ico
I_Icon = 

; END OF CONFIGURATION SECTION (이 시점 이후로 변경하지 마십시오.
; 단, 스크립트의 기본 기능을 바꾸고 싶은 경우는 예외입니다).

SetKeyDelay, 0
#SingleInstance

if I_HelpHotkey <>
    Hotkey, %I_HelpHotkey%, I_HelpHotkey

; 트레이 아이콘을 바꿉니다 (위의 환경 구성 섹션에 지정되어 있다면):
if I_Icon <>
    IfExist, %I_Icon%
        Menu, Tray, Icon, %I_Icon%

; 오토핫키의 위치를 알아 냅니다:
RegRead, ahk_dir, HKEY_LOCAL_MACHINE, SOFTWARE\AutoHotkey, InstallDir
if ErrorLevel  ; 발견이 안 되었으므로, 다른 위치에서 찾아 봅니다.
{
    if A_AhkPath
        SplitPath, A_AhkPath,, ahk_dir
    else IfExist ..\..\AutoHotkey.chm
        ahk_dir = ..\..
    else IfExist %A_ProgramFiles%\AutoHotkey\AutoHotkey.chm
        ahk_dir = %A_ProgramFiles%\AutoHotkey
    else
    {
        MsgBox Could not find the AutoHotkey folder.
        ExitApp
    }
}

ahk_help_file = %ahk_dir%\AutoHotkey.chm

; 명령어 구문을 읽습니다:
Loop, Read, %ahk_dir%\Extras\Editors\Syntax\Commands.txt
{
    I_FullCmd = %A_LoopReadLine%

    ; 지시어들은 쉼표가 아니라 스페이스를 첫 번째로 가집니다.
    ; 그래서 먼저 오는 것을 명령어 이름의 끝으로 간주합니다:
    StringGetPos, I_cPos, I_FullCmd, `,
    StringGetPos, I_sPos, I_FullCmd, %A_Space%
    if (I_cPos = -1 or (I_cPos > I_sPos and I_sPos <> -1))
        I_EndPos := I_sPos
    else
        I_EndPos := I_cPos

    if I_EndPos <> -1
        StringLeft, I_CurrCmd, I_FullCmd, %I_EndPos%
    else  ; 이 지시어/명령어는 매개변수가 없습니다.
        I_CurrCmd = %A_LoopReadLine%
    
    StringReplace, I_CurrCmd, I_CurrCmd, [,, All
    StringReplace, I_CurrCmd, I_CurrCmd, %A_Space%,, All
    StringReplace, I_FullCmd, I_FullCmd, ``n, `n, All
    StringReplace, I_FullCmd, I_FullCmd, ``t, `t, All
    
    ; 명령어 이름 배열과 완전한 cmd 구문을 구성합니다:
    I_Cmd%A_Index% = %I_CurrCmd%
    I_FullCmd%A_Index% = %I_FullCmd%
}

; Input 명령어를 사용해 사용자가 타자하는 명령어를 감시합니다:
Loop
{
    ; 편집기 창 점검:
    WinGetTitle, ActiveTitle, A
    IfNotInString, ActiveTitle, %I_Editor%
    {
        ToolTip
        Sleep, 500
        Continue
    }
    
    ; 엔드키를 만날때까지 모든 키를 얻습니다:
    Input, I_Word, V, {enter}{escape}{space}`,
    I_EndKey = %ErrorLevel%
    
    ; 이 경우 툴팁은 보이지 않습니다:
    if I_EndKey in EndKey:Enter,EndKey:Escape
    {
        ToolTip
        Continue
    }

    ; 다시 편집기 창을 점검합니다!
    WinGetActiveTitle, ActiveTitle
    IfNotInString, ActiveTitle, %I_Editor%
    {
        ToolTip
        Continue
    }

    ; 존재하는 들여쓰기 만큼 보상합니다:
    StringReplace, I_Word, I_Word, %A_Space%,, All
    StringReplace, I_Word, I_Word, %A_Tab%,, All
    if I_Word =
        Continue
    
    ; 주석 줄을 점검합니다:
    StringLeft, I_Check, I_Word, 1
    if (I_Check = ";" or I_Word = "If")  ; "If"는 툴팁을 보여주기에는 너무 거추장스럽습니다.
        Continue

    ; 단어를 명령어에 부합시킵니다:
    I_Index =
    Loop
    {
        ; 동적 변수를 한 번만 결정하면 수행성능이 개선됩니다.
        ; 게다가,  I_ThisCmd에 배경된 값은 또
        ; I_HelpHotkey 서브루틴이 사용합니다:
        I_ThisCmd := I_Cmd%A_Index%
        if I_ThisCmd =
            break
        if (I_Word = I_ThisCmd)
        {
            I_Index := A_Index
            I_HelpOn = %I_ThisCmd%
            break
        }
    }
    
    ; 부합이 없으면 사용자 입력 감시를 재개합니다:
    if I_Index =
        Continue
    
    ; 부합된 명령어를 보여주어 사용자를 안내합니다:
    I_ThisFullCmd := I_FullCmd%I_Index%
    ToolTip, %I_ThisFullCmd%, A_CaretX, A_CaretY + 20
}



I_HelpHotkey:
WinGetTitle, ActiveTitle, A
IfNotInString, ActiveTitle, %I_Editor%, Return

ToolTip  ; 지금 당장은 필요가 없기 때문에 구문 도움 툴팁을 끕니다.

SetTitleMatchMode, 1  ; 3의 경우, 이 설정은 이 쓰레드에만 효과가 있습니다.
IfWinNotExist, AutoHotkey Help
{
    IfNotExist, %ahk_help_file%
    {
        MsgBox, Could not find the help file: %ahk_help_file%.
        return
    }
    Run, %ahk_help_file%
    WinWait, AutoHotkey Help
}

if I_ThisCmd =  ; 대신에, 최근에 타자된 것을 사용합니다.
    I_ThisCmd := I_Word

; 위에서 "마지막 발견" 창이 설정되었고 그것을 아래에 사용합니다:
WinActivate
WinWaitActive
StringReplace, I_ThisCmd, I_ThisCmd, #, {#}  ; 있다면, 앞의 #를 교체합니다.
Send, !n{home}+{end}%I_HelpOn%{enter}
return
선택 | 내려받기