1
0
mirror of https://github.com/taigrr/wtf synced 2025-01-18 04:03:14 -08:00
This commit is contained in:
Rohan Verma 2018-07-20 12:15:28 +05:30
commit c44a0773cb
180 changed files with 4356 additions and 996 deletions

View File

@ -217,6 +217,34 @@
"name": "Jagdeep Singh", "name": "Jagdeep Singh",
"avatar_url": "https://avatars3.githubusercontent.com/u/3717137?v=4", "avatar_url": "https://avatars3.githubusercontent.com/u/3717137?v=4",
"profile": "https://jagdeep.me", "profile": "https://jagdeep.me",
"contributions": []
},
{
"login": "darkSasori",
"name": "Lineu Felipe",
"avatar_url": "https://avatars0.githubusercontent.com/u/889171?v=4",
"profile": "https://github.com/darkSasori",
"contributions": []
},
{
"login": "kvj",
"name": "Konstantin",
"avatar_url": "https://avatars2.githubusercontent.com/u/159124?v=4",
"profile": "https://github.com/kvj",
"contributions": []
},
{
"login": "brendano86",
"name": "Brendan O'Leary",
"avatar_url": "https://avatars2.githubusercontent.com/u/6044920?v=4",
"profile": "http://www.brendanoleary.com",
"contributions": []
},
{
"login": "bertl4398",
"name": "bertl4398",
"avatar_url": "https://avatars2.githubusercontent.com/u/1226441?v=4",
"profile": "https://github.com/bertl4398",
"contributions": [ "contributions": [
] ]
} }

2
.gitignore vendored
View File

@ -16,6 +16,8 @@
.DS_Store .DS_Store
gcal/client_secret.json gcal/client_secret.json
gspreadsheets/client_secret.json gspreadsheets/client_secret.json
profile.pdf
#intellij idea #intellij idea
.idea/ .idea/

30
Gopkg.lock generated
View File

@ -4,8 +4,8 @@
[[projects]] [[projects]]
name = "cloud.google.com/go" name = "cloud.google.com/go"
packages = ["compute/metadata"] packages = ["compute/metadata"]
revision = "777200caa7fb8936aed0f12b1fd79af64cc83ec9" revision = "aad3f485ee528456e0768f20397b4d9dd941e755"
version = "v0.24.0" version = "v0.25.0"
[[projects]] [[projects]]
branch = "master" branch = "master"
@ -25,6 +25,12 @@
packages = ["."] packages = ["."]
revision = "6a9abf92e34f4de62ac671caee3143f10b98892d" revision = "6a9abf92e34f4de62ac671caee3143f10b98892d"
[[projects]]
branch = "master"
name = "github.com/darkSasori/todoist"
packages = ["."]
revision = "ec6b38b374ab9c60cc9716d2083ae66eb9383d03"
[[projects]] [[projects]]
name = "github.com/davecgh/go-spew" name = "github.com/davecgh/go-spew"
packages = ["spew"] packages = ["spew"]
@ -38,13 +44,13 @@
revision = "b23993cbb6353f0e6aa98d0ee318a34728f628b9" revision = "b23993cbb6353f0e6aa98d0ee318a34728f628b9"
[[projects]] [[projects]]
branch = "master"
name = "github.com/gdamore/tcell" name = "github.com/gdamore/tcell"
packages = [ packages = [
".", ".",
"terminfo" "terminfo"
] ]
revision = "061d51a604c546b48e92253cb65190d76cecf4c6" revision = "de7e78efa4a71b3f36c7154989c529dbdf9ae623"
version = "v1.0.0"
[[projects]] [[projects]]
name = "github.com/golang/protobuf" name = "github.com/golang/protobuf"
@ -56,7 +62,7 @@
branch = "master" branch = "master"
name = "github.com/google/go-github" name = "github.com/google/go-github"
packages = ["github"] packages = ["github"]
revision = "60d040d2dafa18fa3e86cbf22fbc3208ef9ef1e0" revision = "c0b63e2f9bb198baf328c8abf1ddcbe05ff9427e"
[[projects]] [[projects]]
branch = "master" branch = "master"
@ -94,6 +100,12 @@
revision = "645ef00459ed84a119197bfb8d8205042c6df63d" revision = "645ef00459ed84a119197bfb8d8205042c6df63d"
version = "v0.8.0" version = "v0.8.0"
[[projects]]
name = "github.com/pkg/profile"
packages = ["."]
revision = "5b67d428864e92711fcbd2f8629456121a56d91f"
version = "v1.2.1"
[[projects]] [[projects]]
name = "github.com/pmezard/go-difflib" name = "github.com/pmezard/go-difflib"
packages = ["difflib"] packages = ["difflib"]
@ -110,7 +122,7 @@
branch = "master" branch = "master"
name = "github.com/rivo/tview" name = "github.com/rivo/tview"
packages = ["."] packages = ["."]
revision = "83483397e826c343edb7b8c1f33fb7983dda9fc5" revision = "c33dd0cf8ef840e1c8905c838d5b1ce93050a825"
[[projects]] [[projects]]
name = "github.com/stretchr/testify" name = "github.com/stretchr/testify"
@ -122,7 +134,7 @@
branch = "master" branch = "master"
name = "github.com/xanzy/go-gitlab" name = "github.com/xanzy/go-gitlab"
packages = ["."] packages = ["."]
revision = "6ada444068f460636db26ca0dd66cf2aa518fa8f" revision = "fb3ece09ef3e80cfa5c1e52dc75fcfb56c12e026"
[[projects]] [[projects]]
branch = "master" branch = "master"
@ -143,7 +155,7 @@
"context", "context",
"context/ctxhttp" "context/ctxhttp"
] ]
revision = "e514e69ffb8bc3c76a71ae40de0118d794855992" revision = "8887df42c721e930089d31b28391090a10a497d7"
[[projects]] [[projects]]
branch = "master" branch = "master"
@ -179,7 +191,7 @@
"googleapi/internal/uritemplates", "googleapi/internal/uritemplates",
"sheets/v4" "sheets/v4"
] ]
revision = "082d671a2a341aa205b22b580fa69747dcc3cdc8" revision = "efcb5f25ac56eae06c8b5672456c0b7767522685"
[[projects]] [[projects]]
name = "google.golang.org/appengine" name = "google.golang.org/appengine"

View File

@ -31,11 +31,11 @@
[[constraint]] [[constraint]]
name = "github.com/gdamore/tcell" name = "github.com/gdamore/tcell"
version = "1.0.0" branch = "master"
[[constraint]] #[[constraint]]
name = "github.com/go-test/deep" #name = "github.com/go-test/deep"
version = "1.0.1" #version = "1.0.1"
[[constraint]] [[constraint]]
name = "github.com/google/go-github" name = "github.com/google/go-github"
@ -54,36 +54,40 @@
version = "1.4.0" version = "1.4.0"
[[constraint]] [[constraint]]
branch = "master"
name = "github.com/olebedev/config" name = "github.com/olebedev/config"
branch = "master"
[[constraint]] [[constraint]]
name = "github.com/radovskyb/watcher" name = "github.com/radovskyb/watcher"
version = "1.0.2" version = "1.0.2"
[[constraint]] [[constraint]]
branch = "master"
name = "github.com/rivo/tview" name = "github.com/rivo/tview"
branch = "master"
[[constraint]] [[constraint]]
branch = "master"
name = "github.com/yfronto/newrelic" name = "github.com/yfronto/newrelic"
branch = "master"
[[constraint]] [[constraint]]
branch = "master"
name = "golang.org/x/oauth2" name = "golang.org/x/oauth2"
branch = "master"
[[constraint]] [[constraint]]
branch = "master"
name = "google.golang.org/api" name = "google.golang.org/api"
branch = "master"
[[constraint]] [[constraint]]
name = "gopkg.in/yaml.v2" name = "gopkg.in/yaml.v2"
version = "2.2.1" version = "2.2.1"
[[constraint]] [[constraint]]
branch = "master"
name = "github.com/adlio/trello" name = "github.com/adlio/trello"
branch = "master"
[[constraint]]
name = "github.com/darkSasori/todoist"
branch = "master"
[prune] [prune]
go-tests = true go-tests = true

View File

@ -1,4 +1,4 @@
.PHONY: contrib_check dependencies install run .PHONY: contrib_check dependencies install run size
build: build:
go build -o bin/wtf go build -o bin/wtf
@ -8,8 +8,11 @@ contrib_check:
install: install:
go clean go clean
go install -ldflags="-X main.version=$(shell git describe --always --abbrev=6) -X main.date=$(shell date +%FT%T%z)" go install -ldflags="-s -w -X main.version=$(shell git describe --always --abbrev=6) -X main.date=$(shell date +%FT%T%z)"
which wtf which wtf
run: build run: build
bin/wtf bin/wtf
size:
loc --exclude vendor/ _sample_configs/ _site/ docs/ Makefile *.md *.toml

View File

@ -55,7 +55,7 @@ Thanks goes to these wonderful people:
| [<img src="https://avatars2.githubusercontent.com/u/9014288?v=4" width="48px;"/><br /><sub><b>baustinanki</b></sub>](https://github.com/baustinanki)<br /> | [<img src="https://avatars0.githubusercontent.com/u/371475?v=4" width="48px;"/><br /><sub><b>lucus lee</b></sub>](https://github.com/lixin9311)<br /> | [<img src="https://avatars1.githubusercontent.com/u/7537841?v=4" width="48px;"/><br /><sub><b>Mike Lloyd</b></sub>](https://github.com/mxplusb)<br /> | [<img src="https://avatars3.githubusercontent.com/u/10998?v=4" width="48px;"/><br /><sub><b>Sergio Rubio</b></sub>](http://rubiojr.rbel.co)<br /> | [<img src="https://avatars3.githubusercontent.com/u/17374492?v=4" width="48px;"/><br /><sub><b>Farhad Farahi</b></sub>](https://github.com/FarhadF)<br /> | [<img src="https://avatars1.githubusercontent.com/u/634604?v=4" width="48px;"/><br /><sub><b>Lasantha Kularatne</b></sub>](http://lasantha.blogspot.com/)<br /> | [<img src="https://avatars1.githubusercontent.com/u/823331?v=4" width="48px;"/><br /><sub><b>Mark Old</b></sub>](https://github.com/dlom)<br /> | | [<img src="https://avatars2.githubusercontent.com/u/9014288?v=4" width="48px;"/><br /><sub><b>baustinanki</b></sub>](https://github.com/baustinanki)<br /> | [<img src="https://avatars0.githubusercontent.com/u/371475?v=4" width="48px;"/><br /><sub><b>lucus lee</b></sub>](https://github.com/lixin9311)<br /> | [<img src="https://avatars1.githubusercontent.com/u/7537841?v=4" width="48px;"/><br /><sub><b>Mike Lloyd</b></sub>](https://github.com/mxplusb)<br /> | [<img src="https://avatars3.githubusercontent.com/u/10998?v=4" width="48px;"/><br /><sub><b>Sergio Rubio</b></sub>](http://rubiojr.rbel.co)<br /> | [<img src="https://avatars3.githubusercontent.com/u/17374492?v=4" width="48px;"/><br /><sub><b>Farhad Farahi</b></sub>](https://github.com/FarhadF)<br /> | [<img src="https://avatars1.githubusercontent.com/u/634604?v=4" width="48px;"/><br /><sub><b>Lasantha Kularatne</b></sub>](http://lasantha.blogspot.com/)<br /> | [<img src="https://avatars1.githubusercontent.com/u/823331?v=4" width="48px;"/><br /><sub><b>Mark Old</b></sub>](https://github.com/dlom)<br /> |
| [<img src="https://avatars0.githubusercontent.com/u/5546718?v=4" width="48px;"/><br /><sub><b>flw</b></sub>](http://flw.tools/)<br /> | [<img src="https://avatars0.githubusercontent.com/u/6024927?v=4" width="48px;"/><br /><sub><b>David Barda</b></sub>](https://github.com/davebarda)<br /> | [<img src="https://avatars2.githubusercontent.com/u/4261980?v=4" width="48px;"/><br /><sub><b>Geoff Lee</b></sub>](https://github.com/matrinox)<br /> | [<img src="https://avatars3.githubusercontent.com/u/1022918?v=4" width="48px;"/><br /><sub><b>George Opritescu</b></sub>](http://international.github.io)<br /> | [<img src="https://avatars3.githubusercontent.com/u/497310?v=4" width="48px;"/><br /><sub><b>Grazfather</b></sub>](https://twitter.com/Grazfather)<br /> | [<img src="https://avatars2.githubusercontent.com/u/1691120?v=4" width="48px;"/><br /><sub><b>Michael Cordell</b></sub>](http://www.mikecordell.com/)<br /> | [<img src="https://avatars2.githubusercontent.com/u/1215497?v=4" width="48px;"/><br /><sub><b>Patrick José Pereira</b></sub>](http://patrick.ibexcps.com)<br /> | | [<img src="https://avatars0.githubusercontent.com/u/5546718?v=4" width="48px;"/><br /><sub><b>flw</b></sub>](http://flw.tools/)<br /> | [<img src="https://avatars0.githubusercontent.com/u/6024927?v=4" width="48px;"/><br /><sub><b>David Barda</b></sub>](https://github.com/davebarda)<br /> | [<img src="https://avatars2.githubusercontent.com/u/4261980?v=4" width="48px;"/><br /><sub><b>Geoff Lee</b></sub>](https://github.com/matrinox)<br /> | [<img src="https://avatars3.githubusercontent.com/u/1022918?v=4" width="48px;"/><br /><sub><b>George Opritescu</b></sub>](http://international.github.io)<br /> | [<img src="https://avatars3.githubusercontent.com/u/497310?v=4" width="48px;"/><br /><sub><b>Grazfather</b></sub>](https://twitter.com/Grazfather)<br /> | [<img src="https://avatars2.githubusercontent.com/u/1691120?v=4" width="48px;"/><br /><sub><b>Michael Cordell</b></sub>](http://www.mikecordell.com/)<br /> | [<img src="https://avatars2.githubusercontent.com/u/1215497?v=4" width="48px;"/><br /><sub><b>Patrick José Pereira</b></sub>](http://patrick.ibexcps.com)<br /> |
| [<img src="https://avatars2.githubusercontent.com/u/1483092?v=4" width="48px;"/><br /><sub><b>sherod taylor</b></sub>](https://github.com/sherodtaylor)<br /> | [<img src="https://avatars2.githubusercontent.com/u/3062663?v=4" width="48px;"/><br /><sub><b>Andrew Scott</b></sub>](http://cogentia.io)<br /> | [<img src="https://avatars2.githubusercontent.com/u/3252403?v=4" width="48px;"/><br /><sub><b>Anand Sudhir Prayaga</b></sub>](https://github.com/anandsudhir)<br /> | [<img src="https://avatars1.githubusercontent.com/u/12018440?v=4" width="48px;"/><br /><sub><b>Lassi Piironen</b></sub>](https://github.com/lsipii)<br /> | [<img src="https://avatars0.githubusercontent.com/u/14799210?v=4" width="48px;"/><br /><sub><b>BlackWebWolf</b></sub>](https://github.com/BlackWebWolf)<br /> | [<img src="https://avatars0.githubusercontent.com/u/1894885?v=4" width="48px;"/><br /><sub><b>andrewzolotukhin</b></sub>](https://github.com/andrewzolotukhin)<br /> | [<img src="https://avatars1.githubusercontent.com/u/8568280?v=4" width="48px;"/><br /><sub><b>Leon Stigter</b></sub>](https://retgits.github.io)<br /> | | [<img src="https://avatars2.githubusercontent.com/u/1483092?v=4" width="48px;"/><br /><sub><b>sherod taylor</b></sub>](https://github.com/sherodtaylor)<br /> | [<img src="https://avatars2.githubusercontent.com/u/3062663?v=4" width="48px;"/><br /><sub><b>Andrew Scott</b></sub>](http://cogentia.io)<br /> | [<img src="https://avatars2.githubusercontent.com/u/3252403?v=4" width="48px;"/><br /><sub><b>Anand Sudhir Prayaga</b></sub>](https://github.com/anandsudhir)<br /> | [<img src="https://avatars1.githubusercontent.com/u/12018440?v=4" width="48px;"/><br /><sub><b>Lassi Piironen</b></sub>](https://github.com/lsipii)<br /> | [<img src="https://avatars0.githubusercontent.com/u/14799210?v=4" width="48px;"/><br /><sub><b>BlackWebWolf</b></sub>](https://github.com/BlackWebWolf)<br /> | [<img src="https://avatars0.githubusercontent.com/u/1894885?v=4" width="48px;"/><br /><sub><b>andrewzolotukhin</b></sub>](https://github.com/andrewzolotukhin)<br /> | [<img src="https://avatars1.githubusercontent.com/u/8568280?v=4" width="48px;"/><br /><sub><b>Leon Stigter</b></sub>](https://retgits.github.io)<br /> |
| [<img src="https://avatars3.githubusercontent.com/u/21756?v=4" width="48px;"/><br /><sub><b>Amr Tamimi</b></sub>](https://tamimi.se)<br /> | [<img src="https://avatars3.githubusercontent.com/u/3717137?v=4" width="48px;"/><br /><sub><b>Jagdeep Singh</b></sub>](https://jagdeep.me)<br /> | | [<img src="https://avatars3.githubusercontent.com/u/21756?v=4" width="48px;"/><br /><sub><b>Amr Tamimi</b></sub>](https://tamimi.se)<br /> | [<img src="https://avatars3.githubusercontent.com/u/3717137?v=4" width="48px;"/><br /><sub><b>Jagdeep Singh</b></sub>](https://jagdeep.me)<br /> | [<img src="https://avatars0.githubusercontent.com/u/889171?v=4" width="48px;"/><br /><sub><b>Lineu Felipe</b></sub>](https://github.com/darkSasori)<br /> | [<img src="https://avatars2.githubusercontent.com/u/159124?v=4" width="48px;"/><br /><sub><b>Konstantin</b></sub>](https://github.com/kvj)<br /> | [<img src="https://avatars2.githubusercontent.com/u/6044920?v=4" width="48px;"/><br /><sub><b>Brendan O'Leary</b></sub>](http://www.brendanoleary.com)<br /> | [<img src="https://avatars2.githubusercontent.com/u/1226441?v=4" width="48px;"/><br /><sub><b>bertl4398</b></sub>](https://github.com/bertl4398)<br /> |
<!-- ALL-CONTRIBUTORS-LIST:END --> <!-- ALL-CONTRIBUTORS-LIST:END -->
This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome! This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!

View File

@ -203,10 +203,12 @@ wtf:
width: 1 width: 1
refreshInterval: 3600 refreshInterval: 3600
weather: weather:
apiKey: [YOUR API KEY]
# From http://openweathermap.org/help/city_list.txt # From http://openweathermap.org/help/city_list.txt
cityids: cityids:
- 3370352 - 3370352
- 1283240 - 1283240
WTF_OWM_API_KEY: [YOUR API KEY]
colors: colors:
current: "lightblue" current: "lightblue"
enabled: true enabled: true

View File

@ -55,10 +55,12 @@ gerrit:
height: 2 height: 2
width: 2 width: 2
refreshInterval: 300 refreshInterval: 300
domain: https://gerrit-review.googlesource.com
projects: projects:
- org/test-project" - org/test-project"
- dotfiles - dotfiles
username: "myname" username: "myname"
verifyServerCertificate: false
``` ```
### Attributes ### Attributes
@ -75,7 +77,7 @@ How often, in seconds, this module will update its data. <br />
Values: A positive integer, `0..n`. Values: A positive integer, `0..n`.
`domain` <br /> `domain` <br />
_Optional_. Your Gerrit corporate domain. <br /> Your Gerrit corporate domain. <br />
Values: A valid URI. Values: A valid URI.
`projects` <br /> `projects` <br />

View File

@ -61,6 +61,7 @@ wtf/github/
```yaml ```yaml
github: github:
enabled: true enabled: true
enableStatus: true
position: position:
top: 2 top: 2
left: 3 left: 3
@ -79,6 +80,11 @@ github:
Determines whether or not this module is executed and if its data displayed onscreen. <br /> Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: `true`, `false`. Values: `true`, `false`.
`enableStatus` <br />
Display pull request mergeability status ('dirty', 'clean', 'unstable',
'blocked').<br />
Values: `true`, `false`.
`position` <br /> `position` <br />
Defines where in the grid this module's widget will be displayed. <br /> Defines where in the grid this module's widget will be displayed. <br />

View File

@ -1,5 +1,5 @@
--- ---
title: "Gitlab" title: "GitLab"
date: 2018-06-08T13:14:11-07:00 date: 2018-06-08T13:14:11-07:00
draft: false draft: false
--- ---
@ -8,7 +8,7 @@ Added in `v0.0.8`.
<img src="/imgs/modules/gitlab.png" width="640" height="384" alt="gitlab screenshot" /> <img src="/imgs/modules/gitlab.png" width="640" height="384" alt="gitlab screenshot" />
Displays information about your projects hosted on Gitlab: Displays information about your projects hosted on GitLab:
#### Open Approval Requests #### Open Approval Requests
@ -27,7 +27,7 @@ wtf/gitlab/
## Required ENV Variables ## Required ENV Variables
<span class="caption">Key:</span> `WTF_GITLAB_TOKEN` <br /> <span class="caption">Key:</span> `WTF_GITLAB_TOKEN` <br />
<span class="caption">Action:</span> A <a href="https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html">Gitlab personal access token</a>. Requires at least `api` access. <span class="caption">Action:</span> A <a href="https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html">GitLab personal access token</a>. Requires at least `api` access.
## Keyboard Commands ## Keyboard Commands
@ -77,14 +77,14 @@ How often, in seconds, this module will update its data. <br />
Values: A positive integer, `0..n`. Values: A positive integer, `0..n`.
`domain` <br /> `domain` <br />
_Optional_. Your Gitlab corporate domain. <br /> _Optional_. Your GitLab corporate domain. <br />
Values: A valid URI. Values: A valid URI.
`projects` <br /> `projects` <br />
A list of key/value pairs each describing a Gitlab project to fetch data A list of key/value pairs each describing a GitLab project to fetch data
for. <br /> for. <br />
<span class="caption">Key:</span> The name of the project. <br /> <span class="caption">Key:</span> The name of the project. <br />
<span class="caption">Value:</span> The namespace of the project. <span class="caption">Value:</span> The namespace of the project.
`username` <br /> `username` <br />
Your Gitlab username. Used to figure out which requests require your approval Your GitLab username. Used to figure out which requests require your approval

View File

@ -39,6 +39,7 @@ jenkins:
refreshInterval: 300 refreshInterval: 300
url: "https://jenkins.domain.com/jenkins/view_url" url: "https://jenkins.domain.com/jenkins/view_url"
user: "username" user: "username"
verifyServerCertificate: true
``` ```
### Attributes ### Attributes
@ -61,3 +62,7 @@ Your Jenkins username. <br />
The url to your Jenkins project or view. <br /> The url to your Jenkins project or view. <br />
Values: A valid URI. Values: A valid URI.
`verifyServerCertificate` <br />
_Optional_ <br />
Determines whether or not the server's certificate chain and host name are verified. <br />
Values: `true`, `false`.

View File

@ -21,7 +21,20 @@ wtf/jira/
## Keyboard Commands ## Keyboard Commands
None. <span class="caption">Key:</span> `[return]` <br />
<span class="caption">Action:</span> Open the selected issue in the browser.
<span class="caption">Key:</span> `j` <br />
<span class="caption">Action:</span> Select the next item in the list.
<span class="caption">Key:</span> `k` <br />
<span class="caption">Action:</span> Select the previous item in the list.
<span class="caption">Key:</span> `↓` <br />
<span class="caption">Action:</span> Select the next item in the list.
<span class="caption">Key:</span> `↑` <br />
<span class="caption">Action:</span> Select the previous item in the list.
## Configuration ## Configuration

View File

@ -0,0 +1,91 @@
---
title: "Todoist"
date: 2018-07-05T22:55:55-03:00
draft: false
---
Added in `v0.0.11`.
Displays all items on specified project.
<img src="/imgs/modules/todoist.png" alt="todoist screenshot" />
## Source Code
```bash
wtf/todoist/
```
## Required ENV Variables
<span class="caption">Key:</span> `WTF_TODOIST_TOKEN` <br />
<span class="caption">Value:</span> Your Todoist API Token. <br />
_You can get your API Token at: todoist.com/prefs/integrations._
## Keyboard Commands
<span class="caption">Key:</span> `h` <br />
<span class="caption">Action:</span> Show the previous project.
<span class="caption">Key:</span> `←` <br />
<span class="caption">Action:</span> Show the previous project.
<span class="caption">Key:</span> `l` <br />
<span class="caption">Action:</span> Show the next project.
<span class="caption">Key:</span> `→` <br />
<span class="caption">Action:</span> Show the next project.
<span class="caption">Key:</span> `j` <br />
<span class="caption">Action:</span> Select the next item in the list.
<span class="caption">Key:</span> `↓` <br />
<span class="caption">Action:</span> Select the next item in the list.
<span class="caption">Key:</span> `k` <br />
<span class="caption">Action:</span> Select the previous item in the list.
<span class="caption">Key:</span> `↑` <br />
<span class="caption">Action:</span> Select the previous item in the list.
<span class="caption">Key:</span> `c` <br />
<span class="caption">Action:</span> Close current item.
<span class="caption">Key:</span> `d` <br />
<span class="caption">Action:</span> Delete current item.
<span class="caption">Key:</span> `r` <br />
<span class="caption">Action:</span> Reload all projects.
## Configuration
```yaml
todoist:
enabled: true
position:
top: 0
left: 2
height: 1
width: 1
projects:
- 122247497
refreshInterval: 3600
```
### Attributes
`enabled` <br />
Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: `true`, `false`.
`position` <br />
Where in the grid this module's widget will be displayed. <br />
`projects` <br />
The todoist projects to fetch items from. <br />
Values: The integer ID of the project.
`refreshInterval` <br />
How often, in seconds, this module will update its data. <br />
Values: A positive integer, `0..n`.

View File

@ -0,0 +1,52 @@
---
title: "TravisCI"
date: 2018-07-18T14:36:08-04:00
draft: false
---
Added in `v0.0.12`.
Displays build information for your Travis CI account.
<img src="/imgs/modules/travisci.png" width="609" height="150" alt="travisci screenshot" />
## Source Code
```bash
wtf/travisci/
```
## Required ENV Variables
<span class="caption">Key:</span> `WTF_TRAVIS_API_TOKEN` <br />
<span class="caption">Value:</span> Your <a href="https://developer.travis-ci.org/authentication">Travis CI API</a> access token.
## Keyboard Commands
None.
## Configuration
```yaml
travisci:
enabled: true
position:
top: 4
left: 1
height: 1
width: 2
refreshInterval: 900
```
### Attributes
`enabled` <br />
Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: `true`, `false`.
`position` <br />
Defines where in the grid this module's widget will be displayed. <br />
`refreshInterval` <br />
How often, in seconds, this module will update its data. <br />
Values: A positive integer, `0..n`.

View File

@ -17,8 +17,11 @@ wtf/weather/
## Required ENV Variables ## Required ENV Variables
<span class="caption">Key:</span> `WTF_OWM_API_KEY` <br /> <span class="caption">Key:</span> `WTF_OWM_API_KEY` <br />
<span class="caption">Action:</span> Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key. <span class="caption">Action:</span> Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key. <br />
<span class="caption">Note:</span> DEPRECATED. See the `apiKey` config value, below.
## Keyboard Commands ## Keyboard Commands
@ -41,6 +44,7 @@ wtf/weather/
```yaml ```yaml
weather: weather:
apiKey: "2dfb3e3650a1950adddb6badf5ba1aaa"
# From http://openweathermap.org/help/city_list.txt # From http://openweathermap.org/help/city_list.txt
cityids: cityids:
- 6173331 - 6173331
@ -62,6 +66,9 @@ weather:
### Attributes ### Attributes
`apiKey` <br />
Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key.
`cityids` <br /> `cityids` <br />
A list of the <a A list of the <a
href="http://openweathermap.org/help/city_list.txt">OpenWeatherMap city href="http://openweathermap.org/help/city_list.txt">OpenWeatherMap city

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -32,7 +32,7 @@
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -47,6 +47,8 @@
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

187
checklist/checklist.go Normal file
View File

@ -0,0 +1,187 @@
package checklist
// Checklist is a module for creating generic checklist implementations
// See 'Todo' for an implementation example
type Checklist struct {
Selected int
Items []*ChecklistItem
}
func NewChecklist() Checklist {
list := Checklist{
Selected: -1,
}
return list
}
/* -------------------- Exported Functions -------------------- */
// Add creates a new item in the checklist
func (list *Checklist) Add(checked bool, text string) {
item := ChecklistItem{
Checked: checked,
Text: text,
}
list.Items = append([]*ChecklistItem{&item}, list.Items...)
}
// CheckedItems returns a slice of all the checked items
func (list *Checklist) CheckedItems() []*ChecklistItem {
items := []*ChecklistItem{}
for _, item := range list.Items {
if item.Checked {
items = append(items, item)
}
}
return items
}
// Delete removes the selected item from the checklist
func (list *Checklist) Delete() {
list.Items = append(list.Items[:list.Selected], list.Items[list.Selected+1:]...)
list.Prev()
}
// Demote moves the selected item down in the checklist
func (list *Checklist) Demote() {
if list.IsUnselectable() {
return
}
j := list.Selected + 1
if j >= len(list.Items) {
j = 0
}
list.Swap(list.Selected, j)
list.Selected = j
}
// IsSelectable returns true if the checklist has selectable items, false if it does not
func (list *Checklist) IsSelectable() bool {
return list.Selected >= 0 && list.Selected < len(list.Items)
}
// IsUnselectable returns true if the checklist has no selectable items, false if it does
func (list *Checklist) IsUnselectable() bool {
return !list.IsSelectable()
}
// Next selects the next item in the checklist
func (list *Checklist) Next() {
list.Selected = list.Selected + 1
if list.Selected >= len(list.Items) {
list.Selected = 0
}
}
// LongestLine returns the length of the longest checklist item's text
func (list *Checklist) LongestLine() int {
maxLen := 0
for _, item := range list.Items {
if len(item.Text) > maxLen {
maxLen = len(item.Text)
}
}
return maxLen
}
// Prev selects the previous item in the checklist
func (list *Checklist) Prev() {
list.Selected = list.Selected - 1
if list.Selected < 0 {
list.Selected = len(list.Items) - 1
}
}
// Promote moves the selected item up in the checklist
func (list *Checklist) Promote() {
if list.IsUnselectable() {
return
}
j := list.Selected - 1
if j < 0 {
j = len(list.Items) - 1
}
list.Swap(list.Selected, j)
list.Selected = j
}
// SelectedItem returns the currently-selected checklist item or nil if no item is selected
func (list *Checklist) SelectedItem() *ChecklistItem {
if list.IsUnselectable() {
return nil
}
return list.Items[list.Selected]
}
func (list *Checklist) SetSelectedByItem(selectableItem *ChecklistItem) {
for idx, item := range list.Items {
if item == selectableItem {
list.Selected = idx
break
}
}
}
// Toggle switches the checked state of the currently-selected item
func (list *Checklist) Toggle() {
if list.IsUnselectable() {
return
}
list.SelectedItem().Toggle()
}
// UncheckedItems returns a slice of all the unchecked items
func (list *Checklist) UncheckedItems() []*ChecklistItem {
items := []*ChecklistItem{}
for _, item := range list.Items {
if !item.Checked {
items = append(items, item)
}
}
return items
}
// Unselect removes the current select such that no item is selected
func (list *Checklist) Unselect() {
list.Selected = -1
}
// Update sets the text of the currently-selected item to the provided text
func (list *Checklist) Update(text string) {
item := list.SelectedItem()
if item == nil {
return
}
item.Text = text
}
/* -------------------- Sort Interface -------------------- */
func (list *Checklist) Len() int {
return len(list.Items)
}
func (list *Checklist) Less(i, j int) bool {
return list.Items[i].Text < list.Items[j].Text
}
func (list *Checklist) Swap(i, j int) {
list.Items[i], list.Items[j] = list.Items[j], list.Items[i]
}

View File

@ -0,0 +1,27 @@
package checklist
import (
"github.com/senorprogrammer/wtf/wtf"
)
// ChecklistItem is a module for creating generic checklist implementations
// See 'Todo' for an implementation example
type ChecklistItem struct {
Checked bool
Text string
}
// CheckMark returns the string used to indicate a ChecklistItem is checked or unchecked
func (item *ChecklistItem) CheckMark() string {
if item.Checked {
return wtf.Config.UString("wtf.mods.todo.checkedIcon", "x")
} else {
return " "
}
}
// Toggle changes the checked state of the ChecklistItem
// If checked, it is unchecked. If unchecked, it is checked
func (item *ChecklistItem) Toggle() {
item.Checked = !item.Checked
}

View File

@ -0,0 +1,43 @@
package wtftests
import (
"testing"
"github.com/olebedev/config"
. "github.com/senorprogrammer/wtf/checklist"
"github.com/senorprogrammer/wtf/wtf"
. "github.com/stretchr/testify/assert"
)
/* -------------------- CheckMark -------------------- */
func TestCheckMark(t *testing.T) {
loadConfig()
item := ChecklistItem{}
Equal(t, " ", item.CheckMark())
item = ChecklistItem{Checked: true}
Equal(t, "x", item.CheckMark())
}
/* -------------------- Toggle -------------------- */
func TestToggle(t *testing.T) {
loadConfig()
item := ChecklistItem{}
Equal(t, false, item.Checked)
item.Toggle()
Equal(t, true, item.Checked)
item.Toggle()
Equal(t, false, item.Checked)
}
/* -------------------- helpers -------------------- */
func loadConfig() {
wtf.Config, _ = config.ParseYamlFile("../_sample_configs/simple_config.yml")
}

View File

@ -5,6 +5,7 @@ import (
"os/exec" "os/exec"
"strings" "strings"
"github.com/rivo/tview"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
@ -33,7 +34,7 @@ func (widget *Widget) Refresh() {
widget.UpdateRefreshedAt() widget.UpdateRefreshedAt()
widget.execute() widget.execute()
title := wtf.Config.UString("wtf.mods.cmdrunner.title", widget.String()) title := tview.TranslateANSI(wtf.Config.UString("wtf.mods.cmdrunner.title", widget.String()))
widget.View.SetTitle(title) widget.View.SetTitle(title)
widget.View.SetText(widget.result) widget.View.SetText(widget.result)
@ -46,5 +47,5 @@ func (widget *Widget) String() string {
func (widget *Widget) execute() { func (widget *Widget) execute() {
cmd := exec.Command(widget.cmd, widget.args...) cmd := exec.Command(widget.cmd, widget.args...)
widget.result = wtf.ExecuteCommand(cmd) widget.result = tview.TranslateANSI(wtf.ExecuteCommand(cmd))
} }

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -87,7 +87,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -102,6 +102,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -86,7 +86,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -101,6 +101,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -6,11 +6,41 @@
<description>Recent content on WTF - A Terminal Dashboard</description> <description>Recent content on WTF - A Terminal Dashboard</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Wed, 27 Jun 2018 15:55:42 -0700</lastBuildDate> <lastBuildDate>Wed, 18 Jul 2018 14:36:08 -0400</lastBuildDate>
<atom:link href="https://wtfutil.com/index.xml" rel="self" type="application/rss+xml" /> <atom:link href="https://wtfutil.com/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>TravisCI</title>
<link>https://wtfutil.com/posts/modules/travisci/</link>
<pubDate>Wed, 18 Jul 2018 14:36:08 -0400</pubDate>
<guid>https://wtfutil.com/posts/modules/travisci/</guid>
<description>Added in v0.0.12.
Displays build information for your Travis CI account.
Source Code wtf/travisci/ Required ENV Variables Key: WTF_TRAVIS_API_TOKEN Value: Your Travis CI API access token.
Keyboard Commands None.
Configuration travisci:enabled:trueposition:top:4left:1height:1width:2refreshInterval:900 Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false.
position Defines where in the grid this module&amp;rsquo;s widget will be displayed. refreshInterval How often, in seconds, this module will update its data.</description>
</item>
<item>
<title>Todoist</title>
<link>https://wtfutil.com/posts/modules/todoist/</link>
<pubDate>Thu, 05 Jul 2018 22:55:55 -0300</pubDate>
<guid>https://wtfutil.com/posts/modules/todoist/</guid>
<description>Added in v0.0.11.
Displays all items on specified project.
Source Code wtf/todoist/ Required ENV Variables Key: WTF_TODOIST_TOKEN Value: Your Todoist API Token. You can get your API Token at: todoist.com/prefs/integrations.
Keyboard Commands Key: h Action: Show the previous project.
Key: ← Action: Show the previous project.
Key: l Action: Show the next project.
Key: → Action: Show the next project.
Key: j Action: Select the next item in the list.</description>
</item>
<item> <item>
<title>Gerrit</title> <title>Gerrit</title>
<link>https://wtfutil.com/posts/modules/gerrit/</link> <link>https://wtfutil.com/posts/modules/gerrit/</link>
@ -112,22 +142,22 @@ position Where in the grid this module&amp;rsquo;s widget will be displayed.</de
Displays jenkins status of given builds in a project or view Displays jenkins status of given builds in a project or view
Source Code wtf/jenkins/ Required ENV Variables Key: WTF_JENKINS_API_KEY Value: Your Jenkins API key. Source Code wtf/jenkins/ Required ENV Variables Key: WTF_JENKINS_API_KEY Value: Your Jenkins API key.
Keyboard Commands None. Keyboard Commands None.
Configuration jenkins:enabled:trueposition:top:2left:3height:2width:3refreshInterval:300url:&amp;#34;https://jenkins.domain.com/jenkins/view_url&amp;#34;user:&amp;#34;username&amp;#34; Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false. Configuration jenkins:enabled:trueposition:top:2left:3height:2width:3refreshInterval:300url:&amp;#34;https://jenkins.domain.com/jenkins/view_url&amp;#34;user:&amp;#34;username&amp;#34;verifyServerCertificate:true Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false.
position Defines where in the grid this module&amp;rsquo;s widget will be displayed. position Defines where in the grid this module&amp;rsquo;s widget will be displayed.
refreshInterval How often, in seconds, this module will update its data.</description> refreshInterval How often, in seconds, this module will update its data.</description>
</item> </item>
<item> <item>
<title>Gitlab</title> <title>GitLab</title>
<link>https://wtfutil.com/posts/modules/gitlab/</link> <link>https://wtfutil.com/posts/modules/gitlab/</link>
<pubDate>Fri, 08 Jun 2018 13:14:11 -0700</pubDate> <pubDate>Fri, 08 Jun 2018 13:14:11 -0700</pubDate>
<guid>https://wtfutil.com/posts/modules/gitlab/</guid> <guid>https://wtfutil.com/posts/modules/gitlab/</guid>
<description>Added in v0.0.8. <description>Added in v0.0.8.
Displays information about your projects hosted on Gitlab: Displays information about your projects hosted on GitLab:
Open Approval Requests All open merge requests that are requesting your approval. Open Approval Requests All open merge requests that are requesting your approval.
Open Merge Requests All open merge requests created by you. Open Merge Requests All open merge requests created by you.
Source Code wtf/gitlab/ Required ENV Variables Key: WTF_GITLAB_TOKEN Action: A Gitlab personal access token. Requires at least api access. Source Code wtf/gitlab/ Required ENV Variables Key: WTF_GITLAB_TOKEN Action: A GitLab personal access token. Requires at least api access.
Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window. Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window.
Key: h Action: Show the previous project.</description> Key: h Action: Show the previous project.</description>
</item> </item>
@ -294,9 +324,11 @@ Key: j Action: Select the next item in the list.</description>
<guid>https://wtfutil.com/posts/modules/jira/</guid> <guid>https://wtfutil.com/posts/modules/jira/</guid>
<description>Displays all Jira issues assigned to you for the specified project. <description>Displays all Jira issues assigned to you for the specified project.
Source Code wtf/jira/ Required ENV Variables Key: WTF_JIRA_API_KEY Value: Your Jira API key. Source Code wtf/jira/ Required ENV Variables Key: WTF_JIRA_API_KEY Value: Your Jira API key.
Keyboard Commands None. Keyboard Commands Key: [return] Action: Open the selected issue in the browser.
Configuration Single Jira Project jira:colors:rows:even:&amp;#34;lightblue&amp;#34;odd:&amp;#34;white&amp;#34;domain:&amp;#34;https://umbrellacorp.atlassian.net&amp;#34;email:&amp;#34;chriscummer@me.com&amp;#34;enabled:truejql:&amp;#34;issueType = Story&amp;#34;position:top:4left:1height:1width:2project:&amp;#34;ProjectA&amp;#34;refreshInterval:900username:&amp;#34;chris.cummer&amp;#34;verifyServerCertificate:true Multiple Jira Projects If you want to monitor multiple Jira projects, use the following configuration (note the difference in project): Key: j Action: Select the next item in the list.
jira:colors:rows:even:&amp;#34;lightblue&amp;#34;odd:&amp;#34;white&amp;#34;domain:&amp;#34;https://umbrellacorp.atlassian.net&amp;#34;email:&amp;#34;chriscummer@me.com&amp;#34;enabled:truejql:&amp;#34;issueType = Story&amp;#34;position:top:4left:1height:1width:2project:[&amp;#34;ProjectA&amp;#34;,&amp;#34;ProjectB&amp;#34;]refreshInterval:900username:&amp;#34;chris.cummer&amp;#34;verifyServerCertificate:true Attributes colors.rows.even Define the foreground color for even-numbered rows. Values: Any X11 color name.</description> Key: k Action: Select the previous item in the list.
Key: ↓ Action: Select the next item in the list.
Key: ↑ Action: Select the previous item in the list.</description>
</item> </item>
<item> <item>
@ -362,12 +394,11 @@ Key: h Action: Show the previous git repository.</description>
<guid>https://wtfutil.com/posts/modules/weather/</guid> <guid>https://wtfutil.com/posts/modules/weather/</guid>
<description>Displays a configurable list of current weather report, including current temperature, sunrise time, and sunset time. <description>Displays a configurable list of current weather report, including current temperature, sunrise time, and sunset time.
Source Code wtf/weather/ Required ENV Variables Key: WTF_OWM_API_KEY Action: Your OpenWeatherMap API key. Source Code wtf/weather/ Required ENV Variables Key: WTF_OWM_API_KEY Action: Your OpenWeatherMap API key. Note: DEPRECATED. See the apiKey config value, below.
Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window. Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window.
Key: h Action: Show the previous weather location. Key: h Action: Show the previous weather location.
Key: l Action: Show the next weather location. Key: l Action: Show the next weather location.
Key: ← Action: Show the previous weather location. Key: ← Action: Show the previous weather location.</description>
Key: → Action: Show the next weather location.</description>
</item> </item>
<item> <item>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -87,7 +87,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -102,6 +102,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -120,6 +122,20 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<h1 class="title">Posts</h1> <h1 class="title">Posts</h1>
<ul class="posts"> <ul class="posts">
<li> <li>
<span>
<a href="https://wtfutil.com/posts/modules/travisci/">TravisCI</a>
<time class="pull-right post-list">Jul 18, 2018</time>
</span>
</li><li>
<span>
<a href="https://wtfutil.com/posts/modules/todoist/">Todoist</a>
<time class="pull-right post-list">Jul 05, 2018</time>
</span>
</li><li>
<span> <span>
<a href="https://wtfutil.com/posts/modules/gerrit/">Gerrit</a> <a href="https://wtfutil.com/posts/modules/gerrit/">Gerrit</a>
@ -170,7 +186,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
</span> </span>
</li><li> </li><li>
<span> <span>
<a href="https://wtfutil.com/posts/modules/gitlab/">Gitlab</a> <a href="https://wtfutil.com/posts/modules/gitlab/">GitLab</a>
<time class="pull-right post-list">Jun 08, 2018</time> <time class="pull-right post-list">Jun 08, 2018</time>

View File

@ -6,11 +6,41 @@
<description>Recent content in Posts on WTF - A Terminal Dashboard</description> <description>Recent content in Posts on WTF - A Terminal Dashboard</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>en-us</language> <language>en-us</language>
<lastBuildDate>Wed, 27 Jun 2018 15:55:42 -0700</lastBuildDate> <lastBuildDate>Wed, 18 Jul 2018 14:36:08 -0400</lastBuildDate>
<atom:link href="https://wtfutil.com/posts/index.xml" rel="self" type="application/rss+xml" /> <atom:link href="https://wtfutil.com/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>TravisCI</title>
<link>https://wtfutil.com/posts/modules/travisci/</link>
<pubDate>Wed, 18 Jul 2018 14:36:08 -0400</pubDate>
<guid>https://wtfutil.com/posts/modules/travisci/</guid>
<description>Added in v0.0.12.
Displays build information for your Travis CI account.
Source Code wtf/travisci/ Required ENV Variables Key: WTF_TRAVIS_API_TOKEN Value: Your Travis CI API access token.
Keyboard Commands None.
Configuration travisci:enabled:trueposition:top:4left:1height:1width:2refreshInterval:900 Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false.
position Defines where in the grid this module&amp;rsquo;s widget will be displayed. refreshInterval How often, in seconds, this module will update its data.</description>
</item>
<item>
<title>Todoist</title>
<link>https://wtfutil.com/posts/modules/todoist/</link>
<pubDate>Thu, 05 Jul 2018 22:55:55 -0300</pubDate>
<guid>https://wtfutil.com/posts/modules/todoist/</guid>
<description>Added in v0.0.11.
Displays all items on specified project.
Source Code wtf/todoist/ Required ENV Variables Key: WTF_TODOIST_TOKEN Value: Your Todoist API Token. You can get your API Token at: todoist.com/prefs/integrations.
Keyboard Commands Key: h Action: Show the previous project.
Key: ← Action: Show the previous project.
Key: l Action: Show the next project.
Key: → Action: Show the next project.
Key: j Action: Select the next item in the list.</description>
</item>
<item> <item>
<title>Gerrit</title> <title>Gerrit</title>
<link>https://wtfutil.com/posts/modules/gerrit/</link> <link>https://wtfutil.com/posts/modules/gerrit/</link>
@ -112,22 +142,22 @@ position Where in the grid this module&amp;rsquo;s widget will be displayed.</de
Displays jenkins status of given builds in a project or view Displays jenkins status of given builds in a project or view
Source Code wtf/jenkins/ Required ENV Variables Key: WTF_JENKINS_API_KEY Value: Your Jenkins API key. Source Code wtf/jenkins/ Required ENV Variables Key: WTF_JENKINS_API_KEY Value: Your Jenkins API key.
Keyboard Commands None. Keyboard Commands None.
Configuration jenkins:enabled:trueposition:top:2left:3height:2width:3refreshInterval:300url:&amp;#34;https://jenkins.domain.com/jenkins/view_url&amp;#34;user:&amp;#34;username&amp;#34; Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false. Configuration jenkins:enabled:trueposition:top:2left:3height:2width:3refreshInterval:300url:&amp;#34;https://jenkins.domain.com/jenkins/view_url&amp;#34;user:&amp;#34;username&amp;#34;verifyServerCertificate:true Attributes enabled Determines whether or not this module is executed and if its data displayed onscreen. Values: true, false.
position Defines where in the grid this module&amp;rsquo;s widget will be displayed. position Defines where in the grid this module&amp;rsquo;s widget will be displayed.
refreshInterval How often, in seconds, this module will update its data.</description> refreshInterval How often, in seconds, this module will update its data.</description>
</item> </item>
<item> <item>
<title>Gitlab</title> <title>GitLab</title>
<link>https://wtfutil.com/posts/modules/gitlab/</link> <link>https://wtfutil.com/posts/modules/gitlab/</link>
<pubDate>Fri, 08 Jun 2018 13:14:11 -0700</pubDate> <pubDate>Fri, 08 Jun 2018 13:14:11 -0700</pubDate>
<guid>https://wtfutil.com/posts/modules/gitlab/</guid> <guid>https://wtfutil.com/posts/modules/gitlab/</guid>
<description>Added in v0.0.8. <description>Added in v0.0.8.
Displays information about your projects hosted on Gitlab: Displays information about your projects hosted on GitLab:
Open Approval Requests All open merge requests that are requesting your approval. Open Approval Requests All open merge requests that are requesting your approval.
Open Merge Requests All open merge requests created by you. Open Merge Requests All open merge requests created by you.
Source Code wtf/gitlab/ Required ENV Variables Key: WTF_GITLAB_TOKEN Action: A Gitlab personal access token. Requires at least api access. Source Code wtf/gitlab/ Required ENV Variables Key: WTF_GITLAB_TOKEN Action: A GitLab personal access token. Requires at least api access.
Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window. Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window.
Key: h Action: Show the previous project.</description> Key: h Action: Show the previous project.</description>
</item> </item>
@ -294,9 +324,11 @@ Key: j Action: Select the next item in the list.</description>
<guid>https://wtfutil.com/posts/modules/jira/</guid> <guid>https://wtfutil.com/posts/modules/jira/</guid>
<description>Displays all Jira issues assigned to you for the specified project. <description>Displays all Jira issues assigned to you for the specified project.
Source Code wtf/jira/ Required ENV Variables Key: WTF_JIRA_API_KEY Value: Your Jira API key. Source Code wtf/jira/ Required ENV Variables Key: WTF_JIRA_API_KEY Value: Your Jira API key.
Keyboard Commands None. Keyboard Commands Key: [return] Action: Open the selected issue in the browser.
Configuration Single Jira Project jira:colors:rows:even:&amp;#34;lightblue&amp;#34;odd:&amp;#34;white&amp;#34;domain:&amp;#34;https://umbrellacorp.atlassian.net&amp;#34;email:&amp;#34;chriscummer@me.com&amp;#34;enabled:truejql:&amp;#34;issueType = Story&amp;#34;position:top:4left:1height:1width:2project:&amp;#34;ProjectA&amp;#34;refreshInterval:900username:&amp;#34;chris.cummer&amp;#34;verifyServerCertificate:true Multiple Jira Projects If you want to monitor multiple Jira projects, use the following configuration (note the difference in project): Key: j Action: Select the next item in the list.
jira:colors:rows:even:&amp;#34;lightblue&amp;#34;odd:&amp;#34;white&amp;#34;domain:&amp;#34;https://umbrellacorp.atlassian.net&amp;#34;email:&amp;#34;chriscummer@me.com&amp;#34;enabled:truejql:&amp;#34;issueType = Story&amp;#34;position:top:4left:1height:1width:2project:[&amp;#34;ProjectA&amp;#34;,&amp;#34;ProjectB&amp;#34;]refreshInterval:900username:&amp;#34;chris.cummer&amp;#34;verifyServerCertificate:true Attributes colors.rows.even Define the foreground color for even-numbered rows. Values: Any X11 color name.</description> Key: k Action: Select the previous item in the list.
Key: ↓ Action: Select the next item in the list.
Key: ↑ Action: Select the previous item in the list.</description>
</item> </item>
<item> <item>
@ -362,12 +394,11 @@ Key: h Action: Show the previous git repository.</description>
<guid>https://wtfutil.com/posts/modules/weather/</guid> <guid>https://wtfutil.com/posts/modules/weather/</guid>
<description>Displays a configurable list of current weather report, including current temperature, sunrise time, and sunset time. <description>Displays a configurable list of current weather report, including current temperature, sunrise time, and sunset time.
Source Code wtf/weather/ Required ENV Variables Key: WTF_OWM_API_KEY Action: Your OpenWeatherMap API key. Source Code wtf/weather/ Required ENV Variables Key: WTF_OWM_API_KEY Action: Your OpenWeatherMap API key. Note: DEPRECATED. See the apiKey config value, below.
Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window. Keyboard Commands Key: / Action: Open/close the widget&amp;rsquo;s help window.
Key: h Action: Show the previous weather location. Key: h Action: Show the previous weather location.
Key: l Action: Show the next weather location. Key: l Action: Show the next weather location.
Key: ← Action: Show the previous weather location. Key: ← Action: Show the previous weather location.</description>
Key: → Action: Show the next weather location.</description>
</item> </item>
<item> <item>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -179,10 +181,12 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
</span><span class="w"> </span>height<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="w"> </span>height<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">300</span><span class="w"> </span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">300</span><span class="w">
</span><span class="w"> </span>domain<span class="p">:</span><span class="w"> </span>https<span class="p">:</span>//gerrit-review.googlesource.com<span class="w">
</span><span class="w"> </span>projects<span class="p">:</span><span class="w"> </span><span class="w"> </span>projects<span class="p">:</span><span class="w">
</span><span class="w"> </span>-<span class="w"> </span>org/test-project<span class="s2">&#34; </span><span class="w"> </span>-<span class="w"> </span>org/test-project<span class="s2">&#34;
</span><span class="s2"> - dotfiles </span><span class="s2"> - dotfiles
</span><span class="s2"> username: &#34;</span>myname&#34;</code></pre></div> </span><span class="s2"> username: &#34;</span>myname&#34;<span class="w">
</span><span class="w"> </span>verifyServerCertificate<span class="p">:</span><span class="w"> </span><span class="kc">false</span></code></pre></div>
<h3 id="attributes">Attributes</h3> <h3 id="attributes">Attributes</h3>
<p><code>enabled</code> <br /> <p><code>enabled</code> <br />
@ -197,7 +201,7 @@ How often, in seconds, this module will update its data. <br />
Values: A positive integer, <code>0..n</code>.</p> Values: A positive integer, <code>0..n</code>.</p>
<p><code>domain</code> <br /> <p><code>domain</code> <br />
<em>Optional</em>. Your Gerrit corporate domain. <br /> Your Gerrit corporate domain. <br />
Values: A valid URI.</p> Values: A valid URI.</p>
<p><code>projects</code> <br /> <p><code>projects</code> <br />

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -184,6 +186,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<h2 id="configuration">Configuration</h2> <h2 id="configuration">Configuration</h2>
<div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">github<span class="p">:</span><span class="w"> <div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">github<span class="p">:</span><span class="w">
</span><span class="w"> </span>enabled<span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="w"> </span>enabled<span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="w"> </span>enableStatus<span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="w"> </span>position<span class="p">:</span><span class="w"> </span><span class="w"> </span>position<span class="p">:</span><span class="w">
</span><span class="w"> </span>top<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span><span class="w"> </span>top<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="w"> </span>left<span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span><span class="w"> </span>left<span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
@ -200,6 +203,11 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
Determines whether or not this module is executed and if its data displayed onscreen. <br /> Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: <code>true</code>, <code>false</code>.</p> Values: <code>true</code>, <code>false</code>.</p>
<p><code>enableStatus</code> <br />
Display pull request mergeability status (&lsquo;dirty&rsquo;, &lsquo;clean&rsquo;, &lsquo;unstable&rsquo;,
&lsquo;blocked&rsquo;).<br />
Values: <code>true</code>, <code>false</code>.</p>
<p><code>position</code> <br /> <p><code>position</code> <br />
Defines where in the grid this module&rsquo;s widget will be displayed. <br /></p> Defines where in the grid this module&rsquo;s widget will be displayed. <br /></p>

View File

@ -10,8 +10,8 @@
<meta name="generator" content="Hugo 0.38.2" /> <meta name="generator" content="Hugo 0.38.2" />
<title>Gitlab | WTF - A Terminal Dashboard</title> <title>GitLab | WTF - A Terminal Dashboard</title>
<meta content="Gitlab - WTF - A Terminal Dashboard" property="og:title"> <meta content="GitLab - WTF - A Terminal Dashboard" property="og:title">
<meta content=" - " property="og:description"> <meta content=" - " property="og:description">
<!-- CSS --> <!-- CSS -->
<link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css"> <link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css">
@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -116,7 +118,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="content container"> <div class="content container">
<div class="post"> <div class="post">
<h1>Gitlab</h1> <h1>GitLab</h1>
<div class="col-sm-12 col-md-12"> <div class="col-sm-12 col-md-12">
<span class="text-left post-date meta"> <span class="text-left post-date meta">
@ -138,7 +140,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<p><img src="/imgs/modules/gitlab.png" width="640" height="384" alt="gitlab screenshot" /></p> <p><img src="/imgs/modules/gitlab.png" width="640" height="384" alt="gitlab screenshot" /></p>
<p>Displays information about your projects hosted on Gitlab:</p> <p>Displays information about your projects hosted on GitLab:</p>
<h4 id="open-approval-requests">Open Approval Requests</h4> <h4 id="open-approval-requests">Open Approval Requests</h4>
@ -153,7 +155,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<h2 id="required-env-variables">Required ENV Variables</h2> <h2 id="required-env-variables">Required ENV Variables</h2>
<p><span class="caption">Key:</span> <code>WTF_GITLAB_TOKEN</code> <br /> <p><span class="caption">Key:</span> <code>WTF_GITLAB_TOKEN</code> <br />
<span class="caption">Action:</span> A <a href="https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html">Gitlab personal access token</a>. Requires at least <code>api</code> access.</p> <span class="caption">Action:</span> A <a href="https://docs.gitlab.com/ce/user/profile/personal_access_tokens.html">GitLab personal access token</a>. Requires at least <code>api</code> access.</p>
<h2 id="keyboard-commands">Keyboard Commands</h2> <h2 id="keyboard-commands">Keyboard Commands</h2>
@ -199,17 +201,17 @@ How often, in seconds, this module will update its data. <br />
Values: A positive integer, <code>0..n</code>.</p> Values: A positive integer, <code>0..n</code>.</p>
<p><code>domain</code> <br /> <p><code>domain</code> <br />
<em>Optional</em>. Your Gitlab corporate domain. <br /> <em>Optional</em>. Your GitLab corporate domain. <br />
Values: A valid URI.</p> Values: A valid URI.</p>
<p><code>projects</code> <br /> <p><code>projects</code> <br />
A list of key/value pairs each describing a Gitlab project to fetch data A list of key/value pairs each describing a GitLab project to fetch data
for. <br /> for. <br />
<span class="caption">Key:</span> The name of the project. <br /> <span class="caption">Key:</span> The name of the project. <br />
<span class="caption">Value:</span> The namespace of the project.</p> <span class="caption">Value:</span> The namespace of the project.</p>
<p><code>username</code> <br /> <p><code>username</code> <br />
Your Gitlab username. Used to figure out which requests require your approval</p> Your GitLab username. Used to figure out which requests require your approval</p>
</div> </div>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -162,7 +164,8 @@ width="320" height="68" alt="jenkins screenshot" /></p>
</span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w">
</span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">300</span><span class="w"> </span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">300</span><span class="w">
</span><span class="w"> </span>url<span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://jenkins.domain.com/jenkins/view_url&#34;</span><span class="w"> </span><span class="w"> </span>url<span class="p">:</span><span class="w"> </span><span class="s2">&#34;https://jenkins.domain.com/jenkins/view_url&#34;</span><span class="w">
</span><span class="w"> </span>user<span class="p">:</span><span class="w"> </span><span class="s2">&#34;username&#34;</span></code></pre></div> </span><span class="w"> </span>user<span class="p">:</span><span class="w"> </span><span class="s2">&#34;username&#34;</span><span class="w">
</span><span class="w"> </span>verifyServerCertificate<span class="p">:</span><span class="w"> </span><span class="kc">true</span></code></pre></div>
<h3 id="attributes">Attributes</h3> <h3 id="attributes">Attributes</h3>
<p><code>enabled</code> <br /> <p><code>enabled</code> <br />
@ -183,6 +186,11 @@ Your Jenkins username. <br /></p>
The url to your Jenkins project or view. <br /> The url to your Jenkins project or view. <br />
Values: A valid URI.</p> Values: A valid URI.</p>
<p><code>verifyServerCertificate</code> <br />
<em>Optional</em> <br />
Determines whether or not the server&rsquo;s certificate chain and host name are verified. <br />
Values: <code>true</code>, <code>false</code>.</p>
</div> </div>
<div class="footer"> <div class="footer">

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -147,7 +149,20 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<h2 id="keyboard-commands">Keyboard Commands</h2> <h2 id="keyboard-commands">Keyboard Commands</h2>
<p>None.</p> <p><span class="caption">Key:</span> <code>[return]</code> <br />
<span class="caption">Action:</span> Open the selected issue in the browser.</p>
<p><span class="caption">Key:</span> <code>j</code> <br />
<span class="caption">Action:</span> Select the next item in the list.</p>
<p><span class="caption">Key:</span> <code>k</code> <br />
<span class="caption">Action:</span> Select the previous item in the list.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Select the next item in the list.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Select the previous item in the list.</p>
<h2 id="configuration">Configuration</h2> <h2 id="configuration">Configuration</h2>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -0,0 +1,228 @@
<!DOCTYPE html>
<html lang="en-us" class="wf-firasans-n4-active wf-active">
<head>
<link href="http://gmpg.org/xfn/11" rel="profile">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- Enable responsiveness on mobile devices -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="generator" content="Hugo 0.38.2" />
<title>Todoist | WTF - A Terminal Dashboard</title>
<meta content="Todoist - WTF - A Terminal Dashboard" property="og:title">
<meta content=" - " property="og:description">
<!-- CSS -->
<link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css">
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,300i,400,400i|Roboto+Mono:300,300i,400,400i" rel="stylesheet">
<link rel="stylesheet" href="https://wtfutil.com/css/print.css" media="print">
<link rel="stylesheet" href="https://wtfutil.com/css/poole.css">
<link rel="stylesheet" href="https://wtfutil.com/css/hyde.css">
<link rel="stylesheet" href="https://wtfutil.com/css/syntax.css">
<link rel="stylesheet" href="https://wtfutil.com/css/wtf.css">
<!-- Font-Awesome -->
<script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>
<!-- Customised CSS -->
<link rel="stylesheet" href="https://wtfutil.com/css/custom.css">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
<link rel="shortcut icon" href="/favicon.png">
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-532RMQJ');</script>
</head>
<body>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-532RMQJ"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="sidebar">
<div class="container">
<div class="sidebar-about text-center">
<a href="https://wtfutil.com/"> <img src="/img/wtf.png" alt="WFT Logo" class="" width=""> </a>
<p class="lead">
</p>
</div>
<div>
<h3 style="color: white;">Content</h3>
<ul style="list-style-type: none;">
<li class="sidebar-list-item-1"><a href="/posts/overview/">Overview</a></li>
<li class="sidebar-list-item-1"><a href="/posts/installation/">Installation</a></li>
<li class="sidebar-list-item-1"><a href="/posts/configuration/">Configuration</a></li>
<li class="sidebar-list-item-2"><a href="/posts/configuration/attributes/">Attributes</a></li>
<li class="sidebar-list-item-2"><a href="/posts/configuration/iterm2/">iTerm2</a></li>
<li class="sidebar-list-item-1"><a href="https://github.com/senorprogrammer/wtf/releases">Releases</a></li>
</ul>
<ul style="list-style-type: none;">
<li class="sidebar-list-item-1"><a href="/posts/modules/">Modules</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/bamboohr/">BambooHR</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/bittrex/">Bittrex</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/blockfolio/">Blockfolio</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/circleci/">CircleCI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/clocks/">Clocks</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/cryptolive/">CryptoLive</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cmdrunner/">CmdRunner</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipinfo/">IPInfo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/jenkins/">Jenkins</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/jira/">Jira</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/logger/">Logger</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/newrelic/">New Relic</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/opsgenie/">OpsGenie</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/power/">Power</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/prettyweather/">PrettyWeather</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul>
</div>
<p class="copyright">
&copy; 2018 Chris Cummer.
<br />
<a href="https://creativecommons.org/licenses/by/4.0">Some Rights Reserved</a>.
</p>
</div>
</div>
<div class="content container">
<div class="post">
<h1>Todoist</h1>
<div class="col-sm-12 col-md-12">
<span class="text-left post-date meta">
Jul 05, 2018
<br/>
</span>
</div>
<p>Added in <code>v0.0.11</code>.</p>
<p>Displays all items on specified project.</p>
<p><img src="/imgs/modules/todoist.png" alt="todoist screenshot" /></p>
<h2 id="source-code">Source Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-bash" data-lang="bash">wtf/todoist/</code></pre></div>
<h2 id="required-env-variables">Required ENV Variables</h2>
<p><span class="caption">Key:</span> <code>WTF_TODOIST_TOKEN</code> <br />
<span class="caption">Value:</span> Your Todoist API Token. <br /></p>
<p><em>You can get your API Token at: todoist.com/prefs/integrations.</em></p>
<h2 id="keyboard-commands">Keyboard Commands</h2>
<p><span class="caption">Key:</span> <code>h</code> <br />
<span class="caption">Action:</span> Show the previous project.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Show the previous project.</p>
<p><span class="caption">Key:</span> <code>l</code> <br />
<span class="caption">Action:</span> Show the next project.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Show the next project.</p>
<p><span class="caption">Key:</span> <code>j</code> <br />
<span class="caption">Action:</span> Select the next item in the list.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Select the next item in the list.</p>
<p><span class="caption">Key:</span> <code>k</code> <br />
<span class="caption">Action:</span> Select the previous item in the list.</p>
<p><span class="caption">Key:</span> <code></code> <br />
<span class="caption">Action:</span> Select the previous item in the list.</p>
<p><span class="caption">Key:</span> <code>c</code> <br />
<span class="caption">Action:</span> Close current item.</p>
<p><span class="caption">Key:</span> <code>d</code> <br />
<span class="caption">Action:</span> Delete current item.</p>
<p><span class="caption">Key:</span> <code>r</code> <br />
<span class="caption">Action:</span> Reload all projects.</p>
<h2 id="configuration">Configuration</h2>
<div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">todoist<span class="p">:</span><span class="w">
</span><span class="w"> </span>enabled<span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="w"> </span>position<span class="p">:</span><span class="w">
</span><span class="w"> </span>top<span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w">
</span><span class="w"> </span>left<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="w"> </span>height<span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span><span class="w"> </span>projects<span class="p">:</span><span class="w">
</span><span class="w"> </span>-<span class="w"> </span><span class="m">122247497</span><span class="w">
</span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">3600</span></code></pre></div>
<h3 id="attributes">Attributes</h3>
<p><code>enabled</code> <br />
Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: <code>true</code>, <code>false</code>.</p>
<p><code>position</code> <br />
Where in the grid this module&rsquo;s widget will be displayed. <br /></p>
<p><code>projects</code> <br />
The todoist projects to fetch items from. <br />
Values: The integer ID of the project.</p>
<p><code>refreshInterval</code> <br />
How often, in seconds, this module will update its data. <br />
Values: A positive integer, <code>0..n</code>.</p>
</div>
<div class="footer">
</div>
</div>
</body>
</html>

View File

@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="en-us" class="wf-firasans-n4-active wf-active">
<head>
<link href="http://gmpg.org/xfn/11" rel="profile">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- Enable responsiveness on mobile devices -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="generator" content="Hugo 0.38.2" />
<title>TravisCI | WTF - A Terminal Dashboard</title>
<meta content="TravisCI - WTF - A Terminal Dashboard" property="og:title">
<meta content=" - " property="og:description">
<!-- CSS -->
<link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css">
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:300,300i,400,400i|Roboto+Mono:300,300i,400,400i" rel="stylesheet">
<link rel="stylesheet" href="https://wtfutil.com/css/print.css" media="print">
<link rel="stylesheet" href="https://wtfutil.com/css/poole.css">
<link rel="stylesheet" href="https://wtfutil.com/css/hyde.css">
<link rel="stylesheet" href="https://wtfutil.com/css/syntax.css">
<link rel="stylesheet" href="https://wtfutil.com/css/wtf.css">
<!-- Font-Awesome -->
<script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>
<!-- Customised CSS -->
<link rel="stylesheet" href="https://wtfutil.com/css/custom.css">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- Icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
<link rel="shortcut icon" href="/favicon.png">
<script async defer src="https://buttons.github.io/buttons.js"></script>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-532RMQJ');</script>
</head>
<body>
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-532RMQJ"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="sidebar">
<div class="container">
<div class="sidebar-about text-center">
<a href="https://wtfutil.com/"> <img src="/img/wtf.png" alt="WFT Logo" class="" width=""> </a>
<p class="lead">
</p>
</div>
<div>
<h3 style="color: white;">Content</h3>
<ul style="list-style-type: none;">
<li class="sidebar-list-item-1"><a href="/posts/overview/">Overview</a></li>
<li class="sidebar-list-item-1"><a href="/posts/installation/">Installation</a></li>
<li class="sidebar-list-item-1"><a href="/posts/configuration/">Configuration</a></li>
<li class="sidebar-list-item-2"><a href="/posts/configuration/attributes/">Attributes</a></li>
<li class="sidebar-list-item-2"><a href="/posts/configuration/iterm2/">iTerm2</a></li>
<li class="sidebar-list-item-1"><a href="https://github.com/senorprogrammer/wtf/releases">Releases</a></li>
</ul>
<ul style="list-style-type: none;">
<li class="sidebar-list-item-1"><a href="/posts/modules/">Modules</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/bamboohr/">BambooHR</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/bittrex/">Bittrex</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/blockfolio/">Blockfolio</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/circleci/">CircleCI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/clocks/">Clocks</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cryptocurrencies/cryptolive/">CryptoLive</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/cmdrunner/">CmdRunner</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipinfo/">IPInfo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/jenkins/">Jenkins</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/jira/">Jira</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/logger/">Logger</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/newrelic/">New Relic</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/opsgenie/">OpsGenie</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/power/">Power</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/prettyweather/">PrettyWeather</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul>
</div>
<p class="copyright">
&copy; 2018 Chris Cummer.
<br />
<a href="https://creativecommons.org/licenses/by/4.0">Some Rights Reserved</a>.
</p>
</div>
</div>
<div class="content container">
<div class="post">
<h1>TravisCI</h1>
<div class="col-sm-12 col-md-12">
<span class="text-left post-date meta">
Jul 18, 2018
<br/>
</span>
</div>
<p>Added in <code>v0.0.12</code>.</p>
<p>Displays build information for your Travis CI account.</p>
<p><img src="/imgs/modules/travisci.png" width="609" height="150" alt="travisci screenshot" /></p>
<h2 id="source-code">Source Code</h2>
<div class="highlight"><pre class="chroma"><code class="language-bash" data-lang="bash">wtf/travisci/</code></pre></div>
<h2 id="required-env-variables">Required ENV Variables</h2>
<p><span class="caption">Key:</span> <code>WTF_TRAVIS_API_TOKEN</code> <br />
<span class="caption">Value:</span> Your <a href="https://developer.travis-ci.org/authentication">Travis CI API</a> access token.</p>
<h2 id="keyboard-commands">Keyboard Commands</h2>
<p>None.</p>
<h2 id="configuration">Configuration</h2>
<div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">travisci<span class="p">:</span><span class="w">
</span><span class="w"> </span>enabled<span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span><span class="w"> </span>position<span class="p">:</span><span class="w">
</span><span class="w"> </span>top<span class="p">:</span><span class="w"> </span><span class="m">4</span><span class="w">
</span><span class="w"> </span>left<span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span><span class="w"> </span>height<span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w">
</span><span class="w"> </span>width<span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w">
</span><span class="w"> </span>refreshInterval<span class="p">:</span><span class="w"> </span><span class="m">900</span></code></pre></div>
<h3 id="attributes">Attributes</h3>
<p><code>enabled</code> <br />
Determines whether or not this module is executed and if its data displayed onscreen. <br />
Values: <code>true</code>, <code>false</code>.</p>
<p><code>position</code> <br />
Defines where in the grid this module&rsquo;s widget will be displayed. <br /></p>
<p><code>refreshInterval</code> <br />
How often, in seconds, this module will update its data. <br />
Values: A positive integer, <code>0..n</code>.</p>
</div>
<div class="footer">
</div>
</div>
</body>
</html>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>
@ -144,7 +146,8 @@ current temperature, sunrise time, and sunset time.</p>
<h2 id="required-env-variables">Required ENV Variables</h2> <h2 id="required-env-variables">Required ENV Variables</h2>
<p><span class="caption">Key:</span> <code>WTF_OWM_API_KEY</code> <br /> <p><span class="caption">Key:</span> <code>WTF_OWM_API_KEY</code> <br />
<span class="caption">Action:</span> Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key.</p> <span class="caption">Action:</span> Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key. <br />
<span class="caption">Note:</span> DEPRECATED. See the <code>apiKey</code> config value, below.</p>
<h2 id="keyboard-commands">Keyboard Commands</h2> <h2 id="keyboard-commands">Keyboard Commands</h2>
@ -165,6 +168,7 @@ current temperature, sunrise time, and sunset time.</p>
<h2 id="configuration">Configuration</h2> <h2 id="configuration">Configuration</h2>
<div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">weather<span class="p">:</span><span class="w"> <div class="highlight"><pre class="chroma"><code class="language-yaml" data-lang="yaml">weather<span class="p">:</span><span class="w">
</span><span class="w"> </span>apiKey<span class="p">:</span><span class="w"> </span><span class="s2">&#34;2dfb3e3650a1950adddb6badf5ba1aaa&#34;</span><span class="w">
</span><span class="w"> </span><span class="c"># From http://openweathermap.org/help/city_list.txt</span><span class="w"> </span><span class="w"> </span><span class="c"># From http://openweathermap.org/help/city_list.txt</span><span class="w">
</span><span class="w"> </span>cityids<span class="p">:</span><span class="w"> </span><span class="w"> </span>cityids<span class="p">:</span><span class="w">
</span><span class="w"> </span>-<span class="w"> </span><span class="m">6173331</span><span class="w"> </span><span class="w"> </span>-<span class="w"> </span><span class="m">6173331</span><span class="w">
@ -184,6 +188,9 @@ current temperature, sunrise time, and sunset time.</p>
</span><span class="w"> </span>tempUnit<span class="p">:</span><span class="w"> </span><span class="s2">&#34;C&#34;</span></code></pre></div> </span><span class="w"> </span>tempUnit<span class="p">:</span><span class="w"> </span><span class="s2">&#34;C&#34;</span></code></pre></div>
<h3 id="attributes">Attributes</h3> <h3 id="attributes">Attributes</h3>
<p><code>apiKey</code> <br />
Your <a href="https://openweathermap.org/appid">OpenWeatherMap API</a> key.</p>
<p><code>cityids</code> <br /> <p><code>cityids</code> <br />
A list of the <a A list of the <a
href="http://openweathermap.org/help/city_list.txt">OpenWeatherMap city href="http://openweathermap.org/help/city_list.txt">OpenWeatherMap city

View File

@ -85,7 +85,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -100,6 +100,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -2,6 +2,16 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"> xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://wtfutil.com/posts/modules/travisci/</loc>
<lastmod>2018-07-18T14:36:08-04:00</lastmod>
</url>
<url>
<loc>https://wtfutil.com/posts/modules/todoist/</loc>
<lastmod>2018-07-05T22:55:55-03:00</lastmod>
</url>
<url> <url>
<loc>https://wtfutil.com/posts/modules/gerrit/</loc> <loc>https://wtfutil.com/posts/modules/gerrit/</loc>
<lastmod>2018-06-27T15:55:42-07:00</lastmod> <lastmod>2018-06-27T15:55:42-07:00</lastmod>
@ -179,7 +189,7 @@
<url> <url>
<loc>https://wtfutil.com/posts/</loc> <loc>https://wtfutil.com/posts/</loc>
<lastmod>2018-06-27T15:55:42-07:00</lastmod> <lastmod>2018-07-18T14:36:08-04:00</lastmod>
<priority>0</priority> <priority>0</priority>
</url> </url>
@ -190,7 +200,7 @@
<url> <url>
<loc>https://wtfutil.com/</loc> <loc>https://wtfutil.com/</loc>
<lastmod>2018-06-27T15:55:42-07:00</lastmod> <lastmod>2018-07-18T14:36:08-04:00</lastmod>
<priority>0</priority> <priority>0</priority>
</url> </url>

View File

@ -87,7 +87,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gerrit/">Gerrit</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/git/">Git</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/github/">GitHub</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">Gitlab</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gitlab/">GitLab</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gcal/">Google Calendar</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/gspreadsheet">Google Spreadsheet</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/ipapi/">IP-API</a></li>
@ -102,6 +102,8 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/security/">Security</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/textfile/">Text File</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/todo/">Todo</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/todoist/">Todoist</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/travisci/">Travis CI</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/trello/">Trello</a></li>
<li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li> <li class="sidebar-list-item-2"><a href="/posts/modules/weather/">Weather</a></li>
</ul> </ul>

View File

@ -13,6 +13,7 @@ import (
type Flags struct { type Flags struct {
Config string `short:"c" long:"config" optional:"yes" description:"Path to config file"` Config string `short:"c" long:"config" optional:"yes" description:"Path to config file"`
Module string `short:"m" long:"module" optional:"yes" description:"Display info about a specific module, i.e.: 'wtf -m=todo'"` Module string `short:"m" long:"module" optional:"yes" description:"Display info about a specific module, i.e.: 'wtf -m=todo'"`
Profile bool `short:"p" long:"profile" optional:"yes" description:"Profile application memory usage"`
Version bool `short:"v" long:"version" description:"Show version info"` Version bool `short:"v" long:"version" description:"Show version info"`
} }

View File

@ -3,6 +3,7 @@ package github
import ( import (
"fmt" "fmt"
"github.com/google/go-github/github"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
@ -37,7 +38,7 @@ func (widget *Widget) displayMyPullRequests(repo *GithubRepo, username string) s
str := "" str := ""
for _, pr := range prs { for _, pr := range prs {
str = str + fmt.Sprintf(" [green]%4d[white] %s\n", *pr.Number, *pr.Title) str = str + fmt.Sprintf(" %s[green]%4d[white] %s\n", mergeString(pr), *pr.Number, *pr.Title)
} }
return str return str
@ -72,3 +73,24 @@ func (widget *Widget) displayStats(repo *GithubRepo) string {
func (widget *Widget) title(repo *GithubRepo) string { func (widget *Widget) title(repo *GithubRepo) string {
return fmt.Sprintf("[green]%s - %s[white]", repo.Owner, repo.Name) return fmt.Sprintf("[green]%s - %s[white]", repo.Owner, repo.Name)
} }
func showStatus() bool {
return wtf.Config.UBool("wtf.mods.github.enableStatus", false)
}
var mergeIcons = map[string]string{
"dirty": "[red]![white] ",
"clean": "[green]✔[white] ",
"unstable": "[red]✖[white] ",
"blocked": "[red]✖[white] ",
}
func mergeString(pr *github.PullRequest) string {
if !showStatus() {
return ""
}
if str, ok := mergeIcons[pr.GetMergeableState()]; ok {
return str
}
return "? "
}

View File

@ -103,9 +103,35 @@ func (repo *GithubRepo) myPullRequests(username string) []*ghb.PullRequest {
} }
} }
if showStatus() {
prs = repo.individualPRs(prs)
}
return prs return prs
} }
// individualPRs takes a list of pull requests (presumably returned from
// github.PullRequests.List) and fetches them individually to get more detailed
// status info on each. see: https://developer.github.com/v3/git/#checking-mergeability-of-pull-requests
func (repo *GithubRepo) individualPRs(prs []*ghb.PullRequest) []*ghb.PullRequest {
github, err := repo.githubClient()
if err != nil {
return prs
}
var ret []*ghb.PullRequest
for i := range prs {
pr, _, err := github.PullRequests.Get(context.Background(), repo.Owner, repo.Name, prs[i].GetNumber())
if err != nil {
// worst case, just keep the original one
ret = append(ret, prs[i])
} else {
ret = append(ret, pr)
}
}
return ret
}
// myReviewRequests returns a list of pull requests for which username has been // myReviewRequests returns a list of pull requests for which username has been
// requested to do a code review // requested to do a code review
func (repo *GithubRepo) myReviewRequests(username string) []*ghb.PullRequest { func (repo *GithubRepo) myReviewRequests(username string) []*ghb.PullRequest {

View File

@ -2,12 +2,15 @@ package jenkins
import ( import (
"bytes" "bytes"
"crypto/tls"
"encoding/json" "encoding/json"
"io" "io"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
"net/url" "net/url"
"strings" "strings"
"github.com/senorprogrammer/wtf/wtf"
) )
func Create(jenkinsURL string, username string, apiKey string) (*View, error) { func Create(jenkinsURL string, username string, apiKey string) (*View, error) {
@ -26,7 +29,13 @@ func Create(jenkinsURL string, username string, apiKey string) (*View, error) {
req, _ := http.NewRequest("GET", jenkinsAPIURL.String(), nil) req, _ := http.NewRequest("GET", jenkinsAPIURL.String(), nil)
req.SetBasicAuth(username, apiKey) req.SetBasicAuth(username, apiKey)
httpClient := &http.Client{} verifyServerCertificate := wtf.Config.UBool("wtf.mods.jenkins.verifyServerCertificate", true)
httpClient := &http.Client{Transport: &http.Transport{
TLSClientConfig: &tls.Config{
InsecureSkipVerify: !verifyServerCertificate,
},
},
}
resp, err := httpClient.Do(req) resp, err := httpClient.Do(req)
if err != nil { if err != nil {

View File

@ -3,18 +3,24 @@ package jira
import ( import (
"fmt" "fmt"
"github.com/gdamore/tcell"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
type Widget struct { type Widget struct {
wtf.TextWidget wtf.TextWidget
result *SearchResult
selected int
} }
func NewWidget() *Widget { func NewWidget() *Widget {
widget := Widget{ widget := Widget{
TextWidget: wtf.NewTextWidget(" Jira ", "jira", false), TextWidget: wtf.NewTextWidget(" Jira ", "jira", true),
} }
widget.unselect()
widget.View.SetInputCapture(widget.keyboardIntercept)
return &widget return &widget
} }
@ -29,45 +35,94 @@ func (widget *Widget) Refresh() {
widget.UpdateRefreshedAt() widget.UpdateRefreshedAt()
var content string
if err != nil { if err != nil {
widget.result = nil
widget.View.SetWrap(true) widget.View.SetWrap(true)
widget.View.SetTitle(widget.Name) widget.View.SetTitle(widget.Name)
content = err.Error() widget.View.SetText(err.Error())
} else { } else {
widget.View.SetWrap(false) widget.result = searchResult
widget.View.SetTitle(
fmt.Sprintf(
"%s- [green]%s[white]",
widget.Name,
wtf.Config.UString("wtf.mods.jira.project"),
),
)
content = widget.contentFrom(searchResult)
} }
widget.View.SetText(content) widget.display()
} }
/* -------------------- Unexported Functions -------------------- */ /* -------------------- Unexported Functions -------------------- */
func (widget *Widget) display() {
if widget.result == nil {
return
}
widget.View.SetWrap(false)
widget.View.SetTitle(
fmt.Sprintf(
"%s- [green]%s[white] ",
widget.Name,
wtf.Config.UString("wtf.mods.jira.project"),
),
)
widget.View.SetText(fmt.Sprintf("%s", widget.contentFrom(widget.result)))
}
func (widget *Widget) next() {
widget.selected++
if widget.result != nil && widget.selected >= len(widget.result.Issues) {
widget.selected = 0
}
}
func (widget *Widget) prev() {
widget.selected--
if widget.selected < 0 && widget.result != nil {
widget.selected = len(widget.result.Issues) - 1
}
}
func (widget *Widget) openItem() {
sel := widget.selected
if sel >= 0 && widget.result != nil && sel < len(widget.result.Issues) {
issue := &widget.result.Issues[widget.selected]
wtf.OpenFile(wtf.Config.UString("wtf.mods.jira.domain") + "/browse/" + issue.Key)
}
}
func (widget *Widget) unselect() {
widget.selected = -1
}
func (widget *Widget) contentFrom(searchResult *SearchResult) string { func (widget *Widget) contentFrom(searchResult *SearchResult) string {
str := " [red]Assigned Issues[white]\n" str := " [red]Assigned Issues[white]\n"
for idx, issue := range searchResult.Issues { for idx, issue := range searchResult.Issues {
str = str + fmt.Sprintf( fmtStr := fmt.Sprintf(
" [%s]%-6s[white] [green]%-10s[%s] %s\n", "[%s] [%s]%-6s[white] [green]%-10s[white] [%s]%s",
widget.rowColor(idx),
widget.issueTypeColor(&issue), widget.issueTypeColor(&issue),
issue.IssueFields.IssueType.Name, issue.IssueFields.IssueType.Name,
issue.Key, issue.Key,
wtf.RowColor("jira", idx), widget.rowColor(idx),
issue.IssueFields.Summary, issue.IssueFields.Summary,
) )
_, _, w, _ := widget.View.GetInnerRect()
fmtStr = fmtStr + wtf.PadRow(len(issue.IssueFields.Summary), w+1)
str = str + fmtStr + "\n"
} }
return str return str
} }
func (widget *Widget) rowColor(idx int) string {
if widget.View.HasFocus() && (idx == widget.selected) {
foreColor := wtf.Config.UString("wtf.colors.highlight.fore", "black")
backColor := wtf.Config.UString("wtf.colors.highlight.back", "orange")
return fmt.Sprintf("%s:%s", foreColor, backColor)
}
return wtf.RowColor("jira", idx)
}
func (widget *Widget) issueTypeColor(issue *Issue) string { func (widget *Widget) issueTypeColor(issue *Issue) string {
switch issue.IssueFields.IssueType.Name { switch issue.IssueFields.IssueType.Name {
case "Bug": case "Bug":
@ -98,3 +153,42 @@ func getProjects() []string {
} }
return ret return ret
} }
func (widget *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
switch string(event.Rune()) {
case "j":
// Select the next item down
widget.next()
widget.display()
return nil
case "k":
// Select the next item up
widget.prev()
widget.display()
return nil
}
switch event.Key() {
case tcell.KeyDown:
// Select the next item down
widget.next()
widget.display()
return nil
case tcell.KeyEnter:
widget.openItem()
return nil
case tcell.KeyEsc:
// Unselect the current row
widget.unselect()
widget.display()
return event
case tcell.KeyUp:
// Select the next item up
widget.prev()
widget.display()
return nil
default:
// Pass it along
return event
}
}

View File

@ -3,6 +3,8 @@ package todo
import ( import (
"fmt" "fmt"
"github.com/rivo/tview"
"github.com/senorprogrammer/wtf/checklist"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
) )
@ -10,38 +12,35 @@ const checkWidth = 4
func (widget *Widget) display() { func (widget *Widget) display() {
str := "" str := ""
newList := List{selected: -1} newList := checklist.NewChecklist()
selectedItem := widget.list.Selected()
maxLineLen := widget.list.LongestLine()
for _, item := range widget.list.UncheckedItems() { for _, item := range widget.list.UncheckedItems() {
str = str + widget.formattedItemLine(item, selectedItem, maxLineLen) str = str + widget.formattedItemLine(item, widget.list.SelectedItem(), widget.list.LongestLine())
newList.Items = append(newList.Items, item) newList.Items = append(newList.Items, item)
} }
for _, item := range widget.list.CheckedItems() { for _, item := range widget.list.CheckedItems() {
str = str + widget.formattedItemLine(item, selectedItem, maxLineLen) str = str + widget.formattedItemLine(item, widget.list.SelectedItem(), widget.list.LongestLine())
newList.Items = append(newList.Items, item) newList.Items = append(newList.Items, item)
} }
newList.SetSelectedByItem(widget.list.Selected()) newList.SetSelectedByItem(widget.list.SelectedItem())
widget.SetList(&newList) widget.SetList(newList)
widget.View.Clear() widget.View.Clear()
widget.View.SetText(str) widget.View.SetText(str)
} }
func (widget *Widget) formattedItemLine(item *Item, selectedItem *Item, maxLen int) string { func (widget *Widget) formattedItemLine(item *checklist.ChecklistItem, selectedItem *checklist.ChecklistItem, maxLen int) string {
foreColor, backColor := "white", wtf.Config.UString("wtf.colors.background", "black") foreColor, backColor := "white", wtf.Config.UString("wtf.colors.background", "black")
if item.Checked { if item.Checked {
foreColor = wtf.Config.UString("wtf.mods.todo.colors.checked", "white") foreColor = wtf.Config.UString("wtf.colors.checked", "white")
} }
if widget.View.HasFocus() && (item == selectedItem) { if widget.View.HasFocus() && (item == selectedItem) {
foreColor = wtf.Config.UString("wtf.mods.todo.colors.highlight.fore", "black") foreColor = wtf.Config.UString("wtf.colors.highlight.fore", "black")
backColor = wtf.Config.UString("wtf.mods.todo.colors.highlight.back", "white") backColor = wtf.Config.UString("wtf.colors.highlight.back", "orange")
} }
str := fmt.Sprintf( str := fmt.Sprintf(
@ -49,10 +48,13 @@ func (widget *Widget) formattedItemLine(item *Item, selectedItem *Item, maxLen i
foreColor, foreColor,
backColor, backColor,
item.CheckMark(), item.CheckMark(),
item.Text, tview.Escape(item.Text),
) )
str = str + wtf.PadRow((checkWidth+len(item.Text)), (checkWidth+maxLen)) + "\n" _, _, w, _ := widget.View.GetInnerRect()
if w > maxLen {
maxLen = w
}
return str return str + wtf.PadRow((checkWidth+len(item.Text)), (checkWidth+maxLen+1)) + "\n"
} }

View File

@ -1,22 +0,0 @@
package todo
import (
"github.com/senorprogrammer/wtf/wtf"
)
type Item struct {
Checked bool
Text string
}
func (item *Item) CheckMark() string {
if item.Checked {
return wtf.Config.UString("wtf.mods.todo.checkedIcon", "x")
} else {
return " "
}
}
func (item *Item) Toggle() {
item.Checked = !item.Checked
}

View File

@ -1,165 +0,0 @@
package todo
type List struct {
Items []*Item
selected int
}
/* -------------------- Exported Functions -------------------- */
func (list *List) Add(text string) {
item := Item{
Checked: false,
Text: text,
}
list.Items = append([]*Item{&item}, list.Items...)
}
func (list *List) CheckedItems() []*Item {
items := []*Item{}
for _, item := range list.Items {
if item.Checked {
items = append(items, item)
}
}
return items
}
func (list *List) Delete() {
list.Items = append(list.Items[:list.selected], list.Items[list.selected+1:]...)
list.Prev()
}
func (list *List) Demote() {
if list.isUnselectable() {
return
}
j := list.selected + 1
if j >= len(list.Items) {
j = 0
}
list.Swap(list.selected, j)
list.selected = j
}
func (list *List) Next() {
list.selected = list.selected + 1
if list.selected >= len(list.Items) {
list.selected = 0
}
}
func (list *List) LongestLine() int {
maxLen := 0
for _, item := range list.Items {
if len(item.Text) > maxLen {
maxLen = len(item.Text)
}
}
return maxLen
}
func (list *List) Prev() {
list.selected = list.selected - 1
if list.selected < 0 {
list.selected = len(list.Items) - 1
}
}
func (list *List) Promote() {
if list.isUnselectable() {
return
}
j := list.selected - 1
if j < 0 {
j = len(list.Items) - 1
}
list.Swap(list.selected, j)
list.selected = j
}
func (list *List) Selected() *Item {
if list.isUnselectable() {
return nil
}
return list.Items[list.selected]
}
func (list *List) SetSelectedByItem(selectableItem *Item) {
for idx, item := range list.Items {
if item == selectableItem {
list.selected = idx
break
}
}
}
// Toggle switches the checked state of the currently-selected item
func (list *List) Toggle() {
if list.isUnselectable() {
return
}
list.Selected().Toggle()
}
func (list *List) UncheckedItems() []*Item {
items := []*Item{}
for _, item := range list.Items {
if !item.Checked {
items = append(items, item)
}
}
return items
}
func (list *List) Unselect() {
list.selected = -1
}
func (list *List) Update(text string) {
item := list.Selected()
if item == nil {
return
}
item.Text = text
}
/* -------------------- Sort Interface -------------------- */
func (list *List) Len() int {
return len(list.Items)
}
func (list *List) Less(i, j int) bool {
return list.Items[i].Text < list.Items[j].Text
}
func (list *List) Swap(i, j int) {
list.Items[i], list.Items[j] = list.Items[j], list.Items[i]
}
/* -------------------- Unexported Functions -------------------- */
func (list *List) isSelectable() bool {
return list.selected >= 0 && list.selected < len(list.Items)
}
func (list *List) isUnselectable() bool {
return !list.isSelectable()
}

View File

@ -7,6 +7,7 @@ import (
"github.com/gdamore/tcell" "github.com/gdamore/tcell"
"github.com/rivo/tview" "github.com/rivo/tview"
"github.com/senorprogrammer/wtf/cfg" "github.com/senorprogrammer/wtf/cfg"
"github.com/senorprogrammer/wtf/checklist"
"github.com/senorprogrammer/wtf/wtf" "github.com/senorprogrammer/wtf/wtf"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
@ -39,7 +40,7 @@ type Widget struct {
app *tview.Application app *tview.Application
filePath string filePath string
list *List list checklist.Checklist
pages *tview.Pages pages *tview.Pages
} }
@ -49,7 +50,7 @@ func NewWidget(app *tview.Application, pages *tview.Pages) *Widget {
app: app, app: app,
filePath: wtf.Config.UString("wtf.mods.todo.filename"), filePath: wtf.Config.UString("wtf.mods.todo.filename"),
list: &List{selected: -1}, list: checklist.NewChecklist(),
pages: pages, pages: pages,
} }
@ -67,7 +68,7 @@ func (widget *Widget) Refresh() {
widget.display() widget.display()
} }
func (widget *Widget) SetList(newList *List) { func (widget *Widget) SetList(newList checklist.Checklist) {
widget.list = newList widget.list = newList
} }
@ -75,11 +76,11 @@ func (widget *Widget) SetList(newList *List) {
// edit opens a modal dialog that permits editing the text of the currently-selected item // edit opens a modal dialog that permits editing the text of the currently-selected item
func (widget *Widget) editItem() { func (widget *Widget) editItem() {
if widget.list.Selected() == nil { if widget.list.SelectedItem() == nil {
return return
} }
form := widget.modalForm("Edit:", widget.list.Selected().Text) form := widget.modalForm("Edit:", widget.list.SelectedItem().Text)
saveFctn := func() { saveFctn := func() {
text := form.GetFormItem(0).(*tview.InputField).GetText() text := form.GetFormItem(0).(*tview.InputField).GetText()
@ -191,7 +192,7 @@ func (widget *Widget) newItem() {
saveFctn := func() { saveFctn := func() {
text := form.GetFormItem(0).(*tview.InputField).GetText() text := form.GetFormItem(0).(*tview.InputField).GetText()
widget.list.Add(text) widget.list.Add(false, text)
widget.persist() widget.persist()
widget.pages.RemovePage("modal") widget.pages.RemovePage("modal")
widget.app.SetFocus(widget.View) widget.app.SetFocus(widget.View)

49
todoist/display.go Normal file
View File

@ -0,0 +1,49 @@
package todoist
import (
"fmt"
"github.com/rivo/tview"
"github.com/senorprogrammer/wtf/wtf"
)
const checkWidth = 4
func (widget *Widget) display() {
proj := widget.CurrentProject()
if proj == nil {
return
}
widget.View.SetTitle(fmt.Sprintf("%s- [green]%s[white] ", widget.Name, proj.Project.Name))
str := wtf.SigilStr(len(widget.projects), widget.idx, widget.View) + "\n"
maxLen := proj.LongestLine()
for index, item := range proj.tasks {
foreColor, backColor := "white", wtf.Config.UString("wtf.colors.background", "black")
if index == proj.index {
foreColor = wtf.Config.UString("wtf.colors.highlight.fore", "black")
backColor = wtf.Config.UString("wtf.colors.highlight.back", "orange")
}
row := fmt.Sprintf(
"[%s:%s]| | %s[white]",
foreColor,
backColor,
tview.Escape(item.Content),
)
_, _, w, _ := widget.View.GetInnerRect()
if w > maxLen {
maxLen = w
}
str = str + row + wtf.PadRow((checkWidth+len(item.Content)), (checkWidth+maxLen+1)) + "\n"
}
//widget.View.Clear()
widget.View.SetText(str)
}

110
todoist/project.go Normal file
View File

@ -0,0 +1,110 @@
package todoist
import (
"fmt"
"github.com/darkSasori/todoist"
)
type Project struct {
todoist.Project
index int
tasks []todoist.Task
}
func NewProject(id int) *Project {
project, err := todoist.GetProject(id)
if err != nil {
panic(err)
}
proj := &Project{
Project: project,
index: -1,
}
proj.loadTasks()
return proj
}
func (proj *Project) isFirst() bool {
return proj.index == 0
}
func (proj *Project) isLast() bool {
return proj.index >= len(proj.tasks)-1
}
func (proj *Project) up() {
proj.index = proj.index - 1
if proj.index < 0 {
proj.index = len(proj.tasks) - 1
}
}
func (proj *Project) down() {
if proj.index == -1 {
proj.index = 0
return
}
proj.index = proj.index + 1
if proj.index >= len(proj.tasks) {
proj.index = 0
}
}
func (proj *Project) loadTasks() {
tasks, err := todoist.ListTask(todoist.QueryParam{"project_id": fmt.Sprintf("%d", proj.ID)})
if err == nil {
proj.tasks = tasks
}
}
func (proj *Project) LongestLine() int {
maxLen := 0
for _, task := range proj.tasks {
if len(task.Content) > maxLen {
maxLen = len(task.Content)
}
}
return maxLen
}
func (proj *Project) currentTask() *todoist.Task {
if proj.index < 0 {
return nil
}
return &proj.tasks[proj.index]
}
func (proj *Project) closeSelectedTask() {
currTask := proj.currentTask()
if currTask != nil {
if err := currTask.Close(); err != nil {
return
}
proj.loadTasks()
}
}
func (proj *Project) deleteSelectedTask() {
currTask := proj.currentTask()
if currTask != nil {
if err := currTask.Delete(); err != nil {
return
}
proj.loadTasks()
}
}

176
todoist/widget.go Normal file
View File

@ -0,0 +1,176 @@
package todoist
import (
"os"
"github.com/darkSasori/todoist"
"github.com/gdamore/tcell"
"github.com/rivo/tview"
"github.com/senorprogrammer/wtf/wtf"
)
type Widget struct {
wtf.TextWidget
app *tview.Application
pages *tview.Pages
projects []*Project
idx int
}
func NewWidget(app *tview.Application, pages *tview.Pages) *Widget {
widget := Widget{
TextWidget: wtf.NewTextWidget(" Todoist ", "todoist", true),
app: app,
pages: pages,
}
todoist.Token = os.Getenv("WTF_TODOIST_TOKEN")
widget.projects = loadProjects()
widget.View.SetInputCapture(widget.keyboardIntercept)
return &widget
}
/* -------------------- Exported Functions -------------------- */
func (widget *Widget) CurrentProject() *Project {
return widget.ProjectAt(widget.idx)
}
func (widget *Widget) ProjectAt(idx int) *Project {
if len(widget.projects) == 0 {
return nil
}
return widget.projects[idx]
}
func (w *Widget) NextProject() {
w.idx = w.idx + 1
if w.idx == len(w.projects) {
w.idx = 0
}
w.display()
}
func (w *Widget) PreviousProject() {
w.idx = w.idx - 1
if w.idx < 0 {
w.idx = len(w.projects) - 1
}
w.display()
}
func (w *Widget) Refresh() {
if w.Disabled() || w.CurrentProject() == nil {
return
}
w.UpdateRefreshedAt()
w.display()
}
/* -------------------- Keyboard Movement -------------------- */
// Down selects the next item in the list
func (w *Widget) Down() {
w.CurrentProject().down()
w.display()
}
// Up selects the previous item in the list
func (w *Widget) Up() {
w.CurrentProject().up()
w.display()
}
// Close closes the currently-selected task in the currently-selected project
func (w *Widget) Close() {
w.CurrentProject().closeSelectedTask()
if w.CurrentProject().isLast() {
w.Up()
return
}
w.Down()
}
// Delete deletes the currently-selected task in the currently-selected project
func (w *Widget) Delete() {
w.CurrentProject().deleteSelectedTask()
if w.CurrentProject().isLast() {
w.Up()
return
}
w.Down()
}
/* -------------------- Unexported Functions -------------------- */
func (w *Widget) keyboardIntercept(event *tcell.EventKey) *tcell.EventKey {
if len(w.projects) == 0 {
return event
}
switch string(event.Rune()) {
case "r":
w.Refresh()
return nil
case "d":
w.Delete()
return nil
case "c":
w.Close()
return nil
}
switch w.vimBindings(event) {
case tcell.KeyLeft:
w.PreviousProject()
return nil
case tcell.KeyRight:
w.NextProject()
return nil
case tcell.KeyUp:
w.Up()
return nil
case tcell.KeyDown:
w.Down()
return nil
}
return event
}
// TODO: Rename this List to Projects so the internal can be Checklist
func loadProjects() []*Project {
projects := []*Project{}
for _, id := range wtf.Config.UList("wtf.mods.todoist.projects") {
proj := NewProject(id.(int))
projects = append(projects, proj)
}
return projects
}
func (w *Widget) vimBindings(event *tcell.EventKey) tcell.Key {
switch string(event.Rune()) {
case "h":
return tcell.KeyLeft
case "l":
return tcell.KeyRight
case "k":
return tcell.KeyUp
case "j":
return tcell.KeyDown
}
return event.Key()
}

84
travisci/client.go Normal file
View File

@ -0,0 +1,84 @@
package travisci
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"net/http"
"net/url"
"os"
)
const APIEnvToken = "WTF_TRAVIS_API_TOKEN"
func BuildsFor() (*Builds, error) {
builds := &Builds{}
resp, err := travisRequest("builds")
if err != nil {
return builds, err
}
parseJson(&builds, resp.Body)
return builds, nil
}
/* -------------------- Unexported Functions -------------------- */
var (
travisAPIURL = &url.URL{Scheme: "https", Host: "api.travis-ci.org", Path: "/"}
)
func travisRequest(path string) (*http.Response, error) {
params := url.Values{}
params.Add("limit", "10")
url := travisAPIURL.ResolveReference(&url.URL{Path: path, RawQuery: params.Encode()})
req, err := http.NewRequest("GET", url.String(), nil)
req.Header.Add("Accept", "application/json")
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Travis-API-Version", "3")
bearer := fmt.Sprintf("token %s", apiToken())
req.Header.Add("Authorization", bearer)
if err != nil {
return nil, err
}
httpClient := &http.Client{}
resp, err := httpClient.Do(req)
if err != nil {
return nil, err
}
if resp.StatusCode < 200 || resp.StatusCode > 299 {
return nil, fmt.Errorf(resp.Status)
}
return resp, nil
}
func apiToken() string {
return os.Getenv(APIEnvToken)
}
func parseJson(obj interface{}, text io.Reader) {
jsonStream, err := ioutil.ReadAll(text)
if err != nil {
panic(err)
}
decoder := json.NewDecoder(bytes.NewReader(jsonStream))
for {
if err := decoder.Decode(obj); err == io.EOF {
break
} else if err != nil {
panic(err)
}
}
}

25
travisci/travis.go Normal file
View File

@ -0,0 +1,25 @@
package travisci
type Builds struct {
Builds []Build `json:"builds"`
}
type Build struct {
CreatedBy Owner `json:"created_by"`
Branch Branch `json:"branch"`
Number string `json:"number"`
Repository Repository `json:"repository"`
State string `json:"state"`
}
type Owner struct {
Login string `json:"login"`
}
type Branch struct {
Name string `json:"name"`
}
type Repository struct {
Name string `json:"name"`
}

82
travisci/widget.go Normal file
View File

@ -0,0 +1,82 @@
package travisci
import (
"fmt"
"github.com/senorprogrammer/wtf/wtf"
)
type Widget struct {
wtf.TextWidget
}
func NewWidget() *Widget {
widget := Widget{
TextWidget: wtf.NewTextWidget(" Travis CI", "travisci", false),
}
return &widget
}
/* -------------------- Exported Functions -------------------- */
func (widget *Widget) Refresh() {
if widget.Disabled() {
return
}
builds, err := BuildsFor()
widget.UpdateRefreshedAt()
widget.View.SetTitle(fmt.Sprintf("%s - Builds", widget.Name))
var content string
if err != nil {
widget.View.SetWrap(true)
content = err.Error()
} else {
widget.View.SetWrap(false)
content = widget.contentFrom(builds)
}
widget.View.SetText(content)
}
/* -------------------- Unexported Functions -------------------- */
func (widget *Widget) contentFrom(builds *Builds) string {
var str string
for _, build := range builds.Builds {
str = str + fmt.Sprintf(
"[%s] %s-%s (%s) [white]%s\n",
buildColor(&build),
build.Repository.Name,
build.Number,
build.Branch.Name,
build.CreatedBy.Login,
)
}
return str
}
func buildColor(build *Build) string {
switch build.State {
case "broken":
return "red"
case "failed":
return "red"
case "failing":
return "red"
case "pending":
return "yellow"
case "started":
return "yellow"
case "fixed":
return "green"
case "passed":
return "green"
default:
return "white"
}
}

2
vendor/github.com/darkSasori/todoist/.gitignore generated vendored Normal file
View File

@ -0,0 +1,2 @@
*.out
vendor/*

19
vendor/github.com/darkSasori/todoist/.travis.yml generated vendored Normal file
View File

@ -0,0 +1,19 @@
language: go
notifications:
email: false
go:
- "1.10.3"
- master
before_install:
- curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
- go get -u github.com/golang/lint/golint
install:
- dep ensure
script:
- golint -set_exit_status
- go test -v

21
vendor/github.com/darkSasori/todoist/Gopkg.lock generated vendored Normal file
View File

@ -0,0 +1,21 @@
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
[[projects]]
branch = "master"
name = "github.com/darkSasori/todoist"
packages = ["."]
revision = "ab3a9f0b9d551ab4e57f1caae9bb20d5aa51ec10"
[[projects]]
branch = "v1"
name = "gopkg.in/jarcoal/httpmock.v1"
packages = ["."]
revision = "16f9a43967d613f0adc2000f0094a17b9f6c4c20"
[solve-meta]
analyzer-name = "dep"
analyzer-version = 1
inputs-digest = "4d0d4d6dd7b4141be119cb48281ea7c10f05d3037c0e4ac49560cf4af21917a7"
solver-name = "gps-cdcl"
solver-version = 1

34
vendor/github.com/darkSasori/todoist/Gopkg.toml generated vendored Normal file
View File

@ -0,0 +1,34 @@
# Gopkg.toml example
#
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
# for detailed Gopkg.toml documentation.
#
# required = ["github.com/user/thing/cmd/thing"]
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
#
# [[constraint]]
# name = "github.com/user/project"
# version = "1.0.0"
#
# [[constraint]]
# name = "github.com/user/project2"
# branch = "dev"
# source = "github.com/myfork/project2"
#
# [[override]]
# name = "github.com/x/y"
# version = "2.4.0"
#
# [prune]
# non-go = false
# go-tests = true
# unused-packages = true
[[constraint]]
branch = "v1"
name = "gopkg.in/jarcoal/httpmock.v1"
[prune]
go-tests = true
unused-packages = true

21
vendor/github.com/darkSasori/todoist/LICENSE generated vendored Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 Lineu Felipe
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

6
vendor/github.com/darkSasori/todoist/README.md generated vendored Normal file
View File

@ -0,0 +1,6 @@
# todoist
[![godoc](https://godoc.org/github.com/darkSasori/todoist?status.svg)](https://godoc.org/github.com/darkSasori/todoist)
[![Build Status](https://travis-ci.org/darkSasori/todoist.svg?branch=master)](https://travis-ci.org/darkSasori/todoist)
[![Go Report Card](https://goreportcard.com/badge/github.com/darkSasori/todoist)](https://goreportcard.com/report/github.com/darkSasori/todoist)
Unofficial todoist api implementation

149
vendor/github.com/darkSasori/todoist/projects.go generated vendored Normal file
View File

@ -0,0 +1,149 @@
package todoist
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
// Project is a model of todoist project entity
type Project struct {
ID int `json:"id"`
Name string `json:"name"`
CommentCount int `json:"comment_count"`
Order int `json:"order"`
Indent int `json:"indent"`
}
func decodeProject(body io.ReadCloser) (Project, error) {
defer body.Close()
decoder := json.NewDecoder(body)
var project Project
if err := decoder.Decode(&project); err != nil {
return Project{}, err
}
return project, nil
}
// ListProject return all projects
//
// Example:
// todoist.Token = "your token"
// projects, err := todoist.ListProject()
// if err != nil {
// panic(err)
// }
// fmt.Println(projects)
func ListProject() ([]Project, error) {
res, err := makeRequest(http.MethodGet, "projects", nil)
if err != nil {
return []Project{}, err
}
defer res.Body.Close()
decoder := json.NewDecoder(res.Body)
var projects []Project
if err := decoder.Decode(&projects); err != nil {
return []Project{}, err
}
return projects, nil
}
// GetProject return a project by id
//
// Example:
// todoist.Token = "your token"
// project, err := todoist.GetProject(1)
// if err != nil {
// panic(err)
// }
// fmt.Println(project)
func GetProject(id int) (Project, error) {
path := fmt.Sprintf("projects/%d", id)
res, err := makeRequest(http.MethodGet, path, nil)
if err != nil {
return Project{}, err
}
return decodeProject(res.Body)
}
// CreateProject create a new project with a name
//
// Example:
// todoist.Token = "your token"
// project, err := todoist.CreateProject("New Project")
// if err != nil {
// panic(err)
// }
// fmt.Println(project)
func CreateProject(name string) (Project, error) {
project := struct {
Name string `json:"name"`
}{
name,
}
res, err := makeRequest(http.MethodPost, "projects", project)
if err != nil {
return Project{}, err
}
return decodeProject(res.Body)
}
// Delete project
//
// Example:
// todoist.Token = "your token"
// project, err := todoist.GetProject(1)
// if err != nil {
// panic(err)
// }
// err = project.Delete()
// if err != nil {
// panic(err)
// }
func (p Project) Delete() error {
path := fmt.Sprintf("projects/%d", p.ID)
_, err := makeRequest(http.MethodDelete, path, nil)
if err != nil {
return err
}
return nil
}
// Update project
//
// Example:
// todoist.Token = "your token"
// project, err := todoist.GetProject(1)
// if err != nil {
// panic(err)
// }
// project.Name = "updated"
// err = project.Update()
// if err != nil {
// panic(err)
// }
// fmt.Println(project)
func (p Project) Update() error {
path := fmt.Sprintf("projects/%d", p.ID)
project := struct {
Name string `json:"name"`
}{
p.Name,
}
_, err := makeRequest(http.MethodPost, path, project)
if err != nil {
return err
}
return nil
}

158
vendor/github.com/darkSasori/todoist/task.go generated vendored Normal file
View File

@ -0,0 +1,158 @@
package todoist
import (
"encoding/json"
"fmt"
"io"
"net/http"
)
// Task is a model of todoist project entity
type Task struct {
ID int `json:"id"`
CommentCount int `json:"comment_count"`
Completed bool `json:"completed"`
Content string `json:"content"`
Indent int `json:"indent"`
LabelIDs []int `json:"label_ids"`
Order int `json:"order"`
Priority int `json:"priority"`
ProjectID int `json:"project_id"`
Due Due `json:"due"`
}
// Due is a model of todoist project entity
type Due struct {
String string `json:"string"`
Date string `json:"date"`
Datetime CustomTime `json:"datetime"`
Timezone string `json:"timezone"`
}
func (t Task) taskSave() taskSave {
return taskSave{
t.Content,
t.ProjectID,
t.Order,
t.LabelIDs,
t.Priority,
t.Due.String,
t.Due.Datetime,
"en",
}
}
func decodeTask(body io.ReadCloser) (Task, error) {
defer body.Close()
decoder := json.NewDecoder(body)
var task Task
if err := decoder.Decode(&task); err != nil {
return Task{}, err
}
return task, nil
}
// QueryParam is a map[string]string to build http query
type QueryParam map[string]string
func (qp QueryParam) String() string {
if len(qp) == 0 {
return ""
}
ret := "?"
for key, value := range qp {
if ret != "?" {
ret = ret + "&"
}
ret = ret + key + "=" + value
}
return ret
}
// ListTask return all task, you can filter using QueryParam
// See documentation: https://developer.todoist.com/rest/v8/#get-tasks
func ListTask(qp QueryParam) ([]Task, error) {
path := fmt.Sprintf("tasks%s", qp)
res, err := makeRequest(http.MethodGet, path, nil)
if err != nil {
return []Task{}, err
}
defer res.Body.Close()
decoder := json.NewDecoder(res.Body)
var tasks []Task
if err := decoder.Decode(&tasks); err != nil {
return []Task{}, err
}
return tasks, nil
}
// GetTask return a task by id
func GetTask(id int) (Task, error) {
path := fmt.Sprintf("tasks/%d", id)
res, err := makeRequest(http.MethodGet, path, nil)
if err != nil {
return Task{}, err
}
return decodeTask(res.Body)
}
// CreateTask create a new task
func CreateTask(task Task) (Task, error) {
res, err := makeRequest(http.MethodPost, "tasks", task.taskSave())
if err != nil {
return Task{}, err
}
return decodeTask(res.Body)
}
// Delete remove a task
func (t Task) Delete() error {
path := fmt.Sprintf("tasks/%d", t.ID)
_, err := makeRequest(http.MethodDelete, path, nil)
if err != nil {
return err
}
return nil
}
// Update a task
func (t Task) Update() error {
path := fmt.Sprintf("tasks/%d", t.ID)
_, err := makeRequest(http.MethodPost, path, t.taskSave())
if err != nil {
return err
}
return nil
}
// Close mask task as done
func (t Task) Close() error {
path := fmt.Sprintf("tasks/%d/close", t.ID)
_, err := makeRequest(http.MethodPost, path, nil)
if err != nil {
return err
}
return nil
}
// Reopen a task
func (t Task) Reopen() error {
path := fmt.Sprintf("tasks/%d/reopen", t.ID)
_, err := makeRequest(http.MethodPost, path, nil)
if err != nil {
return err
}
return nil
}

145
vendor/github.com/darkSasori/todoist/todoist.go generated vendored Normal file
View File

@ -0,0 +1,145 @@
package todoist
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
"time"
)
// Token save the personal token from todoist
var Token string
var todoistURL = "https://beta.todoist.com/API/v8/"
func makeRequest(method, endpoint string, data interface{}) (*http.Response, error) {
url := todoistURL + endpoint
body := bytes.NewBuffer([]byte{})
if data != nil {
json, err := json.Marshal(data)
if err != nil {
return nil, err
}
body = bytes.NewBuffer(json)
}
req, err := http.NewRequest(method, url, body)
if err != nil {
return nil, err
}
bearer := fmt.Sprintf("Bearer %s", Token)
req.Header.Add("Authorization", bearer)
if data != nil {
req.Header.Add("Content-Type", "application/json")
}
client := &http.Client{}
res, err := client.Do(req)
if err != nil {
return nil, err
}
if res.StatusCode >= 400 {
defer res.Body.Close()
str, err := ioutil.ReadAll(res.Body)
if err != nil {
return nil, err
}
return nil, fmt.Errorf(string(str))
}
return res, nil
}
const ctLayout = "2006-01-02T15:04:05+00:00"
// CustomTime had a custom json date format
type CustomTime struct {
time.Time
}
// UnmarshalJSON convert from []byte to CustomTime
func (ct *CustomTime) UnmarshalJSON(b []byte) (err error) {
s := strings.Trim(string(b), "\"")
if s == "null" {
ct.Time = time.Time{}
return nil
}
ct.Time, err = time.Parse(ctLayout, s)
return err
}
// MarshalJSON convert CustomTime to []byte
func (ct CustomTime) MarshalJSON() ([]byte, error) {
if ct.Time.IsZero() {
return []byte("null"), nil
}
return []byte(`"` + ct.Time.Format(ctLayout) + `"`), nil
}
type taskSave struct {
Content string `json:"content"`
ProjectID int `json:"project_id,omitempty"`
Order int `json:"order,omitempty"`
LabelIDs []int `json:"label_ids,omitempty"`
Priority int `json:"priority,omitempty"`
DueString string `json:"due_string,omitempty"`
DueDateTime CustomTime `json:"due_datetime,omitempty"`
DueLang string `json:"due_lang,omitempty"`
}
func (ts taskSave) MarshalJSON() ([]byte, error) {
buffer := bytes.NewBufferString("{")
if ts.Content == "" {
return nil, fmt.Errorf("Content is empty")
}
buffer.WriteString(fmt.Sprintf("\"content\":\"%s\"", ts.Content))
if ts.ProjectID != 0 {
buffer.WriteString(fmt.Sprintf(",\"project_id\":%d", ts.ProjectID))
}
if ts.Order != 0 {
buffer.WriteString(fmt.Sprintf(",\"order\":%d", ts.Order))
}
if !ts.DueDateTime.IsZero() {
buffer.WriteString(",\"due_datetime\":")
json, err := json.Marshal(ts.DueDateTime)
if err != nil {
return nil, err
}
buffer.Write(json)
}
if len(ts.LabelIDs) != 0 {
buffer.WriteString(",\"label_ids\":")
json, err := json.Marshal(ts.LabelIDs)
if err != nil {
return nil, err
}
buffer.Write(json)
}
if ts.Priority != 0 {
buffer.WriteString(fmt.Sprintf(",\"priority\":%d", ts.Priority))
}
if ts.DueString != "" {
buffer.WriteString(fmt.Sprintf(",\"due_string\":\"%s\"", ts.DueString))
}
if ts.DueLang != "" {
buffer.WriteString(fmt.Sprintf(",\"due_lang\":\"%s\"", ts.DueLang))
}
buffer.WriteString("}")
return buffer.Bytes(), nil
}

View File

@ -5,6 +5,8 @@ go:
- 1.6.x - 1.6.x
- 1.7.x - 1.7.x
- 1.8.x - 1.8.x
- 1.9.x
- 1.10.x
- master - master
before_install: before_install:

View File

@ -1,4 +1,4 @@
## tcell ## tcell <img src=tcell.png align=right>
[![Linux Status](https://img.shields.io/travis/gdamore/tcell.svg?label=linux)](https://travis-ci.org/gdamore/tcell) [![Linux Status](https://img.shields.io/travis/gdamore/tcell.svg?label=linux)](https://travis-ci.org/gdamore/tcell)
[![Windows Status](https://img.shields.io/appveyor/ci/gdamore/tcell.svg?label=windows)](https://ci.appveyor.com/project/gdamore/tcell) [![Windows Status](https://img.shields.io/appveyor/ci/gdamore/tcell.svg?label=windows)](https://ci.appveyor.com/project/gdamore/tcell)
@ -9,12 +9,6 @@
[![codecov](https://codecov.io/gh/gdamore/tcell/branch/master/graph/badge.svg)](https://codecov.io/gh/gdamore/tcell) [![codecov](https://codecov.io/gh/gdamore/tcell/branch/master/graph/badge.svg)](https://codecov.io/gh/gdamore/tcell)
> _Tcell is a work in progress (Gamma).
> Please use with caution; interfaces may change in before final release.
> That said, our confidence in Tcell's stability is increasing. If you
> would like to use it in your own application, it is recommended that
> you drop a message to garrett@damore.org before commitment._
Package tcell provides a cell based view for text terminals, like xterm. Package tcell provides a cell based view for text terminals, like xterm.
It was inspired by termbox, but differs from termbox in some important It was inspired by termbox, but differs from termbox in some important
ways. It also adds substantial functionality beyond termbox. ways. It also adds substantial functionality beyond termbox.
@ -27,32 +21,30 @@ ways. It also adds substantial functionality beyond termbox.
* [gomatrix](https://github.com/gdamore/gomatrix) - converted from Termbox * [gomatrix](https://github.com/gdamore/gomatrix) - converted from Termbox
* [micro](https://github.com/zyedidia/micro/) - lightweight text editor with syntax-highlighting and themes * [micro](https://github.com/zyedidia/micro/) - lightweight text editor with syntax-highlighting and themes
* [godu](https://github.com/viktomas/godu) - simple golang utility helping to discover large files/folders. * [godu](https://github.com/viktomas/godu) - simple golang utility helping to discover large files/folders.
* [tview](https://github.com/rivo/tview) - rich interactive widgets for terminal UIs
* [tui-go](https://github.com/marcusolsson/tui-go) - UI library for terminal apps
* [gomandelbrot](https://github.com/rgm3/gomandelbrot) - Mandelbrot!
* [WTF](https://github.com/senorprogrammer/wtf)- Personal information dashboard for your terminal
## Pure Go Terminfo Database ## Pure Go Terminfo Database
First, it includes a full parser and expander for terminfo capability strings, First, it includes a full parser and expander for terminfo capability strings,
so that it can avoid hard coding escape strings for formatting. It also favors so that it can avoid hard coding escape strings for formatting. It also favors
portability, and includes support for all POSIX systems, at the slight expense portability, and includes support for all POSIX systems.
of needing cgo support for terminal initializations. (This may be corrected
when Go provides standard support for terminal handling via termio ioctls on
all POSIX platforms.) The database itself, while built using CGO, as well
as the parser for it, is implemented in Pure Go.
The database is also flexible & extensible, and can modified by either running a The database is also flexible & extensible, and can modified by either running
program to build the database, or hand editing of simple JSON files. a program to build the entire database, or an entry for just a single terminal.
## More Portable ## More Portable
Tcell is portable to a wider variety of systems. It relies on standard Tcell is portable to a wider variety of systems. Tcell is believed
POSIX supported function calls (on POSIX platforms) for setting terminal to work with all of the systems officially supported by golang with
modes, which leads to improved support for a broader array of platforms. the exception of nacl (which lacks any kind of a terminal interface).
This does come at the cost of requiring your code to be able to use CGO, but (Plan9 is not supported by Tcell, but it is experimental status only
we believe that the vastly improved portability justifies this in golang.) For all of these systems *except Solaris/illumos*, Tcell
requirement. Note that the functions called are part of the standard C is pure Go, with no need for CGO.
library, so there shouldn't be any additional external requirements beyond
that required for every POSIX program.
## No async IO ## No Async IO
Tcell is able to operate without requiring SIGIO signals (unlike Termbox), Tcell is able to operate without requiring SIGIO signals (unlike Termbox),
or asynchronous I/O, and can instead use standard Go file or asynchronous I/O, and can instead use standard Go file
@ -63,7 +55,7 @@ to fewer surprises.
## Richer Unicode & non-Unicode support ## Richer Unicode & non-Unicode support
Tcell includes enhanced support for Unicode, include wide characters and Tcell includes enhanced support for Unicode, including wide characters and
combining characters, provided your terminal can support them. Note that combining characters, provided your terminal can support them. Note that
Windows terminals generally don't support the full Unicode repertoire. Windows terminals generally don't support the full Unicode repertoire.
@ -75,10 +67,10 @@ drawing certain characters.
## More Function Keys ## More Function Keys
It also has richer support for a larger number of It also has richer support for a larger number of special keys that some
special keys that some terminals can send. terminals can send.
## Better color handling ## Better Color Handling
Tcell will respect your terminal's color space as specified within your terminfo Tcell will respect your terminal's color space as specified within your terminfo
entries, so that for example attempts to emit color sequences on VT100 terminals entries, so that for example attempts to emit color sequences on VT100 terminals
@ -88,22 +80,15 @@ In Windows mode, Tcell supports 16 colors, bold, dim, and reverse,
instead of just termbox's 8 colors with reverse. (Note that there is some instead of just termbox's 8 colors with reverse. (Note that there is some
conflation with bold/dim and colors.) conflation with bold/dim and colors.)
Tcell maps 16 colors down to 8, for Terminals that need it. (The upper Tcell maps 16 colors down to 8, for terminals that need it. (The upper
8 colors are just brighter versions of the lower 8.) 8 colors are just brighter versions of the lower 8.)
## Better mouse support ## Better Mouse Support
Tcell supports enhanced mouse tracking mode, so your application can receive Tcell supports enhanced mouse tracking mode, so your application can receive
regular mouse motion events, and wheel events, if your terminal supports it. regular mouse motion events, and wheel events, if your terminal supports it.
## Why not just patch termbox-go? ## Termbox Compatibility
I started this project originally by submitting patches to the author of
go-termbox, but due to some fundamental differences of opinion, I thought
it might be simpler just to start from scratch. At this point, Tcell has
far exceeded the capabilities of termbox.
## Termbox compatibility
A compatibility layer for termbox is provided in the compat A compatibility layer for termbox is provided in the compat
directory. To use it, try importing "github.com/gdamore/tcell/termbox" directory. To use it, try importing "github.com/gdamore/tcell/termbox"
@ -174,18 +159,18 @@ avoiding repeated sequences or drawing the same cell on refresh updates.
(Not relevent for Windows users.) (Not relevent for Windows users.)
The Terminfo implementation operates with two forms of database. The first The Terminfo implementation operates with two forms of database. The first
is the database.go file, which contains a number of real database entries is the built-in go database, which contains a number of real database entries
that are compiled into the program directly. This should minimize calling that are compiled into the program directly. This should minimize calling
out to database file searches. out to database file searches.
The second is a JSON file, that contains the same information, which can The second is in the form of JSON files, that contain the same information,
be located either by the $TCELLDB environment file, $HOME/.tcelldb, or is which can be located either by the $TCELLDB environment file, $HOME/.tcelldb,
located in the Go source directory as database.json. or is located in the Go source directory as database.json.
These files (both the Go database.go and the database.json) file can be These files (both the Go and the JSON files) can be generated using the
generated using the mkinfo.go program. If you need to regnerate the mkinfo.go program. If you need to regnerate the entire set for some reason,
entire set for some reason, run the mkdatabase.sh file. The generation run the mkdatabase.sh file. The generation uses the infocmp(1) program on
uses the terminfo routines on the system to populate the data files. the system to collect the necessary information.
The mkinfo.go program can also be used to generate specific database entries The mkinfo.go program can also be used to generate specific database entries
for named terminals, in case your favorite terminal is missing. (If you for named terminals, in case your favorite terminal is missing. (If you
@ -227,32 +212,27 @@ and examine "physical" screen contents.
## Platforms ## Platforms
### Systems (Linux, FreeBSD, MacOS, Solaris, etc.) ### POSIX (Linux, FreeBSD, MacOS, Solaris, etc.)
On POSIX systems, a POSIX termios implementation with /dev/tty is required. For mainstream systems with a suitably well defined system call interface
On a small subset of these platforms (such as Solaris/illumos), we require to tty settings, everything works using pure Go.
cgo to run, in order to access termios. (Note that Linux and BSD systems
do not require CGO for most purposes.)
(Note: CGO support is required if you wish to rebuild the terminal database For the remainder (right now means only Solaris/illumos) we use POSIX function
from the system's native terminfo binary files. This is because we use the calls to manage termios, which implies that CGO is required on those platforms.
system's native libterminfo to access that binary data. We probably could
eliminate that in the future by using a terminfo decompiler such as infocmp.)
### Windows ### Windows
Windows console mode applications are supported. Unfortunately mintty Windows console mode applications are supported. Unfortunately mintty
and other cygwin style applications are not supported. and other cygwin style applications are not supported.
Modern console applications like ConEmu support all the good features Modern console applications like ConEmu, as well as the Windows 10
(resize, mouse tracking, etc.) console itself, support all the good features (resize, mouse tracking, etc.)
I haven't figured out how to cleanly resolve the dichotomy between cygwin I haven't figured out how to cleanly resolve the dichotomy between cygwin
style termios and the Windows Console API; it seems that perhaps nobody else style termios and the Windows Console API; it seems that perhaps nobody else
has either. If anyone has suggestions, let me know! Really, if you're has either. If anyone has suggestions, let me know! Really, if you're
using a Windows application, you should use the native Windows console or a using a Windows application, you should use the native Windows console or a
fully compatible console implementation. Hopefully the Windows 10 console fully compatible console implementation.
is more functional in this regard.
### Plan9 and Native Client (Nacl) ### Plan9 and Native Client (Nacl)
@ -260,3 +240,15 @@ The nacl and plan9 platforms won't work, but compilation stubs are supplied
for folks that want to include parts of this in software targetting those for folks that want to include parts of this in software targetting those
platforms. The Simulation screen works, but as Tcell doesn't know how to platforms. The Simulation screen works, but as Tcell doesn't know how to
allocate a real screen object on those platforms, NewScreen() will fail. allocate a real screen object on those platforms, NewScreen() will fail.
If anyone has wisdom about how to improve support for either of these,
please let me know. PRs are especially welcome.
### Commercial Support
This software is absolutely free, but if you want to obtain commercial
support (giving prioritized access to the developer, etc. on an hourly
rate), please drop a line to info@staysail.tech
I also welcome donations at Patreon, if you just want to feel good about
defraying development costs: https://www.patreon.com/gedamore

View File

@ -48,12 +48,13 @@ func (cb *CellBuffer) SetContent(x int, y int,
if x >= 0 && y >= 0 && x < cb.w && y < cb.h { if x >= 0 && y >= 0 && x < cb.w && y < cb.h {
c := &cb.cells[(y*cb.w)+x] c := &cb.cells[(y*cb.w)+x]
c.currComb = append([]rune{}, combc...)
i := 0 i := 0
for i < len(combc) { for i < len(c.currComb) {
r := combc[i] r := c.currComb[i]
if runewidth.RuneWidth(r) != 0 { if runewidth.RuneWidth(r) != 0 {
// not a combining character, yank it // not a combining character, yank it
combc = append(combc[:i-1], combc[i+1:]...) c.currComb = append(c.currComb[:i-1], c.currComb[i+1:]...)
continue continue
} }
i++ i++
@ -63,7 +64,6 @@ func (cb *CellBuffer) SetContent(x int, y int,
c.width = runewidth.RuneWidth(mainc) c.width = runewidth.RuneWidth(mainc)
} }
c.currMain = mainc c.currMain = mainc
c.currComb = combc
c.currStyle = style c.currStyle = style
} }
} }

View File

@ -17,25 +17,25 @@
package tcell package tcell
import ( import (
"errors"
"sync" "sync"
"syscall" "syscall"
"unicode/utf16" "unicode/utf16"
"unsafe" "unsafe"
"errors"
) )
type cScreen struct { type cScreen struct {
in syscall.Handle in syscall.Handle
out syscall.Handle out syscall.Handle
cancelflag syscall.Handle cancelflag syscall.Handle
scandone chan struct{} scandone chan struct{}
evch chan Event evch chan Event
quit chan struct{} quit chan struct{}
curx int curx int
cury int cury int
style Style style Style
clear bool clear bool
fini bool fini bool
w int w int
h int h int
@ -117,7 +117,7 @@ var (
) )
const ( const (
w32Infinite = ^uintptr(0) w32Infinite = ^uintptr(0)
w32WaitObject0 = uintptr(0) w32WaitObject0 = uintptr(0)
) )
@ -183,7 +183,7 @@ func (s *cScreen) CharacterSet() string {
} }
func (s *cScreen) EnableMouse() { func (s *cScreen) EnableMouse() {
s.setInMode(modeResizeEn | modeMouseEn) s.setInMode(modeResizeEn | modeMouseEn | modeExtndFlg)
} }
func (s *cScreen) DisableMouse() { func (s *cScreen) DisableMouse() {
@ -530,7 +530,7 @@ func (s *cScreen) getConsoleInput() error {
uintptr(pWaitObjects), uintptr(pWaitObjects),
uintptr(0), uintptr(0),
w32Infinite) w32Infinite)
// WaitForMultipleObjects returns WAIT_OBJECT_0 + the index. // WaitForMultipleObjects returns WAIT_OBJECT_0 + the index.
switch rv { switch rv {
case w32WaitObject0: // s.cancelFlag case w32WaitObject0: // s.cancelFlag
return errors.New("cancelled") return errors.New("cancelled")
@ -565,8 +565,14 @@ func (s *cScreen) getConsoleInput() error {
if krec.ch != 0 { if krec.ch != 0 {
// synthesized key code // synthesized key code
for krec.repeat > 0 { for krec.repeat > 0 {
s.PostEvent(NewEventKey(KeyRune, rune(krec.ch), // convert shift+tab to backtab
mod2mask(krec.mod))) if mod2mask(krec.mod) == ModShift && krec.ch == vkTab {
s.PostEvent(NewEventKey(KeyBacktab, 0,
ModNone))
} else {
s.PostEvent(NewEventKey(KeyRune, rune(krec.ch),
mod2mask(krec.mod)))
}
krec.repeat-- krec.repeat--
} }
return nil return nil
@ -920,6 +926,7 @@ func (s *cScreen) clearScreen(style Style) {
} }
const ( const (
modeExtndFlg uint32 = 0x0080
modeMouseEn uint32 = 0x0010 modeMouseEn uint32 = 0x0010
modeResizeEn uint32 = 0x0008 modeResizeEn uint32 = 0x0008
modeWrapEOL uint32 = 0x0002 modeWrapEOL uint32 = 0x0002

View File

@ -1,4 +1,4 @@
// Copyright 2015 The TCell Authors // Copyright 2018 The TCell Authors
// //
// Licensed under the Apache License, Version 2.0 (the "License"); // Licensed under the Apache License, Version 2.0 (the "License");
// you may not use file except in compliance with the License. // you may not use file except in compliance with the License.
@ -25,7 +25,7 @@
// of course. (Windows, XTerm, and iTerm 2 are known to work very well.) // of course. (Windows, XTerm, and iTerm 2 are known to work very well.)
// //
// If the environment is not Unicode by default, such as an ISO8859 based // If the environment is not Unicode by default, such as an ISO8859 based
// locale or GB18030, Tcell can convert input and outupt, so that your // locale or GB18030, Tcell can convert input and output, so that your
// terminal can operate in whatever locale is most convenient, while the // terminal can operate in whatever locale is most convenient, while the
// application program can just assume "everything is UTF-8". Reasonable // application program can just assume "everything is UTF-8". Reasonable
// defaults are used for updating characters to something suitable for // defaults are used for updating characters to something suitable for
@ -34,6 +34,14 @@
// not available. If no ACS is available, then some ASCII fallbacks will // not available. If no ACS is available, then some ASCII fallbacks will
// be used. // be used.
// //
// Note that support for non-UTF-8 locales (other than C) must be enabled
// by the application using RegisterEncoding() -- we don't have them all
// enabled by default to avoid bloating the application unneccessarily.
// (These days UTF-8 is good enough for almost everyone, and nobody should
// be using legacy locales anymore.) Also, actual glyphs for various code
// point will only be displayed if your terminal or emulator (or the font
// the emulator is using) supports them.
//
// A rich set of keycodes is supported, with support for up to 65 function // A rich set of keycodes is supported, with support for up to 65 function
// keys, and various other special keys. // keys, and various other special keys.
// //

View File

@ -109,6 +109,7 @@ type simscreen struct {
func (s *simscreen) Init() error { func (s *simscreen) Init() error {
s.evch = make(chan Event, 10) s.evch = make(chan Event, 10)
s.quit = make(chan struct{})
s.fillchar = 'X' s.fillchar = 'X'
s.fillstyle = StyleDefault s.fillstyle = StyleDefault
s.mouse = false s.mouse = false
@ -369,7 +370,7 @@ func (s *simscreen) InjectMouse(x, y int, buttons ButtonMask, mod ModMask) {
} }
func (s *simscreen) InjectKey(key Key, r rune, mod ModMask) { func (s *simscreen) InjectKey(key Key, r rune, mod ModMask) {
ev := NewEventKey(KeyRune, r, ModNone) ev := NewEventKey(key, r, mod)
s.PostEvent(ev) s.PostEvent(ev)
} }
@ -441,8 +442,10 @@ func (s *simscreen) SetSize(w, h int) {
newc[(row*w)+col] = s.front[(row*s.physw)+col] newc[(row*w)+col] = s.front[(row*s.physw)+col]
} }
} }
s.physw = w s.cursorx, s.cursory = -1, -1
s.physh = h s.physw, s.physh = w, h
s.front = newc
s.back.Resize(w, h)
s.Unlock() s.Unlock()
} }

BIN
vendor/github.com/gdamore/tcell/tcell.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

93
vendor/github.com/gdamore/tcell/tcell.svg generated vendored Normal file
View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="svg8"
version="1.1"
viewBox="0 0 210 297"
height="297mm"
width="210mm">
<defs
id="defs2">
<linearGradient
id="linearGradient2680">
<stop
id="stop2676"
offset="0"
style="stop-color:#ababab;stop-opacity:1;" />
<stop
id="stop2678"
offset="1"
style="stop-color:#ababab;stop-opacity:0;" />
</linearGradient>
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0.0"
refY="0.0"
orient="auto">
<path
transform="scale(0.8) translate(12.5,0)"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt"
d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
id="path848" />
</marker>
<radialGradient
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1,0,0,0.28804762,0,94.764912)"
r="19.622099"
fy="133.10568"
fx="111.58373"
cy="133.10568"
cx="111.58373"
id="radialGradient2684"
xlink:href="#linearGradient2680" />
</defs>
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1">
<rect
y="99.44445"
x="31.750006"
height="86.430557"
width="129.64584"
id="rect1130"
style="opacity:1;fill:#5d6c53;fill-opacity:1;stroke:#244f24;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<text
transform="scale(0.99941234,1.000588)"
id="text1128"
y="160.47581"
x="44.689861"
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:46.0962944px;line-height:1.25;font-family:'Glass TTY VT220';-inkscape-font-specification:'Glass TTY VT220, Medium';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#5ef86d;fill-opacity:1;stroke:#59ff32;stroke-width:0.80994618;stroke-opacity:0.94520545;"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:46.0962944px;font-family:'Glass TTY VT220';-inkscape-font-specification:'Glass TTY VT220, Medium';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#5ef86d;fill-opacity:1;stroke:#59ff32;stroke-width:0.80994618;stroke-opacity:0.94520545;"
y="160.47581"
x="44.689861"
id="tspan1126">tcell</tspan></text>
<flowRoot
style="fill:black;fill-opacity:1;stroke:none;font-family:sans-serif;font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;letter-spacing:0px;word-spacing:0px"
id="flowRoot1132"
xml:space="preserve"><flowRegion
id="flowRegion1134"><rect
y="432.51968"
x="290"
height="160"
width="330"
id="rect1136" /></flowRegion><flowPara
id="flowPara1138"></flowPara></flowRoot> </g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

Some files were not shown because too many files have changed in this diff Show More