A file-based task manager

Initial commit

+1242
+1
.gitignore
···
··· 1 + /target
+1143
Cargo.lock
···
··· 1 + # This file is automatically @generated by Cargo. 2 + # It is not intended for manual editing. 3 + version = 3 4 + 5 + [[package]] 6 + name = "anstream" 7 + version = "0.6.15" 8 + source = "registry+https://github.com/rust-lang/crates.io-index" 9 + checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" 10 + dependencies = [ 11 + "anstyle", 12 + "anstyle-parse", 13 + "anstyle-query", 14 + "anstyle-wincon", 15 + "colorchoice", 16 + "is_terminal_polyfill", 17 + "utf8parse", 18 + ] 19 + 20 + [[package]] 21 + name = "anstyle" 22 + version = "1.0.8" 23 + source = "registry+https://github.com/rust-lang/crates.io-index" 24 + checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" 25 + 26 + [[package]] 27 + name = "anstyle-parse" 28 + version = "0.2.5" 29 + source = "registry+https://github.com/rust-lang/crates.io-index" 30 + checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" 31 + dependencies = [ 32 + "utf8parse", 33 + ] 34 + 35 + [[package]] 36 + name = "anstyle-query" 37 + version = "1.1.1" 38 + source = "registry+https://github.com/rust-lang/crates.io-index" 39 + checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" 40 + dependencies = [ 41 + "windows-sys 0.52.0", 42 + ] 43 + 44 + [[package]] 45 + name = "anstyle-wincon" 46 + version = "3.0.4" 47 + source = "registry+https://github.com/rust-lang/crates.io-index" 48 + checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" 49 + dependencies = [ 50 + "anstyle", 51 + "windows-sys 0.52.0", 52 + ] 53 + 54 + [[package]] 55 + name = "any_key" 56 + version = "0.1.1" 57 + source = "registry+https://github.com/rust-lang/crates.io-index" 58 + checksum = "d21bb2cdab8087ed9d69411dd99c608dbede1df847c255b4d609f0399a3cb452" 59 + dependencies = [ 60 + "debugit", 61 + "mopa", 62 + ] 63 + 64 + [[package]] 65 + name = "arrayvec" 66 + version = "0.7.6" 67 + source = "registry+https://github.com/rust-lang/crates.io-index" 68 + checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" 69 + 70 + [[package]] 71 + name = "async-channel" 72 + version = "2.3.1" 73 + source = "registry+https://github.com/rust-lang/crates.io-index" 74 + checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" 75 + dependencies = [ 76 + "concurrent-queue", 77 + "event-listener-strategy", 78 + "futures-core", 79 + "pin-project-lite", 80 + ] 81 + 82 + [[package]] 83 + name = "async-executor" 84 + version = "1.13.1" 85 + source = "registry+https://github.com/rust-lang/crates.io-index" 86 + checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" 87 + dependencies = [ 88 + "async-task", 89 + "concurrent-queue", 90 + "fastrand", 91 + "futures-lite", 92 + "slab", 93 + ] 94 + 95 + [[package]] 96 + name = "async-fs" 97 + version = "2.1.2" 98 + source = "registry+https://github.com/rust-lang/crates.io-index" 99 + checksum = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a" 100 + dependencies = [ 101 + "async-lock", 102 + "blocking", 103 + "futures-lite", 104 + ] 105 + 106 + [[package]] 107 + name = "async-io" 108 + version = "2.3.4" 109 + source = "registry+https://github.com/rust-lang/crates.io-index" 110 + checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" 111 + dependencies = [ 112 + "async-lock", 113 + "cfg-if", 114 + "concurrent-queue", 115 + "futures-io", 116 + "futures-lite", 117 + "parking", 118 + "polling", 119 + "rustix", 120 + "slab", 121 + "tracing", 122 + "windows-sys 0.59.0", 123 + ] 124 + 125 + [[package]] 126 + name = "async-lock" 127 + version = "3.4.0" 128 + source = "registry+https://github.com/rust-lang/crates.io-index" 129 + checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" 130 + dependencies = [ 131 + "event-listener", 132 + "event-listener-strategy", 133 + "pin-project-lite", 134 + ] 135 + 136 + [[package]] 137 + name = "async-net" 138 + version = "2.0.0" 139 + source = "registry+https://github.com/rust-lang/crates.io-index" 140 + checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7" 141 + dependencies = [ 142 + "async-io", 143 + "blocking", 144 + "futures-lite", 145 + ] 146 + 147 + [[package]] 148 + name = "async-process" 149 + version = "2.3.0" 150 + source = "registry+https://github.com/rust-lang/crates.io-index" 151 + checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" 152 + dependencies = [ 153 + "async-channel", 154 + "async-io", 155 + "async-lock", 156 + "async-signal", 157 + "async-task", 158 + "blocking", 159 + "cfg-if", 160 + "event-listener", 161 + "futures-lite", 162 + "rustix", 163 + "tracing", 164 + ] 165 + 166 + [[package]] 167 + name = "async-signal" 168 + version = "0.2.10" 169 + source = "registry+https://github.com/rust-lang/crates.io-index" 170 + checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" 171 + dependencies = [ 172 + "async-io", 173 + "async-lock", 174 + "atomic-waker", 175 + "cfg-if", 176 + "futures-core", 177 + "futures-io", 178 + "rustix", 179 + "signal-hook-registry", 180 + "slab", 181 + "windows-sys 0.59.0", 182 + ] 183 + 184 + [[package]] 185 + name = "async-task" 186 + version = "4.7.1" 187 + source = "registry+https://github.com/rust-lang/crates.io-index" 188 + checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" 189 + 190 + [[package]] 191 + name = "atomic-waker" 192 + version = "1.1.2" 193 + source = "registry+https://github.com/rust-lang/crates.io-index" 194 + checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" 195 + 196 + [[package]] 197 + name = "autocfg" 198 + version = "1.4.0" 199 + source = "registry+https://github.com/rust-lang/crates.io-index" 200 + checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 201 + 202 + [[package]] 203 + name = "bitflags" 204 + version = "2.6.0" 205 + source = "registry+https://github.com/rust-lang/crates.io-index" 206 + checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 207 + 208 + [[package]] 209 + name = "blocking" 210 + version = "1.6.1" 211 + source = "registry+https://github.com/rust-lang/crates.io-index" 212 + checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" 213 + dependencies = [ 214 + "async-channel", 215 + "async-task", 216 + "futures-io", 217 + "futures-lite", 218 + "piper", 219 + ] 220 + 221 + [[package]] 222 + name = "cfg-if" 223 + version = "1.0.0" 224 + source = "registry+https://github.com/rust-lang/crates.io-index" 225 + checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 226 + 227 + [[package]] 228 + name = "cfg_aliases" 229 + version = "0.2.1" 230 + source = "registry+https://github.com/rust-lang/crates.io-index" 231 + checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 232 + 233 + [[package]] 234 + name = "clap" 235 + version = "4.5.18" 236 + source = "registry+https://github.com/rust-lang/crates.io-index" 237 + checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" 238 + dependencies = [ 239 + "clap_builder", 240 + "clap_derive", 241 + ] 242 + 243 + [[package]] 244 + name = "clap_builder" 245 + version = "4.5.18" 246 + source = "registry+https://github.com/rust-lang/crates.io-index" 247 + checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" 248 + dependencies = [ 249 + "anstream", 250 + "anstyle", 251 + "clap_lex", 252 + "strsim", 253 + ] 254 + 255 + [[package]] 256 + name = "clap_complete" 257 + version = "4.5.29" 258 + source = "registry+https://github.com/rust-lang/crates.io-index" 259 + checksum = "8937760c3f4c60871870b8c3ee5f9b30771f792a7045c48bcbba999d7d6b3b8e" 260 + dependencies = [ 261 + "clap", 262 + ] 263 + 264 + [[package]] 265 + name = "clap_derive" 266 + version = "4.5.18" 267 + source = "registry+https://github.com/rust-lang/crates.io-index" 268 + checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" 269 + dependencies = [ 270 + "heck", 271 + "proc-macro2", 272 + "quote", 273 + "syn", 274 + ] 275 + 276 + [[package]] 277 + name = "clap_lex" 278 + version = "0.7.2" 279 + source = "registry+https://github.com/rust-lang/crates.io-index" 280 + checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" 281 + 282 + [[package]] 283 + name = "clap_mangen" 284 + version = "0.2.23" 285 + source = "registry+https://github.com/rust-lang/crates.io-index" 286 + checksum = "f17415fd4dfbea46e3274fcd8d368284519b358654772afb700dc2e8d2b24eeb" 287 + dependencies = [ 288 + "clap", 289 + "roff", 290 + ] 291 + 292 + [[package]] 293 + name = "colorchoice" 294 + version = "1.0.2" 295 + source = "registry+https://github.com/rust-lang/crates.io-index" 296 + checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" 297 + 298 + [[package]] 299 + name = "concurrent-queue" 300 + version = "2.5.0" 301 + source = "registry+https://github.com/rust-lang/crates.io-index" 302 + checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" 303 + dependencies = [ 304 + "crossbeam-utils", 305 + ] 306 + 307 + [[package]] 308 + name = "crossbeam-utils" 309 + version = "0.8.20" 310 + source = "registry+https://github.com/rust-lang/crates.io-index" 311 + checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" 312 + 313 + [[package]] 314 + name = "crossterm" 315 + version = "0.28.1" 316 + source = "registry+https://github.com/rust-lang/crates.io-index" 317 + checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6" 318 + dependencies = [ 319 + "bitflags", 320 + "crossterm_winapi", 321 + "futures-core", 322 + "mio", 323 + "parking_lot", 324 + "rustix", 325 + "signal-hook", 326 + "signal-hook-mio", 327 + "winapi", 328 + ] 329 + 330 + [[package]] 331 + name = "crossterm_winapi" 332 + version = "0.9.1" 333 + source = "registry+https://github.com/rust-lang/crates.io-index" 334 + checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" 335 + dependencies = [ 336 + "winapi", 337 + ] 338 + 339 + [[package]] 340 + name = "debugit" 341 + version = "0.1.2" 342 + source = "registry+https://github.com/rust-lang/crates.io-index" 343 + checksum = "63c2f7e3034df2b09f750327e23c1adfe33301e6b7388f05bb4fcc0fa46825e3" 344 + dependencies = [ 345 + "version_check 0.1.5", 346 + ] 347 + 348 + [[package]] 349 + name = "edit" 350 + version = "0.1.5" 351 + source = "registry+https://github.com/rust-lang/crates.io-index" 352 + checksum = "f364860e764787163c8c8f58231003839be31276e821e2ad2092ddf496b1aa09" 353 + dependencies = [ 354 + "tempfile", 355 + "which", 356 + ] 357 + 358 + [[package]] 359 + name = "either" 360 + version = "1.13.0" 361 + source = "registry+https://github.com/rust-lang/crates.io-index" 362 + checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 363 + 364 + [[package]] 365 + name = "equivalent" 366 + version = "1.0.1" 367 + source = "registry+https://github.com/rust-lang/crates.io-index" 368 + checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 369 + 370 + [[package]] 371 + name = "errno" 372 + version = "0.3.9" 373 + source = "registry+https://github.com/rust-lang/crates.io-index" 374 + checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" 375 + dependencies = [ 376 + "libc", 377 + "windows-sys 0.52.0", 378 + ] 379 + 380 + [[package]] 381 + name = "event-listener" 382 + version = "5.3.1" 383 + source = "registry+https://github.com/rust-lang/crates.io-index" 384 + checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" 385 + dependencies = [ 386 + "concurrent-queue", 387 + "parking", 388 + "pin-project-lite", 389 + ] 390 + 391 + [[package]] 392 + name = "event-listener-strategy" 393 + version = "0.5.2" 394 + source = "registry+https://github.com/rust-lang/crates.io-index" 395 + checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" 396 + dependencies = [ 397 + "event-listener", 398 + "pin-project-lite", 399 + ] 400 + 401 + [[package]] 402 + name = "fastrand" 403 + version = "2.1.1" 404 + source = "registry+https://github.com/rust-lang/crates.io-index" 405 + checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" 406 + 407 + [[package]] 408 + name = "futures" 409 + version = "0.3.30" 410 + source = "registry+https://github.com/rust-lang/crates.io-index" 411 + checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" 412 + dependencies = [ 413 + "futures-channel", 414 + "futures-core", 415 + "futures-executor", 416 + "futures-io", 417 + "futures-sink", 418 + "futures-task", 419 + "futures-util", 420 + ] 421 + 422 + [[package]] 423 + name = "futures-channel" 424 + version = "0.3.30" 425 + source = "registry+https://github.com/rust-lang/crates.io-index" 426 + checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" 427 + dependencies = [ 428 + "futures-core", 429 + "futures-sink", 430 + ] 431 + 432 + [[package]] 433 + name = "futures-core" 434 + version = "0.3.30" 435 + source = "registry+https://github.com/rust-lang/crates.io-index" 436 + checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" 437 + 438 + [[package]] 439 + name = "futures-executor" 440 + version = "0.3.30" 441 + source = "registry+https://github.com/rust-lang/crates.io-index" 442 + checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" 443 + dependencies = [ 444 + "futures-core", 445 + "futures-task", 446 + "futures-util", 447 + ] 448 + 449 + [[package]] 450 + name = "futures-io" 451 + version = "0.3.30" 452 + source = "registry+https://github.com/rust-lang/crates.io-index" 453 + checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" 454 + 455 + [[package]] 456 + name = "futures-lite" 457 + version = "2.3.0" 458 + source = "registry+https://github.com/rust-lang/crates.io-index" 459 + checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" 460 + dependencies = [ 461 + "fastrand", 462 + "futures-core", 463 + "futures-io", 464 + "parking", 465 + "pin-project-lite", 466 + ] 467 + 468 + [[package]] 469 + name = "futures-macro" 470 + version = "0.3.30" 471 + source = "registry+https://github.com/rust-lang/crates.io-index" 472 + checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" 473 + dependencies = [ 474 + "proc-macro2", 475 + "quote", 476 + "syn", 477 + ] 478 + 479 + [[package]] 480 + name = "futures-sink" 481 + version = "0.3.30" 482 + source = "registry+https://github.com/rust-lang/crates.io-index" 483 + checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" 484 + 485 + [[package]] 486 + name = "futures-task" 487 + version = "0.3.30" 488 + source = "registry+https://github.com/rust-lang/crates.io-index" 489 + checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" 490 + 491 + [[package]] 492 + name = "futures-util" 493 + version = "0.3.30" 494 + source = "registry+https://github.com/rust-lang/crates.io-index" 495 + checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" 496 + dependencies = [ 497 + "futures-channel", 498 + "futures-core", 499 + "futures-io", 500 + "futures-macro", 501 + "futures-sink", 502 + "futures-task", 503 + "memchr", 504 + "pin-project-lite", 505 + "pin-utils", 506 + "slab", 507 + ] 508 + 509 + [[package]] 510 + name = "generational-box" 511 + version = "0.5.6" 512 + source = "registry+https://github.com/rust-lang/crates.io-index" 513 + checksum = "557cf2cbacd0504c6bf8c29f52f8071e0de1d9783346713dc6121d7fa1e5d0e0" 514 + dependencies = [ 515 + "parking_lot", 516 + ] 517 + 518 + [[package]] 519 + name = "getrandom" 520 + version = "0.2.15" 521 + source = "registry+https://github.com/rust-lang/crates.io-index" 522 + checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 523 + dependencies = [ 524 + "cfg-if", 525 + "libc", 526 + "wasi", 527 + ] 528 + 529 + [[package]] 530 + name = "hashbrown" 531 + version = "0.14.5" 532 + source = "registry+https://github.com/rust-lang/crates.io-index" 533 + checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" 534 + 535 + [[package]] 536 + name = "heck" 537 + version = "0.5.0" 538 + source = "registry+https://github.com/rust-lang/crates.io-index" 539 + checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 540 + 541 + [[package]] 542 + name = "hermit-abi" 543 + version = "0.3.9" 544 + source = "registry+https://github.com/rust-lang/crates.io-index" 545 + checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 546 + 547 + [[package]] 548 + name = "hermit-abi" 549 + version = "0.4.0" 550 + source = "registry+https://github.com/rust-lang/crates.io-index" 551 + checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" 552 + 553 + [[package]] 554 + name = "home" 555 + version = "0.5.9" 556 + source = "registry+https://github.com/rust-lang/crates.io-index" 557 + checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" 558 + dependencies = [ 559 + "windows-sys 0.52.0", 560 + ] 561 + 562 + [[package]] 563 + name = "indexmap" 564 + version = "2.5.0" 565 + source = "registry+https://github.com/rust-lang/crates.io-index" 566 + checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" 567 + dependencies = [ 568 + "equivalent", 569 + "hashbrown", 570 + ] 571 + 572 + [[package]] 573 + name = "iocraft" 574 + version = "0.2.3" 575 + source = "registry+https://github.com/rust-lang/crates.io-index" 576 + checksum = "2a35ac1085a4234a6193f443b09de3ede720013201f6cf0d122d1513c5f6eaaf" 577 + dependencies = [ 578 + "any_key", 579 + "bitflags", 580 + "crossterm", 581 + "futures", 582 + "generational-box", 583 + "indexmap", 584 + "iocraft-macros", 585 + "taffy", 586 + "textwrap", 587 + "unicode-width", 588 + "uuid", 589 + ] 590 + 591 + [[package]] 592 + name = "iocraft-macros" 593 + version = "0.1.5" 594 + source = "registry+https://github.com/rust-lang/crates.io-index" 595 + checksum = "b2737d46d5f3c13db67066e5055ccda0d2379f993f77ce2ca90cf1dbd92edfe4" 596 + dependencies = [ 597 + "proc-macro2", 598 + "quote", 599 + "syn", 600 + "uuid", 601 + ] 602 + 603 + [[package]] 604 + name = "is_terminal_polyfill" 605 + version = "1.70.1" 606 + source = "registry+https://github.com/rust-lang/crates.io-index" 607 + checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 608 + 609 + [[package]] 610 + name = "libc" 611 + version = "0.2.159" 612 + source = "registry+https://github.com/rust-lang/crates.io-index" 613 + checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" 614 + 615 + [[package]] 616 + name = "linux-raw-sys" 617 + version = "0.4.14" 618 + source = "registry+https://github.com/rust-lang/crates.io-index" 619 + checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 620 + 621 + [[package]] 622 + name = "lock_api" 623 + version = "0.4.12" 624 + source = "registry+https://github.com/rust-lang/crates.io-index" 625 + checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 626 + dependencies = [ 627 + "autocfg", 628 + "scopeguard", 629 + ] 630 + 631 + [[package]] 632 + name = "log" 633 + version = "0.4.22" 634 + source = "registry+https://github.com/rust-lang/crates.io-index" 635 + checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 636 + 637 + [[package]] 638 + name = "memchr" 639 + version = "2.7.4" 640 + source = "registry+https://github.com/rust-lang/crates.io-index" 641 + checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 642 + 643 + [[package]] 644 + name = "mio" 645 + version = "1.0.2" 646 + source = "registry+https://github.com/rust-lang/crates.io-index" 647 + checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" 648 + dependencies = [ 649 + "hermit-abi 0.3.9", 650 + "libc", 651 + "log", 652 + "wasi", 653 + "windows-sys 0.52.0", 654 + ] 655 + 656 + [[package]] 657 + name = "mopa" 658 + version = "0.2.2" 659 + source = "registry+https://github.com/rust-lang/crates.io-index" 660 + checksum = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915" 661 + 662 + [[package]] 663 + name = "nix" 664 + version = "0.29.0" 665 + source = "registry+https://github.com/rust-lang/crates.io-index" 666 + checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" 667 + dependencies = [ 668 + "bitflags", 669 + "cfg-if", 670 + "cfg_aliases", 671 + "libc", 672 + ] 673 + 674 + [[package]] 675 + name = "num-traits" 676 + version = "0.2.19" 677 + source = "registry+https://github.com/rust-lang/crates.io-index" 678 + checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 679 + dependencies = [ 680 + "autocfg", 681 + ] 682 + 683 + [[package]] 684 + name = "once_cell" 685 + version = "1.19.0" 686 + source = "registry+https://github.com/rust-lang/crates.io-index" 687 + checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" 688 + 689 + [[package]] 690 + name = "parking" 691 + version = "2.2.1" 692 + source = "registry+https://github.com/rust-lang/crates.io-index" 693 + checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" 694 + 695 + [[package]] 696 + name = "parking_lot" 697 + version = "0.12.3" 698 + source = "registry+https://github.com/rust-lang/crates.io-index" 699 + checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 700 + dependencies = [ 701 + "lock_api", 702 + "parking_lot_core", 703 + ] 704 + 705 + [[package]] 706 + name = "parking_lot_core" 707 + version = "0.9.10" 708 + source = "registry+https://github.com/rust-lang/crates.io-index" 709 + checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 710 + dependencies = [ 711 + "cfg-if", 712 + "libc", 713 + "redox_syscall", 714 + "smallvec", 715 + "windows-targets", 716 + ] 717 + 718 + [[package]] 719 + name = "pin-project-lite" 720 + version = "0.2.14" 721 + source = "registry+https://github.com/rust-lang/crates.io-index" 722 + checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" 723 + 724 + [[package]] 725 + name = "pin-utils" 726 + version = "0.1.0" 727 + source = "registry+https://github.com/rust-lang/crates.io-index" 728 + checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 729 + 730 + [[package]] 731 + name = "piper" 732 + version = "0.2.4" 733 + source = "registry+https://github.com/rust-lang/crates.io-index" 734 + checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" 735 + dependencies = [ 736 + "atomic-waker", 737 + "fastrand", 738 + "futures-io", 739 + ] 740 + 741 + [[package]] 742 + name = "polling" 743 + version = "3.7.3" 744 + source = "registry+https://github.com/rust-lang/crates.io-index" 745 + checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" 746 + dependencies = [ 747 + "cfg-if", 748 + "concurrent-queue", 749 + "hermit-abi 0.4.0", 750 + "pin-project-lite", 751 + "rustix", 752 + "tracing", 753 + "windows-sys 0.59.0", 754 + ] 755 + 756 + [[package]] 757 + name = "proc-macro2" 758 + version = "1.0.86" 759 + source = "registry+https://github.com/rust-lang/crates.io-index" 760 + checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" 761 + dependencies = [ 762 + "unicode-ident", 763 + ] 764 + 765 + [[package]] 766 + name = "quote" 767 + version = "1.0.37" 768 + source = "registry+https://github.com/rust-lang/crates.io-index" 769 + checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 770 + dependencies = [ 771 + "proc-macro2", 772 + ] 773 + 774 + [[package]] 775 + name = "redox_syscall" 776 + version = "0.5.6" 777 + source = "registry+https://github.com/rust-lang/crates.io-index" 778 + checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" 779 + dependencies = [ 780 + "bitflags", 781 + ] 782 + 783 + [[package]] 784 + name = "roff" 785 + version = "0.2.2" 786 + source = "registry+https://github.com/rust-lang/crates.io-index" 787 + checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" 788 + 789 + [[package]] 790 + name = "rustix" 791 + version = "0.38.37" 792 + source = "registry+https://github.com/rust-lang/crates.io-index" 793 + checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" 794 + dependencies = [ 795 + "bitflags", 796 + "errno", 797 + "libc", 798 + "linux-raw-sys", 799 + "windows-sys 0.52.0", 800 + ] 801 + 802 + [[package]] 803 + name = "scopeguard" 804 + version = "1.2.0" 805 + source = "registry+https://github.com/rust-lang/crates.io-index" 806 + checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 807 + 808 + [[package]] 809 + name = "signal-hook" 810 + version = "0.3.17" 811 + source = "registry+https://github.com/rust-lang/crates.io-index" 812 + checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801" 813 + dependencies = [ 814 + "libc", 815 + "signal-hook-registry", 816 + ] 817 + 818 + [[package]] 819 + name = "signal-hook-mio" 820 + version = "0.2.4" 821 + source = "registry+https://github.com/rust-lang/crates.io-index" 822 + checksum = "34db1a06d485c9142248b7a054f034b349b212551f3dfd19c94d45a754a217cd" 823 + dependencies = [ 824 + "libc", 825 + "mio", 826 + "signal-hook", 827 + ] 828 + 829 + [[package]] 830 + name = "signal-hook-registry" 831 + version = "1.4.2" 832 + source = "registry+https://github.com/rust-lang/crates.io-index" 833 + checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 834 + dependencies = [ 835 + "libc", 836 + ] 837 + 838 + [[package]] 839 + name = "slab" 840 + version = "0.4.9" 841 + source = "registry+https://github.com/rust-lang/crates.io-index" 842 + checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 843 + dependencies = [ 844 + "autocfg", 845 + ] 846 + 847 + [[package]] 848 + name = "slotmap" 849 + version = "1.0.7" 850 + source = "registry+https://github.com/rust-lang/crates.io-index" 851 + checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" 852 + dependencies = [ 853 + "version_check 0.9.5", 854 + ] 855 + 856 + [[package]] 857 + name = "smallvec" 858 + version = "1.13.2" 859 + source = "registry+https://github.com/rust-lang/crates.io-index" 860 + checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 861 + 862 + [[package]] 863 + name = "smawk" 864 + version = "0.3.2" 865 + source = "registry+https://github.com/rust-lang/crates.io-index" 866 + checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" 867 + 868 + [[package]] 869 + name = "smol" 870 + version = "2.0.2" 871 + source = "registry+https://github.com/rust-lang/crates.io-index" 872 + checksum = "a33bd3e260892199c3ccfc487c88b2da2265080acb316cd920da72fdfd7c599f" 873 + dependencies = [ 874 + "async-channel", 875 + "async-executor", 876 + "async-fs", 877 + "async-io", 878 + "async-lock", 879 + "async-net", 880 + "async-process", 881 + "blocking", 882 + "futures-lite", 883 + ] 884 + 885 + [[package]] 886 + name = "strsim" 887 + version = "0.11.1" 888 + source = "registry+https://github.com/rust-lang/crates.io-index" 889 + checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 890 + 891 + [[package]] 892 + name = "syn" 893 + version = "2.0.77" 894 + source = "registry+https://github.com/rust-lang/crates.io-index" 895 + checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" 896 + dependencies = [ 897 + "proc-macro2", 898 + "quote", 899 + "unicode-ident", 900 + ] 901 + 902 + [[package]] 903 + name = "taffy" 904 + version = "0.5.2" 905 + source = "registry+https://github.com/rust-lang/crates.io-index" 906 + checksum = "9cb893bff0f80ae17d3a57e030622a967b8dbc90e38284d9b4b1442e23873c94" 907 + dependencies = [ 908 + "arrayvec", 909 + "num-traits", 910 + "slotmap", 911 + ] 912 + 913 + [[package]] 914 + name = "tempfile" 915 + version = "3.12.0" 916 + source = "registry+https://github.com/rust-lang/crates.io-index" 917 + checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" 918 + dependencies = [ 919 + "cfg-if", 920 + "fastrand", 921 + "once_cell", 922 + "rustix", 923 + "windows-sys 0.59.0", 924 + ] 925 + 926 + [[package]] 927 + name = "textwrap" 928 + version = "0.16.1" 929 + source = "registry+https://github.com/rust-lang/crates.io-index" 930 + checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9" 931 + dependencies = [ 932 + "smawk", 933 + "unicode-linebreak", 934 + "unicode-width", 935 + ] 936 + 937 + [[package]] 938 + name = "tracing" 939 + version = "0.1.40" 940 + source = "registry+https://github.com/rust-lang/crates.io-index" 941 + checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" 942 + dependencies = [ 943 + "pin-project-lite", 944 + "tracing-core", 945 + ] 946 + 947 + [[package]] 948 + name = "tracing-core" 949 + version = "0.1.32" 950 + source = "registry+https://github.com/rust-lang/crates.io-index" 951 + checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" 952 + 953 + [[package]] 954 + name = "tsk" 955 + version = "0.1.0" 956 + dependencies = [ 957 + "clap", 958 + "clap_complete", 959 + "clap_mangen", 960 + "edit", 961 + "iocraft", 962 + "nix", 963 + "smol", 964 + "xattr", 965 + ] 966 + 967 + [[package]] 968 + name = "unicode-ident" 969 + version = "1.0.13" 970 + source = "registry+https://github.com/rust-lang/crates.io-index" 971 + checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 972 + 973 + [[package]] 974 + name = "unicode-linebreak" 975 + version = "0.1.5" 976 + source = "registry+https://github.com/rust-lang/crates.io-index" 977 + checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 978 + 979 + [[package]] 980 + name = "unicode-width" 981 + version = "0.1.14" 982 + source = "registry+https://github.com/rust-lang/crates.io-index" 983 + checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 984 + 985 + [[package]] 986 + name = "utf8parse" 987 + version = "0.2.2" 988 + source = "registry+https://github.com/rust-lang/crates.io-index" 989 + checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 990 + 991 + [[package]] 992 + name = "uuid" 993 + version = "1.10.0" 994 + source = "registry+https://github.com/rust-lang/crates.io-index" 995 + checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" 996 + dependencies = [ 997 + "getrandom", 998 + ] 999 + 1000 + [[package]] 1001 + name = "version_check" 1002 + version = "0.1.5" 1003 + source = "registry+https://github.com/rust-lang/crates.io-index" 1004 + checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" 1005 + 1006 + [[package]] 1007 + name = "version_check" 1008 + version = "0.9.5" 1009 + source = "registry+https://github.com/rust-lang/crates.io-index" 1010 + checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 1011 + 1012 + [[package]] 1013 + name = "wasi" 1014 + version = "0.11.0+wasi-snapshot-preview1" 1015 + source = "registry+https://github.com/rust-lang/crates.io-index" 1016 + checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 1017 + 1018 + [[package]] 1019 + name = "which" 1020 + version = "4.4.2" 1021 + source = "registry+https://github.com/rust-lang/crates.io-index" 1022 + checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" 1023 + dependencies = [ 1024 + "either", 1025 + "home", 1026 + "once_cell", 1027 + "rustix", 1028 + ] 1029 + 1030 + [[package]] 1031 + name = "winapi" 1032 + version = "0.3.9" 1033 + source = "registry+https://github.com/rust-lang/crates.io-index" 1034 + checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" 1035 + dependencies = [ 1036 + "winapi-i686-pc-windows-gnu", 1037 + "winapi-x86_64-pc-windows-gnu", 1038 + ] 1039 + 1040 + [[package]] 1041 + name = "winapi-i686-pc-windows-gnu" 1042 + version = "0.4.0" 1043 + source = "registry+https://github.com/rust-lang/crates.io-index" 1044 + checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" 1045 + 1046 + [[package]] 1047 + name = "winapi-x86_64-pc-windows-gnu" 1048 + version = "0.4.0" 1049 + source = "registry+https://github.com/rust-lang/crates.io-index" 1050 + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" 1051 + 1052 + [[package]] 1053 + name = "windows-sys" 1054 + version = "0.52.0" 1055 + source = "registry+https://github.com/rust-lang/crates.io-index" 1056 + checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 1057 + dependencies = [ 1058 + "windows-targets", 1059 + ] 1060 + 1061 + [[package]] 1062 + name = "windows-sys" 1063 + version = "0.59.0" 1064 + source = "registry+https://github.com/rust-lang/crates.io-index" 1065 + checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 1066 + dependencies = [ 1067 + "windows-targets", 1068 + ] 1069 + 1070 + [[package]] 1071 + name = "windows-targets" 1072 + version = "0.52.6" 1073 + source = "registry+https://github.com/rust-lang/crates.io-index" 1074 + checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 1075 + dependencies = [ 1076 + "windows_aarch64_gnullvm", 1077 + "windows_aarch64_msvc", 1078 + "windows_i686_gnu", 1079 + "windows_i686_gnullvm", 1080 + "windows_i686_msvc", 1081 + "windows_x86_64_gnu", 1082 + "windows_x86_64_gnullvm", 1083 + "windows_x86_64_msvc", 1084 + ] 1085 + 1086 + [[package]] 1087 + name = "windows_aarch64_gnullvm" 1088 + version = "0.52.6" 1089 + source = "registry+https://github.com/rust-lang/crates.io-index" 1090 + checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 1091 + 1092 + [[package]] 1093 + name = "windows_aarch64_msvc" 1094 + version = "0.52.6" 1095 + source = "registry+https://github.com/rust-lang/crates.io-index" 1096 + checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 1097 + 1098 + [[package]] 1099 + name = "windows_i686_gnu" 1100 + version = "0.52.6" 1101 + source = "registry+https://github.com/rust-lang/crates.io-index" 1102 + checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 1103 + 1104 + [[package]] 1105 + name = "windows_i686_gnullvm" 1106 + version = "0.52.6" 1107 + source = "registry+https://github.com/rust-lang/crates.io-index" 1108 + checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 1109 + 1110 + [[package]] 1111 + name = "windows_i686_msvc" 1112 + version = "0.52.6" 1113 + source = "registry+https://github.com/rust-lang/crates.io-index" 1114 + checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 1115 + 1116 + [[package]] 1117 + name = "windows_x86_64_gnu" 1118 + version = "0.52.6" 1119 + source = "registry+https://github.com/rust-lang/crates.io-index" 1120 + checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 1121 + 1122 + [[package]] 1123 + name = "windows_x86_64_gnullvm" 1124 + version = "0.52.6" 1125 + source = "registry+https://github.com/rust-lang/crates.io-index" 1126 + checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 1127 + 1128 + [[package]] 1129 + name = "windows_x86_64_msvc" 1130 + version = "0.52.6" 1131 + source = "registry+https://github.com/rust-lang/crates.io-index" 1132 + checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 1133 + 1134 + [[package]] 1135 + name = "xattr" 1136 + version = "1.3.1" 1137 + source = "registry+https://github.com/rust-lang/crates.io-index" 1138 + checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" 1139 + dependencies = [ 1140 + "libc", 1141 + "linux-raw-sys", 1142 + "rustix", 1143 + ]
+14
Cargo.toml
···
··· 1 + [package] 2 + name = "tsk" 3 + version = "0.1.0" 4 + edition = "2021" 5 + 6 + [dependencies] 7 + clap = { version = "4.5.18", features = ["derive", "env"] } 8 + clap_complete = "4.5.29" 9 + clap_mangen = "0.2.23" 10 + edit = "0.1.5" 11 + iocraft = "0.2.3" 12 + nix = "0.29.0" 13 + smol = "2.0.2" 14 + xattr = "1.3.1"
+84
src/main.rs
···
··· 1 + use std::path::PathBuf; 2 + use std::{env::current_dir, io::Read}; 3 + 4 + //use smol; 5 + //use iocraft::prelude::*; 6 + use clap::{Args, Parser, Subcommand}; 7 + use edit::edit as open_editor; 8 + 9 + fn default_dir() -> PathBuf { 10 + current_dir().unwrap() 11 + } 12 + 13 + #[derive(Parser)] 14 + // TODO: add long_about 15 + #[command(version, about, long_about = None)] 16 + struct Cli { 17 + #[arg(short = 'C', env = "TSK_DIR", value_name = "DIR")] 18 + dir: Option<PathBuf>, 19 + // TODO: other global options 20 + #[command(subcommand)] 21 + command: Commands, 22 + } 23 + 24 + #[derive(Subcommand)] 25 + enum Commands { 26 + /// Creates a new task, automatically assigning it a unique identifider and persisting 27 + Push { 28 + /// Whether to open $EDITOR to edit the content of the task. The first line if the 29 + /// resulting file will be the task's title. The body follows the title after two newlines, 30 + /// similr to the format of a commit message. 31 + #[arg(short = 'e', default_value_t = false)] 32 + edit: bool, 33 + 34 + /// The body of the task. It may be specified as either a string using quotes or the 35 + /// special character '-' to read from stdin. 36 + #[arg(short = 'b')] 37 + body: Option<String>, 38 + 39 + /// The title of the task as a raw string. It mus be proceeded by two dashes (--). 40 + #[command(flatten)] 41 + title: Title, 42 + }, 43 + } 44 + 45 + #[derive(Args)] 46 + #[group(required = true, multiple = false)] 47 + struct Title { 48 + /// The title of the task. This is useful for when you also wish to specify the body of the 49 + /// task as an argument (ie. with -b). 50 + #[arg(short, value_name = "TITLE")] 51 + title: Option<String>, 52 + 53 + #[arg(value_name = "TITLE")] 54 + title_simple: Option<Vec<String>>, 55 + } 56 + 57 + fn main() { 58 + let cli = Cli::parse(); 59 + if let Commands::Push { edit, body, title } = cli.command { 60 + let title = if let Some(title) = title.title { 61 + eprintln!("TITLE: {}", title); 62 + title 63 + } else if let Some(title) = title.title_simple { 64 + let joined = title.join(" "); 65 + eprintln!("TITLE simple: {}", joined); 66 + joined 67 + } else { 68 + "".to_string() 69 + }; 70 + let mut body = body.unwrap_or_default(); 71 + if body == "-" { 72 + // add newline so you can type directly in the shell 73 + eprintln!(""); 74 + body.clear(); 75 + std::io::stdin() 76 + .read_to_string(&mut body) 77 + .expect("Failed to read stdin"); 78 + } 79 + if edit { 80 + body = open_editor(format!("{title}\n\n{body}")).expect("Failed to edit file"); 81 + } 82 + eprintln!("BODY: {body}"); 83 + } 84 + }