 |
AutoHotkey Community Let's help each other out
|
| View previous topic :: View next topic |
| Author |
Message |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Sat Nov 29, 2008 1:11 pm Post subject: YATL - Yet Another Todo List |
|
|
Here's my take on a todolist app: YATL - Yet Another Todo List.
Download YATL v1.11
I wrote it mainly because I was looking for some specific things out of a todolist application that I hadn't found elsewhere.
I wanted it all to be in one script, operate as a hotkey-controlled HUD, and be completely keyboard-controlled. I tried to make the script as simple as possible, while leaving a little bit of flexibility in there for slightly more complex uses.
Run the script and you'll see the main GUI:
Press Win-h to view the command list:
Pressing 'n' or 'e' opens the edit field:
Run through the "tutorial" - it'll just take a few minutes of toying around to learn the hotkeys. When you exit the script, YATL saves the current list in the body of the script itself, so is completely self-contained.
Please leave comments/criticism/suggestions - I'd love to improve this script specifically and my coding generally.
Download YATL v1.11
Last edited by rulfzid on Wed Dec 03, 2008 5:39 am; edited 4 times in total |
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Sun Nov 30, 2008 2:08 am Post subject: |
|
|
I cleaned up the original post, added a couple of pics, and uploaded the script to autohotkey.net.
I apologize for the self-bump - I'm just excited by what I've done and anxious to see what other people think (good, bad, or even ugly).
Anyway, hope somebody finds this useful and/or interesting. |
|
| Back to top |
|
 |
HotKeyIt
Joined: 18 Jun 2008 Posts: 4652 Location: AHK Forum
|
Posted: Sun Nov 30, 2008 2:11 am Post subject: |
|
|
Thanks for sharing, looks very smart.
I have found a few bugs and changed, hope you do not mind:
Changed:
| Code: | GuiClose:
ToggleMainGui:
ToggleGui(gid, yatl_shown)
return |
Help says CTRL & T = Show/Hide
It is actually CASPLOCK & T.
IfWinActive does not work that way, you need to use #IfWinActive
Here corrected version:
| Code: | ;==============+
; AUTO-EXECUTE |
;===============================================================================
#SingleInstance, Force
#NoEnv
; Listbox message constants
;---------------------------------------
LB_INSERTSTRING := 0x181
LB_GETCURSEL := 0x188
LB_GETTEXT := 0x189
LB_GETTEXTLEN := 0x18A
LB_SETITEMDATA := 0x19A
LB_DELETESTRING := 0x182
LB_SETCURSEL := 0x186
LB_GETCOUNT := 0x18B
; SendMessageProc - for faster DllCalls
;---------------------------------------
SendMessageProc := GetProcAddress("user32", "SendMessageA")
; Gui options
;---------------------------------------
yatl_font = Tahoma
yatl_font_size = 10
yatl_font_color = White
yatl_tabstop = 12
yatl_margin = 10
yatl_bgcolor = 222222
yatl_control_bgcolor = 333333
yatl_guiW = 400
yatl_listboxH = 300
; Create the Gui's
;---------------------------------------
createGui()
createHelpText()
createHelpGui()
; Load the saved todo lists
;---------------------------------------
LoadTodos(hList)
OnExit, SaveAndExit
return
;===============================================================================
;========================+
; AUTO-EXECUTE FUNCTIONS |
;===============================================================================
createGui() {
global
Gui, +lastfound -caption +alwaysontop
gid := WinExist()
Gui, Margin, %yatl_margin%, %yatl_margin%
Gui, Color, %yatl_bgcolor%, %yatl_control_bgcolor%
Gui, Font, s%yatl_font_size% c%yatl_font_color%, %yatl_font%
Gui, Add, Text, , YET ANOTHER TODO LIST
Gui, Font, s%yatl_font_size%
Gui, Add, ListBox, h%yatl_listboxH% w%yatl_guiW% t%yatl_tabstop% vyatl_list HwndhList,
Gui, Add, Edit, xp yp wp hp vyatl_help -vscroll +readonly Hidden, Help stuff
Gui, Add, Edit, r1 w%yatl_guiW% -WantReturn Hidden vyatl_edit,
Gui, Add, Button, Default Hidden gAddOrEditTask,
Gui, Show, AutoSize, YATL
yatl_shown = 1
}
createHelpGui() {
global
Gui, 2: +lastfound -caption +alwaysontop +owner1
hid := WinExist()
Gui, 2: Margin, %yatl_margin%, %yatl_margin%
Gui, 2: Color, 555555
2fsize := yatl_font_size - 1
Gui, 2: Font, s%2fsize% c%yatl_font_color%, %yatl_font%
Gui, 2: Add, Text, , YATL - Command List
Gui, 2: Add, Text, -vscroll +readonly, %yatl_helptext%
Gui, 2: Show, Hide AutoSize, Help
yatl_help_shown = 0
}
createHelpText() {
global
yatl_helptext =
(LTrim
CapsLock-t`t`tHide/show YATL
n`t`tAdd a new task
e`t`tEdit a task
x`t`tCheck/uncheck a task
Ctrl-x`t`tClear all checked tasks
Delete`t`tDelete selected task
Right`t`tIndent selected task
Left`t`tDedent selected task
Shift-Up`tMove task up
Shift-Down`tMove task down
Ctrl-q`t`tQuit YATL
Ctrl-h`t`tToggle help window
Escape`t`tEscape out of things
)
}
;===============================================================================
; Set the hotkeys
;---------------------------------------
#IfWinActive, YATL AHK_class AutoHotkeyGUI
~n::
Gosub, _AddTask
Return
~e::
Gosub, _EditTask
return
~x::
Gosub, ToggleCheckMark
Return
^x::
Gosub, ClearChecked
Return
~Del::
Gosub, DeleteSelected
Return
~Right::
Gosub, Indent
Return
~Left::
Gosub, Dedent
Return
+Up::
Gosub, MoveUp
Return
+Down::
Gosub, MoveDown
Return
^q::
Gosub, Quit
Return
^h::
GoSub, ToggleHelpGui
Return
~Up::
~Down::
ControlSend, , {%A_ThisHotkey%}, ahk_id %hList%
return
#IfWinActive
CapsLock & t::
Gosub, ToggleMainGUI
Return
#IfWinExist, YATL AHK_class AutoHotkeyGUI
Escape::
Gosub, yatlEscape
Return
#IfWinExist
;=====================+
; SHOW/HIDE THE GUI'S |
;===============================================================================
GuiClose:
ToggleMainGui:
ToggleGui(gid, yatl_shown)
return
ToggleHelpGui:
GuiControlGet, focused_control, focusv
If (focused_control = "yatl_edit")
return
ToggleGui(hid, yatl_help_shown)
return
ToggleGui(hWnd, ByRef isshown) {
If isshown
{ WinHide, ahk_id %hWnd%
isshown = 0
} Else {
WinShow, ahk_id %hWnd%
isshown = 1
}
}
;===============================================================================
;=========================+
; HOTKEYS AND SUBROUTINES |
;===============================================================================
_AddTask:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
yatl_action := "add"
GuiControl, Show, yatl_edit
Gui, Show, Autosize
GuiControl, Focus, yatl_edit
return
_EditTask:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
yatl_action := "edit"
Gui, Submit, NoHide
RegExMatch(yatl_list, "(\s*\[.\] )(.*)", yedit)
Guicontrol, , yatl_edit, %yedit2%
GuiControl, Show, yatl_edit
Gui, Show, Autosize
GuiControl, Focus, yatl_edit
return
AddOrEditTask:
Gui, Submit, NoHide
If not yatl_edit
return
If (yatl_action = "add")
{ yatl_edit := "[ ] " . yatl_edit
i := GetCurrentSelection(hList)
i := (i >= 0) ? i + 1 : i
LB_InsertString(hList, i, yatl_edit)
}
If (yatl_action = "edit")
{ yatl_edit := yedit1 . yatl_edit
i := GetCurrentSelection(hList)
LB_ReplaceString(hList, i, yatl_edit)
}
GuiControl, Hide, yatl_edit
GuiControl, , yatl_edit,
Gui, Show, Autosize
return
ToggleCheckMark:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
i := GetCurrentSelection(hList)
If (i < 0)
return
Gui, Submit, NoHide
replaceStr := RegExReplace(yatl_list, "(\s*\[) (\])", "$1x$2", cnt)
If not cnt
replaceStr := RegExReplace(yatl_list, "(\s*\[)x(\])", "$1 $2")
LB_ReplaceString(hList, i, replaceStr)
return
ClearChecked:
deletelist := ""
cnt := LB_GetCount(hList)
Loop, % cnt
If RegExmatch(LB_GetString(hList, A_Index - 1), "\s*\[x\]")
deletelist .= (A_Index - 1) ","
StringTrimRight, deletelist, deletelist, 1
Sort, deletelist, D`, R
Loop, parse, deletelist, `,
{
LB_DeleteString(hList, A_LoopField)
If (A_LoopField >= LB_GetCount(hList))
LB_SelectThis(hList, A_LoopField - 1)
}
return
DeleteSelected:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
i := GetCurrentSelection(hList)
If (i < 0)
return
LB_DeleteString(hList, i)
cnt := LB_GetCount(hList)
If (i >= cnt)
LB_SelectThis(hList, i - 1)
return
Indent:
Dedent:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
i := GetCurrentSelection(hList)
If (i < 0)
return
Gui, Submit, NoHide
If (A_ThisLabel = "Indent")
replaceStr := "`t" . yatl_list
If (A_ThisLabel = "Dedent")
replaceStr := (Substr(yatl_list, 1, 1) = "`t") ? Substr(yatl_list, 2) : yatl_list
LB_ReplaceString(hList, i, replaceStr)
return
MoveUp:
MoveDown:
GuiControlGet, focused_control, focusv
If (focused_control != "yatl_list")
return
i := GetCurrentSelection(hList)
If (i < 0)
return
j := (A_ThisLabel = "MoveUp") ? i - 1 : i + 1
LB_SwapMove(hList, i, j)
return
yatlEscape:
GuiControlGet, editisvisible, Visible, yatl_edit
If editisvisible
{ GuiControl, Hide, yatl_edit
Gui, Show, Autosize
}
Else If yatl_help_shown
Gosub, ToggleHelpGui
Else
{ WinHide, ahk_id %gid%
WinActivate, ahk_id %curractive%
shown := 0
}
return
Quit:
ExitApp
return
SaveAndExit:
SaveToDos(hList)
ExitApp
Return
;===============================================================================
;=====================+
; SAVE/LOAD FUNCTIONS |
;===============================================================================
SaveToDos(hWnd) {
cnt := LB_GetCount(hWnd)
Loop, % cnt
todos .= LB_GetString(hWnd, A_Index - 1) . "`n"
StringTrimRight, todos, todos, 1
Loop, Read, %A_ScriptFullPath%
{ thisscript .= A_LoopReadLine . "`n"
If InStr(A_LoopReadLine, "Saved YATL List") and not Instr(A_LoopReadLine, "InStr")
break
}
FileDelete, %A_ScriptFullPath%
FileAppend, %thisscript%%todos%, %A_ScriptFullPath%
}
LoadToDos(hWnd) {
istodo = 0
Loop, Read, %A_ScriptFullPath%
{ If istodo
{ If A_LoopReadline
todos .= A_LoopReadLine . "`n"
continue
}
If InStr(A_LoopReadLine, "Saved YATL List") and not Instr(A_LoopReadLine, "InStr")
istodo = 1
}
StringTrimRight, todos, todos, 1
Loop, Parse, Todos, `n
LB_InsertString(hWnd, -1, A_LoopField)
}
;===============================================================================
;===========================+
; DLLCALL WRAPPER FUNCTIONS |
;===============================================================================
GetProcAddress(dll, funcname) {
return DllCall("GetProcAddress", UInt, DllCall("GetModuleHandle", Str, dll) ,Str, funcname)
}
GetCurrentSelection(hWnd) {
global SendMessageProc
global LB_GETCURSEL
Return DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETCURSEL, UInt, 0, UInt, 0)
}
LB_SwapMove(hWnd, from_index, to_index) {
global SendMessageProc
global LB_GETTEXTLEN, LB_GETTEXT, LB_DELETESTRING, LB_INSERTSTRING, LB_SETCURSEL
If (DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETTEXTLEN, UInt, j, UInt, 0) < 0)
return
lo := (from_index < to_index) ? from_index : to_index
len := DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETTEXTLEN, UInt, lo, UInt, 0)
VarSetCapacity(tmp, len)
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETTEXT, UInt, lo, UInt, &tmp)
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_DELETESTRING, UInt, lo, UInt, 0)
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_INSERTSTRING, UInt, lo + 1, UInt, &tmp)
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_SETCURSEL, UInt, to_index, UInt, 0)
}
LB_InsertString(hWnd, index, string) {
global SendMessageProc
global LB_INSERTSTRING, LB_SETCURSEL
i := DllCall(SendMessageProc, UInt, hWnd, UInt, LB_INSERTSTRING, UInt, index, UInt, &string)
Sleep, -1
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_SETCURSEL, UInt, i, UInt, 0)
Return i
}
LB_ReplaceString(hWnd, index, string) {
global SendMessageProc
global LB_DELETESTRING
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_DELETESTRING, UInt, index, UInt, 0)
LB_InsertString(hWnd, index, string)
}
LB_DeleteString(hWnd, index) {
global SendMessageProc
global LB_DELETESTRING
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_DELETESTRING, UInt, index, UInt, 0)
}
LB_GetString(hWnd, index) {
global SendMessageProc
global LB_GETTEXTLEN, LB_GETTEXT
len := DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETTEXTLEN, UInt, index, UInt, 0)
VarSetCapacity(tmp, len)
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETTEXT, UInt, index, UInt, &tmp)
return tmp
}
LB_GetCount(hWnd) {
global SendMessageProc
global LB_GETCOUNT
return DllCall(SendMessageProc, UInt, hWnd, UInt, LB_GETCOUNT, UInt, 0, UInt, 0)
}
LB_SelectThis(hWnd, index) {
global SendMessageProc
global LB_SETCURSEL
DllCall(SendMessageProc, UInt, hWnd, UInt, LB_SETCURSEL, UInt, index, UInt, 0)
}
;===============================================================================
/*******************************************************************************
/*************** DO NOT MODIFY BELOW THIS LINE: Saved YATL List ****************
[ ] Press Ctrl-h for help
[ ] Press "Delete" to remove the selected task |
_________________ AHK_H (2alpha) AHF TT _Struct WatchDir Yaml _Input ObjTree RapidHotkey DynaRun  |
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Sun Nov 30, 2008 2:35 am Post subject: |
|
|
Thanks for your response. I noticed the capslock/ctrl thing earlier and fixed it.
| Quote: | | IfWinActive does not work that way, you need to use #IfWinActive |
Actually, it does if you set hotkeys with the Hotkey command:
| Quote: | Remarks About Hotkey, IfWinXX [, WinTitle, WinText]
The "Hotkey IfWin" commands allow context-sensitive hotkeys to be created and modified while the script is running (by contrast, the #IfWinActive/Exist directives are positional and take effect before the script begins executing). For example:
Hotkey, IfWinActive, ahk_class Notepad
Hotkey, ^!e, MyLabel ; Creates a hotkey that works only in Notepad.
Using "Hotkey IfWin" puts context sensitivity into effect for all subsequently created or modified hotkeys. In addition, each IfWin sub-command is mutually exclusive; that is, only the most recent one will be in effect.
To turn off context sensitivity (that is, to make subsequently-created hotkeys work in all windows), specify any IfWin sub-command but omit the WinTitle/Text parameters. For example: Hotkey, IfWinActive
If "Hotkey IfWin" is never used by a script, the bottommost use of the #IfWin directive (if any) will be in effect for the Hotkey command.
When a mouse or keyboard hotkey is disabled via IfWin, it performs its native function; that is, it passes through to the active window as though there is no such hotkey. There are two exceptions: 1) Windows 95/98/Me: pressing an IfWin-disabled hotkey has no effect (not even its native function); and 2) Joystick hotkeys: although IfWin works, it never prevents other programs from seeing the press of a button. |
Can you explain why you added the GuiClose? I figured that making the Gui captionless would mean that that label would never get launched. |
|
| Back to top |
|
 |
HotKeyIt
Joined: 18 Jun 2008 Posts: 4652 Location: AHK Forum
|
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Sun Nov 30, 2008 1:31 pm Post subject: |
|
|
| HotKeyIt wrote: | GuiClose:
When you press ALT & F4, you will need to press CAPSLOCK & T twice. |
Hm. It might just be me, but I'd rather have Alt-F4 completely exit the program, which it does now, and leave the toggling of the GUI to Ctrl-t. (I changed it to Control from Capslock)
| HotKeyIt wrote: | HotKey, IfWinActive
This will assign the hotkey but not remove it when YALT is not active, do your hotkeys work in other windows when YALT is hidden? For me not. |
I don't want the hotkeys to work in other windows when YATL is hidden. That was intentional - the only hotkey that should work when YATL is hidden is the "Ctrl-t" to show the gui. The adding, editing, moving of tasks stuff should all only happen when the YATL gui is active - that way YATL doesn't interfere with the other programs I have running. |
|
| Back to top |
|
 |
HotKeyIt
Joined: 18 Jun 2008 Posts: 4652 Location: AHK Forum
|
Posted: Mon Dec 01, 2008 6:02 pm Post subject: |
|
|
| rulfzid wrote: |
Hm. It might just be me, but I'd rather have Alt-F4 completely exit the program, which it does now, and leave the toggling of the GUI to Ctrl-t. (I changed it to Control from Capslock)
|
Your posted version does not exit when I press ALT & F4.
| rulfzid wrote: |
I don't want the hotkeys to work in other windows when YATL is hidden. That was intentional - the only hotkey that should work when YATL is hidden is the "Ctrl-t" to show the gui. The adding, editing, moving of tasks stuff should all only happen when the YATL gui is active - that way YATL doesn't interfere with the other programs I have running. |
In your posted version, your hotkeys overwrite all those hotkeys in other windows, so they do not work in other windows!
This is because you are missing comma after IfWinActive/IfWinExist and you better add the ahk_class AutoHotkeyGUI to make sure it is your window:
| Code: | Hotkey, IfWinActive, YATL AHK_class AutoHotkeyGUI
Hotkey, ~n, _AddTask
Hotkey, ~e, _EditTask
Hotkey, ~x, ToggleCheckMark
Hotkey, ^x, ClearChecked
Hotkey, ~Del, DeleteSelected
Hotkey, ~Right, Indent
Hotkey, ~Left, Dedent
Hotkey, +Up, MoveUp
Hotkey, +Down, MoveDown
Hotkey, ^q, Quit
Hotkey, IfWinExist, YATL AHK_class AutoHotkeyGUI
Hotkey, ^h, ToggleHelpGui
Hotkey, Escape, yatlEscape
Hotkey, IfWinActive
Hotkey, ^t, ToggleMainGUI |
_________________ AHK_H (2alpha) AHF TT _Struct WatchDir Yaml _Input ObjTree RapidHotkey DynaRun  |
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Mon Dec 01, 2008 7:12 pm Post subject: |
|
|
| HotKeyIt wrote: | Your posted version does not exit when I press ALT & F4.
...
In your posted version, your hotkeys overwrite all those hotkeys in other windows, so they do not work in other windows!
This is because you are missing comma after IfWinActive/IfWinExist and you better add the ahk_class AutoHotkeyGUI to make sure it is your window: |
You're absolute right. I've posted an update (a very minor one) that quits on GuiClose and adds your fix to the hotkeys. I also changed the hotkey modifier from "Ctrl" to "Win" - mostly because I use ctrl-t quite often to open new tabs in firefox. The helptext and "tutorial" have been changed accordingly.
YATL v1.01 |
|
| Back to top |
|
 |
joemoeschmoe
Joined: 25 Jun 2008 Posts: 25
|
Posted: Mon Dec 01, 2008 8:40 pm Post subject: |
|
|
Nice and simple.
The only thing I'd want is sub-tree folding. |
|
| Back to top |
|
 |
HotKeyIt
Joined: 18 Jun 2008 Posts: 4652 Location: AHK Forum
|
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Mon Dec 01, 2008 9:03 pm Post subject: |
|
|
| joemoeschmoe wrote: | Nice and simple.
The only thing I'd want is sub-tree folding. |
I was thinking about that today.
I intentionally made the script unaware of any tree structure: (1) because it's a listbox that is only simulating a treeview and (2) because I really wanted to keep it stupid-simple and (3) I liked the idea of having the list managed from within the script itself.
However, after thinking about it more, it seems that it would be nice to:
- manage multiple lists separately (i.e. your sub-tree folding suggestion)
- have task completion tracking/logging
This will mean the script will have to create/edit files (which I was trying to avoid), but I suppose that's not that big a deal.
Thanks for checking it out! |
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Tue Dec 02, 2008 2:23 am Post subject: |
|
|
YATL Update - Version 1.1
Another update - fixed a couple of bugs, added a new feature.
- Now, when you press 'x' to check off a list, it does a flash/fadeout effect. I think it looks pretty neat - let me know what you think.
- I also removed the "clear checked" feature, because the above "check off and remove" behavior is the link to the next set of things involving logging and very simple project tracking. I just wanted to post this because I thought it looked pretty cool (and it was interesting to implement)
- Fixed a bug where moving an item above the top of the listbox or past then end caused strange behavior (index-out-of-range stuff).
- Fixed a bug where pressing the main Gui toggle when the help window was open left the help window stranded in the "alwaysontop but captionless" ether.
- Changed the moveup/movedown hotkeys to Win-Up and Win-Down, to be consistent with the rest of the script.
- Updated the initial post with d/l links and new pics that reflect the changes made.
|
|
| Back to top |
|
 |
HotKeyIt
Joined: 18 Jun 2008 Posts: 4652 Location: AHK Forum
|
Posted: Tue Dec 02, 2008 5:37 am Post subject: |
|
|
| rulfzid wrote: | | Now, when you press 'x' to check off a list, it does a flash/fadeout effect. I think it looks pretty neat - let me know what you think. |
Fade out effect looks good, but the item is deleted straight away.
I think keeping a checked item until you delete all checked or selected using Win & x should be kept!
Also would be good to have an ini file where your to do list is backed up.
If you like to avoid using a file, you can save them into the script using IniWrite/IniRead. _________________ AHK_H (2alpha) AHF TT _Struct WatchDir Yaml _Input ObjTree RapidHotkey DynaRun  |
|
| Back to top |
|
 |
rulfzid
Joined: 27 Nov 2008 Posts: 62
|
Posted: Tue Dec 02, 2008 8:50 am Post subject: |
|
|
| HotKeyIt wrote: | Fade out effect looks good, but the item is deleted straight away.
I think keeping a checked item until you delete all checked or selected using Win & x should be kept!
Also would be good to have an ini file where your to do list is backed up.
If you like to avoid using a file, you can save them into the script using IniWrite/IniRead. |
Currently, your list is saved in the script itself (all the way at the bottom). I'm going to add some logging features to track and group tasks - I just really liked the fadeout effect and wanted to show it off. More to come soon... |
|
| Back to top |
|
 |
ABCza
Joined: 03 Jun 2008 Posts: 75 Location: Italy
|
Posted: Wed Dec 03, 2008 12:25 am Post subject: |
|
|
Nice script man!
Found a bug: when the list is empty, if you type "e" it creates a task without the []. _________________ All my scripts/snippets are released under the WTFPL: http://sam.zoy.org/wtfpl/COPYING |
|
| Back to top |
|
 |
|
|
You can post new topics in this forum You can reply to topics in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|