summaryrefslogtreecommitdiff
path: root/docs/guide/ags/variable.md
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-10-15 01:22:24 +0000
committerAylur <[email protected]>2024-10-15 01:22:24 +0000
commitede8890a08b3fbbb1f6df3b8c277ab6424d1befd (patch)
treeedcf54da90550a1c53c0221a7340e43b479ecee5 /docs/guide/ags/variable.md
parentd63332b533b390e7e68f8f1fc2432958c4d36a4f (diff)
docs: better explain ags
Diffstat (limited to 'docs/guide/ags/variable.md')
-rw-r--r--docs/guide/ags/variable.md153
1 files changed, 0 insertions, 153 deletions
diff --git a/docs/guide/ags/variable.md b/docs/guide/ags/variable.md
deleted file mode 100644
index 4207f61..0000000
--- a/docs/guide/ags/variable.md
+++ /dev/null
@@ -1,153 +0,0 @@
-# Variable
-
-```js
-import { Variable } from "astal"
-```
-
-Variable is just a simple object which holds a single value.
-It also has some shortcuts for hooking up subprocesses, intervals and other gobjects.
-
-:::info
-The `Variable` object imported from the `"astal"` package is **not** [Astal.Variable](https://aylur.github.io/libastal/class.Variable.html).
-:::
-
-## Example Usage
-
-```typescript
-const myvar = Variable("initial-value")
-
-// whenever its value changes, callback will be executed
-myvar.subscribe((value: string) => {
- console.log(value)
-})
-
-// settings its value
-myvar.set("new value")
-
-// getting its value
-const value = myvar.get()
-
-// binding them to widgets
-Widget.Label({
- label: bind(myvar).as((value) => `transformed ${value}`),
- label: myvar((value) => `transformed ${value}`), // shorthand for the above
-})
-```
-
-:::warning
-Make sure to make the transform functions passed to `.as()` are pure.
-The `.get()` function can be called anytime by `astal` especially when `deriving`,
-so make sure there are no sideeffects.
-:::
-
-## Variable Composition
-
-Using `Variable.derive` any `Subscribable` object can be composed.
-
-```typescript
-const v1: Variable<number> = Variable(1)
-const v2: Binding<number> = bind(obj, "prop")
-const v3: Subscribable<number> = {
- get: () => 3,
- subscribe: () => () => {},
-}
-
-// first argument is a list of dependencies
-// second argument is a transform function,
-// where the parameters are the values of the dependencies in the order they were passed
-const v4: Variable<number> = Variable.derive(
- [v1, v2, v3],
- (v1: number, v2: number, v3: number) => {
- return v1 * v2 * v3
- }
-)
-```
-
-:::info
-The types are only for demonstration purposes, you do not have to declare
-the type of a Variable, they will be inferred from their initial value.
-:::
-
-## Subprocess shorthands
-
-Using `.poll` and `.watch` we can start subprocesses and capture their
-output. They can poll and watch at the same time, but they
-can only poll/watch once.
-
-:::warning
-The command parameter is passed to [execAsync](/guide/ags/utilities#executing-external-commands-and-scripts)
-which means they are **not** executed in a shell environment,
-they do **not** expand ENV variables like `$HOME`,
-and they do **not** handle logical operators like `&&` and `||`.
-
-If you want bash, run them with bash.
-
-```js
-Variable("").poll(1000, ["bash", "-c", "command $VAR && command"])
-```
-
-:::
-
-```typescript
-const myVar = Variable(0)
- .poll(1000, "command", (out: string, prev: number) => parseInt(out))
- .poll(1000, ["bash", "-c", "command"], (out, prev) => parseInt(out))
- .poll(1000, (prev) => prev + 1)
-```
-
-```typescript
-const myVar = Variable(0)
- .watch("command", (out: string, prev: number) => parseInt(out))
- .watch(["bash", "-c", "command"], (out, prev) => parseInt(out))
-```
-
-You can temporarily stop them and restart them whenever.
-
-```js
-myvar.stopWatch() // this kills the subprocess
-myvar.stopPoll()
-
-myvar.startListen() // launches the subprocess again
-myvar.startPoll()
-
-console.log(myvar.isListening())
-console.log(myvar.isPolling())
-```
-
-## Gobject connection shorthands
-
-Using `.observe` you can connect gobject signals and capture their value.
-
-```typescript
-const myvar = Variable("")
- .observe(obj1, "signal", () => "")
- .observe(obj2, "signal", () => "")
-```
-
-## Dispose if no longer needed
-
-This will stop the interval and force exit the subprocess and disconnect gobjects.
-
-```js
-myVar.drop()
-```
-
-:::warning
-Don't forget to drop derived variables or variables with
-either `.poll`, `.watch` or `.observe` when they are defined inside closures.
-
-```tsx
-function MyWidget() {
- const myvar = Variable().poll()
- const derived = Variable.derive()
-
- return <box
- onDestroy={() => {
- myvar.drop()
- derived.drop()
- }}
- />
-}
-```
-
-:::