Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » CintaNotes

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

Krot66



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
#NoEnv
SendMode Input
SetWorkingDir %A_ScriptDir%
#SingleInstance, force
Menu, Tray, Icon, shell32.dll, 21
SetTitleMatchMode, 2
SetTitleMatchMode, Slow
;~ SetKeyDelay 50, 50
goto start
 
; Настройки горячих клавиш программы должны быть Ctrl+F12 - создание, CTRL+ALT+F12 - показать главное окно.
; В Настройках - Захват текста - После захвата должно стоять "Открыть на редактирование"  
 
; При запуске в каталоге скрипта создается одноименный пустой конфигурационный cfg-файл. В него вписываются строки вида:
;     номер секции,тэг,имя клавиши или ее код (виртуальный или скан),пояснение (необязательно)
; На основании этих записей происходит создание и открытие заметок по горячим клавишам.  
;     Например:  
;    1,Comp,vk43,c - тэг Comp в первой секции по клавише c
;     1,Soft Comp,vk53,S - два тэга там же по s
;     1,Books/читать,sc30,b - дочерний тэг "читать" в Books по b
;   1,Книги Books/читать,F6 - комбинация двух предыдущих возможностей по F6
;     5,,5 - пятая секция без тэга по 5 и т.д.
; Допускаются пустые строки, лишние пробелы - только в пояснениях. Временно ненужное можно закоментировать ";". Удобно отмечать постоянные тэги латиницей, тогда они всегда будут вверху. Для применения изменений требуется перезапуск скрипта
 
; --------- Горячие клавиши ----------  
 
>^>+F12::Run % cfg ; RCtrl+RShift+F12 - окрытие конфигурационного файла
 
; RCtrl+RShift+клавиша - создание заметки с заданной (и уже существующей!) секцией и тэгом (если определен)
; RCtrl+RAlt+клавиша - открытие заметок с заданными секцией и тэгом
; RCtrl+RShift+RAlt+клавиша - замена секции и тэга в открытом окне редактирования данными, связанными с клавишей
 
; Создание заметки в заданной секции без тэга
>^>+1::Note(1) ; RCtrl+RShift+1 - в 1-й секции
>^>+2::Note(2) ; RCtrl+RShift+2 - во 2-й  
>^>+3::Note(3) ; RCtrl+RShift+3 - в 3-й
 
; Открытие окна программы
>^>!1::Open(1) ; RCtrl+RAlt+1 - 1-й секции
>^>!2::Open(2) ; RCtrl+RAlt+2 - 2-я секции
>^>!3::Open(3) ; RCtrl+RAlt+3 - 3-я секции
 
>^>+vkBF::Note(name_tag,"$name") ; RCtrl+RShift+/ - создание записи с автоматически сгенерированным из названия открытого файла, определенного из командной строки (секция задается в настройках ниже; работает, если программа запускается вместе с открытием файла)
>^>!vkBF::Open(name_tag,"$name") ; RCtrl+RAlt+/ - открытие секции/тэга, соответствующих данному запущенному файлу (если нет - открывается настроенная секция)
 
>^>+Space::Note(proc_tag,"$proc") ; RCtrl+RShift+Space - все то же, но название берется из имени процесса, соответствующего открытому окну
>^>!Space::Open(proc_tag,"$proc") ; RCtrl+RAlt+Space - открытие секции/тэга, соответствующих активному приложению приложению
 
; Мышь (действует в окне программы)
#IfWinActive ahk_class CintaNotes.MainFrame
MButton::Send {F7} ; Cредняя кнопка - открытие адреса выделенной заметки
^RButton::Send ^{vk43} ; Ctrl+ПКМ - копирование выделенной заметки  
+RButton::Send {F4} ; Shift+ПКМ - редактирование тэгов заметки
 
#IfWinActive ahk_class Cinta.ModelessDialog
<^Space:: ; LCrl+Space в окне редактирования - тэг меняется на дочерний /!!!
ControlGetText tag, Cinta.Edit2
StringTrimRight tag, tag, 1
ControlSetText Cinta.Edit2, % tag "/!!!"
return
#IfWinActive
start:
 
;------------ Настройки скрипта -------------
 
add_chtag:=1 ; Создание заметки с суффиксом или в дочернем тэге ToDo при секундном зажатии правого Ctrl. То же зажатие правого Ctrl при открытии или переименовании будет задействовать соответствующий тэг
 
chtag:="_ToDo" ; Сам этот суффикс. Если вписать "/ToDo", будет создаваться дочерний тэг
 
local_path:=2 ; Определения пути локального файла из командной строки (работает, если программа запускается вместе с открытием файла). 1 - записывать в поле адреса, для запуска по F7/СКМ, 2 - записывать и в примечание, 3 - то же, но записывать в поле адреса содержащую файл папку, 0 - не использовать.  
; Если активно окно FAR, при local_path > 0 будет создаваться пустая заметка с заголовком из пути выделенного файла или папки и ссылкой на него
 
excl:="LibreOffice,OpenOffice" ; Фрагменты заголовков окон программ, в которых это определение работает неверно и поле адреса остается пустым, через запятую  
 
name_tag:=3 ; Номер секции, в которой будет автоматически создаваться запись с тэгом из названия открытого файла
 
proc_tag:=1 ; Номер секции, в которой будет автоматически создаваться запись с тэгом из процесса активного окна
 
estr:=2 ; Максимальное число последовательных пустых строк в скопированном тексте; первые пустые строки отбрасываются автоматически. 0 - без ограничения
 
clip:=2 ; Сохранять в буфере обмена: 1 - текст заметки, 2 - первую непустую строку в виде, пригодном для переименования файлов; 0 - без изменения
 
;----------------------------------
 
SplitPath A_ScriptName, , , , cfg
cfg:=cfg ".cfg"
IfNotExist % cfg
    FileAppend , , % cfg, utf-8
Loop Read, % cfg
{
    If A_LoopReadLine contains `;
        continue
    If A_LoopReadLine=`r`n
        continue
    Loop Parse, A_LoopReadLine, CSV
    {
        If (A_Index=1)            
            tab:=A_LoopField
        If (A_Index=2)
            tag:=A_LoopField    
        If (A_Index=3)
            key:=A_LoopField
    }
    tab_%key%:=tab
    tag_%key%:=tag
    Hotkey % ">^>+" key, Note
    Hotkey IfWinActive, ahk_class Cinta.ModelessDialog
    Hotkey % ">^>+>!" key, Note
    Hotkey IfWinActive
    Hotkey % ">^>!" key, Open
}
return
 
Note:
getp()
Note(tab,tag)
return
 
Open:
getp()
Open(tab,tag)
return
 
getp()
{
    global
    StringGetPos  kf, A_ThisHotkey, ^
    StringTrimLeft key, A_ThisHotkey, kf+1
    StringGetPos  kf, key, +
    StringTrimLeft key, key, kf+1
    StringGetPos  kf, key, !
    StringTrimLeft key, key, kf+1
    tab:=tab_%key%
    tag:=tag_%key%
    return
}
                    
 
Note(tab,tag="")
{
    global
    clip_old:=Clipboard
    far:=0
    KeyWait Shift, T1
    KeyWait Ctrl, T0.6
    e:=ErrorLevel
    WinGetActiveTitle t
    WinGetClass cl, A
    f_path:=""
    If local_path
    {
        If t not contains % excl
            f_path:=GetPath(t,1)
        If t contains Far 3,Far 2,Far 1            
        {
            Clipboard:=""
            Send ^!{Ins}
            ClipWait 2
            If Clipboard
            {
                f_path:=ClipBoard
                far:=1
            }
        }
        If (tag="$name")
        {
            SplitPath f_path, , , , tag
            StringReplace tag, tag, % " ", % "_", All
        }
        If (tag="$proc")
        {
            WinGet pr, ProcessName, % t
            SplitPath pr, , , , pr
            StringReplace tag, pr, % " ", % "_", All
        }
    }
    If A_Thishotkey not contains % ">^>+>!"
    {
        KeyWait RCtrl
        Send ^{F12}
        If (cl="Cinta.ModelessDialog")
            WinWaitNotActive % t, , 10
        WinWaitActive ahk_class Cinta.ModelessDialog, , 10
        Sleep 200
    }
    If far
    {
        ControlSetText Cinta.Edit1, % "Far: " f_path
        ControlSetText Cinta.RichEdit1,% ""
    }
    ControlGetText add, Cinta.Edit3, ahk_class Cinta.ModelessDialog
    If (add="") && (local_path>0) && (f_path<>"")
    {
        If (local_path>1)
            ControlSetText Cinta.RichEdit2, % f_path
        If (local_path=3)
            SplitPath f_path, , f_path            
        ControlSetText Cinta.Edit3, % f_path        
    }
    If estr
    {
        ControlGetText txt, Cinta.RichEdit1
        txt:=MaxEmptyString(txt,estr)
        ControlSetText Cinta.RichEdit1, % txt
    }        
    If clip
    {
        ControlGetText ntxt, Cinta.RichEdit1, ahk_class Cinta.ModelessDialog
        If (clip=2)
        {
            Loop parse, ntxt, `n, `r  
            {
                If (A_LoopField="")
                    continue
                ntxt:=A_LoopField            
                break            
            }
            ntxt:=ValidName(ntxt)
            ntxt:=FirstUppercase(ntxt)
        }
        Clipboard:=ntxt
    }
    else
        Clipboard:=clip_old
    Control Choose, % tab, Cinta.Combobox1, ahk_class Cinta.ModelessDialog
    ControlFocus Cinta.Edit2
    If tag
    {
        If (add_chtag>0) && (e>0)
            tag:=tag . chtag
        ControlSetText Cinta.Edit2, % tag
        Send {End}
    }
    return
}
 
Open(tab,tag="")
{
    global
    KeyWait RAlt, T1
    KeyWait RCtrl, T0.6
    e:=ErrorLevel
    If (tag="$name")
    {
        WinGetActiveTitle t
        tag:=GetPath(t,1)
        SplitPath tag, , , , tag
        StringReplace tag, tag, % " ", % "_", All
    }
    If (tag="$proc")
    {
        WinGet pr, ProcessName, % t
        SplitPath pr, , , , pr
        StringReplace tag, pr, % " ", % "_", All
    }
    IfWinActive ahk_class CintaNotes.MainFrame
        goto end
    KeyWait RCtrl
    Send ^!{F12}
    WinWait ahk_class CintaNotes.MainFrame, , 2
    If ErrorLevel
        return
    end:
    Send ^{%tab%}
    Sleep 300
    If tag
    {
        If (add_chtag>0) && (e>0)
            tag:=tag . chtag
        ControlSetText Cinta.Edit1, % tag
        ControlSend Cinta.Edit1, {Enter}
    }
    return
}
 
FirstUppercase(t)
{
    StringLeft n, t, 1
    StringTrimLeft k, t, 1
    StringUpper n, n
    return n . k
}
 
MaxEmptyString(text,max)
{
    t:=""
    n:=max
    Loop Parse, text, `n, `r
    {
        If A_LoopField
        {
            t:=t . A_LoopField  "`r`n"
            n:=0
            continue            
        }
        else
        {
            n:=n+1
            If (n<=max)
                t:=t "`r`n"
        }
    }
    return t
}
 
GetPath(title,del_quotes=0)
{
    WinGet pr, ProcessName, % title
    Process, Exist, % pr
    pid := ErrorLevel
    for process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
    If (process.ProcessId = pid)
    cmdline := process.CommandLine
    If cmdline contains Explorer.exe
        cmdline:=""
    StringGetPos pos, cmdline, .exe"
    StringTrimLeft f_path, cmdline, % pos+6
    If del_quotes
        StringReplace f_path, f_path, ", , All
    return f_path
}
 
ValidName(n)
{
    StringReplace n, n, `r`n,% " ", All
    StringReplace n, n, `n,% " ", All
    StringReplace n, n, \,% " ", All
    StringReplace n, n, /,% " ", All
    StringReplace n, n, :, ,All
    StringReplace n, n, *, ,All
    StringReplace n, n, ?, ,All
    StringReplace n, n, ", ,All
    StringReplace n, n, >,% " ", All
    StringReplace n, n, <,% " ", All
    StringReplace n, n, |, -, All
    StringReplace n, n,% "  ", % " ", All
    return Trim(n)
}    
 
 


Всего записей: 1202 | Зарегистр. 10-12-2007 | Отправлено: 11:03 19-05-2014 | Исправлено: Krot66, 09:40 21-05-2014
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » CintaNotes


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru