Repository navigation
Expand file tree
/
Copy pathmanual.html
More file actions
536 lines (504 loc) · 39.1 KB
/
Copy pathmanual.html
File metadata and controls
536 lines (504 loc) · 39.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Taskly — Manual</title>
<meta name="description" content="Taskly user manual — scheduling shortcuts, smart lists, custom lists, editing, CLI, and sync.">
<link rel="stylesheet" href="styles.css?v=11">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="taskly.svg" type="image/svg+xml" sizes="any">
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?8e2445912635226bcba0c400bfb6079d";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<style>.lang-menu li.lang-choice{padding:0}.lang-menu .lang-choice button{display:block;width:100%;padding:8px 12px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer}.lang-menu .lang-choice button:focus-visible{outline:2px solid currentColor;outline-offset:-2px;border-radius:4px}</style>
<style>.guide-status{margin:20px 0;padding:16px 20px;border:1px solid currentColor;border-radius:10px;font-size:.95rem;line-height:1.65}.guide-status p{margin:0 0 8px}.guide-status a{text-decoration:underline;text-underline-offset:4px}html:lang(en) .reader-zh,html:lang(zh) .reader-en{display:none!important}</style>
</head>
<body>
<!-- Nav -->
<nav class="nav-container">
<div class="nav-wrapper">
<a href="index.html" class="nav-brand">
<svg class="nav-logo" width="28" height="28" viewBox="0 0 512 512" fill="none">
<rect width="512" height="512" rx="115" fill="#007AFF"/>
<polyline points="156,276 232,352 372,192" fill="none" stroke="#FFFFFF" stroke-width="42" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
Taskly
</a>
<ul class="nav-menu">
<li><a href="index.html#features" data-en="Features" data-zh="功能">Features</a></li>
<li><a href="manual.html" data-en="Manual" data-zh="手册" style="color:var(--accent)">Manual</a></li>
<li><a href="index.html#cli" data-en="CLI" data-zh="命令行">CLI</a></li>
<li><a href="index.html#download" data-en="Download" data-zh="下载">Download</a></li>
<!-- Language Dropdown -->
<li class="lang-dropdown-wrapper">
<button class="lang-btn">
<svg class="globe-icon" width="16" height="16" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="10"></circle>
<line x1="2" y1="12" x2="22" y2="12"></line>
<path
d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z">
</path>
</svg>
<span id="current-lang-label" data-en="English" data-zh="简体中文">English</span>
</button>
<ul class="lang-menu">
<li class="lang-choice"><button type="button" onclick="setLanguage('en')">English</button></li>
<li class="lang-choice"><button type="button" onclick="setLanguage('zh')">简体中文</button></li>
</ul>
</li>
</ul>
</div>
</nav>
<!-- Hero -->
<section class="manual-hero" style="padding-top:88px;padding-bottom:40px">
<div class="container">
<span class="eyebrow animate-on-scroll" data-en="User Manual" data-zh="使用手册">User Manual</span>
<h1 class="animate-on-scroll">
<span data-en="Everything Taskly can do" data-zh="Taskly 能做的事">Everything Taskly can do</span>
</h1>
<aside class="guide-status"><p class="reader-en " lang="en">Development preview; no paid checkout is open. A future official desktop purchase will be announced with its delivered terms.</p><p class="reader-zh " lang="zh">开发预览,尚未开放付费购买。未来官方桌面版开售时再公布实际交付条款。</p><a class="reader-en" lang="en" href="https://github.com/turinglambdaai/taskly/blob/main/docs/USER-GUIDE.md">Current installation, privacy and recovery</a><a class="reader-zh" lang="zh" href="https://github.com/turinglambdaai/taskly/blob/main/docs/USER-GUIDE.zh-CN.md">当前安装、隐私与恢复</a></aside>
<p class="lead animate-on-scroll"
data-en="Scheduling shortcuts, lists, editing, the CLI, and sync — in one place."
data-zh="速记语法、列表、编辑、命令行与同步,一处说清。">
Scheduling shortcuts, lists, editing, the CLI, and sync — in one place.
</p>
</div>
</section>
<!-- Two-column: TOC + content -->
<div class="manual-layout manual-body">
<!-- Sticky side TOC -->
<aside class="manual-toc" id="toc">
<div class="manual-toc-group" data-en="Get started" data-zh="上手">Get started</div>
<a href="#quickstart" data-en="Five-minute start" data-zh="五分钟上手">Five-minute start</a>
<div class="manual-toc-group" data-en="Scheduling" data-zh="排程">Scheduling</div>
<a href="#shortcuts" data-en="Quick syntax" data-zh="速记语法">Quick syntax</a>
<a href="#relative" data-en="Relative time (+)" data-zh="相对时间 (+)">Relative time (+)</a>
<a href="#exact" data-en="Exact time (@)" data-zh="精确时间 (@)">Exact time (@)</a>
<a href="#dates" data-en="Absolute dates" data-zh="绝对日期">Absolute dates</a>
<a href="#examples" data-en="Examples" data-zh="组合示例">Examples</a>
<div class="manual-toc-group" data-en="Organizing" data-zh="组织">Organizing</div>
<a href="#smart-lists" data-en="Smart lists" data-zh="智能列表">Smart lists</a>
<a href="#custom-lists" data-en="Custom lists" data-zh="自定义列表">Custom lists</a>
<div class="manual-toc-group" data-en="Editing" data-zh="编辑">Editing</div>
<a href="#editing" data-en="Editing tasks" data-zh="编辑任务">Editing tasks</a>
<div class="manual-toc-group" data-en="Power" data-zh="进阶">Power</div>
<a href="#cli" data-en="CLI" data-zh="命令行">CLI</a>
<a href="#sync" data-en="Backup and migration" data-zh="备份与迁移">Backup and migration</a>
</aside>
<!-- Content -->
<main>
<!-- =================== Quick start =================== -->
<section class="manual-section" id="quickstart">
<h2 class="manual-h2"><span class="h2-emoji">🚀</span>
<span data-en="Five-minute start" data-zh="五分钟上手">Five-minute start</span>
</h2>
<p data-en="Download, open, add one task. That's the whole tutorial — everything else on this page is optional."
data-zh="下载、打开、加一条任务。教程到这里就结束了——本页其余内容都是可选的。">
Download, open, add one task. That's the whole tutorial — everything else on this page is optional.
</p>
<ol>
<li data-en="<strong>Install.</strong> Grab the latest build from the <a href='https://github.com/turinglambdaai/taskly/releases/latest'>Releases</a> page: drag the app from the .dmg into Applications, run the .msi installer on Windows, or install the .deb / .rpm / .AppImage on Linux."
data-zh="<strong>安装。</strong>到 <a href='https://github.com/turinglambdaai/taskly/releases/latest'>Releases</a> 页下载最新版:macOS 把 .dmg 里的应用拖进「应用程序」,Windows 双击 .msi 安装,Linux 用 .deb / .rpm / .AppImage。">
<strong>Install.</strong> Grab the latest build from the Releases page.
</li>
<li data-en="<strong>Open it.</strong> The left side holds the smart lists (Today, Scheduled, All, Completed) and your own lists; tasks live on the right. There is no account and nothing to configure."
data-zh="<strong>打开。</strong>左边是智能列表(今天、计划、全部、完成)和你自己的清单,任务在右边。没有账号,也不需要任何配置。">
<strong>Open it.</strong> Smart lists on the left, tasks on the right — no account, nothing to configure.
</li>
<li data-en="<strong>Add a task.</strong> Click the add field (or press <code>⌘N</code> / <code>Ctrl+N</code>), type what to do, and add a due date in plain language if you want: <code>交周报 @15:00 +1d</code> is due tomorrow at 3pm. Press Enter."
data-zh="<strong>加一条任务。</strong>点输入框(或按 <code>⌘N</code> / <code>Ctrl+N</code>),写上要做的事,需要的话用大白话带上时间:<code>交周报 @15:00 +1d</code> 表示明天下午 3 点到期。回车即可。">
<strong>Add a task.</strong> Type it with a plain-language due date and press Enter.
</li>
<li data-en="<strong>Finish it.</strong> Click the circle next to the task. A banner offers one-click undo — no confirmation dialogs anywhere."
data-zh="<strong>完成它。</strong>点任务前的圆圈即可。误点会有横幅一键撤销——全程没有确认弹窗。">
<strong>Finish it.</strong> Click the circle; the banner undoes mistakes in one click.
</li>
</ol>
<img src="img/taskly-main-light.png"
alt="Taskly main window on macOS: smart lists, my lists and task rows"
data-alt-en="Taskly main window on macOS: smart lists, my lists and task rows"
data-alt-zh="Taskly 主窗口(macOS):智能清单、我的列表与任务行"
class="manual-shot" loading="lazy">
<p class="manual-hint" data-en="The screenshot is the real macOS build. Windows and Linux follow the same layout with platform-styled window chrome."
data-zh="截图为真实的 macOS 版本。Windows 与 Linux 布局相同,窗口边框随平台风格。">
The screenshot is the real macOS build.
</p>
</section>
<!-- =================== Scheduling shortcuts =================== -->
<section class="manual-section" id="shortcuts">
<h2 class="manual-h2"><span class="h2-emoji">⚡️</span>
<span data-en="Scheduling shortcuts" data-zh="排程速记">Scheduling shortcuts</span>
</h2>
<p data-en="Type a task, then add a scheduling modifier at the end. Taskly extracts the modifier, parses it into a date and time, and leaves the rest as the task text. No calendars to scroll, no dials to turn."
data-zh="在任务文字末尾加上一个排程修饰符,Taskly 会把它提取出来、解析为日期和时间,剩下的文字就是任务本身。无需翻日历,无需拨盘。">
Type a task, then add a scheduling modifier at the end. Taskly extracts the modifier, parses it into a date and time, and leaves the rest as the task text. No calendars to scroll, no dials to turn.
</p>
<p data-en="There are two modifiers: + for relative time, and @ for an exact time of day. You can use one or both."
data-zh="有两种修饰符:+ 表示相对时间,@ 表示一天中的精确时刻。可以只用其一,也可组合使用。">
There are two modifiers: <code>+</code> for relative time, and <code>@</code> for an exact time of day. You can use one or both.
</p>
</section>
<!-- Relative time -->
<section class="manual-section" id="relative">
<h2 class="manual-h2"><span class="h2-emoji">➕</span>
<span data-en="Relative time" data-zh="相对时间">Relative time</span>
</h2>
<p data-en="A + followed by a number and a unit means “that much time from now.”"
data-zh="+ 后跟数字和单位,表示“从现在起 N 个单位后”。">
A <code>+</code> followed by a number and a unit means "that much time from now."
</p>
<table class="syntax-table">
<thead>
<tr>
<th data-en="Syntax" data-zh="语法">Syntax</th>
<th data-en="Unit" data-zh="单位">Unit</th>
<th data-en="Example" data-zh="示例">Example</th>
<th data-en="Meaning" data-zh="含义">Meaning</th>
</tr>
</thead>
<tbody>
<tr><td><code>+10m</code></td><td data-en="minutes" data-zh="分钟">minutes</td><td><code>+30m</code></td><td data-en="30 minutes from now" data-zh="30 分钟后">30 minutes from now</td></tr>
<tr><td><code>+2h</code></td><td data-en="hours" data-zh="小时">hours</td><td><code>+2h</code></td><td data-en="2 hours from now" data-zh="2 小时后">2 hours from now</td></tr>
<tr><td><code>+1d</code></td><td data-en="days" data-zh="天">days</td><td><code>+1d</code></td><td data-en="1 day from now" data-zh="1 天后">1 day from now</td></tr>
<tr><td><code>+1w</code></td><td data-en="weeks" data-zh="周">weeks</td><td><code>+2w</code></td><td data-en="2 weeks from now" data-zh="2 周后">2 weeks from now</td></tr>
<tr><td><code>+1M</code></td><td data-en="months (30 days)" data-zh="月(按 30 天)">months (30 days)</td><td><code>+6M</code></td><td data-en="6 months from now" data-zh="6 个月后">6 months from now</td></tr>
</tbody>
</table>
<div class="callout">
<div class="callout-title">⚠️ <span data-en="Note the units" data-zh="注意单位">Note the units</span></div>
<span data-en="Lowercase m = minutes, uppercase M = months. h = hours, d = days, w = weeks. The number may be omitted (e.g. +d means 1 day)."
data-zh="小写 m = 分钟,大写 M = 月。h = 小时,d = 天,w = 周。数字可省略(如 +d 表示 1 天)。">
Lowercase <code>m</code> = minutes, uppercase <code>M</code> = months. <code>h</code> = hours, <code>d</code> = days, <code>w</code> = weeks. The number may be omitted (e.g. <code>+d</code> means 1 day).
</span>
</div>
</section>
<!-- Exact time -->
<section class="manual-section" id="exact">
<h2 class="manual-h2"><span class="h2-emoji">⏰</span>
<span data-en="Exact time" data-zh="精确时间">Exact time</span>
</h2>
<p data-en="A @ followed by a time sets a specific moment today. You can pin it to tomorrow or a weekday."
data-zh="@ 后跟一个时间,设定今天的某个具体时刻。可附加修饰符固定到明天或某个工作日。">
A <code>@</code> followed by a time sets a specific moment today. You can pin it to tomorrow or a weekday.
</p>
<table class="syntax-table">
<thead>
<tr>
<th data-en="Syntax" data-zh="语法">Syntax</th>
<th data-en="Example" data-zh="示例">Example</th>
<th data-en="Meaning" data-zh="含义">Meaning</th>
</tr>
</thead>
<tbody>
<tr><td><code>@10am</code></td><td><code>@9am</code></td><td data-en="10:00 today" data-zh="今天 10:00">10:00 today</td></tr>
<tr><td><code>@10:30pm</code></td><td><code>@10:30pm</code></td><td data-en="22:30 today" data-zh="今天 22:30">22:30 today</td></tr>
<tr><td><code>@22:30</code></td><td><code>@22:30</code></td><td data-en="Military time" data-zh="24 小时制">24-hour time</td></tr>
<tr><td><code>@now</code></td><td><code>@now</code></td><td data-en="This exact moment" data-zh="此刻">This exact moment</td></tr>
<tr><td><code>@10am tomorrow</code></td><td><code>@8am tmw</code></td><td data-en="tomorrow at that time (tmw works too)" data-zh="明天的同一时刻(tmw 亦可)">tomorrow at that time (tmw works too)</td></tr>
<tr><td><code>@8pm mon</code></td><td><code>@6pm fri</code></td><td data-en="next Monday/Friday at that time" data-zh="下周一/五的同一时刻">next Monday/Friday at that time</td></tr>
</tbody>
</table>
<div class="callout">
<div class="callout-title">🕒 <span data-en="Already passed? Tomorrow it is." data-zh="时间已过?顺延明天。">Already passed? Tomorrow it is.</span></div>
<span data-en="If the time today has already passed and no weekday is given, Taskly silently rolls it forward to the same time tomorrow."
data-zz="若今天的这个时刻已过、且未指定工作日,Taskly 会自动顺延到明天同一时刻。"
data-zh="若今天的这个时刻已过、且未指定工作日,Taskly 会自动顺延到明天同一时刻。">
If the time today has already passed and no weekday is given, Taskly silently rolls it forward to the same time tomorrow.
</span>
</div>
<p data-en="Weekday abbreviations: mon, tue, wed, thu, fri, sat, sun."
data-zh="工作日缩写:mon、tue、wed、thu、fri、sat、sun。">
Weekday abbreviations: <code>mon</code>, <code>tue</code>, <code>wed</code>, <code>thu</code>, <code>fri</code>, <code>sat</code>, <code>sun</code>.
</p>
</section>
<!-- Absolute dates -->
<section class="manual-section" id="dates">
<h2 class="manual-h2"><span class="h2-emoji">📅</span>
<span data-en="Absolute dates" data-zh="绝对日期">Absolute dates</span>
</h2>
<p data-en="In the detail dialog or with the CLI --due flag, you can type a full date instead of a modifier. These always set the date with no time."
data-zh="在详情对话框或 CLI 的 --due 参数里,可直接输入完整日期(不使用修饰符)。此时只设日期、不设时间。">
In the detail dialog or with the CLI <code>--due</code> flag, you can type a full date instead of a modifier. These always set the date with no time.
</p>
<table class="syntax-table">
<thead>
<tr>
<th data-en="Format" data-zh="格式">Format</th>
<th data-en="Example" data-zh="示例">Example</th>
</tr>
</thead>
<tbody>
<tr><td><code>yyyy-MM-dd</code></td><td><code>2026-08-07</code></td></tr>
<tr><td><code>yyyy/MM/dd</code></td><td><code>2026/08/07</code></td></tr>
<tr><td><code>MM/dd/yyyy</code></td><td><code>08/07/2026</code></td></tr>
<tr><td><code>dd/MM/yyyy</code></td><td><code>07/08/2026</code></td></tr>
</tbody>
</table>
</section>
<!-- Examples -->
<section class="manual-section" id="examples">
<h2 class="manual-h2"><span class="h2-emoji">✨</span>
<span data-en="Putting it together" data-zh="组合起来看">Putting it together</span>
</h2>
<p data-en="The modifier lives at the end of the task text. Anything before it becomes the task title."
data-zh="修饰符写在任务文字末尾,前面的部分就是任务标题。">
The modifier lives at the end of the task text. Anything before it becomes the task title.
</p>
<div class="example-row">
<span class="example-input">买牛奶 <span class="arg">+1d</span></span>
<span class="example-arrow">→</span>
<span class="example-result" data-en="<strong>tomorrow</strong>, same time" data-zh="<strong>明天</strong> 同时">→ <strong>tomorrow</strong>, same time</span>
</div>
<div class="example-row">
<span class="example-input">Standup <span class="arg">@9am</span></span>
<span class="example-arrow">→</span>
<span class="example-result" data-en="today <strong>9:00</strong>" data-zh="今天 <strong>9:00</strong>">today <strong>9:00</strong></span>
</div>
<div class="example-row">
<span class="example-input">Ship release <span class="arg">@5pm fri</span></span>
<span class="example-arrow">→</span>
<span class="example-result" data-en="next <strong>Friday 17:00</strong>" data-zh="下<strong>周五 17:00</strong>">next <strong>Friday 17:00</strong></span>
</div>
<div class="example-row">
<span class="example-input">Call mom <span class="arg">@8pm tmw</span></span>
<span class="example-arrow">→</span>
<span class="example-result" data-en="<strong>tomorrow 20:00</strong>" data-zh="<strong>明天 20:00</strong>"><strong>tomorrow 20:00</strong></span>
</div>
<div class="example-row">
<span class="example-input">Reply to email <span class="arg">+30m</span></span>
<span class="example-arrow">→</span>
<span class="example-result" data-en="in <strong>30 minutes</strong>" data-zh="<strong>30 分钟</strong> 后">in <strong>30 minutes</strong></span>
</div>
</section>
<!-- Smart lists -->
<section class="manual-section" id="smart-lists">
<h2 class="manual-h2"><span class="h2-emoji">🗓</span>
<span data-en="Smart lists" data-zh="智能列表">Smart lists</span>
</h2>
<p data-en="The four tiles at the top of the sidebar are automatic views, built from every list:"
data-zh="侧边栏顶部的四个卡片是自动视图,汇总你所有列表的任务:">
The four tiles at the top of the sidebar are automatic views, built from every list:
</p>
<div class="dl-grid">
<div class="dl-item">
<h4 data-en="Today" data-zh="今天">Today</h4>
<p data-en="Tasks due today or overdue." data-zh="今天到期或已逾期的任务。">Tasks due today or overdue.</p>
</div>
<div class="dl-item">
<h4 data-en="Planned" data-zh="计划">Planned</h4>
<p data-en="Everything with a future date or time." data-zh="所有有未来日期或时间的任务。">Everything with a future date or time.</p>
</div>
<div class="dl-item">
<h4 data-en="All" data-zh="全部">All</h4>
<p data-en="Every task, grouped by list." data-zh="所有任务,按列表分组。">Every task, grouped by list.</p>
</div>
<div class="dl-item">
<h4 data-en="Completed" data-zh="已完成">Completed</h4>
<p data-en="Finished tasks, kept for review." data-zh="已完成的任务,留作回顾。">Finished tasks, kept for review.</p>
</div>
</div>
<p data-en="Each tile shows a count badge. Click any tile to filter the task pane."
data-zh="每个卡片显示计数徽章。点击任一卡片即可筛选任务区。">
Each tile shows a count badge. Click any tile to filter the task pane.
</p>
</section>
<!-- Custom lists -->
<section class="manual-section" id="custom-lists">
<h2 class="manual-h2"><span class="h2-emoji">📂</span>
<span data-en="Custom lists" data-zh="自定义列表">Custom lists</span>
</h2>
<p data-en="Below the smart tiles, create your own lists to separate Work, Life, Ideas, and so on. Each list gets an emoji icon and a color."
data-zh="在智能卡片下方,创建自己的列表来区分工作、生活、创意等。每个列表可设 emoji 图标和颜色。">
Below the smart tiles, create your own lists to separate Work, Life, Ideas, and so on. Each list gets an emoji icon and a color.
</p>
<div class="dl-grid">
<div class="dl-item">
<h4 data-en="Create" data-zh="创建">Create</h4>
<p data-en="Click the + next to “My Lists.” A default emoji (📋) and blue color are applied if you skip them."
data-zh="点击「我的列表」旁的 +。若不选择,会套用默认 emoji(📋)和蓝色配色。">
Click the <code>+</code> next to "My Lists." A default emoji (📋) and blue color are applied if you skip them.
</p>
</div>
<div class="dl-item">
<h4 data-en="Edit" data-zh="编辑">Edit</h4>
<p data-en="Double-click a list to rename it or change its icon/color."
data-zh="双击列表即可重命名或更换图标/颜色。">
Double-click a list to rename it or change its icon/color.
</p>
</div>
<div class="dl-item">
<h4 data-en="Move a task" data-zh="移动任务">Move a task</h4>
<p data-en="Right-click a task → “Move to list” → pick the target."
data-zh="右键任务 →「移动到列表」→ 选择目标。">
Right-click a task → "Move to list" → pick the target.
</p>
</div>
<div class="dl-item">
<h4 data-en="Delete a list" data-zh="删除列表">Delete a list</h4>
<p data-en="Deleting a list removes all tasks in it (cascade)."
data-zh="删除列表会级联删除其中所有任务。">
Deleting a list removes all tasks in it (cascade).
</p>
</div>
</div>
</section>
<!-- Editing -->
<section class="manual-section" id="editing">
<h2 class="manual-h2"><span class="h2-emoji">✏️</span>
<span data-en="Editing tasks" data-zh="编辑任务">Editing tasks</span>
</h2>
<p data-en="Taskly has two editing surfaces: a quick inline editor, and a full detail dialog."
data-zh="Taskly 有两层编辑:行内快速编辑,和完整的详情对话框。">
Taskly has two editing surfaces: a quick inline editor, and a full detail dialog.
</p>
<h3 class="manual-h3" data-en="Inline editing" data-zh="行内编辑">Inline editing</h3>
<div class="dl-grid">
<div class="dl-item">
<h4>Complete / uncomplete</h4>
<p data-en="Click the round checkbox. Instant, no mode." data-zh="点圆形复选框。即时生效,无模式切换。">Click the round checkbox. Instant, no mode.</p>
</div>
<div class="dl-item">
<h4 data-en="Edit text + date + notes" data-zh="编辑文字+日期+备注">Edit text + date + notes</h4>
<p data-en="Double-click the task row. Press Enter to save, Esc to cancel."
data-zh="双击任务行。回车保存,Esc 放弃。">
Double-click the task row. Press <kbd>Enter</kbd> to save, <kbd>Esc</kbd> to cancel.
</p>
</div>
</div>
<h3 class="manual-h3" data-en="Detail dialog (ⓘ)" data-zh="详情对话框 (ⓘ)">Detail dialog (ⓘ)</h3>
<div class="dl-grid">
<div class="dl-item">
<h4 data-en="Open" data-zh="打开">Open</h4>
<p data-en="Click the ⓘ button on any task row." data-zh="点击任务行上的 ⓘ 按钮。">Click the <kbd>ⓘ</kbd> button on any task row.</p>
</div>
<div class="dl-item">
<h4 data-en="Fields" data-zh="字段">Fields</h4>
<p data-en="Task text, notes, date, and time — all editable."
data-zh="任务文字、备注、日期、时间,全部可改。">
Task text, notes, date, and time — all editable.
</p>
</div>
<div class="dl-item">
<h4 data-en="Date & time" data-zh="日期与时间">Date & time</h4>
<p data-en="Click the date/time buttons to open pickers. Clear to remove."
data-zh="点日期/时间按钮弹出选择器。可清除。">
Click the date/time buttons to open pickers. Clear to remove.
</p>
</div>
<div class="dl-item">
<h4 data-en="Delete" data-zh="删除">Delete</h4>
<p data-en="Delete button asks for confirmation first." data-zh="删除按钮会先弹出确认。">Delete button asks for confirmation first.</p>
</div>
</div>
</section>
<!-- CLI -->
<section class="manual-section" id="cli">
<h2 class="manual-h2"><span class="h2-emoji">⌘</span>
<span data-en="Command-line interface" data-zh="命令行">Command-line interface</span>
</h2>
<p data-en="The same Taskly binary is also a CLI. Run it with a subcommand and it never boots the GUI — perfect for scripts and AI agents. Every command speaks JSON."
data-zh="同一个 Taskly 二进制也是命令行工具。带子命令运行时不启动 GUI——适合脚本和 AI agent。每个命令都支持 JSON 输出。">
The same Taskly binary is also a CLI. Run it with a subcommand and it never boots the GUI — perfect for scripts and AI agents. Every command speaks JSON.
</p>
<p data-en="Install the taskly command to your PATH once:"
data-zh="一次性把 taskly 命令安装到你的 PATH:">
Install the <code>taskly</code> command to your PATH once:
</p>
<div class="code-block-light"><span class="comment"># install the CLI (macOS/Linux: ~/.local/bin · Windows: user PATH)</span>
<span class="prompt">$</span> taskly install-cli</div>
<table class="syntax-table">
<thead>
<tr>
<th data-en="Command" data-zh="命令">Command</th>
<th data-en="What it does" data-zh="作用">What it does</th>
</tr>
</thead>
<tbody>
<tr><td><code>list</code></td><td data-en="List tasks (filter by list/view/status)" data-zh="列任务(可按列表/视图/状态筛选)">List tasks (filter by list/view/status)</td></tr>
<tr><td><code>lists</code></td><td data-en="List all task lists" data-zh="列出所有任务列表">List all task lists</td></tr>
<tr><td><code>add "<text>"</code></td><td data-en="Add a task (--list, --due, --time, --notes)" data-zh="添加任务(--list、--due、--time、--notes)">Add a task (--list, --due, --time, --notes)</td></tr>
<tr><td><code>update <id></code></td><td data-en="Edit a task" data-zh="编辑任务">Edit a task</td></tr>
<tr><td><code>done</code> / <code>undone</code></td><td data-en="Set complete/incomplete (idempotent)" data-zh="设完成/未完成(幂等)">Set complete/incomplete (idempotent)</td></tr>
<tr><td><code>rm <id></code></td><td data-en="Delete a task" data-zh="删除任务">Delete a task</td></tr>
<tr><td><code>search "<kw>"</code></td><td data-en="Fuzzy search tasks" data-zh="模糊搜索任务">Fuzzy search tasks</td></tr>
<tr><td><code>mklist</code> / <code>rmlist</code></td><td data-en="Create / delete a list" data-zh="创建 / 删除列表">Create / delete a list</td></tr>
</tbody>
</table>
<p data-en="The --due flag uses the same scheduling syntax as the GUI:"
data-zh="--due 参数复用与 GUI 相同的排程语法:">
The <code>--due</code> flag uses the same scheduling syntax as the GUI:
</p>
<div class="code-block-light"><span class="comment"># schedule with the same + and @ modifiers</span>
<span class="prompt">$</span> taskly add <span class="str">"Standup"</span> <span class="flag">--due</span> <span class="str">@9am</span> <span class="flag">--list</span> <span class="str">"Work"</span> <span class="flag">--json</span>
<span class="prompt">$</span> taskly add <span class="str">"Buy milk"</span> <span class="flag">--due</span> <span class="str">+1d</span>
<span class="prompt">$</span> taskly add <span class="str">"Review PRs"</span> <span class="flag">--due</span> <span class="str">2026-08-07</span> <span class="flag">--time</span> <span class="str">17:00</span></div>
<p data-en="Exit codes: 0 success · 1 generic error · 2 validation failed · 3 not found · 4 database error."
data-zh="退出码:0 成功 · 1 通用错误 · 2 校验失败 · 3 未找到 · 4 数据库错误。">
Exit codes: <code>0</code> success · <code>1</code> generic error · <code>2</code> validation failed · <code>3</code> not found · <code>4</code> database error.
</p>
</section>
<!-- Sync -->
<section class="manual-section" id="sync">
<h2 class="manual-h2"><span class="h2-emoji">🔄</span>
<span data-en="Backup and migration" data-zh="备份与迁移">Backup and migration</span>
</h2>
<p data-en="Taskly stores tasks in a local SQLite database. Quit all processes before backing up or moving the complete data directory. Restore to a copy first; avoid simultaneous writers across devices."
data-zh="Taskly 把任务保存在本地 SQLite 数据库中。备份或迁移前退出所有进程,复制完整数据目录,并先在副本验证恢复;不要跨设备同时写入。">
Taskly stores tasks in a local SQLite database. Quit every process before backing up or moving the complete data directory; verify restoration on a copy.
</p>
<div class="callout">
<div class="callout-title">🔒 <span data-en="WAL is not a sync protocol" data-zh="WAL 不是同步协议">WAL is not a sync protocol</span></div>
<span data-en="SQLite WAL coordinates local database connections, not independent cloud replicas. Keep a closed-app backup including any WAL/SHM files. Opening independent replicas can lose edits or corrupt data."
data-zh="SQLite WAL 协调本地数据库连接,不协调独立云端副本。退出后备份时保留可能存在的 WAL/SHM;跨设备并发复制可能丢失修改或损坏数据。">
SQLite WAL coordinates local connections, not independent cloud replicas. Keep a closed-app backup including any WAL/SHM files; concurrent cloud copies can lose edits or corrupt data.
</span>
</div>
</section>
</main>
</div>
<!-- Footer -->
<footer>
<div class="container">
<div class="footer-content">
<div class="footer-brand">Taskly</div>
<div class="footer-links">
<a href="index.html" data-en="Home" data-zh="首页">Home</a>
<a href="https://github.com/turinglambdaai/taskly">GitHub</a>
<a href="https://github.com/turinglambdaai/taskly/releases" data-en="Releases" data-zh="版本发布">Releases</a>
<a href="https://github.com/turinglambdaai/taskly/blob/main/CHANGELOG.md" data-en="Changelog" data-zh="更新日志">Changelog</a>
</div>
<div>© 2026 Taskly. <span data-en="Apache License 2.0." data-zh="Apache 2.0 协议。">Apache License 2.0.</span></div>
</div>
</div>
</footer>
<script src="script.js?v=10"></script>
<script>
// Active-TOC highlighting: mark the section currently in view.
document.addEventListener('DOMContentLoaded', () => {
const links = document.querySelectorAll('.manual-toc a');
const sections = Array.from(links).map(a => {
const id = a.getAttribute('href').slice(1);
return { link: a, el: document.getElementById(id) };
}).filter(s => s.el);
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
links.forEach(l => l.classList.remove('active'));
const match = sections.find(s => s.el === entry.target);
if (match) match.link.classList.add('active');
}
});
}, { rootMargin: '-80px 0px -70% 0px' });
sections.forEach(s => observer.observe(s.el));
});
</script>
</body>
</html>