Commit f07cae2

chasinglightning  ·  2025-01-28 13:28:30 -0500 EST
parent 5964be9
set up stow
120 files changed,  +21, -10764
+1, -0
......@@ -0,0 +1 @@
1+git/.gitconfig
+3, -0
......@@ -0,0 +1,3 @@
1+\.git
2+\.gitignore
3+\themes
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=ComicTagger
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/ComicTagger-x86_64.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/comictagger.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=ElectronWMD
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/electronwmd-0.5.0-1.5.0-linux_x86_64.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/mdlogoiconwmdp.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=MKVToolNix
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/MKVToolNix_GUI-82.0-x86_64.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/c0d03eb7.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=Obsidian
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/Obsidian-1.6.7.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/2023_Obsidian_logo.svg.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=Shotcut
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/shotcut-linux-x86_64-240128.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/shotcut-logo-640x640.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=Soulseek
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/SoulseekQt-2018-1-30-64bit.AppImage
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/soulseek-online-bigblue.png
8-Terminal=false
+0, -8
......@@ -1,8 +0,0 @@
1-[Desktop Entry]
2-Name=Waterfox
3-GenericName=
4-Comment=
5-Exec=/home/kat/Downloads/Programs/waterfox/waterfox
6-Type=Application
7-Icon=/media/kat/disk/Pictures/Miscellaneous/misc icons/waterfox.GgOAxZ-_.svg
8-Terminal=false
R home/.config/conky/launch.sh => config/.config/conky/launch.sh
+0, -0
R home/.config/conky/themes/strip-clear/dark-strip-l-clear-1920-1080.conf => config/.config/conky/themes/strip-clear/dark-strip-l-clear-1920-1080.conf
+0, -0
R home/.config/conky/wttr.sh => config/.config/conky/wttr.sh
+0, -0
R home/config/gallery-dl/gallery-dl.conf => config/.config/gallery-dl/gallery-dl.conf
+0, -0
R home/config/mangamanager/settings.ini => config/.config/mangamanager/settings.ini
+0, -0
R home/.config/micro/colorschemes/catppuccin-frappe.micro => config/.config/micro/colorschemes/catppuccin-frappe.micro
+0, -0
R home/.config/starship.toml => config/.config/starship.toml
+0, -0
R home/.local/bin/covid => config/.local/bin/covid
+0, -0
R home/.local/bin/getlyr => config/.local/bin/getlyr
+0, -0
R home/.local/bin/news => config/.local/bin/news
+0, -0
R home/.local/bin/nowplaying => config/.local/bin/nowplaying
+0, -0
R home/.local/bin/weather => config/.local/bin/weather
+0, -0
R home/.local/share/arttime/textart/digiluv => config/.local/share/arttime/textart/digiluv
+0, -0
R home/.local/share/arttime/textart/haerin => config/.local/share/arttime/textart/haerin
+0, -0
R home/.local/share/arttime/textart/nwjns => config/.local/share/arttime/textart/nwjns
+0, -0
R home/.local/share/arttime/textart/tokki => config/.local/share/arttime/textart/tokki
+0, -0
R home/.local/share/arttime/textart/tux1 => config/.local/share/arttime/textart/tux1
+0, -0
R home/.local/share/arttime/textart/tux2 => config/.local/share/arttime/textart/tux2
+0, -0
R home/.local/share/arttime/textart/y2k => config/.local/share/arttime/textart/y2k
+0, -0
+0, -41
......@@ -1,41 +0,0 @@
1-# config structure
2-
3-[OPTIONS]
4-alignment=left
5-source=google
6-interval=1500
7-player=mpd
8-autoswitch=on
9-mpd_host=127.0.0.1
10-mpd_port=6600
11-mpd_pass=
12-#colors
13-#offset=1
14-statusbar=on
15-
16-[BINDINGS]
17-up=arrow_up
18-down=arrow_down
19-
20-step-up=arrow_left
21-step-down=arrow_right
22-step-size=5
23-
24-left=j
25-center=k
26-right=l
27-
28-autoswitchtoggle=a
29-cycle-source=c
30-
31-delete=d
32-edit=e
33-find=/
34-find-next=n
35-find-prev=p
36-
37-help=h
38-
39-quit=q
40-
41-
+0, -21
......@@ -1,21 +0,0 @@
1-MIT License
2-
3-Copyright (c) 2022 Tero Karvinen https://TeroKarvinen.com
4-
5-Permission is hereby granted, free of charge, to any person obtaining a copy
6-of this software and associated documentation files (the "Software"), to deal
7-in the Software without restriction, including without limitation the rights
8-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9-copies of the Software, and to permit persons to whom the Software is
10-furnished to do so, subject to the following conditions:
11-
12-The above copyright notice and this permission notice shall be included in all
13-copies or substantial portions of the Software.
14-
15-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21-SOFTWARE.
+0, -62
......@@ -1,62 +0,0 @@
1-# micro-cheat - F1 cheatsheet for the language you're editing
2-
3-**F1** Show cheatsheet for the language you're editing: Lua, Go, Python...
4-
5-A plugin for Micro editor.
6-
7-## Usage
8-
9-Edit a source code file with micro. Press **F1**.
10-
11-A cheatsheet for the language opens. If you're editing Python, it's a Python cheatsheet. If Go, then Go cheatsheet.
12-Press Ctrl-Q to close the cheatsheet tab and return to editing.
13-
14-For your convenience, micro-cheat also provides a command 'cheat' that you can bind to any key or run with ctrl-E.
15-
16-Tested with
17-
18-- Python
19-- Go (Golang)
20-- Lua
21-- Javascript
22-- CSS (cascading style sheets)
23-- HTML
24-- HAML (HTML abstraction markup language)
25-- Vagrantfile (by filename)
26-- Dockerfile (by filename)
27-- Makefile
28-- JavaScript (ECMAScript)
29-- TypeScript
30-- YAML (yet another markup language)
31-- org-mode (*.org)
32-- bash (shell)
33-
34-## Installation
35-
36-In the future, you will be able to install micro-cheat by
37-
38- $ micro --plugin install micro-cheat
39-
40-Currently, there is just development install
41-
42- $ cd $HOME/.config/micro/plug/
43- $ git clone https://github.com/terokarvinen/micro-cheat
44-
45-## Tutorial
46-
47-[Installation & tutorial for 4 plugins: Palettero, Cheat, Run and Jump](https://terokarvinen.com/2022/command-palette-cheatsheet-run-and-make-micro/)
48-
49-## Limitations
50-
51-All cheatsheets included in cheatsheets/ directory are not supported yet. Micro-cheat has only been tested on Linux.
52-
53-## Todo
54-
55-Bibtex references cheatsheet. Should be MIT licensed to be included in this plugin.
56-
57-## Adminstrivia
58-
59-Cheatsheets are from https://devhints.io project, copyright (c) 2021 Rico Sta. Cruz and contributors, received under MIT license.
60-
61-Micro-cheat plugin is Copyright 2022 Tero Karvinen https://TeroKarvinen.com, MIT license.
62-
+0, -102
......@@ -1,102 +0,0 @@
1----
2-title: Ansible
3-category: Ansible
4----
5-
6-{% raw %}
7-
8-## Getting started
9-
10-### Hosts
11-
12- $ sudo mkdir /etc/ansible
13- $ sudo vim /etc/ansible/hosts
14-
15- [example]
16- 192.0.2.101
17- 192.0.2.102
18-
19-### Running a playbook
20-
21- $ ansible-playbook playbook.yml
22-
23-## Tasks
24-
25- - hosts: all
26- user: root
27- sudo: no
28- vars:
29- aaa: bbb
30- tasks:
31- - ...
32- handlers:
33- - ...
34-
35-### Includes
36-
37- tasks:
38- - include: db.yml
39- handlers:
40- - include: db.yml user=timmy
41-
42-## Handlers
43-
44- handlers:
45- - name: start apache2
46- action: service name=apache2 state=started
47-
48- tasks:
49- - name: install apache
50- action: apt pkg=apache2 state=latest
51- notify:
52- - start apache2
53-
54-## Vars
55-
56- - host: lol
57- vars_files:
58- - vars.yml
59- vars:
60- project_root: /etc/xyz
61- tasks:
62- - name: Create the SSH directory.
63- file: state=directory path=${project_root}/home/.ssh/
64- only_if: "$vm == 0"
65-
66-## Roles
67-
68- - host: xxx
69- roles:
70- - db
71- - { role:ruby, sudo_user:$user }
72- - web
73-
74- # Uses:
75- # roles/db/tasks/*.yml
76- # roles/db/handlers/*.yml
77-
78-### Task: Failures
79-
80- - name: my task
81- command: ...
82- register: result
83- failed_when: "'FAILED' in result.stderr"
84-
85- ignore_errors: yes
86-
87- changed_when: "result.rc != 2"
88-
89-### Env vars
90-
91- vars:
92- local_home: "{{ lookup('env','HOME') }}"
93-
94-## References
95-
96- * [Intro](http://www.ansibleworks.com/docs/intro_configuration.html)
97- * [Modules](http://www.ansibleworks.com/docs/modules.html)
98-
99-{% endraw %}
100-
101-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
102-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -112
......@@ -1,112 +0,0 @@
1----
2-title: Chef
3-category: Devops
4-layout: 2017/sheet
5----
6-
7-### Install
8-
9-In your server:
10-{: .-setup}
11-
12-```bash
13-$ sudo apt-get install curl
14-```
15-
16-```bash
17-$ curl -L https://omnitruck.chef.io/install.sh | sudo bash
18-Thank you for installing Chef!
19-```
20-
21-```bash
22-$ chef-solo -v
23-...
24-Chef: 14.5.33
25-```
26-
27-### Start the cookbook
28-
29-```bash
30- wget http://github.com/chef-cookbooks/chef-repo/tarball/master -O - | tar xzf - --strip-components=1
31-```
32-
33-### Knife
34-
35-```bash
36-$ knife supermarket download mysql
37-```
38-
39-### Invoking chef-solo
40-
41-```bash
42-$ chef-solo -c solo.rb -j web.json
43-```
44-
45-## Examples
46-
47-### Simple compile-from-source
48-
49-```ruby
50-execute "tar --no-same-owner -zxf hi.tar.gz" do
51- cwd "/usr/local/src"
52- creates "/usr/local/src/node-v#{version}"
53-end
54-```
55-
56-```ruby
57-bash "compile" do
58- cwd "/usr/local/src/node-v#{version}"
59- code %[
60- PATH=/usr/local/bin:$PATH
61- ./configure
62- make
63- ]
64- creates "/usr/local/src/node-v#{version}/node"
65-end
66-```
67-
68-### remote file
69-
70-```ruby
71-remote_file "/usr/local/src/hi.tar.gz" do
72- source "http://..."
73- checksum "ab83be..."
74- mode 0644
75- action :create_if_missing
76-end
77-```
78-
79-### ruby_block
80-
81-```ruby
82-ruby_block "name" do
83- block { File.read ... }
84- not_if { File.exists?(...) }
85-end
86-```
87-
88-### Execute
89-
90-```ruby
91-execute "name" do
92- cwd "..."
93- environment({ "PATH" => "..." })
94- command "make install"
95- creates "..."
96-end
97-```
98-
99-### Conditions
100-
101-```ruby
102- creates "/usr/local/src/node-v#{version}/node"
103- not_if { File.exists?('...') }
104-```
105-
106-## Also see
107-
108-* [Learn Chef Rally](https://learn.chef.io) _(learn.chef.io)_
109-* [install_from_source.rb recipe](https://github.com/mdxp/nodejs-cookbook/blob/master/recipes/install_from_source.rb) _(github.com)_
110-
111-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
112-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -73
......@@ -1,73 +0,0 @@
1----
2-title: Cron
3-category: CLI
4-layout: 2017/sheet
5-updated: 2018-05-03
6-weight: -3
7----
8-
9-## Format
10-{: .-two-column}
11-
12-### Format
13-
14-```
15-Min Hour Day Mon Weekday
16-```
17-{: .-setup}
18-
19-```
20-* * * * * command to be executed
21-```
22-
23-```
24-┬ ┬ ┬ ┬ ┬
25-│ │ │ │ └─ Weekday (0=Sun .. 6=Sat)
26-│ │ │ └────── Month (1..12)
27-│ │ └─────────── Day (1..31)
28-│ └──────────────── Hour (0..23)
29-└───────────────────── Minute (0..59)
30-```
31-{: .-setup.-box-chars}
32-
33-### Operators
34-
35-| Operator | Description |
36-| --- | --- |
37-| `*` | all values |
38-| `,` | separate individual values |
39-| `-` | a range of values |
40-| `/` | divide a value into steps |
41-
42-### Examples
43-
44-| Example | Description |
45-| --- | --- |
46-| `0 * * * *` | every hour |
47-| `*/15 * * * *` | every 15 mins |
48-| `0 */2 * * *` | every 2 hours |
49-| `0 18 * * 0-6` | every week Mon-Sat at 6pm |
50-| `10 2 * * 6,7` | every Sat and Sun on 2:10am |
51-| `0 0 * * 0` | every Sunday midnight |
52-| --- | --- |
53-| `@reboot` | every reboot |
54-
55-### Crontab
56-
57-```bash
58-# Adding tasks easily
59-echo "@reboot echo hi" | crontab
60-```
61-
62-```bash
63-# Open in editor
64-crontab -e
65-```
66-
67-```bash
68-# List tasks
69-crontab -l [-u user]
70-```
71-
72-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
73-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -218
......@@ -1,218 +0,0 @@
1----
2-title: CSS
3-category: CSS
4-layout: 2017/sheet
5-weight: -1
6-keywords:
7- - "margin, padding, border"
8- - "div, .class, #id, [attr]"
9- - "font, background"
10- - "display: block, inline, flex"
11- - Selectors
12- - Properties
13----
14-
15-## Basics
16-{: .-three-column}
17-
18-### Selectors
19-
20-```css
21-.class {
22- font-weight: bold;
23-}
24-```
25-{: .-setup}
26-
27-| Selector | Description |
28-| ----------------- | ------------ |
29-| `*` | All elements |
30-| `div` | Element |
31-| `.class` | Class |
32-| `#id` | ID |
33-| `[disabled]` | Attribute |
34-| `[role="dialog"]` | Attribute |
35-
36-### Combinators
37-
38-| Selector | Description |
39-| ------------------- | ----------------- |
40-| `.parent .child` | Descendant |
41-| `.parent > .child` | Direct descendant |
42-| `.child + .sibling` | Adjacent sibling |
43-| `.child ~ .sibling` | Far sibling |
44-| `.class1.class2` | Have both classes |
45-
46-### Attribute selectors
47-
48-| Selector | Description |
49-| ------------------ | ----------------------------------- |
50-| `[role="dialog"]` | `=` Exact |
51-| `[class~="box"]` | `~=` Has word |
52-| `[class|="box"]` | `|=` Exact or prefix (eg, `value-`) |
53-| `[href$=".doc"]` | `$=` Ends in |
54-| `[href^="/index"]` | `^=` Begins with |
55-| `[class*="-is-"]` | `*=` Contains |
56-
57-### Pseudo-classes
58-
59-| Selector | Description |
60-| -------------------- | ------------------------------------------ |
61-| `:target` | eg, `h2#foo:target` |
62-| --- | --- |
63-| `:disabled` | |
64-| `:focus` | |
65-| `:active` | |
66-| --- | --- |
67-| `:nth-child(3)` | 3rd child |
68-| `:nth-child(3n+2)` | 2nd child in groups of 3 |
69-| `:nth-child(-n+4)` | |
70-| --- | --- |
71-| `:nth-last-child(2)` | |
72-| `:nth-of-type(2)` | |
73-| --- | --- |
74-| `:checked` | Checked inputs |
75-| `:disabled` | Disabled elements |
76-| `:default` | Default element in a group |
77-| --- | --- |
78-| `:empty` | Elements without children |
79-
80-### Pseudo-class variations
81-
82-| Selector |
83-| ----------------- |
84-| `:first-of-type` |
85-| `:last-of-type` |
86-| `:nth-of-type(2)` |
87-| `:only-of-type` |
88-| --- |
89-| `:first-child` |
90-| `:last-child` |
91-| `:nth-child(2)` |
92-| `:only-child` |
93-{: .-left-align}
94-
95-## Fonts
96-{: .-left-reference}
97-
98-### Properties
99-
100-| Property | Description |
101-| ------------------ | ------------------------------------ |
102-| `font-family:` | `<font>, <fontN>` |
103-| `font-size:` | `<size>` |
104-| `letter-spacing:` | `<size>` |
105-| `line-height:` | `<number>` |
106-| --- | --- |
107-| `font-weight:` | `bold` `normal` |
108-| `font-style:` | `italic` `normal` |
109-| `text-decoration:` | `underline` `none` |
110-| --- | --- |
111-| `text-align:` | `left` `right` `center` `justify` |
112-| `text-transform:` | `capitalize` `uppercase` `lowercase` |
113-{: .-key-values}
114-
115-### Shorthand
116-{: .-prime}
117-
118-| | style | weight | size (required) | | line-height | family |
119-| ------- | -------- | ------ | --------------- | --- | ----------- | ----------------- |
120-| `font:` | `italic` | `400` | `14px` | `/` | `1.5` | `sans-serif` |
121-| | style | weight | size (required) | | line-height | family (required) |
122-{: .-css-breakdown}
123-
124-### Example
125-
126-```css
127-font-family: Arial;
128-font-size: 12pt;
129-line-height: 1.5;
130-letter-spacing: 0.02em;
131-color: #aa3322;
132-```
133-
134-### Case
135-
136-```css
137-text-transform: capitalize; /* Hello */
138-text-transform: uppercase; /* HELLO */
139-text-transform: lowercase; /* hello */
140-```
141-
142-## Background
143-{: .-left-reference}
144-
145-### Properties
146-
147-| Property | Description |
148-| ------------------------ | ---------------------------------------- |
149-| `background:` | _(Shorthand)_ |
150-| --- | --- |
151-| `background-color:` | `<color>` |
152-| `background-image:` | `url(...)` |
153-| `background-position:` | `left/center/right` `top/center/bottom` |
154-| `background-size:` | `cover` `X Y` |
155-| `background-clip:` | `border-box` `padding-box` `content-box` |
156-| `background-repeat:` | `no-repeat` `repeat-x` `repeat-y` |
157-| `background-attachment:` | `scroll` `fixed` `local` |
158-{: .-key-values}
159-
160-### Shorthand
161-
162-| | color | image | positionX | positionY | | size | repeat | attachment |
163-| ------------- | ------ | ------------- | --------- | --------- | --- | -------------- | ----------- | ---------- |
164-| `background:` | `#ff0` | `url(bg.jpg)` | `left` | `top` | `/` | `100px` `auto` | `no-repeat` | `fixed;` |
165-| `background:` | `#abc` | `url(bg.png)` | `center` | `center` | `/` | `cover` | `repeat-x` | `local;` |
166-| | color | image | positionX | positionY | | size | repeat | attachment |
167-{: .-css-breakdown}
168-
169-### Multiple backgrounds
170-
171-```css
172-background: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)),
173- url('background.jpg') center center / cover, #333;
174-```
175-
176-## Animation
177-{: .-left-reference}
178-
179-### Properties
180-
181-| Property | Value |
182-| ---------------------------- | -------------------------------------------------------- |
183-| `animation:` | _(shorthand)_ |
184-| `animation-name:` | `<name>` |
185-| `animation-duration:` | `<time>ms` |
186-| `animation-timing-function:` | `ease` `linear` `ease-in` `ease-out` `ease-in-out` |
187-| `animation-delay:` | `<time>ms` |
188-| `animation-iteration-count:` | `infinite` `<number>` |
189-| `animation-direction:` | `normal` `reverse` `alternate` `alternate-reverse` |
190-| `animation-fill-mode:` | `none` `forwards` `backwards` `both` `initial` `inherit` |
191-| `animation-play-state:` | `normal` `reverse` `alternate` `alternate-reverse` |
192-{: .-key-values}
193-
194-### Shorthand
195-
196-| | name | duration | timing-function | delay | count | direction | fill-mode | play-state |
197-| ------------ | -------- | -------- | --------------- | ------- | ---------- | ------------------- | --------- | ---------- |
198-| `animation:` | `bounce` | `300ms` | `linear` | `100ms` | `infinite` | `alternate-reverse` | `both` | `reverse` |
199-| | name | duration | timing-function | delay | count | direction | fill-mode | play-state |
200-{: .-css-breakdown}
201-
202-### Example
203-
204-```css
205-animation: bounce 300ms linear 0s infinite normal;
206-animation: bounce 300ms linear infinite;
207-animation: bounce 300ms linear infinite alternate-reverse;
208-animation: bounce 300ms linear 2s infinite alternate-reverse forwards normal;
209-```
210-
211-### Event
212-
213-```js
214-.one('webkitAnimationEnd oanimationend msAnimationEnd animationend')
215-```
216-
217-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
218-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -115
......@@ -1,115 +0,0 @@
1----
2-title: Dockerfile
3-category: Devops
4-layout: 2017/sheet
5-prism_languages: [docker]
6-updated: 2019-10-20
7----
8-
9-## Reference
10-{: .-three-column}
11-
12-### Inheritance
13-
14-```docker
15-FROM ruby:2.2.2
16-```
17-
18-### Variables
19-
20-```docker
21-ENV APP_HOME /myapp
22-RUN mkdir $APP_HOME
23-```
24-
25-```docker
26-ARG APP_HOME=""
27-RUN mkdir $APP_HOME
28-```
29-
30-### Initialization
31-
32-```docker
33-RUN bundle install
34-```
35-
36-```docker
37-WORKDIR /myapp
38-```
39-
40-```docker
41-VOLUME ["/data"]
42-# Specification for mount point
43-```
44-
45-```docker
46-ADD file.xyz /file.xyz
47-COPY --chown=user:group host_file.xyz /path/container_file.xyz
48-```
49-
50-### Run commands in strict shell
51-
52-```docker
53-ENV my_var
54-SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
55-
56-# With strict mode:
57-RUN false # fails build like using &&
58-RUN echo "$myvar" # will throw error due to typo
59-RUN true | false # will bail out of pipe
60-```
61-
62-Using `shell` will turn on strict mode for shell commands.
63-
64-### Onbuild
65-
66-```docker
67-ONBUILD RUN bundle install
68-# when used with another file
69-```
70-
71-### Commands
72-
73-```docker
74-EXPOSE 5900
75-CMD ["bundle", "exec", "rails", "server"]
76-```
77-
78-### Entrypoint
79-
80-```docker
81-ENTRYPOINT ["executable", "param1", "param2"]
82-ENTRYPOINT command param1 param2
83-```
84-
85-Configures a container that will run as an executable.
86-
87-```docker
88-ENTRYPOINT exec top -b
89-```
90-
91-This will use shell processing to substitute shell variables, and will ignore any `CMD` or `docker run` command line arguments.
92-
93-### Metadata
94-
95-```docker
96-LABEL version="1.0"
97-```
98-
99-```docker
100-LABEL "com.example.vendor"="ACME Incorporated"
101-LABEL com.example.label-with-value="foo"
102-```
103-
104-```docker
105-LABEL description="This text illustrates \
106-that label-values can span multiple lines."
107-```
108-
109-## See also
110-{: .-one-column}
111-
112-- <https://docs.docker.com/engine/reference/builder/>
113-
114-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
115-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -78
......@@ -1,78 +0,0 @@
1----
2-title: editorconfig
3-layout: 2017/sheet
4-prism_languages: [ini]
5-weight: -1
6-updated: 2019-09-25
7-category: Apps
8----
9-
10-### Short example
11-{: .-prime}
12-
13-```ini
14-# editorconfig.org
15-root = true
16-
17-[*]
18-indent_style = space
19-indent_size = 2
20-tab_width = 2
21-end_of_line = lf
22-charset = utf-8
23-trim_trailing_whitespace = true
24-insert_final_newline = true
25-```
26-
27-This example should be fine for most projects indented by 2 spaces. See: [animate.css editorconfig](https://github.com/daneden/animate.css/blob/master/.editorconfig)
28-
29-### Properties
30-
31-```ini
32-indent_style = {space|tab}
33-indent_size = {4|tab}
34-tab_width = 2
35-end_of_line = {cr|lf|crlf}
36-charset = {utf-8|utf-16be|utf-16le|latin1}
37-trim_trailing_whitespace = false
38-insert_final_newline = true
39-max_line_length = 80
40-```
41-
42-### Full example
43-
44-```ini
45-# top-most EditorConfig file
46-root = true
47-
48-# Unix-style newlines with a newline ending every file
49-[*]
50-end_of_line = lf
51-insert_final_newline = true
52-
53-# 4 space indentation
54-[*.py]
55-indent_style = space
56-indent_size = 4
57-
58-# Tab indentation (no size specified)
59-[*.js]
60-indent_style = tab
61-
62-# Indentation override for all JS under lib directory
63-[lib/**.js]
64-indent_style = space
65-indent_size = 2
66-
67-# Matches the exact files either package.json or .travis.yml
68-[{package.json,.travis.yml}]
69-indent_style = space
70-indent_size = 2
71-```
72-
73-### References
74-
75-- <https://EditorConfig.org>
76-
77-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
78-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -766
......@@ -1,766 +0,0 @@
1----
2-title: Elixir
3-category: Elixir
4-layout: 2017/sheet
5-tags: [New]
6-updated: 2018-07-04
7-weight: -10
8----
9-
10-## Getting started
11-{: .-three-column}
12-
13-### Hello world
14-{: .-prime}
15-
16-```elixir
17-# hello.exs
18-defmodule Greeter do
19- def greet(name) do
20- message = "Hello, " <> name <> "!"
21- IO.puts message
22- end
23-end
24-
25-Greeter.greet("world")
26-```
27-
28-```bash
29-elixir hello.exs
30-# Hello, world!
31-```
32-{: .-setup}
33-
34-### Variables
35-
36-```elixir
37-age = 23
38-```
39-
40-### Maps
41-
42-```elixir
43-user = %{
44- name: "John",
45- city: "Melbourne"
46-}
47-```
48-
49-```elixir
50-IO.puts "Hello, " <> user.name
51-```
52-{: .-setup}
53-
54-### Lists
55-
56-```elixir
57-users = [ "Tom", "Dick", "Harry" ]
58-```
59-{: data-line="1"}
60-
61-```elixir
62-Enum.map(users, fn user ->
63- IO.puts "Hello " <> user
64-end)
65-```
66-
67-### Piping
68-
69-```elixir
70-source
71-|> transform(:hello)
72-|> print()
73-```
74-{: data-line="2,3"}
75-
76-```elixir
77-# Same as:
78-print(transform(source, :hello))
79-```
80-
81-These two are equivalent.
82-
83-### Pattern matching
84-
85-```elixir
86-user = %{name: "Tom", age: 23}
87-%{name: username} = user
88-```
89-{: data-line="2"}
90-
91-This sets `username` to `"Tom"`.
92-
93-### Pattern matching in functions
94-
95-```elixir
96-def greet(%{name: username}) do
97- IO.puts "Hello, " <> username
98-end
99-
100-user = %{name: "Tom", age: 23}
101-```
102-{: data-line="1"}
103-
104-Pattern matching works in function parameters too.
105-
106-Control flow
107-------------
108-{: .-three-column}
109-
110-### If
111-
112-```elixir
113-if false do
114- "This will never be seen"
115-else
116- "This will"
117-end
118-```
119-### Case
120-
121-```elixir
122-case {1, 2, 3} do
123- {4, 5, 6} ->
124- "This clause won't match"
125- {1, x, 3} ->
126- "This will match and bind x to 2"
127- _ ->
128- "This will match any value"
129-end
130-```
131-
132-### Cond
133-
134-```elixir
135-cond do
136- 1 + 1 == 3 ->
137- "I will never be seen"
138- 2 * 5 == 12 ->
139- "Me neither"
140- true ->
141- "But I will (this is essentially an else)"
142-end
143-```
144-
145-### With
146-
147-```elixir
148-with {:ok, {int, _asdf}} <- Integer.parse("123asdf"),
149- {:ok, datetime, _utc_offset} <- DateTime.from_iso8601("2021-10-27T12:00:00Z") do
150- DateTime.add(datetime, int, :second)
151- # optional else clause. if not provided and an error occurs, the error is returned
152-else
153- :error -> "couldn't parse integer string"
154- {:error, :invalid_format} -> "couldn't parse date string"
155- _ -> "this will never get hit because all errors are handled"
156-end
157-```
158-
159-### Errors
160-
161-```elixir
162-try do
163- throw(:hello)
164-catch
165- message -> "Got #{message}."
166-after
167- IO.puts("I'm the after clause.")
168-end
169-```
170-
171-## Types
172-
173-### Primitives
174-
175-| Sample | Type |
176-| --- | --- |
177-| `nil` | Nil/null |
178-| `true` _/_ `false` | Boolean |
179-| --- | --- |
180-| `?a` | Integer (ASCII) |
181-| `23` | Integer |
182-| `3.14` | Float |
183-| --- | --- |
184-| `'hello'` | Charlist |
185-| `<<2, 3>>` | Binary |
186-| `"hello"` | Binary string |
187-| `:hello` | Atom |
188-| --- | --- |
189-| `[a, b]` | List |
190-| `{a, b}` | Tuple |
191-| --- | --- |
192-| `%{a: "hello"}` | Map |
193-| `%MyStruct{a: "hello"}` | Struct |
194-| `fn -> ... end` | Function |
195-
196-### Type checks
197-
198-```elixir
199-is_atom/1
200-is_bitstring/1
201-is_boolean/1
202-is_function/1
203-is_function/2
204-is_integer/1
205-is_float/1
206-```
207-
208-```elixir
209-is_binary/1
210-is_list/1
211-is_map/1
212-is_tuple/1
213-```
214-
215-```elixir
216-is_nil/1
217-is_number/1
218-is_pid/1
219-is_port/1
220-is_reference/1
221-```
222-
223-### Operators
224-
225-```elixir
226-left != right # equal
227-left !== right # match
228-left ++ right # concat lists
229-left <> right # concat string/binary
230-left =~ right # regexp
231-```
232-
233-Modules
234--------
235-
236-### Importing
237-
238-```elixir
239-require Redux # compiles a module
240-import Redux # compiles, and you can use without the `Redux.` prefix
241-
242-use Redux # compiles, and runs Redux.__using__/1
243-use Redux, async: true
244-
245-import Redux, only: [duplicate: 2]
246-import Redux, only: :functions
247-import Redux, only: :macros
248-
249-import Foo.{Bar, Baz}
250-```
251-
252-### Aliases
253-
254-```elixir
255-alias Foo.Bar, as: Bar
256-alias Foo.Bar # same as above
257-
258-alias Foo.{Bar, Baz}
259-```
260-
261-## String
262-
263-### Functions
264-
265-```elixir
266-import String
267-```
268-{: .-setup}
269-
270-```elixir
271-str = "hello"
272-str |> length() # → 5
273-str |> codepoints() # → ["h", "e", "l", "l", "o"]
274-str |> slice(2..-1) # → "llo"
275-str |> split(" ") # → ["hello"]
276-str |> capitalize() # → "Hello"
277-str |> match(regex)
278-```
279-
280-### Inspecting objects
281-
282-```elixir
283-inspect(object, opts \\ [])
284-```
285-```elixir
286-value |> IO.inspect()
287-```
288-```elixir
289-value |> IO.inspect(label: "value")
290-```
291-
292-## Numbers
293-
294-### Operations
295-
296-```elixir
297-abs(n)
298-round(n)
299-rem(a, b) # remainder (modulo)
300-div(a, b) # integer division
301-```
302-
303-### Float
304-
305-```elixir
306-import Float
307-```
308-{: .-setup}
309-
310-```elixir
311-n = 10.3
312-```
313-{: .-setup}
314-
315-```elixir
316-n |> ceil() # → 11.0
317-n |> ceil(2) # → 11.30
318-n |> to_string() # → "1.030000+e01"
319-n |> to_string([decimals: 2, compact: true])
320-```
321-
322-```elixir
323-Float.parse("34") # → { 34.0, "" }
324-```
325-
326-### Integer
327-
328-```elixir
329-import Integer
330-```
331-{: .-setup}
332-
333-```elixir
334-n = 12
335-```
336-{: .-setup}
337-
338-```elixir
339-n |> digits() # → [1, 2]
340-n |> to_charlist() # → '12'
341-n |> to_string() # → "12"
342-n |> is_even()
343-n |> is_odd()
344-```
345-
346-```elixir
347-# Different base:
348-n |> digits(2) # → [1, 1, 0, 0]
349-n |> to_charlist(2) # → '1100'
350-n |> to_string(2) # → "1100"
351-```
352-
353-```elixir
354-parse("12") # → {12, ""}
355-undigits([1, 2]) # → 12
356-```
357-
358-### Type casting
359-
360-```elixir
361-Float.parse("34.1") # → {34.1, ""}
362-Integer.parse("34") # → {34, ""}
363-```
364-
365-```elixir
366-Float.to_string(34.1) # → "3.4100e+01"
367-Float.to_string(34.1, [decimals: 2, compact: true]) # → "34.1"
368-```
369-
370-## Map
371-
372-### Defining
373-
374-```elixir
375-m = %{name: "hi"} # atom keys (:name)
376-m = %{"name" => "hi"} # string keys ("name")
377-```
378-
379-### Updating
380-
381-```elixir
382-import Map
383-```
384-{: .-setup}
385-
386-```elixir
387-m = %{m | name: "yo"} # key must exist
388-```
389-
390-```elixir
391-m |> put(:id, 2) # → %{id: 2, name: "hi"}
392-m |> put_new(:id, 2) # only if `id` doesn't exist (`||=`)
393-```
394-
395-```elixir
396-m |> put(:b, "Banana")
397-m |> merge(%{b: "Banana"})
398-m |> update(:a, &(&1 + 1))
399-m |> update(:a, fun a -> a + 1 end)
400-```
401-
402-```elixir
403-m |> get_and_update(:a, &(&1 || "default"))
404-# → {old, new}
405-```
406-
407-### Deleting
408-
409-```elixir
410-m |> delete(:name) # → %{}
411-m |> pop(:name) # → {"John", %{}}
412-```
413-
414-### Reading
415-
416-```elixir
417-m |> get(:id) # → 1
418-m |> keys() # → [:id, :name]
419-m |> values() # → [1, "hi"]
420-```
421-
422-```elixir
423-m |> to_list() # → [id: 1, name: "hi"]
424- # → [{:id, 1}, {:name, "hi"}]
425-```
426-
427-### Deep
428-
429-```elixir
430-put_in(map, [:b, :c], "Banana")
431-put_in(map[:b][:c], "Banana") # via macros
432-```
433-
434-```elixir
435-get_and_update_in(users, ["john", :age], &{&1, &1 + 1})
436-```
437-
438-### Constructing from lists
439-
440-```elixir
441-Map.new([{:b, 1}, {:a, 2}])
442-Map.new([a: 1, b: 2])
443-Map.new([:a, :b], fn x -> {x, x} end) # → %{a: :a, b: :b}
444-```
445-
446-### Working with structs
447-
448-#### Struct to map
449-
450-```elixir
451-Map.from_struct(%AnyStruct{a: "b"}) # → %{a: "b"}
452-```
453-
454-#### Map to struct
455-
456-```elixir
457-struct(AnyStruct, %{a: "b"}) # → %AnyStruct{a: "b"}
458-```
459-
460-## List
461-
462-```elixir
463-import List
464-```
465-{: .-setup}
466-
467-```elixir
468-l = [ 1, 2, 3, 4 ]
469-```
470-{: .-setup}
471-
472-```elixir
473-l = l ++ [5] # push (append)
474-l = [ 0 | list ] # unshift (prepend)
475-```
476-
477-```elixir
478-l |> first()
479-l |> last()
480-```
481-
482-```elixir
483-l |> flatten()
484-l |> flatten(tail)
485-```
486-
487-Also see [Enum](#enum).
488-
489-
490-## Enum
491-
492-### Usage
493-
494-```elixir
495-import Enum
496-```
497-{: .-setup}
498-
499-```elixir
500-list = [:a, :b, :c]
501-```
502-{: .-setup}
503-
504-```elixir
505-list |> at(0) # → :a
506-list |> count() # → 3
507-list |> empty?() # → false
508-list |> any?() # → true
509-```
510-
511-```elixir
512-list |> concat([:d]) # → [:a, :b, :c, :d]
513-```
514-
515-Also, consider streams instead.
516-
517-### Map/reduce
518-
519-```elixir
520-list |> reduce(fn)
521-list |> reduce(acc, fn)
522-list |> map(fn)
523-list |> reject(fn)
524-list |> any?(fn)
525-list |> empty?(fn)
526-```
527-
528-```elixir
529-[1, 2, 3, 4]
530-|> Enum.reduce(0, fn(x, acc) -> x + acc end)
531-```
532-
533-## Tuple
534-
535-### Tuples
536-
537-```elixir
538-import Tuple
539-```
540-{: .-setup}
541-
542-```elixir
543-t = { :a, :b }
544-```
545-
546-```elixir
547-t |> elem(1) # like tuple[1]
548-t |> put_elem(index, value)
549-t |> tuple_size()
550-```
551-
552-### Keyword lists
553-
554-```elixir
555-list = [{ :name, "John" }, { :age, 15 }]
556-list[:name]
557-```
558-
559-```elixir
560-# For string-keyed keyword lists
561-list = [{"size", 2}, {"type", "shoe"}]
562-List.keyfind(list, "size", 0) # → {"size", 2}
563-```
564-
565-## Functions
566-
567-### Lambdas
568-
569-```elixir
570-square = fn n -> n*n end
571-square.(20)
572-```
573-
574-### & syntax
575-
576-```elixir
577-square = &(&1 * &1)
578-square.(20)
579-
580-square = &Math.square/1
581-```
582-
583-### Running
584-
585-```elixir
586-fun.(args)
587-apply(fun, args)
588-apply(module, fun, args)
589-```
590-
591-### Function heads
592-
593-```elixir
594-def join(a, b \\ nil)
595-def join(a, b) when is_nil(b) do: a
596-def join(a, b) do: a <> b
597-```
598-
599-## Structs
600-
601-### Structs
602-
603-```elixir
604-defmodule User do
605- defstruct name: "", age: nil
606-end
607-
608-%User{name: "John", age: 20}
609-
610-%User{}.struct # → User
611-```
612-
613-See: [Structs](http://elixir-lang.org/getting-started/structs.html)
614-
615-## Protocols
616-
617-### Defining protocols
618-
619-```elixir
620-defprotocol Blank do
621- @doc "Returns true if data is considered blank/empty"
622- def blank?(data)
623-end
624-```
625-
626-```elixir
627-defimpl Blank, for: List do
628- def blank?([]), do: true
629- def blank?(_), do: false
630-end
631-
632-Blank.blank?([]) # → true
633-```
634-
635-### Any
636-
637-```elixir
638-defimpl Blank, for: Any do ... end
639-
640-defmodule User do
641- @derive Blank # Falls back to Any
642- defstruct name: ""
643-end
644-```
645-
646-### Examples
647-
648-- `Enumerable` and `Enum.map()`
649-- `Inspect` and `inspect()`
650-
651-## Comprehensions
652-
653-### For
654-
655-```elixir
656-for n <- [1, 2, 3, 4], do: n * n
657-for n <- 1..4, do: n * n
658-```
659-
660-```elixir
661-for {key, val} <- %{a: 10, b: 20}, do: val
662-# → [10, 20]
663-```
664-
665-```elixir
666-for {key, val} <- %{a: 10, b: 20}, into: %{}, do: {key, val*val}
667-```
668-
669-### Conditions
670-
671-```elixir
672-for n <- 1..10, rem(n, 2) == 0, do: n
673-# → [2, 4, 6, 8, 10]
674-```
675-
676-### Complex
677-
678-```elixir
679-for dir <- dirs,
680- file <- File.ls!(dir), # nested comprehension
681- path = Path.join(dir, file), # invoked
682- File.regular?(path) do # condition
683- IO.puts(file)
684-end
685-```
686-
687-## Misc
688-
689-### Metaprogramming
690-
691-```elixir
692-__MODULE__
693-__MODULE__.__info__
694-
695-@after_compile __MODULE__
696-def __before_compile__(env)
697-def __after_compile__(env, _bytecode)
698-def __using__(opts) # invoked on `use`
699-
700-@on_definition {__MODULE__, :on_def}
701-def on_def(_env, kind, name, args, guards, body)
702-
703-@on_load :load_check
704-def load_check
705-```
706-
707-### Regexp
708-
709-```elixir
710-exp = ~r/hello/
711-exp = ~r/hello/i
712-"hello world" =~ exp
713-```
714-
715-### Sigils
716-
717-```elixir
718-~r/regexp/
719-~w(list of strings)
720-~s|strings with #{interpolation} and \x20 escape codes|
721-~S|no interpolation and no escapes|
722-~c(charlist)
723-```
724-
725-Allowed chars: `/` `|` `"` `'` `(` `[` `{` `<` `"""`.
726-See: [Sigils](http://elixir-lang.org/getting-started/sigils.html)
727-
728-### Type specs
729-
730-```elixir
731-@spec round(number) :: integer
732-
733-@type number_with_remark :: {number, String.t}
734-@spec add(number, number) :: number_with_remark
735-```
736-
737-Useful for [dialyzer](http://www.erlang.org/doc/man/dialyzer.html).
738-See: [Typespecs](http://elixir-lang.org/getting-started/typespecs-and-behaviours.html)
739-
740-### Behaviours
741-
742-```elixir
743-defmodule Parser do
744- @callback parse(String.t) :: any
745- @callback extensions() :: [String.t]
746-end
747-```
748-
749-```elixir
750-defmodule JSONParser do
751- @behaviour Parser
752-
753- def parse(str), do: # ... parse JSON
754- def extensions, do: ["json"]
755-end
756-```
757-
758-See: [Module](http://elixir-lang.org/docs/stable/elixir/Module.html)
759-
760-## References
761-{: .-one-column}
762-
763-- [Learn Elixir in Y minutes](https://learnxinyminutes.com/docs/elixir/)
764-
765-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
766-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -582
......@@ -1,582 +0,0 @@
1----
2-title: ES2015+
3-category: JavaScript
4-layout: 2017/sheet
5-tags: [Featured]
6-updated: 2019-11-14
7-weight: -10
8-intro: |
9- A quick overview of new JavaScript features in ES2015, ES2016, ES2017, ES2018 and beyond.
10----
11-
12-### Block scoping
13-
14-#### Let
15-
16-```js
17-function fn () {
18- let x = 0
19- if (true) {
20- let x = 1 // only inside this `if`
21- }
22-}
23-```
24-{: data-line="2,4"}
25-
26-#### Const
27-
28-```js
29-const a = 1
30-```
31-
32-`let` is the new `var`. Constants work just like `let`, but can't be reassigned.
33-See: [Let and const](https://babeljs.io/learn-es2015/#let--const)
34-
35-### Backtick strings
36-
37-#### Interpolation
38-
39-```js
40-const message = `Hello ${name}`
41-```
42-
43-#### Multiline strings
44-
45-```js
46-const str = `
47-hello
48-world
49-`
50-```
51-
52-Templates and multiline strings.
53-See: [Template strings](https://babeljs.io/learn-es2015/#template-strings)
54-
55-### Binary and octal literals
56-
57-```js
58-let bin = 0b1010010
59-let oct = 0o755
60-```
61-
62-See: [Binary and octal literals](https://babeljs.io/learn-es2015/#binary-and-octal-literals)
63-
64-### New methods
65-
66-#### New string methods
67-
68-```js
69-"hello".repeat(3)
70-"hello".includes("ll")
71-"hello".startsWith("he")
72-"hello".padStart(8) // " hello"
73-"hello".padEnd(8) // "hello "
74-"hello".padEnd(8, '!') // hello!!!
75-"\u1E9B\u0323".normalize("NFC")
76-```
77-
78-See: [New methods](https://babeljs.io/learn-es2015/#math--number--string--object-apis)
79-
80-### Classes
81-
82-```js
83-class Circle extends Shape {
84-```
85-
86-#### Constructor
87-
88-```js
89- constructor (radius) {
90- this.radius = radius
91- }
92-```
93-{: data-line="1"}
94-
95-#### Methods
96-
97-```js
98- getArea () {
99- return Math.PI * 2 * this.radius
100- }
101-```
102-{: data-line="1"}
103-
104-#### Calling superclass methods
105-
106-```js
107- expand (n) {
108- return super.expand(n) * Math.PI
109- }
110-```
111-{: data-line="2"}
112-
113-#### Static methods
114-
115-```js
116- static createFromDiameter(diameter) {
117- return new Circle(diameter / 2)
118- }
119-}
120-```
121-{: data-line="1"}
122-
123-Syntactic sugar for prototypes.
124-See: [Classes](https://babeljs.io/learn-es2015/#classes)
125-
126-### Exponent operator
127-
128-```js
129-const byte = 2 ** 8
130-// Same as: Math.pow(2, 8)
131-```
132-{: data-line="1"}
133-
134-Promises
135---------
136-{: .-three-column}
137-
138-### Making promises
139-
140-```js
141-new Promise((resolve, reject) => {
142- if (ok) { resolve(result) }
143- else { reject(error) }
144-})
145-```
146-{: data-line="1"}
147-
148-For asynchronous programming.
149-See: [Promises](https://babeljs.io/learn-es2015/#promises)
150-
151-### Using promises
152-
153-```js
154-promise
155- .then((result) => { ··· })
156- .catch((error) => { ··· })
157-```
158-{: data-line="2,3"}
159-
160-
161-### Using promises with finally
162-
163-```js
164-promise
165- .then((result) => { ··· })
166- .catch((error) => { ··· })
167- .finally(() => { // logic independent of success/error })
168-```
169-{: data-line="4"}
170-
171-The handler is called when the promise is fulfilled or rejected.
172-
173-
174-### Promise functions
175-
176-```js
177-Promise.all(···)
178-Promise.race(···)
179-Promise.reject(···)
180-Promise.resolve(···)
181-```
182-
183-### Async-await
184-
185-```js
186-async function run () {
187- const user = await getUser()
188- const tweets = await getTweets(user)
189- return [user, tweets]
190-}
191-```
192-{: data-line="2,3"}
193-
194-`async` functions are another way of using functions.
195-
196-See: [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
197-
198-Destructuring
199--------------
200-{: .-three-column}
201-
202-### Destructuring assignment
203-
204-#### Arrays
205-
206-```js
207-const [first, last] = ['Nikola', 'Tesla']
208-```
209-{: data-line="1"}
210-
211-#### Objects
212-
213-```js
214-let {title, author} = {
215- title: 'The Silkworm',
216- author: 'R. Galbraith'
217-}
218-```
219-{: data-line="1"}
220-
221-Supports for matching arrays and objects.
222-See: [Destructuring](https://babeljs.io/learn-es2015/#destructuring)
223-
224-### Default values
225-
226-```js
227-const scores = [22, 33]
228-const [math = 50, sci = 50, arts = 50] = scores
229-```
230-
231-```js
232-// Result:
233-// math === 22, sci === 33, arts === 50
234-```
235-
236-Default values can be assigned while destructuring arrays or objects.
237-
238-### Function arguments
239-
240-```js
241-function greet({ name, greeting }) {
242- console.log(`${greeting}, ${name}!`)
243-}
244-```
245-{: data-line="1"}
246-
247-```js
248-greet({ name: 'Larry', greeting: 'Ahoy' })
249-```
250-
251-Destructuring of objects and arrays can also be done in function arguments.
252-
253-### Default values
254-
255-```js
256-function greet({ name = 'Rauno' } = {}) {
257- console.log(`Hi ${name}!`);
258-}
259-```
260-{: data-line="1"}
261-
262-```js
263-greet() // Hi Rauno!
264-greet({ name: 'Larry' }) // Hi Larry!
265-```
266-
267-### Reassigning keys
268-
269-```js
270-function printCoordinates({ left: x, top: y }) {
271- console.log(`x: ${x}, y: ${y}`)
272-}
273-```
274-{: data-line="1"}
275-
276-```js
277-printCoordinates({ left: 25, top: 90 })
278-```
279-
280-This example assigns `x` to the value of the `left` key.
281-
282-### Loops
283-
284-```js
285-for (let {title, artist} of songs) {
286- ···
287-}
288-```
289-{: data-line="1"}
290-
291-The assignment expressions work in loops, too.
292-
293-
294-### Object destructuring
295-
296-```js
297-const { id, ...detail } = song;
298-```
299-{: data-line="1"}
300-
301-Extract some keys individually and remaining keys in the object using rest (...) operator
302-
303-
304-Spread
305-------
306-
307-### Object spread
308-
309-#### with Object spread
310-
311-```js
312-const options = {
313- ...defaults,
314- visible: true
315-}
316-```
317-{: data-line="2"}
318-
319-#### without Object spread
320-
321-```js
322-const options = Object.assign(
323- {}, defaults,
324- { visible: true })
325-```
326-
327-The Object spread operator lets you build new objects from other objects.
328-
329-See: [Object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
330-
331-### Array spread
332-
333-#### with Array spread
334-
335-```js
336-const users = [
337- ...admins,
338- ...editors,
339- 'rstacruz'
340-]
341-```
342-{: data-line="2,3"}
343-
344-#### without Array spread
345-
346-```js
347-const users = admins
348- .concat(editors)
349- .concat([ 'rstacruz' ])
350-```
351-
352-The spread operator lets you build new arrays in the same way.
353-
354-See: [Spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
355-
356-Functions
357----------
358-
359-### Function arguments
360-
361-#### Default arguments
362-
363-```js
364-function greet (name = 'Jerry') {
365- return `Hello ${name}`
366-}
367-```
368-{: data-line="1"}
369-
370-#### Rest arguments
371-
372-```js
373-function fn(x, ...y) {
374- // y is an Array
375- return x * y.length
376-}
377-```
378-{: data-line="1"}
379-
380-#### Spread
381-
382-```js
383-fn(...[1, 2, 3])
384-// same as fn(1, 2, 3)
385-```
386-{: data-line="1"}
387-
388-Default, rest, spread.
389-See: [Function arguments](https://babeljs.io/learn-es2015/#default--rest--spread)
390-
391-### Fat arrows
392-
393-#### Fat arrows
394-
395-```js
396-setTimeout(() => {
397- ···
398-})
399-```
400-{: data-line="1"}
401-
402-#### With arguments
403-
404-```js
405-readFile('text.txt', (err, data) => {
406- ...
407-})
408-```
409-{: data-line="1"}
410-
411-#### Implicit return
412-```js
413-numbers.map(n => n * 2)
414-// No curly braces = implicit return
415-// Same as: numbers.map(function (n) { return n * 2 })
416-numbers.map(n => ({
417- result: n * 2
418-}))
419-// Implicitly returning objects requires parentheses around the object
420-```
421-{: data-line="1,4,5,6"}
422-
423-Like functions but with `this` preserved.
424-See: [Fat arrows](https://babeljs.io/learn-es2015/#arrows-and-lexical-this)
425-
426-Objects
427--------
428-
429-### Shorthand syntax
430-
431-```js
432-module.exports = { hello, bye }
433-// Same as: module.exports = { hello: hello, bye: bye }
434-```
435-
436-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
437-
438-### Methods
439-
440-```js
441-const App = {
442- start () {
443- console.log('running')
444- }
445-}
446-// Same as: App = { start: function () {···} }
447-```
448-{: data-line="2"}
449-
450-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
451-
452-### Getters and setters
453-
454-```js
455-const App = {
456- get closed () {
457- return this.status === 'closed'
458- },
459- set closed (value) {
460- this.status = value ? 'closed' : 'open'
461- }
462-}
463-```
464-{: data-line="2,5"}
465-
466-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
467-
468-### Computed property names
469-
470-```js
471-let event = 'click'
472-let handlers = {
473- [`on${event}`]: true
474-}
475-// Same as: handlers = { 'onclick': true }
476-```
477-{: data-line="3"}
478-
479-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
480-
481-
482-### Extract values
483-
484-```js
485-const fatherJS = { age: 57, name: "Brendan Eich" }
486-
487-Object.values(fatherJS)
488-// [57, "Brendan Eich"]
489-Object.entries(fatherJS)
490-// [["age", 57], ["name", "Brendan Eich"]]
491-```
492-{: data-line="3,5"}
493-
494-
495-Modules
496--------
497-
498-### Imports
499-
500-```js
501-import 'helpers'
502-// aka: require('···')
503-```
504-
505-```js
506-import Express from 'express'
507-// aka: const Express = require('···').default || require('···')
508-```
509-
510-```js
511-import { indent } from 'helpers'
512-// aka: const indent = require('···').indent
513-```
514-
515-```js
516-import * as Helpers from 'helpers'
517-// aka: const Helpers = require('···')
518-```
519-
520-```js
521-import { indentSpaces as indent } from 'helpers'
522-// aka: const indent = require('···').indentSpaces
523-```
524-
525-`import` is the new `require()`.
526-See: [Module imports](https://babeljs.io/learn-es2015/#modules)
527-
528-### Exports
529-
530-```js
531-export default function () { ··· }
532-// aka: module.exports.default = ···
533-```
534-
535-```js
536-export function mymethod () { ··· }
537-// aka: module.exports.mymethod = ···
538-```
539-
540-```js
541-export const pi = 3.14159
542-// aka: module.exports.pi = ···
543-```
544-
545-`export` is the new `module.exports`.
546-See: [Module exports](https://babeljs.io/learn-es2015/#modules)
547-
548-Generators
549-----------
550-
551-### Generators
552-
553-```js
554-function* idMaker () {
555- let id = 0
556- while (true) { yield id++ }
557-}
558-```
559-
560-```js
561-let gen = idMaker()
562-gen.next().value // → 0
563-gen.next().value // → 1
564-gen.next().value // → 2
565-```
566-
567-It's complicated.
568-See: [Generators](https://babeljs.io/learn-es2015/#generators)
569-
570-### For..of iteration
571-
572-```js
573-for (let i of iterable) {
574- ···
575-}
576-```
577-
578-For iterating through generators and arrays.
579-See: [For..of iteration](https://babeljs.io/learn-es2015/#iterators--forof)
580-
581-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
582-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -658
......@@ -1,658 +0,0 @@
1----
2-title: Go
3-layout: 2017/sheet
4-prism_languages: [go, bash]
5-weight: -3
6-tags: [Featured]
7-category: C-like
8-updated: 2020-06-21
9----
10-
11-## Getting started
12-{: .-three-column}
13-
14-### Introduction
15-{: .-intro}
16-
17-- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_
18-- [Go repl](https://repl.it/languages/go) _(repl.it)_
19-- [Golang wiki](https://github.com/golang/go/wiki/) _(github.com)_
20-
21-### Hello world
22-{: .-prime}
23-
24-#### hello.go
25-{: .-file}
26-
27-```go
28-package main
29-
30-import "fmt"
31-
32-func main() {
33- message := greetMe("world")
34- fmt.Println(message)
35-}
36-
37-func greetMe(name string) string {
38- return "Hello, " + name + "!"
39-}
40-```
41-
42-```bash
43-$ go build
44-```
45-
46-Or try it out in the [Go repl](https://repl.it/languages/go), or [A Tour of Go](https://tour.golang.org/welcome/1).
47-
48-### Variables
49-
50-#### Variable declaration
51-
52-```go
53-var msg string
54-msg = "Hello"
55-```
56-
57-#### Shortcut of above (Infers type)
58-
59-```go
60-msg := "Hello"
61-```
62-
63-### Constants
64-
65-```go
66-const Phi = 1.618
67-```
68-
69-Constants can be character, string, boolean, or numeric values.
70-
71-See: [Constants](https://tour.golang.org/basics/15)
72-
73-## Basic types
74-{: .-three-column}
75-
76-### Strings
77-
78-```go
79-str := "Hello"
80-```
81-
82-```go
83-str := `Multiline
84-string`
85-```
86-
87-Strings are of type `string`.
88-
89-### Numbers
90-
91-#### Typical types
92-
93-```go
94-num := 3 // int
95-num := 3. // float64
96-num := 3 + 4i // complex128
97-num := byte('a') // byte (alias for uint8)
98-```
99-
100-#### Other types
101-
102-```go
103-var u uint = 7 // uint (unsigned)
104-var p float32 = 22.7 // 32-bit float
105-```
106-
107-### Arrays
108-
109-```go
110-// var numbers [5]int
111-numbers := [...]int{0, 0, 0, 0, 0}
112-```
113-
114-Arrays have a fixed size.
115-
116-### Slices
117-
118-```go
119-slice := []int{2, 3, 4}
120-```
121-
122-```go
123-slice := []byte("Hello")
124-```
125-
126-Slices have a dynamic size, unlike arrays.
127-
128-### Pointers
129-
130-```go
131-func main () {
132- b := *getPointer()
133- fmt.Println("Value is", b)
134-}
135-```
136-{: data-line="2"}
137-
138-```go
139-func getPointer () (myPointer *int) {
140- a := 234
141- return &a
142-}
143-```
144-{: data-line="3"}
145-
146-```go
147-a := new(int)
148-*a = 234
149-```
150-{: data-line="2"}
151-
152-Pointers point to a memory location of a variable. Go is fully garbage-collected.
153-
154-See: [Pointers](https://tour.golang.org/moretypes/1)
155-
156-### Type conversions
157-
158-```go
159-i := 2
160-f := float64(i)
161-u := uint(i)
162-```
163-
164-See: [Type conversions](https://tour.golang.org/basics/13)
165-
166-## Flow control
167-{: .-three-column}
168-
169-### Conditional
170-
171-```go
172-if day == "sunday" || day == "saturday" {
173- rest()
174-} else if day == "monday" && isTired() {
175- groan()
176-} else {
177- work()
178-}
179-```
180-{: data-line="1,3,5"}
181-
182-See: [If](https://tour.golang.org/flowcontrol/5)
183-
184-### Statements in if
185-
186-```go
187-if _, err := doThing(); err != nil {
188- fmt.Println("Uh oh")
189-}
190-```
191-{: data-line="1"}
192-
193-A condition in an `if` statement can be preceded with a statement before a `;`. Variables declared by the statement are only in scope until the end of the `if`.
194-
195-See: [If with a short statement](https://tour.golang.org/flowcontrol/6)
196-
197-### Switch
198-
199-```go
200-switch day {
201- case "sunday":
202- // cases don't "fall through" by default!
203- fallthrough
204-
205- case "saturday":
206- rest()
207-
208- default:
209- work()
210-}
211-```
212-
213-See: [Switch](https://github.com/golang/go/wiki/Switch)
214-
215-### For loop
216-
217-```go
218-for count := 0; count <= 10; count++ {
219- fmt.Println("My counter is at", count)
220-}
221-```
222-
223-See: [For loops](https://tour.golang.org/flowcontrol/1)
224-
225-### For-Range loop
226-
227-```go
228-entry := []string{"Jack","John","Jones"}
229-for i, val := range entry {
230- fmt.Printf("At position %d, the character %s is present\n", i, val)
231-}
232-```
233-
234-See: [For-Range loops](https://gobyexample.com/range)
235-
236-### While loop
237-
238-```go
239-n := 0
240-x := 42
241-for n != x {
242- n := guess()
243-}
244-```
245-
246-See: [Go's "while"](https://tour.golang.org/flowcontrol/3)
247-
248-## Functions
249-{: .-three-column}
250-
251-### Lambdas
252-
253-```go
254-myfunc := func() bool {
255- return x > 10000
256-}
257-```
258-{: data-line="1"}
259-
260-Functions are first class objects.
261-
262-### Multiple return types
263-
264-```go
265-a, b := getMessage()
266-```
267-
268-```go
269-func getMessage() (a string, b string) {
270- return "Hello", "World"
271-}
272-```
273-{: data-line="2"}
274-
275-
276-### Named return values
277-
278-```go
279-func split(sum int) (x, y int) {
280- x = sum * 4 / 9
281- y = sum - x
282- return
283-}
284-```
285-{: data-line="4"}
286-
287-By defining the return value names in the signature, a `return` (no args) will return variables with those names.
288-
289-See: [Named return values](https://tour.golang.org/basics/7)
290-
291-## Packages
292-{: .-three-column}
293-
294-### Importing
295-
296-```go
297-import "fmt"
298-import "math/rand"
299-```
300-
301-```go
302-import (
303- "fmt" // gives fmt.Println
304- "math/rand" // gives rand.Intn
305-)
306-```
307-
308-Both are the same.
309-
310-See: [Importing](https://tour.golang.org/basics/1)
311-
312-### Aliases
313-
314-```go
315-import r "math/rand"
316-```
317-{: data-line="1"}
318-
319-```go
320-r.Intn()
321-```
322-
323-### Exporting names
324-
325-```go
326-func Hello () {
327- ···
328-}
329-```
330-
331-Exported names begin with capital letters.
332-
333-See: [Exported names](https://tour.golang.org/basics/3)
334-
335-### Packages
336-
337-```go
338-package hello
339-```
340-
341-Every package file has to start with `package`.
342-
343-## Concurrency
344-{: .-three-column}
345-
346-### Goroutines
347-
348-```go
349-func main() {
350- // A "channel"
351- ch := make(chan string)
352-
353- // Start concurrent routines
354- go push("Moe", ch)
355- go push("Larry", ch)
356- go push("Curly", ch)
357-
358- // Read 3 results
359- // (Since our goroutines are concurrent,
360- // the order isn't guaranteed!)
361- fmt.Println(<-ch, <-ch, <-ch)
362-}
363-```
364-{: data-line="3,6,7,8,13"}
365-
366-```go
367-func push(name string, ch chan string) {
368- msg := "Hey, " + name
369- ch <- msg
370-}
371-```
372-{: data-line="3"}
373-
374-Channels are concurrency-safe communication objects, used in goroutines.
375-
376-See: [Goroutines](https://tour.golang.org/concurrency/1), [Channels](https://tour.golang.org/concurrency/2)
377-
378-### Buffered channels
379-
380-```go
381-ch := make(chan int, 2)
382-ch <- 1
383-ch <- 2
384-ch <- 3
385-// fatal error:
386-// all goroutines are asleep - deadlock!
387-```
388-{: data-line="1"}
389-
390-Buffered channels limit the amount of messages it can keep.
391-
392-See: [Buffered channels](https://tour.golang.org/concurrency/3)
393-
394-### Closing channels
395-
396-#### Closes a channel
397-
398-```go
399-ch <- 1
400-ch <- 2
401-ch <- 3
402-close(ch)
403-```
404-{: data-line="4"}
405-
406-#### Iterates across a channel until its closed
407-
408-```go
409-for i := range ch {
410- ···
411-}
412-```
413-{: data-line="1"}
414-
415-#### Closed if `ok == false`
416-
417-```go
418-v, ok := <- ch
419-```
420-
421-See: [Range and close](https://tour.golang.org/concurrency/4)
422-
423-### WaitGroup
424-
425-```go
426-import "sync"
427-
428-func main() {
429- var wg sync.WaitGroup
430-
431- for _, item := range itemList {
432- // Increment WaitGroup Counter
433- wg.Add(1)
434- go doOperation(&wg, item)
435- }
436- // Wait for goroutines to finish
437- wg.Wait()
438-
439-}
440-```
441-{: data-line="1,4,8,12"}
442-
443-```go
444-func doOperation(wg *sync.WaitGroup, item string) {
445- defer wg.Done()
446- // do operation on item
447- // ...
448-}
449-```
450-{: data-line="2"}
451-
452-A WaitGroup waits for a collection of goroutines to finish. The main goroutine calls Add to set the number of goroutines to wait for. The goroutine calls `wg.Done()` when it finishes.
453-See: [WaitGroup](https://golang.org/pkg/sync/#WaitGroup)
454-
455-
456-## Error control
457-
458-### Defer
459-
460-```go
461-func main() {
462- defer fmt.Println("Done")
463- fmt.Println("Working...")
464-}
465-```
466-{: data-line="2"}
467-
468-Defers running a function until the surrounding function returns.
469-The arguments are evaluated immediately, but the function call is not ran until later.
470-
471-See: [Defer, panic and recover](https://blog.golang.org/defer-panic-and-recover)
472-
473-### Deferring functions
474-
475-```go
476-func main() {
477- defer func() {
478- fmt.Println("Done")
479- }()
480- fmt.Println("Working...")
481-}
482-```
483-{: data-line="2,3,4"}
484-
485-Lambdas are better suited for defer blocks.
486-
487-```go
488-func main() {
489- var d = int64(0)
490- defer func(d *int64) {
491- fmt.Printf("& %v Unix Sec\n", *d)
492- }(&d)
493- fmt.Print("Done ")
494- d = time.Now().Unix()
495-}
496-```
497-{: data-line="3,4,5"}
498-The defer func uses current value of d, unless we use a pointer to get final value at end of main.
499-
500-## Structs
501-{: .-three-column}
502-
503-### Defining
504-
505-```go
506-type Vertex struct {
507- X int
508- Y int
509-}
510-```
511-{: data-line="1,2,3,4"}
512-
513-```go
514-func main() {
515- v := Vertex{1, 2}
516- v.X = 4
517- fmt.Println(v.X, v.Y)
518-}
519-```
520-
521-See: [Structs](https://tour.golang.org/moretypes/2)
522-
523-### Literals
524-
525-```go
526-v := Vertex{X: 1, Y: 2}
527-```
528-
529-```go
530-// Field names can be omitted
531-v := Vertex{1, 2}
532-```
533-
534-```go
535-// Y is implicit
536-v := Vertex{X: 1}
537-```
538-
539-You can also put field names.
540-
541-### Pointers to structs
542-
543-```go
544-v := &Vertex{1, 2}
545-v.X = 2
546-```
547-
548-Doing `v.X` is the same as doing `(*v).X`, when `v` is a pointer.
549-
550-## Methods
551-
552-### Receivers
553-
554-```go
555-type Vertex struct {
556- X, Y float64
557-}
558-```
559-
560-```go
561-func (v Vertex) Abs() float64 {
562- return math.Sqrt(v.X * v.X + v.Y * v.Y)
563-}
564-```
565-{: data-line="1"}
566-
567-```go
568-v := Vertex{1, 2}
569-v.Abs()
570-```
571-
572-There are no classes, but you can define functions with _receivers_.
573-
574-See: [Methods](https://tour.golang.org/methods/1)
575-
576-### Mutation
577-
578-```go
579-func (v *Vertex) Scale(f float64) {
580- v.X = v.X * f
581- v.Y = v.Y * f
582-}
583-```
584-{: data-line="1"}
585-
586-```go
587-v := Vertex{6, 12}
588-v.Scale(0.5)
589-// `v` is updated
590-```
591-
592-By defining your receiver as a pointer (`*Vertex`), you can do mutations.
593-
594-See: [Pointer receivers](https://tour.golang.org/methods/4)
595-
596-## Interfaces
597-
598-### A basic interface
599-
600-```go
601-type Shape interface {
602- Area() float64
603- Perimeter() float64
604-}
605-```
606-
607-### Struct
608-
609-```go
610-type Rectangle struct {
611- Length, Width float64
612-}
613-```
614-
615-Struct `Rectangle` implicitly implements interface `Shape` by implementing all of its methods.
616-
617-### Methods
618-
619-```go
620-func (r Rectangle) Area() float64 {
621- return r.Length * r.Width
622-}
623-
624-func (r Rectangle) Perimeter() float64 {
625- return 2 * (r.Length + r.Width)
626-}
627-```
628-
629-The methods defined in `Shape` are implemented in `Rectangle`.
630-
631-### Interface example
632-
633-```go
634-func main() {
635- var r Shape = Rectangle{Length: 3, Width: 4}
636- fmt.Printf("Type of r: %T, Area: %v, Perimeter: %v.", r, r.Area(), r.Perimeter())
637-}
638-```
639-
640-## References
641-
642-### Official resources
643-{: .-intro}
644-
645-- [A tour of Go](https://tour.golang.org/welcome/1) _(tour.golang.org)_
646-- [Golang wiki](https://github.com/golang/go/wiki/) _(github.com)_
647-- [Effective Go](https://golang.org/doc/effective_go.html) _(golang.org)_
648-
649-### Other links
650-{: .-intro}
651-
652-- [Go by Example](https://gobyexample.com/) _(gobyexample.com)_
653-- [Awesome Go](https://awesome-go.com/) _(awesome-go.com)_
654-- [JustForFunc Youtube](https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw) _(youtube.com)_
655-- [Style Guide](https://github.com/golang/go/wiki/CodeReviewComments) _(github.com)_
656-
657-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
658-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -1277
......@@ -1,1277 +0,0 @@
1----
2-title: Goby
3-layout: 2017/sheet
4-prism_languages: [ruby]
5-weight: -3
6-updated: 2018-12-06
7-category: Ruby
8-intro: |
9- Goby's language design is based on Ruby language's, slim and shaped up. Differences in syntax between them is very small.
10----
11-
12-
13-## Getting started
14-
15-### Hello world
16-{: .-prime}
17-
18-#### hello.gb
19-{: .-file}
20-
21-```ruby
22-class Greet
23- attr_accessor :audience, :head, :tail
24-
25- def initialize
26- @head = "Hello, "
27- @tail = "!"
28- end
29-
30- def name
31- audience.name
32- end
33-
34- def say
35- puts head + name + tail
36- end
37-end
38-
39-module MyName
40- attr_reader :name
41-
42- def initialize
43- @name = self.class.to_s
44- end
45-end
46-
47-class World
48- include MyName
49-end
50-
51-greet = Greet.new
52-greet.audience = World.new
53-greet.say
54-```
55-
56-Then run:
57-
58-```bash
59-$ goby hello.gb
60-#=> Hello, World!
61-```
62-
63-### REPL (igb)
64-
65-```bash
66-$ goby -i
67-```
68-
69-* `reset`: reset the VM
70-* `exit`: exit REPL
71-* `help`: show help
72-* ctrl-c: cancel the block entered, or exit (on top level)
73-
74-See [igb manual & test script](https://github.com/goby-lang/goby/blob/master/igb/manual_test.md). You can use `readline` features such as command history by arrow keys.
75-
76-## Variables
77-{: .-three-column}
78-
79-### Local variable
80-
81-```ruby
82-zip101 = "233-7383"
83-magic_number = 42
84-```
85-
86-Should be "`[a-z][a-z0-9_]+`"(snake_case).
87-
88-### Instance variable
89-
90-```ruby
91-module State
92- def initialize(state)
93- @state = state # declaring an instance variable by assignment
94- end
95- def show
96- @state # accessible from other instance methods
97- end
98-end
99-
100-state = State.new "success"
101-state.show
102-#=> success
103-```
104-
105-Should be "`@[a-z][a-z0-9_]+`"(snake_case).
106-
107-### Multiple assignment
108-
109-```ruby
110-# array literal
111-a, b, c = [1, 2, 3]
112-
113-# array with '*'
114-a = [1, 2, 3]
115-x, y, z = *a
116-
117-# array literal with '*'
118-a, b, c = *[1, 2, 3]
119-
120-# bare assignment: unsupported
121-a, b, c = 1, 2, 3 #=> unexpected 3 Line: 0
122-```
123-
124-### Black hole variable
125-
126-```ruby
127-# '_' is write-only
128-a, _ = [1, 2]
129-```
130-
131-### Class variable
132-
133-Unsupported.
134-
135-### Global variable
136-
137-Unsupported.
138-
139-## Method definition
140-
141-### Method definition and calling
142-
143-```ruby
144-def foo_bar?(baz)
145- if baz == "Hi, Goby!"
146- true
147- else
148- false
149- end
150-end
151-
152-foo_bar? "Hi, Goby!" #=> true
153-```
154-
155-Method name should be "`[a-z][a-z0-9_]+\??`" (snake_case). You can omit the trailing "`()`" only if no parameters are taken. Trailing using "`!`" is **unsupported**.
156-
157-### Order of method parameter
158-
159-```ruby
160-def foo(normal, default="value", hash={}, ary=[], keyword:, keyword_default:"key", *sprat)
161-end
162-```
163-
164-If a default value is provided to a parameter, the parameter can be omitted when calling. `()` can be omitted. The order of parameters in method definition is restricted as follows:
165-
166-1. **normal parameters** (like `a`)
167-2. **normal parameters with default value** (like `a=1`)
168-3. **optional parameters** (array or hash, like `ary=[]` or `hs={}`)
169-4. **keyword parameters** (like `kwd:`)
170-5. **keyword parameters with default value** (like `kwd: 1` or `ary: [1,2,3]` or `hsh: {key: "value"}`)
171-6. **splat parameters** (like `*sp`)
172-
173-Or you will receive an error.
174-
175-### Keyword parameter (WIP)
176-
177-```ruby
178-def foo(process:, verb: :GET, opt:{ csp: :enabled }, ary: [1, 2, 3])
179-end
180-```
181-
182-### Returning value
183-
184-```ruby
185-PI = 3.14
186-def area(radius)
187- radius * PI # returns the result of evaluation
188-end
189-
190-area 6 #=> 18.84
191-```
192-
193-### Returning multiple value
194-
195-```ruby
196-def my_array
197- [1, 2, 3]
198-end
199-
200-my_array #=> [1, 2, 3]
201-```
202-
203-### Instance method
204-
205-```ruby
206-module Foo
207- def bar # defining instance method
208- puts "bar"
209- end
210-
211- def baz(count, email: "goby@example.com")
212- count.times do
213- puts email
214- end
215- end
216-end
217-
218-foo = Foo.new
219-foo.bar #=> bar
220-foo.baz(3) #↓
221-goby@example.com
222-goby@example.com
223-goby@example.com
224-```
225-
226-### Singleton method #1
227-
228-```ruby
229-str = "Goby"
230-def str.foo #1 singleton method on the object
231- self * 2
232-end
233-
234-str.foo
235-#=> GobyGoby
236-```
237-
238-### Singleton method #2
239-
240-```ruby
241-module Foo
242- def self.bar #2 singleton method with `self.`
243- 92
244- end
245-end
246-```
247-
248-### Singleton method #3
249-
250-```ruby
251-module Foo
252- def Foo.bar #3 singleton method with a class name (unrecommended)
253- 88
254- end
255-end
256-```
257-
258-### Singleton method #4
259-
260-```ruby
261-module Foo end
262-
263-def Foo.bar #4 singleton methods outside the Foo
264- 9999
265-end
266-
267-Foo.bar #=> 9999
268-```
269-
270-### Attribute accessor method
271-
272-```ruby
273-class Foo
274- attr_accessor :bar, :baz
275-
276- def initialize
277- @bar = 42
278- @baz = 99
279- end
280-end
281-
282-foo = Foo.new
283-
284-foo.bar = 77
285-foo.baz = 88
286-```
287-
288-You can use the following shorthands to declare attribute accessor methods in classes/modules:
289-
290-* `attr_accessor`
291-* `attr_reader`
292-* `attr_writer`
293-
294-### Private method (to be implemented)
295-
296-```ruby
297-class Foo
298- def bar
299- 42
300- end
301-
302- def _baz # leading '_' means private method
303- 99
304- end
305-end
306-```
307-
308-## Module/Class definition
309-{: .-three-column}
310-
311-### Module definition and `include`
312-
313-```ruby
314-module Foo
315- def foo
316- "Foo's instance method"
317- end
318-end
319-
320-class Bar
321- include Foo # to include Foo
322-end
323-
324-Bar.new.foo #=> Foo's instance method
325-```
326-
327-Module names should be "`[A-Z][A-Za-z0-9_]+`" (UpperCamelCase). Modules cannot be inherited.
328-
329-### Module definition and `extend`
330-
331-```ruby
332-module Foo
333- def foo
334- "Foo's instance method will be a singleton method"
335- end
336-end
337-
338-class Bar
339- extend Foo # to extend Foo
340-end
341-
342-Bar.foo #=> Foo's instance method will be a singleton method
343-```
344-
345-`extend` is to use the instance methods in the specified modules as **singleton methods** in your class or module.
346-
347-### Module instantiation
348-
349-```ruby
350-module Foo #module definition
351- def foo
352- 99
353- end
354-end
355-
356-Foo.new.foo #=> 99
357-```
358-
359-Actually, Goby's module can be even **instantiated** via "`new`" like "`Foo.new`".
360-
361-### Class definition and inheritance
362-
363-```ruby
364-class Foo # class definition
365- def bar
366- 99
367- end
368-end
369-
370-class Baz < Foo # inheritance
371-end
372-
373-Baz.new.bar #=> 99
374-```
375-
376-Class names should be "`[A-Z][A-Za-z0-9]+`" (UpperCamelCase). Inheritance with "`<`" is supported.
377-
378-### Constants
379-
380-```ruby
381-HTTP_ERROR_404 = 404
382-HTTP_ERROR_404 = 500 # error
383-```
384-
385-Constants should be "`[A-Z][A-Za-z0-9_]+`" (UPPER_SNAKECASE). Constants are **not reentrant** and the scope is **global**.
386-
387-### Redefining class/modules
388-
389-```ruby
390-class Foo
391- def bar
392- 99
393- end
394-end
395-
396-class Foo
397- def bar # redefining is possible
398- 77
399- end
400-end
401-```
402-
403-### Namespaces
404-
405-```ruby
406-class Foo
407- module Bar
408- MAGIC = 99
409- def baz
410- 99
411- end
412- end
413-end
414-
415-Foo::Bar.new.baz # Use '::' for namespacing
416-Foo::Bar::MAGIC # Use '::' for namespacing
417-```
418-
419-## Load library
420-
421-### `require`
422-
423-```ruby
424-require("uri") # to activate URL class
425-
426-u = URI.parse("http://example.com")
427-u.scheme #=> "http"
428-```
429-
430-### `require_relative`
431-
432-```ruby
433-require_relative("bar") # loading the local bar.gb
434-
435-class Foo
436- def self.bar(x)
437- Bar.foo do |ten|
438- x * ten
439- end
440- end
441-
442- def self.baz
443- yield(100)
444- end
445-end
446-```
447-
448-## Literal
449-{: .-three-column}
450-
451-### Keyword
452-
453-`def`, `true`, `false`, `nil`, `if`, `elsif`, `else`, `case`, `when`, `return`, `self`, `end`, `while`, `do`, `yield`, `get_block`, `next`, `class`, `module`, `break`
454-
455-### String literal
456-
457-```ruby
458-"double quote"
459-'single quote'
460-```
461-
462-Double and single quotation can be used.
463-
464-### Symbol literal
465-
466-```ruby
467-:symbol # equivalent to "symbol"
468-{ symbol: "value" }
469-```
470-
471-Goby's symbol (using `:`) is always `String` class.
472-
473-### Numeric literal
474-
475-```ruby
476-year = 2018 # Integer
477-offset = -42 # Integer
478-PI = 3.14 # Float
479-G = -9.8 # Float
480-```
481-
482-### Array literal
483-
484-```ruby
485-[1, 2, 3, "hello", :goby, { key: "value"}]
486-[1, 2, [3, 4], 5, 6]
487-```
488-
489-### Hash literal
490-
491-```ruby
492-h = { key: "value", key2: "value2" }
493-h[:key2] #=> value2
494-```
495-
496-Hash literal's keys should always be **symbol literals**.
497-
498-### Range literal
499-
500-```ruby
501-(1..10).each do |x| # '..' represents a range
502- puts x*x
503-end
504-```
505-
506-### Boolean and `nil`
507-
508-```ruby
509-true # Boolean class
510-false # Boolean class
511-nil # Null class
512-
513-!nil #=> true
514-```
515-
516-Any objects except `nil` and `false` will be treated as `true` on conditionals.
517-
518-## Operator
519-
520-### Arithmetic/logical/assignment operators
521-
522-```ruby
523-+ # unary
524-** # power
525-- # unary
526-* / % # multiplication, division, modulus
527-+ - # addition, subtraction
528-! # logical inversion
529-> >= < <= # inequality comparison
530-== != # equality comparison, negative comparison
531-&& # logical AND
532-|| # logical OR
533-+= -= # shorthand of addition/subtraction
534-= # assignment
535-```
536-
537-*Priority of operators are TBD
538-
539-### Other operators
540-
541-```ruby
542-() # chaning priority of interpretation
543-[] # array literal
544-* # multiple assignment
545-.. # range
546-```
547-
548-*Priority of operators are TBD
549-
550-### Delimiter
551-
552-```ruby
553-class Foo; end # ';' to delimit
554-
555-class Bar end # recommended
556-```
557-
558-### String interpolation (to be implemented)
559-
560-```ruby
561-puts "Error: #{error_message}" # double quotation is required
562-```
563-
564-### Comment
565-
566-```ruby
567-puts "Goby" # comments
568-```
569-
570-Use the annotations to keep the comments concise.
571-
572-- `TODO`
573-- `FIXME`
574-- `OPTIMIZE`
575-- `HACK`
576-- `REVIEW`
577-
578-### I/O
579-
580-* `#puts`
581-
582-* special constants: `ARGV`, `STDIN`, `STDOUT`, `STDERR`, `ENV`
583-
584-## Flow control
585-{: .-three-column}
586-
587-### `if`, `else`, `elsif`
588-
589-```ruby
590-def foo(str)
591- if str.size > 10
592- puts "too big!"
593- elsif str.size < 3
594- puts "too short!"
595- else
596- puts "moderate"
597- end
598-end
599-```
600-
601-`then` is **not** supported.
602-
603-### Break
604-
605-```ruby
606-def foo(tail)
607- (5..tail).each do |t|
608- if t % 2 == 0 && t % 5 == 0
609- puts "ouch!"
610- break # finish the block
611- else
612- puts t
613- end
614- end
615- puts "out of the block"
616-end
617-
618-foo 20
619-#=> 5 6 7 8 9
620-#=> ouch!
621-#=> out of the block
622-```
623-
624-### Case
625-
626-```ruby
627-def foo(str)
628- case str
629- when "Elf"
630- puts "You might be Aragorn II!"
631- when "Aragorn"
632- puts "Long time no see, Aragorn!"
633- when "Frodo", "Sam", "Gandalf"
634- puts "One of us!"
635- else
636- puts "You're not yourself"
637- end
638-end
639-```
640-
641-### While
642-
643-```ruby
644-decr = 10
645-while decr do
646- if decr < 1
647- break
648- end
649- puts decr
650- decr -= 1
651-end
652-```
653-
654-`while`, conditional and a `do`/`end` block can be used for a loop.
655-
656-### Rescue
657-
658-Under construction. Join [#605](https://github.com/goby-lang/goby/issues/605).
659-
660-## Block
661-{: .-three-column}
662-
663-### Block
664-
665-```ruby
666-def foo(ary: [1, 2, 3])
667- ary.each do |s| # start of the block with |block variable|
668- puts s
669- end # end of the block
670-end
671-```
672-
673-`{ }` cannot be used for forming a block.
674-
675-### `yield`
676-
677-```ruby
678-def foo
679- yield(10) # executes the block given
680-end
681-
682-foo do |ten|
683- ten + 20
684-end
685-```
686-
687-### Block object and `call`
688-
689-```ruby
690-b = Block.new do
691- 100
692-end
693-
694-b.call #=> 100
695-```
696-
697-`Block.new` can take a block and then `call`.
698-
699-### Passing a block
700-
701-```ruby
702-def baz
703- 1000
704-end
705-
706-class Foo
707- def exec_block(block)
708- block.call
709- end
710-
711- def baz
712- 100
713- end
714-end
715-
716-b = Block.new do
717- baz
718-end
719-
720-f = Foo.new
721-f.exec_block(b)
722-```
723-
724-### Passing a block with block arguments
725-
726-```ruby
727-b = Block.new do |arg, offset|
728- arg + 1000 - offset
729-end
730-
731-b.call(49, 500) #=> 549
732-```
733-
734-### Special `get_block` keyword
735-
736-```ruby
737-def bar(block)
738- # runs the block object and the block arg simultaneously
739- block.call + get_block.call
740-end
741-
742-def foo
743- bar(get_block) do # passes two blocks to `bar`
744- 20
745- end
746-end
747-
748-foo do
749- 10
750-end
751-```
752-
753-`get_block` is not a method but a **keyword** to retrive a given block argument as a block object. By this, you can pass around or `call` the given block arguments as block objects.
754-
755-### Closure
756-
757-```ruby
758-count = 0 # the declaration is used
759-b = Block.new do
760- count += 1 # the block looks preserving the `count`
761-end
762-
763-class Foo
764- def bar(blk)
765- count = 9 # (does not affect)
766- puts blk.call # local variable is resolved to the one above
767- end
768-end
769-
770-Foo.new.bar b #=> 1
771-Foo.new.bar b #=> 2
772-Foo.new.bar b #=> 3
773-```
774-
775-## Native class (Primary)
776-{: .-three-column}
777-
778-Goby's most "native" classes cannot instantiate with `new` in principle.
779-
780-### `Object`
781-
782-```ruby
783-Bar.ancestors
784-#» [Bar, Foo, Object]
785-Bar.singleton_class.ancestors
786-#» [#<Class:Bar>, #<Class:Object>, Class, Object]
787-```
788-
789-`Object` is actually just for creating singleton classes. See `Class`.
790-
791-* **`Object.methods`**: `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`, `<`, `<=`, `>`, `>=`, `ancestors`, `attr_accessor`, `attr_reader`, `attr_writer`, `extend`, `include`, `name`, `new`, `superclass`
792-
793-* **`Object.new.methods`**: `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`
794-
795-### `Class`
796-
797-```ruby
798-String.ancestors #=> [String, Object]
799-```
800-
801-`Class` and `Object`can actually be regarded as the same and you don't need to distinguish them in almost all the cases.
802-
803-* **`Class.methods`**: `<`, `<=`, `>`, `>=`, `ancestors`, `attr_accessor`, `attr_reader`, `attr_writer`, `extend`, `include`, `name`, `new`, `superclass`, `!`, `!=`, `==`, `block_given?`, `class`, `exit`, `instance_eval`, `instance_variable_get`, `instance_variable_set`, `is_a?`, `methods`, `nil?`, `object_id`, `puts`, `raise`, `require`, `require_relative`, `send`, `singleton_class`, `sleep`, `thread`, `to_s`
804-
805-### `String`
806-
807-```ruby
808-puts "Hello" + ' ' + 'world' #=> Hello world
809-```
810-
811-Fixed to **UTF-8** with mb4 support.
812-
813-* **`String.methods`**: `fmt`,
814- * the rest: `Class.methods`
815-* **`"a".methods`**: `!=`, `*`, `+`, `<`, `<=>`, `==`, `=~`, `>`, `[]`, `[]=`, `capitalize`, `chop`, `concat`, `count`, `delete`, `downcase`, `each_byte`, `each_char`, `each_line`, `empty?`, `end_with?`, `eql?`, `fmt`, `include?`, `insert`, `length`, `ljust`, `match`, `new`, `replace`, `replace_once`, `reverse`, `rjust`, `size`, `slice`, `split`, `start_with`, `strip`, `to_a`, `to_bytes`, `to_d`, `to_f`, `to_i`, `to_s`, `upcase`,
816- * the rest: `Object.new.methods`
817-
818-### `Integer`
819-
820-```ruby
821-37037 * 27 #=> 999999
822-```
823-
824-* **`Integer.methods`**: the same as `Class.methods`
825-* **`1.methods`**: `!=`, `%`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `even?`, `new`, `next`, `odd?`, `pred`, `ptr`, `times`, `to_f`, `to_float32`, `to_float64`, `to_i`, `to_int`, `to_int16`, `to_int32`, `to_int64`, `to_int8`, `to_s`, `to_uint`, `to_uint16`, `to_uint32`, `to_uint64`, `to_uint8`
826- * the rest: `Object.new.methods`
827-
828-### `Array`
829-
830-```ruby
831-[1, "2", :card, [4, 5], { john: "doe" }]
832-```
833-
834-* **`Array.methods`**: the same as `Class.methods`
835-* **`[1].methods`**: `*`, `+`, `[]`, `[]=`, `any?`, `at`, `clear`, `concat`, `count`, `delete_at`, `dig`, `each`, `each_index`, `empty?`, `first`, `flatten`, `include?`, `join`, `last`, `lazy`, `length`, `map`, `new`, `pop`, `push`, `reduce`, `reverse`, `reverse_each`, `rotate`, `select`, `shift`, `to_enum`, `unshift`, `values_at`
836- * the rest: `Object.new.methods`
837-
838-### `Hash`
839-
840-```ruby
841-h = { key: "value" }
842-h = { "key": "value" } #=> error
843-
844-h["key"] #=> value
845-h[:key] #=> value
846-```
847-
848-Keys in hash literals should be **symbol literals**, while Hash index can be either string or symbol literals.
849-
850-* **`Hash.methods`**: the same as `Class.methods`
851-* **`{ key: "value" }.methods`**: `[]`, `[]=`, `any?`, `clear`, `default`, `default=`, `delete`, `delete_if`, `dig`, `each`, `each_key`, `each_value`, `empty?`, `eql?`, `fetch`, `fetch_values`, `has_key?`, `has_value?`, `keys`, `length`, `map_values`, `merge`, `new`, `select`, `sorted_keys`, `to_a`, `to_json`, `to_s`, `transform_values`, `values`, `values_at`
852- * the rest: `Object.new.methods`
853-
854-### `Range`
855-
856-```ruby
857-(1..10).each do |i|
858- puts i ** 2
859-end
860-```
861-
862-* **`Range.methods`**: the same as `Class.methods`
863-* **`(1..10).methods`**: `!=`, `==`, `bsearch`, `each`, `first`, `include?`, `last`, `lazy`, `map`, `new`, `size`, `step`, `to_a`, `to_enum`
864- * the rest: `Object.new.methods`
865-
866-### `Block`
867-
868-```ruby
869-b = Block.new do
870- 100
871-end
872-
873-b.call #=> 100
874-```
875-
876-* **`Block.methods`**: the same as `Class.methods`
877-* **`(Block.new do end).methods`**: `call`
878- * the rest: `Object.new.methods`
879-
880-## Native class (secondary)
881-{: .-three-column}
882-
883-### `Float`
884-
885-```ruby
886-1.1 + 1.1 # => -2.2
887-2.1 * -2.1 # => -4.41
888-```
889-
890-Float literals like `3.14` or `-273.15`. `Float` class is based on Golang's `float64` type.
891-
892-* **`Float.methods`**: the same as `Class.methods`
893-* **`3.14.methods`**: `!=`, `%`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `new`, `ptr`, `to_d`, `to_i`
894- * the rest: `Object.new.methods`
895-
896-### `Decimal`
897-
898-```ruby
899-"3.14".to_d # => 3.14
900-"-0.7238943".to_d # => -0.7238943
901-"355/113".to_d
902-# => 3.1415929203539823008849557522123893805309734513274336283185840
903-
904-a = "16.1".to_d
905-b = "1.1".to_d
906-e = "17.2".to_d
907-a + b # => 0.1
908-a + b == e # => true
909-
910-('16.1'.to_d + "1.1".to_d).to_s #=> 17.2
911-('16.1'.to_f + "1.1".to_f).to_s #=> 17.200000000000003
912-```
913-
914-Experimental: the size is arbitrary and internally a fraction from Golang's `big.Rat` type. Decimal literal is TBD for now and you can get `Decimal` number via `to_d` method from `Integer`/`Float`/`String`.
915-
916-* **`Decimal.methods`**: the same as `Class.methods`
917-* **`(1.1).to_d.methods`**: `!=`, `*`, `**`, `+`, `-`, `/`, `<`, `<=`, `<=>`, `==`, `>`, `>=`, `denominator`, `fraction`, `inverse`
918- * the rest: `Object.new.methods`
919-
920-### `Regexp`
921-
922-```ruby
923-a = Regexp.new("orl")
924-a.match?("Hello World") #=> true
925-a.match?("Hello Regexp") #=> false
926-
927-b = Regexp.new("😏")
928-b.match?("🤡 😏 😐") #=> true
929-b.match?("😝 😍 😊") #=> false
930-
931-c = Regexp.new("居(ら(?=れ)|さ(?=せ)|る|ろ|れ(?=[ばる])|よ|(?=な[いかくけそ]|ま[しすせ]|そう|た|て))")
932-c.match?("居られればいいのに") #=> true
933-c.match?("居ずまいを正す") #=> false
934-```
935-
936-Using `/ /` is to be implemented.
937-
938-* **`Regexp.methods`**: the same as `Class.methods`
939-* **`Regexp.new("^aa$").methods`**: `==`, `match?`
940- * the rest: `Object.new.methods`
941-
942-### `MatchData`
943-
944-```ruby
945-# numbered capture
946-'abcd'.match(Regexp.new('(b.)'))
947-#=> #<MatchData 0:"bc" 1:"bc">
948-
949-# named capture
950-'abcd'.match(Regexp.new('a(?<first>b)(?<second>c)'))
951-#=> #<MatchData 0:"abc" first:"b" second:"c">
952-
953-# converting to hash
954-» 'abcd'.match(Regexp.new('a(?<first>b)(?<second>c)')).to_h
955-#» { 0: "abc", first: "b", second: "c" }
956-```
957-
958-The number keys in the captures are actually `String` class.The key `0` is the mached string.
959-
960-* **`MatchData.methods`**: the same as `Class.methods`
961-* **`'abcd'.match(Regexp.new('(b.)')).methods`**: `captures`, `length`, `new`, `to_a`, `to_h`
962- * the rest: `Object.new.methods`
963-
964-### `File`
965-
966-```ruby
967-f = File.new("../test_fixtures/file_test/size.gb")
968-f.name #=> "../test_fixtures/file_test/size.gb"
969-```
970-
971-* **`File.methods`**: `basename`, `chmod`, `delete`, `exist?`, `extname`, `join`
972- * the rest: `Class.methods`
973-* **`File.new.methods`**: `basename`, `chmod`, `close`, `delete`, `exist?`, `extname`, `join`, `name`
974- * the rest: `Object.new.methods`
975-
976-## Native class (Golang-oriented)
977-{: .-three-column}
978-
979-### `GoMap`
980-
981-```ruby
982-h = { foo: "bar" }
983-m = GoMap.new(h) # to pass values to Golang's code
984-h2 = m.to_hash
985-h2[:foo] #=> "bar"
986-```
987-
988-* **`GoMap.methods`**: the same as `Class.methods`
989-* **`GoMap.new.methods`**: `get`, `set`, `to_hash`
990- * the rest: `Object.new.methods`
991-
992-### `Channel`
993-
994-```ruby
995-c = Channel.new
996-
997-1001.times do |i| # i start from 0 to 1000
998- thread do
999- c.deliver(i)
1000- end
1001-end
1002-
1003-r = 0
1004-1001.times do
1005- r = r + c.receive
1006-end
1007-
1008-r #=> 500500
1009-```
1010-
1011-`Channel` class is to hold channels to work with `#thread`. See `thread`.
1012-
1013-* **`Channel.methods`**: the same as `Class.methods`
1014-* **`Channel.new.methods`**: `close`, `deliver`, `new`, `receive`
1015- * the rest: `Object.new.methods`
1016-
1017-## Enumerator & lazy
1018-
1019-Pretty new experimental library.
1020-
1021-### `LazyEnumerator`
1022-
1023-```ruby
1024-# creating a lazy enumerator
1025-enumerator = LazyEnumerator.new(ArrayEnumerator.new([1, 2, 3])) do |value|
1026- 2 * value
1027-end
1028-result = []
1029-
1030-enumerator.each do |value|
1031- result.push(value)
1032-end
1033-
1034-result #=> [2, 4, 6]
1035-```
1036-
1037-A shorthand `#lazy` method is also provided in `Array` and `Range` by now. See "Tips & tricks" below.
1038-
1039-* **`LazyEnumerator.methods`**: the same as `Class.methods`
1040-* **`[1, 2].lazy`**: `each`, `first`, `has_next?`, `initialize`, `map`, `next`
1041- * the rest: `Object.new.methods`
1042-
1043-### `ArrayEnumerator`
1044-
1045-```ruby
1046-iterated_values = []
1047-
1048-enumerator = ArrayEnumerator.new([1, 2, 4])
1049-
1050-while enumerator.has_next? do
1051- iterated_values.push(enumerator.next)
1052-end
1053-
1054-iterated_values #=> [1, 2, 4]
1055-```
1056-
1057-* **`ArrayEnumerator.methods`**: the same as `Class.methods`
1058-* **`ArrayEnumerator.new([1, 2, 3]).methods`**: `has_next?`, `initialize`, `next`
1059- * the rest: `Object.new.methods`
1060-
1061-### `RangeEnumerator`
1062-
1063-```ruby
1064-iterated_values = []
1065-
1066-enumerator = RangeEnumerator.new((1..4))
1067-
1068-while enumerator.has_next? do
1069- iterated_values.push(enumerator.next)
1070-end
1071-
1072-iterated_values #=> [1, 2, 3, 4]
1073-```
1074-
1075-* **`RangeEnumerator.methods`**: the same as `Class.methods`
1076-* **`RangeEnumerator.new(1..2).methods`**: `has_next?`, `initialize`, `next`
1077- * the rest: `Object.new.methods`
1078-
1079-## Special class
1080-
1081-### `Boolean`
1082-
1083-```ruby
1084-true.class #=> Boolean
1085-false.class #=> Boolean
1086-```
1087-
1088-A special class that just to hold `true` and `false`. Cannot be instantiate.
1089-
1090-### `Null`
1091-
1092-```ruby
1093-nil.class #=> Null
1094-```
1095-
1096-A special class that just to hold `nil`. Cannot be instantiate.
1097-
1098-### `Method`
1099-
1100-(A special dummy class that just holds methods defined by Goby code.)
1101-
1102-### `Diggable`
1103-
1104-Provides `#dig` method. Currently. `Array` and `Hash` classes' instance can be `Diggable`.
1105-
1106-```ruby
1107-[1, 2].dig(0, 1) #=> TypeError: Expect target to be Diggable, got Integer
1108-```
1109-
1110-## Testing framework
1111-
1112-### `Spec`
1113-
1114-```ruby
1115-require "spec"
1116-
1117-Spec.describe Spec do
1118- it "fails and exit with code 1" do
1119- expect(1).to eq(2)
1120- end
1121-end
1122-
1123-Spec.run
1124-```
1125-
1126-* **`Spec.methods`**: `describe`, `describes`, `instance`, `run`
1127- * the rest: `Object.methods`
1128-* **`Spec.new.methods`**: `describes`, `initialize`, `run`, `session_successful`, `session_successful=`
1129- * the rest: `Hash.new.methods`
1130-
1131-## Tips & tricks
1132-
1133-### Showing methods
1134-
1135-```ruby
1136-» "string".methods
1137-#» ["!=", "*", "+", "<", "<=>", "==", "=~", ">", "[]", "[]=", "capitalize", "chop", "concat", "count", "delete", "downcase", "each_byte", "each_char", "each_line", "empty?", "end_with?", "eql?", "fmt", "include?", "insert", "length", "ljust", "match", "new", "replace", "replace_once", "reverse", "rjust", "size", "slice", "split", "start_with", "strip", "to_a", "to_bytes", "to_d", "to_f", "to_i", "to_s", "upcase", "!", "block_given?", "class", "exit", "instance_eval", "instance_variable_get", "instance_variable_set", "is_a?", "methods", "nil?", "object_id", "puts", "raise", "require", "require_relative", "send", "singleton_class", "sleep", "thread"]
1138-```
1139-
1140-### Showing class
1141-
1142-```ruby
1143-» "string".class
1144-#» String
1145-```
1146-
1147-### Showing singleton class
1148-
1149-```ruby
1150-» "moji".singleton_class
1151-#» #<Class:#<String:842352325152>>
1152-
1153-» "moji".class.singleton_class
1154-#» #<Class:String>
1155-```
1156-
1157-### Showing ancestors
1158-
1159-```ruby
1160-» Integer.ancestors
1161-#» [Integer, Object]
1162-
1163-» "moji".class.ancestors
1164-#» [String, Object]
1165-```
1166-
1167-### Showing singleton classes' ancestors
1168-
1169-```ruby
1170-» "moji".class.singleton_class.ancestors
1171-#» [#<Class:String>, #<Class:Object>, Class, Object]
1172-```
1173-
1174-### Showing object's id
1175-
1176-```ruby
1177-» "moji".object_id
1178-#» 842352977920
1179-```
1180-
1181-### `#to_json`
1182-
1183-```ruby
1184-h = { a: 1, b: [1, "2", [4, 5, nil]]}
1185-h.to_json # converts hash to JSON
1186-#=> {"a":1, "b":[1, "2", [4, 5, null]]}
1187-```
1188-
1189-### Customize `#to_json`
1190-
1191-Overwrite the `#to_json` in your class:
1192-
1193-```ruby
1194-class JobTitle
1195- def initialize(name)
1196- @name = name
1197- end
1198-
1199- def to_json
1200- { title: @name }.to_json
1201- end
1202-end
1203-
1204-class Person
1205- def initialize(name, age)
1206- @name = name
1207- @age = age
1208- @job = JobTitle.new("software engineer")
1209- end
1210-
1211- def to_json
1212- { name: @name, age: @age, job: @job }.to_json
1213- end
1214-end
1215-
1216-stan = Person.new("Stan", 23)
1217-h = { person: stan }
1218-h.to_json #=> {"person":{"name":"Stan","job":{"title":"software engineer"},"age":23}}
1219-```
1220-
1221-### Lazy enumeration
1222-
1223-To avoid N + 1 query.
1224-
1225-```ruby
1226-enumerator = [1, 2, 3].lazy.map do |value|
1227- 2 * value
1228-end
1229-result = []
1230-
1231-enumerator.each do |value|
1232- result.push(value)
1233-end
1234-
1235-result #=> [2, 4, 6]
1236-```
1237-
1238-You can call `#lazy.map` on `Array`, `Range`, or `JSON` objects.
1239-
1240-## Styling
1241-
1242-### Quick style guide
1243-
1244-* UTF-8 should be used.
1245-* Only two spaces ` ` should be used for one indentation.
1246- * Tab cannot be used for indentation.
1247-* For more, follow [RuboCop's style guide](https://github.com/bbatsov/ruby-style-guide) in principle.
1248-
1249-### Document notation
1250-
1251-* `Class#instance_method` -- use `#` to represent instance methods in documents
1252-* `Class.class_method`
1253-* `Module.module_method`
1254-
1255-### Syntax highlighting
1256-
1257-Ready for Vim and Sublime text. You can also use Ruby's syntax highlighting so far.
1258-
1259-## References
1260-
1261-### Official
1262-
1263-* Official site: [https://goby-lang.org/](https://goby-lang.org/)
1264-* Repository: [https://github.com/goby-lang/goby/](https://github.com/goby-lang/goby/)
1265-* DevHints: [https://devhints.io/goby](https://devhints.io/goby) (this page)
1266-
1267-### Readings for Goby developers
1268-
1269-* [Write an Interpreter in Go](https://interpreterbook.com/)
1270-* [Nand2Tetris II](https://www.coursera.org/learn/nand2tetris2/home/welcome)
1271-* [Ruby under a microscope](http://patshaughnessy.net/ruby-under-a-microscope)
1272-* [YARV's instruction table](http://www.atdot.net/yarv/insnstbl.html)
1273-
1274-### JP resource
1275-
1276-* [Goby: Rubyライクな言語(1)Gobyを動かしてみる](https://techracho.bpsinc.jp/hachi8833/2017_11_10/47787)
1277-* [Gobyの組み込みクラスにメソッドを追加する方法](https://qiita.com/hanachin_/items/efc1c976a4f5749514ef)
+0, -273
......@@ -1,273 +0,0 @@
1----
2-title: GraphQL
3-layout: 2017/sheet
4-updated: 2019-07-07
5-category: API
6----
7-
8-## Intro
9-
10-## Queries
11-{: .-three-column}
12-
13-### Basic query
14-
15-```js
16-{ status }
17-```
18-
19-#### ↓
20-
21-```js
22-{ status: 'available' }
23-```
24-{: .-setup}
25-
26-### Nesting
27-
28-```js
29-{ hero { name height } }
30-```
31-
32-#### ↓
33-
34-```js
35-{ hero:
36- { name: "Luke Skywalker",
37- height: 1.74 } }
38-```
39-{: .-setup}
40-
41-### Lists
42-
43-```js
44-{ friends { name } }
45-```
46-
47-#### ↓
48-
49-```js
50-{ friends:
51- [ { name: "Luke Skywalker" },
52- { name: "Han Solo" },
53- { name: "R2D2" } ] }
54-```
55-{: .-setup}
56-
57-GraphQL queries look the same for both single items or lists of items.
58-
59-### Lookups
60-
61-```js
62-{
63- hero(id: "1000") { id name }
64-}
65-```
66-
67-#### ↓
68-
69-```js
70-{ hero:
71- { id: "1000",
72- { name: "Luke Skywalker" } }
73-```
74-{: .-setup}
75-
76-### Aliases
77-
78-```js
79-{
80- luke: hero(id: "1000") { name }
81- han: hero(id: "1001") { name }
82-}
83-```
84-
85-#### ↓
86-
87-```js
88-{ luke:
89- { name: "Luke Skywalker" },
90- han:
91- { name: "Han Solo" } }
92-```
93-{: .-setup}
94-
95-### Operation names and variables
96-
97-#### Query
98-```js
99-query FindHero($id: String!) {
100- hero(id: $id) { name }
101-}
102-```
103-
104-Just to make things less ambiguous. Also, to use variables, you need an operation name.
105-
106-#### Variables
107-
108-```js
109-{ id: '1000' }
110-```
111-
112-### Mutations
113-
114-#### Query
115-
116-```js
117-{ createReview($review) { id } }
118-```
119-
120-#### Variables
121-
122-```js
123-{ review: { stars: 5 } }
124-```
125-
126-#### ↓
127-
128-```js
129-{ createReview: { id: 5291 } }
130-```
131-
132-Mutations are just fields that do something when queried.
133-
134-### Multiple types
135-
136-```js
137-{
138- search(q: "john") {
139- id
140- ... on User { name }
141- ... on Comment { body author { name } }
142- }
143-}
144-```
145-
146-Great for searching.
147-
148-
149-Over HTTP
150----------
151-
152-#### GET
153-
154-```js
155-fetch('http://myapi/graphql?query={ me { name } }')
156-```
157-
158-#### POST
159-
160-```js
161-fetch('http://myapi/graphql', {
162- body: JSON.stringify({
163- query: '...',
164- operationName: '...',
165- variables: { ... }
166- })
167-})
168-```
169-
170-Schema
171-------
172-{: .-three-column}
173-
174-### Basic schemas
175-
176-```js
177-type Query {
178- me: User
179- users(limit: Int): [User]
180-}
181-
182-type User {
183- id: ID!
184- name: String
185-}
186-```
187-
188-See: [sogko/graphql-shorthand-notation-cheat-sheet](https://raw.githubusercontent.com/sogko/graphql-shorthand-notation-cheat-sheet/master/graphql-shorthand-notation-cheat-sheet.png)
189-
190-### Built in types
191-
192-#### Scalar types
193-
194-| `Int` | Integer |
195-| `Float` | Float |
196-| `String` | String |
197-| `Boolean` | Boolean |
198-| `ID` | ID |
199-
200-#### Type definitions
201-
202-| `scalar` | Scalar type |
203-| `type` | Object type |
204-| `interface` | Interface type |
205-| `union` | Union type |
206-| `enum` | Enumerable type |
207-| `input` | Input object type |
208-
209-#### Type modifiers
210-
211-| `String` | Nullable string |
212-| `String!` | Required string |
213-| `[String]` | List of strings |
214-| `[String]!` | Required list of strings |
215-| `[String!]!` | Required list of required strings |
216-
217-### Mutations
218-
219-```js
220-type Mutation {
221- users(params: ListUsersInput) [User]!
222-}
223-```
224-
225-### Interfaces
226-
227-```js
228-interface Entity {
229- id: ID!
230-}
231-
232-type User implements Entity {
233- id: ID!
234- name: String
235-}
236-```
237-
238-### Enums
239-
240-```js
241-enum DIRECTION {
242- LEFT
243- RIGHT
244-}
245-
246-type Root {
247- direction: DIRECTION!
248-}
249-```
250-{: data-line="1,2,3,4"}
251-
252-### Unions
253-
254-```js
255-type Artist { ··· }
256-type Album { ··· }
257-
258-union Result = Artist | Album
259-
260-type Query {
261- search(q: String) [Result]
262-}
263-```
264-{: data-line="4"}
265-
266-References
267-----------
268-
269-- <http://graphql.org/learn/queries/>
270-- <http://graphql.org/learn/serving-over-http/>
271-
272-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
273-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -56
......@@ -1,56 +0,0 @@
1----
2-title: Haml
3-category: Markup
4-layout: 2017/sheet
5-prism_languages: [haml]
6----
7-
8-### Doctype
9-
10-```haml
11-!!! 5
12-```
13-
14-### Tags
15-
16-```haml
17-%html
18- %head
19- %title
20- %body
21- %h1 Hello World
22- %br/
23-```
24-
25-### Classes and ID's
26-
27-```haml
28-%p.class-example
29-.no-tag-defaults-to-div
30-%div#butItCanBeIncluded
31-```
32-
33-### Inline Attributes
34-
35-Either hash syntax works
36-
37-```haml
38-%meta{ name: "viewport", content: "width=device-width, initial-scale=1.0" }
39-%input{ :type => "text", :required => true }
40-```
41-
42-### Ruby
43-
44-```haml
45--# This is a comment
46--# Anything starting with a hyphen signals to Haml that Ruby is coming
47-- @arr = [1, 2, 3]
48-- @str = "test"
49--# Equal signals output
50-= render partial: "shared/header"
51-= yield
52-= link_to page_url
53-```
54-
55-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
56-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -110
......@@ -1,110 +0,0 @@
1----
2-title: HTML
3-category: HTML
4-layout: 2017/sheet
5----
6-
7-### Head stuff
8-
9- <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
10- <link rel="shortcut icon" type="image/png" href="/favicon.png">
11- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
12-
13-### iPhone viewport
14-
15- <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0">
16- <meta name="viewport" content="width=device-width">
17- <meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/> <!-- full example -->
18-
19-### Default OpenGraph meta tags
20-
21- <meta content="..." name="description">
22- <meta content="..." property="og:description">
23- <meta content="http://.../preview.jpg" property="og:image">
24- <meta content="Hello There" property="og:title">
25- <meta content="Hello There" property="og:site_name">
26- <meta content="hellothere" property="fb:admins">
27- <meta content="website" property="og:type">
28-
29-### Webfonts
30-
31- <script>WebFontConfig={ },function(a,b){var c=a.createElement(b);c.src="//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js",c.async=1;var d=a.getElementsByTagName(b)[0];d.parentNode.insertBefore(c,d)}(document,"script")</script>
32-
33- // {typekit{id:"..."}}
34- // {google:{families:['Exo:400']}}
35-
36-### Google Analytics
37-
38- <script>location.hostname.match(/helloworld\.com/)&&(_gaq=[["_setAccount","UA-XXXXX-1"],["_trackPageview"]],function(a,b){var c=a.createElement(b),d=a.getElementsByTagName(b)[0];c.async=1,c.src=("https:"==location.protocol?"//ssl":"//www")+".google-analytics.com/ga.js",d.parentNode.insertBefore(c,d)}(document,"script"))</script>
39-
40-### FB/Twitter
41-
42- <div id="fb-root"></div><script>fbAsyncInit=function(){FB.init({"appId":"___APPIDGOESHERE___","status":true,"cookie":true,"xfbml":true})};!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=1;js.src='//connect.facebook.net/en_US/all.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','facebook-jssdk');</script>
43-
44- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.async=1;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
45-
46-### HTML5 Shiv for IE8
47-
48- <!--[if lte IE 8]><script src='//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.6.1/html5shiv.js'></script><![endif]-->
49-
50-### H5BP HTML tag (IE8 and IE9 only)
51-
52- <!--[if lte IE 8]><html class="ie8"><![endif]--><!--[if IE 9]><html class="ie9"><![endif]--><!--[if gt IE 9]><!-->
53- <html><!--<![endif]-->
54-
55-### Touch icons
56-
57- * apple-touch-icon-precomposed.png
58- * apple-touch-icon-57x57-precomposed.png
59- * apple-touch-icon-72x72-precomposed.png
60- * apple-touch-icon-114x114-precomposed.png
61- * apple-touch-icon-144x144-precomposed.png
62-
63-### Icons
64-
65- <link rel="shortcut icon" type="image/png" href="favicon.png">
66- <link href="apple-touch-icon-precomposed.png" rel="apple-touch-icon">
67- <link href="apple-touch-icon-57x57-precomposed.png" size="57x57" rel="apple-touch-icon">
68- <link href="apple-touch-icon-72x72-precomposed.png" size="72x72" rel="apple-touch-icon">
69- <link href="apple-touch-icon-114x114-precomposed.png" size="114x114" rel="apple-touch-icon">
70- <link href="apple-touch-icon-144x144-precomposed.png" size="144x144" rel="apple-touch-icon">
71-
72-Only do this if you're not placing the site in the root!
73-
74-### H5BP HTML tag
75-
76- <!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
77- <!--[if IE 7 ]> <html class="ie7"> <![endif]-->
78- <!--[if IE 8 ]> <html class="ie8"> <![endif]-->
79- <!--[if IE 9 ]> <html class="ie9"> <![endif]-->
80- <!--[if (gt IE 9)|!(IE)]><!--> <html class=""> <!--<![endif]-->
81-
82-### Google jQuery
83-
84- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
85-
86-### Unsupported message
87-
88- <!--[if lt IE 8]>
89- <div class="unsupported-browser">
90- <strong>
91- You are using an outdated browser.
92- </strong>
93- <span>
94- Please <a class="upgrade-browser"
95- href="http://browsehappy.com/">
96- upgrade your browser</a> or <a class="chrome-frame"
97- href="http://www.google.com/chromeframe/?redirect=true">activate Google
98- Chrome Frame</a> to improve your experience.
99- </span>
100- </div>
101- <![endif]-->
102-
103-### HTML Compatibility inspector
104-
105- <script src="http://ie.microsoft.com/testdrive/HTML5/CompatInspector/inspector.js"></script>
106-
107-More info here: [microsoft.com](http://ie.microsoft.com/testdrive/HTML5/CompatInspector/)
108-
109-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
110-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -582
......@@ -1,582 +0,0 @@
1----
2-title: ES2015+
3-category: JavaScript
4-layout: 2017/sheet
5-tags: [Featured]
6-updated: 2019-11-14
7-weight: -10
8-intro: |
9- A quick overview of new JavaScript features in ES2015, ES2016, ES2017, ES2018 and beyond.
10----
11-
12-### Block scoping
13-
14-#### Let
15-
16-```js
17-function fn () {
18- let x = 0
19- if (true) {
20- let x = 1 // only inside this `if`
21- }
22-}
23-```
24-{: data-line="2,4"}
25-
26-#### Const
27-
28-```js
29-const a = 1
30-```
31-
32-`let` is the new `var`. Constants work just like `let`, but can't be reassigned.
33-See: [Let and const](https://babeljs.io/learn-es2015/#let--const)
34-
35-### Backtick strings
36-
37-#### Interpolation
38-
39-```js
40-const message = `Hello ${name}`
41-```
42-
43-#### Multiline strings
44-
45-```js
46-const str = `
47-hello
48-world
49-`
50-```
51-
52-Templates and multiline strings.
53-See: [Template strings](https://babeljs.io/learn-es2015/#template-strings)
54-
55-### Binary and octal literals
56-
57-```js
58-let bin = 0b1010010
59-let oct = 0o755
60-```
61-
62-See: [Binary and octal literals](https://babeljs.io/learn-es2015/#binary-and-octal-literals)
63-
64-### New methods
65-
66-#### New string methods
67-
68-```js
69-"hello".repeat(3)
70-"hello".includes("ll")
71-"hello".startsWith("he")
72-"hello".padStart(8) // " hello"
73-"hello".padEnd(8) // "hello "
74-"hello".padEnd(8, '!') // hello!!!
75-"\u1E9B\u0323".normalize("NFC")
76-```
77-
78-See: [New methods](https://babeljs.io/learn-es2015/#math--number--string--object-apis)
79-
80-### Classes
81-
82-```js
83-class Circle extends Shape {
84-```
85-
86-#### Constructor
87-
88-```js
89- constructor (radius) {
90- this.radius = radius
91- }
92-```
93-{: data-line="1"}
94-
95-#### Methods
96-
97-```js
98- getArea () {
99- return Math.PI * 2 * this.radius
100- }
101-```
102-{: data-line="1"}
103-
104-#### Calling superclass methods
105-
106-```js
107- expand (n) {
108- return super.expand(n) * Math.PI
109- }
110-```
111-{: data-line="2"}
112-
113-#### Static methods
114-
115-```js
116- static createFromDiameter(diameter) {
117- return new Circle(diameter / 2)
118- }
119-}
120-```
121-{: data-line="1"}
122-
123-Syntactic sugar for prototypes.
124-See: [Classes](https://babeljs.io/learn-es2015/#classes)
125-
126-### Exponent operator
127-
128-```js
129-const byte = 2 ** 8
130-// Same as: Math.pow(2, 8)
131-```
132-{: data-line="1"}
133-
134-Promises
135---------
136-{: .-three-column}
137-
138-### Making promises
139-
140-```js
141-new Promise((resolve, reject) => {
142- if (ok) { resolve(result) }
143- else { reject(error) }
144-})
145-```
146-{: data-line="1"}
147-
148-For asynchronous programming.
149-See: [Promises](https://babeljs.io/learn-es2015/#promises)
150-
151-### Using promises
152-
153-```js
154-promise
155- .then((result) => { ··· })
156- .catch((error) => { ··· })
157-```
158-{: data-line="2,3"}
159-
160-
161-### Using promises with finally
162-
163-```js
164-promise
165- .then((result) => { ··· })
166- .catch((error) => { ··· })
167- .finally(() => { // logic independent of success/error })
168-```
169-{: data-line="4"}
170-
171-The handler is called when the promise is fulfilled or rejected.
172-
173-
174-### Promise functions
175-
176-```js
177-Promise.all(···)
178-Promise.race(···)
179-Promise.reject(···)
180-Promise.resolve(···)
181-```
182-
183-### Async-await
184-
185-```js
186-async function run () {
187- const user = await getUser()
188- const tweets = await getTweets(user)
189- return [user, tweets]
190-}
191-```
192-{: data-line="2,3"}
193-
194-`async` functions are another way of using functions.
195-
196-See: [async function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function)
197-
198-Destructuring
199--------------
200-{: .-three-column}
201-
202-### Destructuring assignment
203-
204-#### Arrays
205-
206-```js
207-const [first, last] = ['Nikola', 'Tesla']
208-```
209-{: data-line="1"}
210-
211-#### Objects
212-
213-```js
214-let {title, author} = {
215- title: 'The Silkworm',
216- author: 'R. Galbraith'
217-}
218-```
219-{: data-line="1"}
220-
221-Supports for matching arrays and objects.
222-See: [Destructuring](https://babeljs.io/learn-es2015/#destructuring)
223-
224-### Default values
225-
226-```js
227-const scores = [22, 33]
228-const [math = 50, sci = 50, arts = 50] = scores
229-```
230-
231-```js
232-// Result:
233-// math === 22, sci === 33, arts === 50
234-```
235-
236-Default values can be assigned while destructuring arrays or objects.
237-
238-### Function arguments
239-
240-```js
241-function greet({ name, greeting }) {
242- console.log(`${greeting}, ${name}!`)
243-}
244-```
245-{: data-line="1"}
246-
247-```js
248-greet({ name: 'Larry', greeting: 'Ahoy' })
249-```
250-
251-Destructuring of objects and arrays can also be done in function arguments.
252-
253-### Default values
254-
255-```js
256-function greet({ name = 'Rauno' } = {}) {
257- console.log(`Hi ${name}!`);
258-}
259-```
260-{: data-line="1"}
261-
262-```js
263-greet() // Hi Rauno!
264-greet({ name: 'Larry' }) // Hi Larry!
265-```
266-
267-### Reassigning keys
268-
269-```js
270-function printCoordinates({ left: x, top: y }) {
271- console.log(`x: ${x}, y: ${y}`)
272-}
273-```
274-{: data-line="1"}
275-
276-```js
277-printCoordinates({ left: 25, top: 90 })
278-```
279-
280-This example assigns `x` to the value of the `left` key.
281-
282-### Loops
283-
284-```js
285-for (let {title, artist} of songs) {
286- ···
287-}
288-```
289-{: data-line="1"}
290-
291-The assignment expressions work in loops, too.
292-
293-
294-### Object destructuring
295-
296-```js
297-const { id, ...detail } = song;
298-```
299-{: data-line="1"}
300-
301-Extract some keys individually and remaining keys in the object using rest (...) operator
302-
303-
304-Spread
305-------
306-
307-### Object spread
308-
309-#### with Object spread
310-
311-```js
312-const options = {
313- ...defaults,
314- visible: true
315-}
316-```
317-{: data-line="2"}
318-
319-#### without Object spread
320-
321-```js
322-const options = Object.assign(
323- {}, defaults,
324- { visible: true })
325-```
326-
327-The Object spread operator lets you build new objects from other objects.
328-
329-See: [Object spread](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
330-
331-### Array spread
332-
333-#### with Array spread
334-
335-```js
336-const users = [
337- ...admins,
338- ...editors,
339- 'rstacruz'
340-]
341-```
342-{: data-line="2,3"}
343-
344-#### without Array spread
345-
346-```js
347-const users = admins
348- .concat(editors)
349- .concat([ 'rstacruz' ])
350-```
351-
352-The spread operator lets you build new arrays in the same way.
353-
354-See: [Spread operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator)
355-
356-Functions
357----------
358-
359-### Function arguments
360-
361-#### Default arguments
362-
363-```js
364-function greet (name = 'Jerry') {
365- return `Hello ${name}`
366-}
367-```
368-{: data-line="1"}
369-
370-#### Rest arguments
371-
372-```js
373-function fn(x, ...y) {
374- // y is an Array
375- return x * y.length
376-}
377-```
378-{: data-line="1"}
379-
380-#### Spread
381-
382-```js
383-fn(...[1, 2, 3])
384-// same as fn(1, 2, 3)
385-```
386-{: data-line="1"}
387-
388-Default, rest, spread.
389-See: [Function arguments](https://babeljs.io/learn-es2015/#default--rest--spread)
390-
391-### Fat arrows
392-
393-#### Fat arrows
394-
395-```js
396-setTimeout(() => {
397- ···
398-})
399-```
400-{: data-line="1"}
401-
402-#### With arguments
403-
404-```js
405-readFile('text.txt', (err, data) => {
406- ...
407-})
408-```
409-{: data-line="1"}
410-
411-#### Implicit return
412-```js
413-numbers.map(n => n * 2)
414-// No curly braces = implicit return
415-// Same as: numbers.map(function (n) { return n * 2 })
416-numbers.map(n => ({
417- result: n * 2
418-}))
419-// Implicitly returning objects requires parentheses around the object
420-```
421-{: data-line="1,4,5,6"}
422-
423-Like functions but with `this` preserved.
424-See: [Fat arrows](https://babeljs.io/learn-es2015/#arrows-and-lexical-this)
425-
426-Objects
427--------
428-
429-### Shorthand syntax
430-
431-```js
432-module.exports = { hello, bye }
433-// Same as: module.exports = { hello: hello, bye: bye }
434-```
435-
436-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
437-
438-### Methods
439-
440-```js
441-const App = {
442- start () {
443- console.log('running')
444- }
445-}
446-// Same as: App = { start: function () {···} }
447-```
448-{: data-line="2"}
449-
450-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
451-
452-### Getters and setters
453-
454-```js
455-const App = {
456- get closed () {
457- return this.status === 'closed'
458- },
459- set closed (value) {
460- this.status = value ? 'closed' : 'open'
461- }
462-}
463-```
464-{: data-line="2,5"}
465-
466-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
467-
468-### Computed property names
469-
470-```js
471-let event = 'click'
472-let handlers = {
473- [`on${event}`]: true
474-}
475-// Same as: handlers = { 'onclick': true }
476-```
477-{: data-line="3"}
478-
479-See: [Object literal enhancements](https://babeljs.io/learn-es2015/#enhanced-object-literals)
480-
481-
482-### Extract values
483-
484-```js
485-const fatherJS = { age: 57, name: "Brendan Eich" }
486-
487-Object.values(fatherJS)
488-// [57, "Brendan Eich"]
489-Object.entries(fatherJS)
490-// [["age", 57], ["name", "Brendan Eich"]]
491-```
492-{: data-line="3,5"}
493-
494-
495-Modules
496--------
497-
498-### Imports
499-
500-```js
501-import 'helpers'
502-// aka: require('···')
503-```
504-
505-```js
506-import Express from 'express'
507-// aka: const Express = require('···').default || require('···')
508-```
509-
510-```js
511-import { indent } from 'helpers'
512-// aka: const indent = require('···').indent
513-```
514-
515-```js
516-import * as Helpers from 'helpers'
517-// aka: const Helpers = require('···')
518-```
519-
520-```js
521-import { indentSpaces as indent } from 'helpers'
522-// aka: const indent = require('···').indentSpaces
523-```
524-
525-`import` is the new `require()`.
526-See: [Module imports](https://babeljs.io/learn-es2015/#modules)
527-
528-### Exports
529-
530-```js
531-export default function () { ··· }
532-// aka: module.exports.default = ···
533-```
534-
535-```js
536-export function mymethod () { ··· }
537-// aka: module.exports.mymethod = ···
538-```
539-
540-```js
541-export const pi = 3.14159
542-// aka: module.exports.pi = ···
543-```
544-
545-`export` is the new `module.exports`.
546-See: [Module exports](https://babeljs.io/learn-es2015/#modules)
547-
548-Generators
549-----------
550-
551-### Generators
552-
553-```js
554-function* idMaker () {
555- let id = 0
556- while (true) { yield id++ }
557-}
558-```
559-
560-```js
561-let gen = idMaker()
562-gen.next().value // → 0
563-gen.next().value // → 1
564-gen.next().value // → 2
565-```
566-
567-It's complicated.
568-See: [Generators](https://babeljs.io/learn-es2015/#generators)
569-
570-### For..of iteration
571-
572-```js
573-for (let i of iterable) {
574- ···
575-}
576-```
577-
578-For iterating through generators and arrays.
579-See: [For..of iteration](https://babeljs.io/learn-es2015/#iterators--forof)
580-
581-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
582-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -104
......@@ -1,104 +0,0 @@
1----
2-title: Jinja
3-category: Python
4-layout: 2017/sheet
5----
6-
7-{% raw %}
8-### Basic usage
9-
10-```
11-- variable x has content: {{ x }}
12-- expression: {{ x + 1 }}
13-- escaped for HTML: {{ x | e }}
14-```
15-
16-### Control structures
17-
18-```
19-{% for x in range(5) %}
20- {% if x % 2 == 0 %}
21- {{ x }} is even!
22- {% else %}
23- {{ x }} is odd!
24- {% endif %}
25-{% endfor %}
26-```
27-
28-### Whitespace trimming
29-
30-```
31-these are
32-{{ "three" }}
33-lines.
34-
35-this is conc
36-{{- "at" -}}
37-enated.
38-```
39-
40-### Special blocks
41-
42-```
43-{% filter e %}{% endraw %}
44-{ {%- if 0 -%}{%- endif -%} % raw %}
45-{%- raw -%}
46- This is a raw block where {{nothing is evaluated}}
47- {% not even this %}
48- and <html is escaped> too with "e" filter
49-{% endraw %}
50-{ {%- if 0 -%}{%- endif -%} % endraw %}{% raw %}
51-{% endfilter %}
52-
53-{% macro myfunc(x) %}
54- this is a reusable macro, with arguments: {{x}}
55-{% endmacro %}
56-
57-{{ myfunc(42) }}
58-
59-{#
60-this is a comment
61-#}
62-```
63-
64-
65-### Inheritance
66-
67-#### shared.html
68-
69-```
70-<html>
71- <head>
72- <title>{%block title %}{% endblock %}</title>
73- </head>
74- <body>
75- <header><h1>{% block title %}{% endblock %}</h1></header>
76- <main>{% block content %}{% endblock %}</main>
77- </body>
78-</html>
79-```
80-
81-#### home.html
82-
83-```
84-{% extends "shared.html" %}
85-{% block title %}Welcome to my site{% endblock %}
86-{% block content %}
87-This is the body
88-{% endblock %}
89-```
90-
91-## Library
92-
93-### Basic usage
94-
95-```python
96-from jinja2 import Template
97-template = Template('Hello {{ name }}!')
98-template.render(name='John Doe') == u'Hello John Doe!'
99-```
100-
101-{% endraw %}
102-
103-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
104-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -8
......@@ -1,8 +0,0 @@
1----
2-title: jinja
3-category: python
4-redirect_to: /jinja
5----
6-
7-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
8-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -407
......@@ -1,407 +0,0 @@
1----
2-title: Kotlin
3-layout: 2017/sheet
4-updated: 2018-12-06
5-category: Java & JVM
6-prism_languages: [kotlin]
7-intro: |
8- [Kotlin](http://kotlinlang.org/) is a statically typed programming language for modern multiplatform applications.
9----
10-
11-Variables
12----------
13-{: .-three-column}
14-
15-### Mutability
16-
17-```kotlin
18-var mutableString: String = "Adam"
19-val immutableString: String = "Adam"
20-val inferredString = "Adam"
21-```
22-
23-### Strings
24-
25-```kotlin
26-val name = "Adam"
27-val greeting = "Hello, " + name
28-val greetingTemplate = "Hello, $name"
29-val interpolated = "Hello, ${name.toUpperCase()}"
30-```
31-
32-### Numbers
33-
34-```kotlin
35-val intNum = 10
36-val doubleNum = 10.0
37-val longNum = 10L
38-val floatNum = 10.0F
39-```
40-
41-### Booleans
42-
43-```kotlin
44-val trueBoolean = true
45-val falseBoolean = false
46-val andCondition = trueBoolean && falseBoolean
47-val orCondition = trueBoolean || falseBoolean
48-```
49-
50-### Static Fields
51-
52-```kotlin
53-class Person {
54- companion object {
55- val NAME_KEY = "name_key"
56- }
57-}
58-
59-val key = Person.NAME_KEY
60-```
61-
62-Null Safety
63------------
64-{: .-two-column}
65-
66-### Nullable properties
67-
68-```kotlin
69-val cannotBeNull: String = null // Invalid
70-val canBeNull: String? = null // Valid
71-
72-val cannotBeNull: Int = null // Invalid
73-val canBeNull: Int? = null // Valid
74-```
75-
76-### Checking for null
77-
78-```kotlin
79-val name: String? = "Adam"
80-
81-if (name != null && name.length > 0) {
82- print("String length is ${name.length}")
83-} else {
84- print("String is empty.")
85-}
86-```
87-
88-### Safe Operator
89-
90-```kotlin
91-val nullableStringLength: Int? = nullableString?.length
92-val nullableDepartmentHead: String? = person?.department?.head?.name
93-```
94-
95-### Elvis Operator
96-
97-```kotlin
98-val nonNullStringLength: Int = nullableString?.length ?: 0
99-val nonNullDepartmentHead: String = person?.department?.head?.name ?: ""
100-val nonNullDepartmentHead: String = person?.department?.head?.name.orEmpty()
101-```
102-
103-### Safe Casts
104-```kotlin
105-// Will not throw ClassCastException
106-val nullableCar: Car? = (input as? Car)
107-```
108-
109-Collections
110------------
111-{: .-two-column}
112-
113-### Creation
114-
115-```kotlin
116-val numArray = arrayOf(1, 2, 3)
117-val numList = listOf(1, 2, 3)
118-val mutableNumList = mutableListOf(1, 2, 3)
119-```
120-
121-### Accessing
122-
123-```kotlin
124-val firstItem = numList[0]
125-val firstItem = numList.first()
126-val firstItem = numList.firstOrNull()
127-```
128-
129-### Maps
130-
131-```kotlin
132-val faceCards = mutableMapOf("Jack" to 11, "Queen" to 12, "King" to 13)
133-val jackValue = faceCards["Jack"] // 11
134-faceCards["Ace"] = 1
135-```
136-
137-### Mutability
138-
139-```kotlin
140-val immutableList = listOf(1, 2, 3)
141-val mutableList = immutableList.toMutableList()
142-
143-val immutableMap = mapOf("Jack" to 11, "Queen" to 12, "King" to 13)
144-val mutableMap = immutableMap.toMutableMap()
145-```
146-
147-### Iterating
148-
149-```kotlin
150-for (item in myList) {
151- print(item)
152-}
153-
154-myList.forEach {
155- print(it)
156-}
157-
158-myList.forEachIndexed { index, item ->
159- print("Item at $index is: $item")
160-}
161-```
162-
163-### Filtering & Searching
164-
165-```kotlin
166-val evenNumbers = numList.filter { it % 2 == 0 }
167-val containsEven = numList.any { it % 2 == 0 }
168-val containsNoEvens = numList.none { it % 2 == 0 }
169-val containsNoEvens = numList.all { it % 2 == 1 }
170-val firstEvenNumber: Int = numList.first { it % 2 == 0 }
171-val firstEvenOrNull: Int? = numList.firstOrNull { it % 2 == 0 }
172-val fullMenu = objList.map { "${it.name} - $${it.detail}" }
173-```
174-
175-Note: `it` is the [implicit name for a single parameter](https://kotlinlang.org/docs/reference/lambdas.html#it-implicit-name-of-a-single-parameter).
176-
177-Functions
178----------
179-{: .-two-column}
180-
181-### Parameters & Return Types
182-
183-```kotlin
184-fun printName() {
185- print("Adam")
186-}
187-
188-fun printName(person: Person) {
189- print(person.name)
190-}
191-
192-fun getGreeting(person: Person): String {
193- return "Hello, ${person.name}"
194-}
195-
196-fun getGreeting(person: Person): String = "Hello, ${person.name}"
197-fun getGreeting(person: Person) = "Hello, ${person.name}"
198-```
199-
200-### Higher Order Functions
201-
202-```kotlin
203-fun callbackIfTrue(condition: Boolean, callback: () -> Unit) {
204- if (condition) {
205- callback()
206- }
207-}
208-
209-callbackIfTrue(someBoolean) {
210- print("Condition was true")
211-}
212-```
213-
214-### Extension Functions
215-
216-```kotlin
217-fun Int.timesTwo(): Int {
218- return this * 2
219-}
220-
221-val four = 2.timesTwo()
222-```
223-
224-### Default Parameters
225-
226-```kotlin
227-fun getGreeting(person: Person, intro: String = "Hello,") {
228- return "$intro ${person.name}"
229-}
230-
231-// Returns "Hello, Adam"
232-val hello = getGreeting(Person("Adam"))
233-
234-// Returns "Welcome, Adam"
235-val welcome = getGreeting(Person("Adam"), "Welcome,")
236-```
237-
238-### Named Parameters
239-
240-```kotlin
241-class Person(val name: String = "", age: Int = 0)
242-
243-// All valid
244-val person = Person()
245-val person = Person("Adam", 100)
246-val person = Person(name = "Adam", age = 100)
247-val person = Person(age = 100)
248-val person = Person(age = 100, name = "Adam")
249-```
250-
251-### Static Functions
252-
253-```kotlin
254-class Fragment(val args: Bundle) {
255- companion object {
256- fun newInstance(args: Bundle): Fragment {
257- return Fragment(args)
258- }
259- }
260-}
261-
262-val fragment = Fragment.newInstance(args)
263-```
264-
265-* [Companion Objects](https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects)
266-
267-Classes
268--------
269-{: .-two-column}
270-
271-### Primary Constructor
272-
273-```kotlin
274-class Person(val name: String, val age: Int)
275-val adam = Person("Adam", 100)
276-```
277-
278-### Secondary Constructors
279-
280-```kotlin
281-class Person(val name: String) {
282- private var age: Int? = null
283-
284- constructor(name: String, age: Int) : this(name) {
285- this.age = age
286- }
287-}
288-
289-// Above can be replaced with default params
290-class Person(val name: String, val age: Int? = null)
291-```
292-
293-### Inheritance & Implementation
294-
295-```kotlin
296-open class Vehicle
297-class Car : Vehicle()
298-
299-interface Runner {
300- fun run()
301-}
302-
303-class Machine : Runner {
304- override fun run() {
305- // ...
306- }
307-}
308-```
309-
310-Control Flow
311-------------
312-{: .-two-column}
313-
314-### If Statements
315-
316-```kotlin
317-if (someBoolean) {
318- doThing()
319-} else {
320- doOtherThing()
321-}
322-```
323-
324-### For Loops
325-
326-```kotlin
327-for (i in 0..10) { } // 1 - 10
328-for (i in 0 until 10) // 1 - 9
329-(0..10).forEach { }
330-for (i in 0 until 10 step 2) // 0, 2, 4, 6, 8
331-```
332-
333-### When Statements
334-
335-```kotlin
336-when (direction) {
337- NORTH -> {
338- print("North")
339- }
340- SOUTH -> print("South")
341- EAST, WEST -> print("East or West")
342- "N/A" -> print("Unavailable")
343- else -> print("Invalid Direction")
344-}
345-```
346-
347-### While Loops
348-
349-```kotlin
350-while (x > 0) {
351- x--
352-}
353-
354-do {
355- x--
356-} while (x > 0)
357-```
358-
359-Destructuring Declarations
360---------------------------
361-{: .-two-column}
362-
363-### Objects & Lists
364-
365-```kotlin
366-val person = Person("Adam", 100)
367-val (name, age) = person
368-
369-val pair = Pair(1, 2)
370-val (first, second) = pair
371-
372-val coordinates = arrayOf(1, 2, 3)
373-val (x, y, z) = coordinates
374-```
375-
376-### ComponentN Functions
377-
378-```kotlin
379-class Person(val name: String, val age: Int) {
380- operator fun component1(): String {
381- return name
382- }
383-
384- operator fun component2(): Int {
385- return age
386- }
387-}
388-```
389-
390-References
391-----------
392-{: .-one-column}
393-
394-* [Defining Variables](https://kotlinlang.org/docs/reference/basic-syntax.html#defining-variables) _(kotlinlang.org)_
395-* [Strings Documentation](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html) _(kotlinlang.org)_
396-* [String Templates](https://kotlinlang.org/docs/reference/basic-types.html#string-templates) _(kotlinlang.org)_
397-* [Basic Types](https://kotlinlang.org/docs/reference/basic-types.html) _(kotlinlang.org)_
398-* [Companion Objects](https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects) _(kotlinlang.org)_
399-* [Null Safety](https://kotlinlang.org/docs/reference/null-safety.html) _(kotlinlang.org)_
400-* [Collections Overview](https://kotlinlang.org/docs/reference/collections.html) _(kotlinlang.org)_
401-* [Collections Documentation](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/index.html) _(kotlinlang.org)_
402-* [Functions Documentation](https://kotlinlang.org/docs/reference/functions.html) _(kotlinlang.org)_
403-* [Classes Documentation](https://kotlinlang.org/docs/reference/classes.html) _(kotlinlang.org)_
404-* [Destructuring Declarations](https://kotlinlang.org/docs/reference/multi-declarations.html) _(kotlinlang.org)_
405-
406-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
407-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -308
......@@ -1,308 +0,0 @@
1----
2-title: Ledger CLI
3-category: Ledger
4-layout: 2017/sheet
5-updated: 2020-05-23
6-weight: -5
7----
8-
9-### Basic usage
10-
11-```bash
12-$ ledger bal
13-$ ledger reg
14-```
15-
16-```bash
17-$ ledger reg grocery # show entries for 'grocery'
18-$ ledger bal assets # check if i'm broke
19-```
20-
21-```bash
22- -b 01/01 # --begin
23- -e 01/31 # --end
24- -S date # --sort
25- -S amount
26-```
27-
28-### Examples
29-
30-```bash
31-# any/all matches
32- ledger bal Rent Transportation # any
33- ledger bal Income and Job # all
34- ledger bal Expenses and not (Drinks or Food)
35-```
36-
37-```bash
38-# what did I spend on most? (--sorted)
39- ledger reg Expenses -S amount
40-```
41-
42-```bash
43-# how much did I have at this date? (--end)
44- ledger bal -e 01/15 ^Assets ^Liabilities
45-```
46-
47-```bash
48-# how much did I spend and earn this month?
49- ledger bal ^Expenses ^Income --invert
50-```
51-
52-```bash
53-# how much was spent over the course of 3 days? (totalled)
54- ledger reg -b 01/25 -e 01/27 --subtotal
55- ledger reg -b 01/25 -e 01/27 --subtotal grocery
56-```
57-
58-Format
59-------
60-
61-### Basic format
62-
63-```
64-2013/01/03 * Rent for January
65- Expenses:Rent $600.00
66- Assets:Savings
67-```
68-
69-`*` = cleared, `!` = pending
70-
71-### Secondary dates
72-
73-```
74-2008/01/01=2008/01/14 Client invoice
75-```
76-
77-It can mean anything you want, eg, for the estimated date you'll be paid.
78-
79-### Balance assertions
80-
81-```
82-2008/01/01 * KFC
83- Expenses:Food $20
84- Assets:Cash $-20 = $500
85-```
86-{: data-line="3"}
87-
88-`Cash $X = $500` ensures Cash is at $500 after the transaction.
89-
90-### Balance assignment
91-
92-```bash
93-2008/01/01 * Cash balance
94- Assets:Cash = $500
95- Equity:Adjustments
96-
97-2008/01/01 * KFC
98- Expenses:Food $20
99- Assets:Cash = $500
100-```
101-{: data-line="2,7"}
102-
103-`ACCOUNT = $500` figures out what's needed to make it $500.
104-
105-### Payables
106-
107-```bash
108-2008/04/25 * Rent
109- (Assets:Checking) -$200
110- Expenses:Rent
111-```
112-{: data-line="2"}
113-
114-### Commodities
115-
116-```bash
117-; cost per item
118-2010/05/31 * Market
119- Assets:Fridge 35 apples @ $0.42
120- Assets:Cash
121-```
122-{: data-line="3"}
123-
124-```bash
125-; total cost
126-2010/05/31 * Market
127- Assets:Fridge 35 apples @@ $14.70
128- Assets:Cash
129-```
130-{: data-line="3"}
131-
132-```bash
133-; fixed lot prices
134-2010/05/31 * Gas
135- Expenses:Gasoline 11 GAL {=$2.299}
136- Assets:Cash
137-```
138-{: data-line="3"}
139-
140-### Commodity definitions
141-
142-```
143-commodity $
144- note American Dollars
145- format $1,000.00
146- nomarket
147- default
148-```
149-
150-### Budgeting
151-
152-```
153-~ Monthly
154- Expenses:Rent $500
155- Expenses:Food $100
156- Expenses $40 ; everything else
157- Assets
158-
159-~ Yearly
160-```
161-
162-```bash
163-ledger bal --budget Expenses
164-ledger bal --unbudgeted Expenses
165-```
166-{: .-setup}
167-
168-### Comments
169-
170- ; line comment
171- # also line comment
172- % also line comment
173- | also line comment
174- * also line comment
175-
176-Querying
177---------
178-
179-### Periods
180-
181-```
182-[interval] [begin] [end]
183-```
184-
185-```
186-interval:
187- every day|week|month|quarter|year
188- every N days|weeks|...
189- daily|weekly|...
190-```
191-
192-```
193-begin:
194- from <spec>
195-end:
196- to <spec>
197-```
198-
199-```
200-spec:
201- 2004
202- 2004/10/1
203-```
204-
205-```bash
206-$ ledger bal|reg --period "until aug"
207-$ ledger bal|reg --period "last oct"
208-$ ledger bal|reg --period "every week"
209-```
210-{: .-setup}
211-
212-### Register
213-
214-```bash
215-$ ledger reg
216-```
217-{: .-setup}
218-
219-```bash
220- -D, --daily
221- -W, --weekly
222- -M, --monthly
223- --quarterly
224- -Y, --yearly
225- -s, --subtotal
226- --start-of-week monday
227-```
228-
229-```bash
230- -S, --sort date
231- -S, --sort amount
232-```
233-
234-### Filters
235-
236-```bash
237--b, --begin DATE
238--e, --end DATE
239-
240--d payee =~ /pioneer/
241-
242--C, --cleared # (with *)
243--U, --uncleared # (no *)
244- --pending # (with !)
245-
246--R, --real # ignore virtual postings (eg: "(Cash) $-400")
247--L, --actual # no automated postings (eg: "= /^Income/")
248-
249--r, --related # show the other side
250- # "reg -r savings" shows where it comes from)
251-```
252-
253-### Queries
254-
255- ^regex$
256- @payee
257- %tag
258- %tag=value
259- =note
260- #code
261- term and term
262- term or term
263- not term
264- \( term \)
265-
266-Example:
267-
268- ledger r ^expenses and @Denny's
269- ledger r food and @Starbucks and not dining
270-
271-### Display
272-
273-```bash
274--n, --collapse # [register] collapse entries
275- # [balance] no grand total
276--s, --subtotal # [balance] show sub-accounts
277- # [other] show subtotals
278---flat
279-```
280-
281-### Effective dates
282-
283-```bash
284-2008/01/01=2008/01/14 Client invoice ; estimated date you'll be paid
285- Assets:Accounts Receivable $100.00
286- Income: Client name
287-```
288-{: data-line="1"}
289-
290-Say you're in business. If you bill a customer, you can enter something like above.
291-Then, when you receive the payment, you change it to:
292-
293-```bash
294-2008/01/01=2008/01/15 Client invoice ; actual date money received
295- Assets:Accounts Receivable $100.00
296- Income: Client name
297-```
298-{: data-line="1"}
299-
300-## References
301-{: .-one-column}
302-
303-* <http://ledger-cli.org/3.0/doc/ledger3.html>
304-* <https://gist.github.com/agaviria/3317397>
305-{: .-also-see}
306-
307-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
308-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -45
......@@ -1,45 +0,0 @@
1----
2-title: Less.js
3----
4-
5-### Functions
6-
7- unit(30px / 5px) #=> 6
8- unit(5, px) #=> 5px
9-
10- e("ms:stuff()") #=> ms:stuff() (unquote)
11-
12- %("count: %d", 1+2) #=> "count: 3"
13-
14- iscolor(@x)
15- isstring(@x)
16- isnumber(@x)
17- iskeyword(@x)
18- isurl(url(...))
19- ispixel()
20- isem()
21- ispercentage()
22- isunit()
23-
24- hue(@color)
25- saturation(@color)
26- lightness(@color)
27- luma(@color)
28- luminance(@color)
29-
30- fade(@color, amount)
31- fadein(@color, amount)
32- fadeout(@color, amount)
33- spin(@color, degrees)
34- mix(@a, @b, amount)
35-
36-### Conditionals
37-
38- .image when (luma(@color) > 50%) { }
39- .image when (not(...)) { }
40- .image when (default()) {}
41- .image when (e(@shape) = 'circle') { }
42-
43-
44-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
45-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -303
......@@ -1,303 +0,0 @@
1----
2-title: Lua
3----
4-
5-## Comments
6-
7- -- comment
8- --[[ Multiline
9- comment ]]
10-
11-## Invoking functions
12-
13- print()
14- print("Hi")
15-
16- -- You can omit parentheses if the argument is one string or table literal
17- print "Hello World" <--> print("Hello World")
18- dofile 'a.lua' <--> dofile ('a.lua')
19- print [[a multi-line <--> print([[a multi-line
20- message]] message]])
21- f{x=10, y=20} <--> f({x=10, y=20})
22- type{} <--> type({})
23-
24-## Tables / arrays
25-
26- t = {}
27- t = { a = 1, b = 2 }
28- t.a = function() ... end
29-
30- t = { ["hello"] = 200 }
31- t.hello
32-
33- -- Remember, arrays are also tables
34- array = { "a", "b", "c", "d" }
35- print(array[2]) -- "b" (one-indexed)
36- print(#array) -- 4 (length)
37-
38-## Loops
39-
40- while condition do
41- end
42-
43- for i = 1,5 do
44- end
45-
46- for i = start,finish,delta do
47- end
48-
49- for k,v in pairs(tab) do
50- end
51-
52- repeat
53- until condition
54-
55- -- Breaking out:
56- while x do
57- if condition then break end
58- end
59-
60-## Conditionals
61-
62- if condition then
63- print("yes")
64- elseif condition then
65- print("maybe")
66- else
67- print("no")
68- end
69-
70-## Variables
71-
72- local x = 2
73- two, four = 2, 4
74-
75-## Functions
76-
77- function myFunction()
78- return 1
79- end
80-
81- function myFunctionWithArgs(a, b)
82- -- ...
83- end
84-
85- myFunction()
86-
87- anonymousFunctions(function()
88- -- ...
89- end)
90-
91- -- Not exported in the module
92- local function myPrivateFunction()
93- end
94-
95- -- Splats
96- function doAction(action, ...)
97- print("Doing '"..action.."' to", ...)
98- --> print("Doing 'write' to", "Shirley", "Abed")
99- end
100-
101- doAction('write', "Shirley", "Abed")
102-
103-## Lookups
104-
105- mytable = { x = 2, y = function() .. end }
106-
107- -- The same:
108- mytable.x
109- mytable['x']
110-
111- -- Syntactic sugar, these are equivalent:
112- mytable.y(mytable)
113- mytable:y()
114-
115- mytable.y(mytable, a, b)
116- mytable:y(a, b)
117-
118- function X:y(z) .. end
119- function X.y(self, z) .. end
120-
121-## Metatables
122-
123-
124- mt = {}
125-
126- -- A metatable is simply a table with functions in it.
127- mt.__tostring = function() return "lol" end
128- mt.__add = function(b) ... end -- a + b
129- mt.__mul = function(b) ... end -- a * b
130- mt.__index = function(k) ... end -- Lookups (a[k] or a.k)
131- mt.__newindex = function(k, v) ... end -- Setters (a[k] = v)
132-
133- -- Metatables allow you to override behavior of another table.
134- mytable = {}
135- setmetatable(mytable, mt)
136-
137- print(myobject)
138-
139-## Classes
140-
141- Account = {}
142-
143- function Account:new(balance)
144- local t = setmetatable({}, { __index = Account })
145-
146- -- Your constructor stuff
147- t.balance = (balance or 0)
148- return t
149- end
150-
151- function Account:withdraw(amount)
152- print("Withdrawing "..amount.."...")
153- self.balance = self.balance - amount
154- self:report()
155- end
156-
157- function Account:report()
158- print("Your current balance is: "..self.balance)
159- end
160-
161- a = Account:new(9000)
162- a:withdraw(200) -- method call
163-
164-## Constants
165-
166- nil
167- false
168- true
169-
170-## Operators (and their metatable names)
171-
172- -- Relational (binary)
173- -- __eq __lt __gt __le __ge
174- == < > <= >=
175- ~= -- Not equal, just like !=
176-
177- -- Arithmetic (binary)
178- -- __add __sub __muv __div __mod __pow
179- + - * / % ^
180-
181- -- Arithmetic (unary)
182- -- __unm (unary minus)
183- -
184-
185- -- Logic (and/or)
186- nil and false --> nil
187- false and nil --> false
188- 0 and 20 --> 20
189- 10 and 20 --> 20
190-
191-
192- -- Length
193- -- __len(array)
194- #array
195-
196-
197- -- Indexing
198- -- __index(table, key)
199- t[key]
200- t.key
201-
202- -- __newindex(table, key, value)
203- t[key]=value
204-
205- -- String concat
206- -- __concat(left, right)
207- "hello, "..name
208-
209- -- Call
210- -- __call(func, ...)
211-
212-
213-## API: Global functions [(ref)](http://lua.gts-stolberg.de/en/Basis.php)
214-
215- dofile("hello.lua")
216- loadfile("hello.lua")
217-
218- assert(x) -- x or (raise an error)
219- assert(x, "failed")
220-
221- type(var) -- "nil" | "number" | "string" | "boolean" | "table" | "function" | "thread" | "userdata"
222-
223- -- Does /not/ invoke meta methods (__index and __newindex)
224- rawset(t, index, value) -- Like t[index] = value
225- rawget(t, index) -- Like t[index]
226-
227- _G -- Global context
228- setfenv(1, {}) -- 1: current function, 2: caller, and so on -- {}: the new _G
229-
230- pairs(t) -- iterable list of {key, value}
231- ipairs(t) -- iterable list of {index, value}
232-
233- tonumber("34")
234- tonumber("8f", 16)
235-
236-## API: Strings
237-
238- 'string'..'concatenation'
239-
240- s = "Hello"
241- s:upper()
242- s:lower()
243- s:len() -- Just like #s
244-
245- s:find()
246- s:gfind()
247-
248- s:match()
249- s:gmatch()
250-
251- s:sub()
252- s:gsub()
253-
254- s:rep()
255- s:char()
256- s:dump()
257- s:reverse()
258- s:byte()
259- s:format()
260-
261-## API: Tables
262-
263- table.foreach(t, function(row) ... end)
264- table.setn
265- table.insert(t, 21) -- append (--> t[#t+1] = 21)
266- table.insert(t, 4, 99)
267- table.getn
268- table.concat
269- table.sort
270- table.remove(t, 4)
271-
272-## API: Math [(ref)](http://lua-users.org/wiki/MathLibraryTutorial)
273-
274- math.abs math.acos math.asin math.atan math.atan2
275- math.ceil math.cos math.cosh math.deg math.exp
276- math.floor math.fmod math.frexp math.ldexp math.log
277- math.log10 math.max math.min math.modf math.pow
278- math.rad math.random math.randomseed math.sin math.sinh
279- math.sqrt math.tan math.tanh
280-
281- math.sqrt(144)
282- math
283-
284-## API: Misc
285-
286- io.output(io.open("file.txt", "w"))
287- io.write(x)
288- io.close()
289-
290- for line in io.lines("file.txt")
291-
292- file = assert(io.open("file.txt", "r"))
293- file:read()
294- file:lines()
295- file:close()
296-
297-## Reference
298-
299- https://www.lua.org/pil/13.html
300- http://lua-users.org/wiki/ObjectOrientedProgramming
301-
302-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
303-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -132
......@@ -1,132 +0,0 @@
1----
2-title: Makefile
3-prism_languages: [makefile]
4-layout: 2017/sheet
5-category: CLI
6----
7-
8-## Var assignment
9-
10-```makefile
11-foo = "bar"
12-bar = $(foo) foo # dynamic (renewing) assignment
13-foo := "boo" # one time assignment, $(bar) now is "boo foo"
14-foo ?= /usr/local # safe assignment, $(foo) and $(bar) still the same
15-bar += world # append, "boo foo world"
16-foo != echo fooo # exec shell command and assign to foo
17-# $(bar) now is "fooo foo world"
18-```
19-
20-`=` expressions are only evaluated when they're being used.
21-
22-## Magic variables
23-
24-```makefile
25-out.o: src.c src.h
26- $@ # "out.o" (target)
27- $< # "src.c" (first prerequisite)
28- $^ # "src.c src.h" (all prerequisites)
29-
30-%.o: %.c
31- $* # the 'stem' with which an implicit rule matches ("foo" in "foo.c")
32-
33-also:
34- $+ # prerequisites (all, with duplication)
35- $? # prerequisites (new ones)
36- $| # prerequisites (order-only?)
37-
38- $(@D) # target directory
39-```
40-
41-## Command prefixes
42-
43-| Prefix | Description |
44-| ------ | ------------------------------------------- |
45-| `-` | Ignore errors |
46-| `@` | Don't print command |
47-| `+` | Run even if Make is in 'don't execute' mode |
48-
49-```makefile
50-build:
51- @echo "compiling"
52- -gcc $< $@
53-
54--include .depend
55-```
56-
57-## Find files
58-
59-```makefile
60-js_files := $(wildcard test/*.js)
61-all_files := $(shell find images -name "*")
62-```
63-
64-## Substitutions
65-
66-```makefile
67-file = $(SOURCE:.cpp=.o) # foo.cpp => foo.o
68-outputs = $(files:src/%.coffee=lib/%.js)
69-
70-outputs = $(patsubst %.c, %.o, $(wildcard *.c))
71-assets = $(patsubst images/%, assets/%, $(wildcard images/*))
72-```
73-
74-## More functions
75-
76-```makefile
77-$(strip $(string_var))
78-
79-$(filter %.less, $(files))
80-$(filter-out %.less, $(files))
81-```
82-
83-## Building files
84-
85-```makefile
86-%.o: %.c
87- ffmpeg -i $< > $@ # Input and output
88- foo $^
89-```
90-
91-## Includes
92-
93-```makefile
94--include foo.make
95-```
96-
97-## Options
98-
99-```sh
100-make
101- -e, --environment-overrides
102- -B, --always-make
103- -s, --silent
104- -j, --jobs=N # parallel processing
105-```
106-
107-## Conditionals
108-
109-```makefile
110-foo: $(objects)
111-ifeq ($(CC),gcc)
112- $(CC) -o foo $(objects) $(libs_for_gcc)
113-else
114- $(CC) -o foo $(objects) $(normal_libs)
115-endif
116-```
117-
118-## Recursive
119-
120-```makefile
121-deploy:
122- $(MAKE) deploy2
123-```
124-
125-## Further reading
126-
127-- [isaacs's Makefile](https://gist.github.com/isaacs/62a2d1825d04437c6f08)
128-- [Your Makefiles are wrong](https://tech.davis-hansson.com/p/make/)
129-- [Manual](https://www.gnu.org/software/make/manual/html_node/index.html)
130-
131-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
132-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -21
......@@ -1,21 +0,0 @@
1----
2-title: Man
3-category: CLI
4-layout: 2017/sheet
5----
6-
7-### Man paths
8-
9-| `1` | General User Commands |
10-| `2` | System Calls |
11-| `3` | Library Routines |
12-| `4` | Special Files and Sockets |
13-| `5` | File formats and Conventions |
14-| `6` | Games and Fun Stuff |
15-| `7` | Miscellaneous Documentation |
16-| `8` | System Administration |
17-| `9` | Kernel and Programming Style |
18-| `n` | Tcl/Tk |
19-
20-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
21-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -167
......@@ -1,167 +0,0 @@
1----
2-title: Markdown
3-category: Markup
4-layout: 2017/sheet
5-prism_languages: [markdown]
6-updated: 2020-07-01
7-weight: -1
8----
9-
10-## Reference
11-{:.-three-column}
12-
13-### Headers
14-
15-```markdown
16-# h1
17-## h2
18-### h3
19-#### h4
20-##### h5
21-###### h6
22-```
23-
24-```markdown
25-Header 1
26-========
27-```
28-
29-```markdown
30-Header 2
31---------
32-```
33-
34-### Emphasis
35-
36-```markdown
37-*italic*
38-_italic_
39-```
40-
41-```markdown
42-**bold**
43-__bold__
44-```
45-
46-```markdown
47-***bold italic***
48-___bold italic___
49-```
50-
51-```markdown
52-~~strikethrough~~
53-```
54-
55-```markdown
56-`code`
57-```
58-
59-### Lists
60-
61-```markdown
62-* Item 1
63-* Item 2
64-```
65-
66-```markdown
67-- Item 1
68-- Item 2
69-```
70-
71-```markdown
72-- [ ] Checkbox off
73-- [x] Checkbox on
74-```
75-
76-```markdown
77-1. Item 1
78-2. Item 2
79-```
80-
81-### Links
82-
83-```markdown
84-[link](http://google.com)
85-```
86-
87-```markdown
88-[link][google]
89-[google]: http://google.com
90-```
91-
92-```markdown
93-<http://google.com>
94-```
95-
96-### Images
97-
98-```markdown
99-![Image alt text](/path/to/img.jpg)
100-![Image alt text](/path/to/img.jpg "title")
101-![Image alt text][img]
102-```
103-
104-```markdown
105-[img]: http://foo.com/img.jpg
106-```
107-
108-### Code
109-
110-```markdown
111-`inline code`
112-```
113-
114-```
115- 4 space indent
116- makes a code block
117-```
118-
119-~~~markdown
120-```
121-code fences
122-```
123-~~~
124-
125-
126-~~~markdown
127-```js
128-codeFences.withLanguage()
129-```
130-~~~
131-
132-### Blockquotes
133-
134-```markdown
135-> This is
136-> a blockquote
137->
138-> > Nested
139-> > Blockquote
140-```
141-
142-### Horizontal line
143-
144-```markdown
145-----
146-```
147-
148-```markdown
149-****
150-```
151-
152-### Tables
153-
154-```markdown
155-| Column 1 Heading | Column 2 Heading |
156-| ---------------- | ---------------- |
157-| Some content | Other content |
158-```
159-
160-```markdown
161-Column 1 Heading | Column 2 Heading
162---- | ---
163-Some content | Other content
164-```
165-
166-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
167-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -271
......@@ -1,271 +0,0 @@
1----
2-title: MySQL
3-updated: 2020-07-05
4-layout: 2017/sheet
5-category: Databases
6----
7-
8-### Browsing
9-
10-```sql
11-SHOW DATABASES;
12-SHOW TABLES;
13-SHOW FIELDS FROM table / DESCRIBE table;
14-SHOW CREATE TABLE table;
15-SHOW PROCESSLIST;
16-KILL process_number;
17-```
18-
19-### Select
20-
21-```sql
22-SELECT * FROM table;
23-SELECT * FROM table1, table2;
24-SELECT field1, field2 FROM table1, table2;
25-SELECT ... FROM ... WHERE condition
26-SELECT ... FROM ... WHERE condition GROUP BY field;
27-SELECT ... FROM ... WHERE condition GROUP BY field HAVING condition2;
28-SELECT ... FROM ... WHERE condition ORDER BY field1, field2;
29-SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC;
30-SELECT ... FROM ... WHERE condition LIMIT 10;
31-SELECT DISTINCT field1 FROM ...
32-SELECT DISTINCT field1, field2 FROM ...
33-```
34-
35-### Select - Join
36-
37-```sql
38-SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition;
39-SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition;
40-SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ...
41-```
42-
43-### Conditions
44-
45-```sql
46-field1 = value1
47-field1 <> value1
48-field1 LIKE 'value _ %'
49-field1 IS NULL
50-field1 IS NOT NULL
51-field1 IS IN (value1, value2)
52-field1 IS NOT IN (value1, value2)
53-condition1 AND condition2
54-condition1 OR condition2
55-```
56-
57-### Create / Open / Delete Database
58-
59-```sql
60-CREATE DATABASE DatabaseName;
61-CREATE DATABASE DatabaseName CHARACTER SET utf8;
62-USE DatabaseName;
63-DROP DATABASE DatabaseName;
64-ALTER DATABASE DatabaseName CHARACTER SET utf8;
65-```
66-
67-### Backup Database to SQL File
68-
69-```bash
70-mysqldump -u Username -p dbNameYouWant > databasename_backup.sql
71-```
72-
73-### Restore from backup SQL File
74-
75-```bash
76-mysql -u Username -p dbNameYouWant < databasename_backup.sql;
77-```
78-
79-### Repair Tables After Unclean Shutdown
80-
81-```bash
82-mysqlcheck --all-databases;
83-mysqlcheck --all-databases --fast;
84-```
85-
86-### Insert
87-
88-```sql
89-INSERT INTO table1 (field1, field2) VALUES (value1, value2);
90-```
91-
92-### Delete
93-
94-```sql
95-DELETE FROM table1 / TRUNCATE table1
96-DELETE FROM table1 WHERE condition
97-DELETE FROM table1, table2 WHERE table1.id1 =
98- table2.id2 AND condition
99-```
100-
101-### Update
102-
103-```sql
104-UPDATE table1 SET field1=new_value1 WHERE condition;
105-UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE
106- table1.id1 = table2.id2 AND condition;
107-```
108-
109-### Create / Delete / Modify Table
110-
111-#### Create
112-
113-```sql
114-CREATE TABLE table (field1 type1, field2 type2);
115-CREATE TABLE table (field1 type1, field2 type2, INDEX (field));
116-CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1));
117-CREATE TABLE table (field1 type1, field2 type2, PRIMARY KEY (field1,field2));
118-```
119-
120-```sql
121-CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
122- FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA))
123- [ON UPDATE|ON DELETE] [CASCADE|SET NULL]
124-```
125-
126-```sql
127-CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
128- FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
129-```
130-
131-```sql
132-CREATE TABLE table IF NOT EXISTS;
133-```
134-
135-```sql
136-CREATE TEMPORARY TABLE table;
137-```
138-
139-#### Drop
140-
141-```sql
142-DROP TABLE table;
143-DROP TABLE IF EXISTS table;
144-DROP TABLE table1, table2, ...
145-```
146-
147-#### Alter
148-
149-```sql
150-ALTER TABLE table MODIFY field1 type1
151-ALTER TABLE table MODIFY field1 type1 NOT NULL ...
152-ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1
153-ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ...
154-ALTER TABLE table ALTER field1 SET DEFAULT ...
155-ALTER TABLE table ALTER field1 DROP DEFAULT
156-ALTER TABLE table ADD new_name_field1 type1
157-ALTER TABLE table ADD new_name_field1 type1 FIRST
158-ALTER TABLE table ADD new_name_field1 type1 AFTER another_field
159-ALTER TABLE table DROP field1
160-ALTER TABLE table ADD INDEX (field);
161-```
162-
163-#### Change field order
164-
165-```sql
166-ALTER TABLE table MODIFY field1 type1 FIRST
167-ALTER TABLE table MODIFY field1 type1 AFTER another_field
168-ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST
169-ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER
170- another_field
171-```
172-
173-### Keys
174-
175-```sql
176-CREATE TABLE table (..., PRIMARY KEY (field1, field2))
177-CREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2
178-(t2_field1, t2_field2))
179-```
180-
181-### Users and Privileges
182-
183-```sql
184-CREATE USER 'user'@'localhost';
185-GRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
186-GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password';
187-REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only
188-REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
189-FLUSH PRIVILEGES;
190-```
191-
192-```sql
193-SET PASSWORD = PASSWORD('new_pass');
194-SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass');
195-SET PASSWORD = OLD_PASSWORD('new_pass');
196-```
197-
198-```sql
199-DROP USER 'user'@'host';
200-```
201-
202-Host ‘%’ indicates any host.
203-
204-### Main Data Types
205-
206-```sql
207-TINYINT (1o: -128 to +127)
208-SMALLINT (2o: +-65 000)
209-MEDIUMINT (3o: +-16 000 000)
210-INT (4o: +- 2 000 000 000)
211-BIGINT (8o: +-9.10^18)
212-```
213-
214-```sql
215-Precise interval: -(2^(8*N-1)) -> (2^8*N)-1
216-```
217-
218-⚠ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max"
219-
220-```sql
221-FLOAT(M,D)
222-DOUBLE(M,D)
223-FLOAT(D=0->53)
224-```
225-
226-⚠ 8,3 -> 12345,678 -- NOT 12345678,123!
227-
228-```sql
229-TIME (HH:MM)
230-YEAR (AAAA)
231-DATE (AAAA-MM-JJ)
232-DATETIME (AAAA-MM-JJ HH:MM; années 1000->9999)
233-TIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)
234-```
235-
236-```sql
237-VARCHAR (single-line; explicit size)
238-TEXT (multi-lines; max size=65535)
239-BLOB (binary; max size=65535)
240-```
241-
242-Variants for TEXT&BLOB: `TINY` (max=255), `MEDIUM` (max=~16000), and `LONG` (max=4Go). Ex: `VARCHAR(32)`, `TINYTEXT`, `LONGBLOB`, `MEDIUMTEXT`
243-
244-```sql
245-ENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL)
246-```
247-
248-### Reset Root Password
249-
250-```bash
251-$ /etc/init.d/mysql stop
252-```
253-
254-```bash
255-$ mysqld_safe --skip-grant-tables
256-```
257-
258-```bash
259-$ mysql # on another terminal
260-mysql> UPDATE mysql.user SET password=PASSWORD('new_pass') WHERE user='root';
261-```
262-
263-```bash
264-## Switch back to the mysqld_safe terminal and kill the process using Control + \
265-$ /etc/init.d/mysql start
266-```
267-
268-Your commands may vary depending on your OS.
269-
270-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
271-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -116
......@@ -1,116 +0,0 @@
1----
2-title: Org Mode
3-layout: 2017/sheet
4-tags: [WIP]
5-category: Apps
6-updated: 2018-02-19
7-intro: |
8- [Org mode](https://orgmode.org/) is for keeping hierarchal notes (and more) in Emacs.
9----
10-
11-## Syntax
12-{: .-three-column}
13-
14-### Headings
15-
16-```org
17-* Welcome to Org mode
18-
19- Lines starting with * are headings.
20- These lines without are notes.
21-
22-** Sub-heading
23-
24- Two stars mark a 2nd-level subheading (h2).
25-```
26-
27-### Lists
28-
29-```org
30-* Lists
31-
32-To buy:
33-1. Milk
34-2. Eggs
35- - Organic
36-3. Cheese
37- + Parmesan
38- + Mozarella
39-```
40-
41-### Inline styles
42-
43-```org
44-*bold*
45-/italic/
46-_underline_
47-=verbatim=
48-~code~
49-+strike-through+
50-```
51-
52-### To do
53-
54-```org
55-* TODO buy airplane
56-```
57-
58-Cycle by using `S-LEFT` / `S-RIGHT`. List all TODO's via `C-c C-v`.
59-
60-## Shortcuts
61-{: .-three-column}
62-
63-### Basic shortcuts
64-
65-| Description | Shortcut |
66-| --- | --- |
67-| (Un) fold | `TAB` / `S-TAB` |
68-| Move up | `M-UP` / `M-DOWN` |
69-| New headline | `M-RET` |
70-| Cycle workflow | `S-LEFT` / `S-RIGHT` |
71-| Cycle priority | `S-UP` / `S-DOWN` |
72-{:.-shortcuts-right}
73-
74-### Timer
75-
76-| Description | Shortcut |
77-| --- | --- |
78-| Start timer | `C-c` `C-x` `0` |
79-| Stop timer | `C-c` `C-x` `_` |
80-| Pause timer | `C-c` `C-x` `,` |
81-| --- | --- |
82-| Start countdown | `C-c` `C-x` `;` |
83-{:.-shortcuts-right}
84-
85-You can use this for Pomodoro!
86-
87-### Agenda
88-
89-| Description | Shortcut |
90-| --- | --- |
91-| Agenda menu | `C-c` `a` |
92-| --- | --- |
93-| Add document | `C-c` `[` |
94-| Remove document | `C-c` `]` |
95-| --- | --- |
96-| Add date | `C-c` `.` |
97-| Add time & date | `C-u` `C-c` `.` |
98-{:.-shortcuts-right}
99-
100-Start by adding the current file to the agenda (`C-c [`), then use the agenda menu to navigate.
101-
102-### Export
103-
104-| Description | Shortcut |
105-| --- | --- |
106-| Export menu | `C-c` `C-e` |
107-
108-Lets you export the document as Markdown, HTML, and others.
109-
110-## References
111-
112-- [Org for beginners](https://orgmode.org/worg/org-tutorials/org4beginners.html) _(orgmode.org)_
113-- [Org mode website](https://orgmode.org/) _(orgmode.org)_
114-
115-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
116-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -27
......@@ -1,27 +0,0 @@
1----
2-title: PostgreSQL
3-category: Databases
4----
5-
6-Replace anything within `<placeholder>` accordingly
7-
8-### Console
9-
10- $ psql #logs in to default database & default user
11- $ sudo -u <rolename:postgres> psql #logs in with a particular user
12-
13-### Commands
14-
15- * Show roles: `\du`
16- * Show tables: `\dt`
17- * Show databases: `\l`
18- * Connect to a database: `\c <database>`
19- * Show columns of a table: `\d <table>` or `\d+ <table>`
20- * Quit: `\q`
21-
22-### Creating database
23-
24- $ createdb databasename
25-
26-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
27-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -170
......@@ -1,170 +0,0 @@
1----
2-title: Python
3-category: Python
4----
5-
6-### Tuples (immutable)
7-
8- tuple = ()
9-
10-### Lists (mutable)
11-
12- list = []
13- list[i:j] # returns list subset
14- list[-1] # returns last element
15- list[:-1] # returns all but the last element
16- *list # expands all elements in place
17-
18- list[i] = val
19- list[i:j] = otherlist # replace ith to jth-1 elements with otherlist
20- del list[i:j]
21-
22- list.append(item)
23- list.extend(another_list)
24- list.insert(index, item)
25- list.pop() # returns and removes last element from the list
26- list.pop(i) # returns and removes i-th element from the list
27- list.remove(i) # removes the first item from the list whose value is i
28- list1 + list2 # combine two list
29- set(list) # remove duplicate elements from a list
30-
31- list.reverse() # reverses the elements of the list in-place
32- list.count(item)
33- sum(list)
34-
35- zip(list1, list2) # returns list of tuples with n-th element of both list1 and list2
36- list.sort() # sorts in-place, returns None
37- sorted(list) # returns sorted copy of list
38- ",".join(list) # returns a string with list elements seperated by comma
39-
40-### Dict
41-
42- dict = {}
43- dict.keys()
44- dict.values()
45- "key" in dict # let's say this returns False, then...
46- dict["key"] # ...this raises KeyError
47- dict.get("key") # ...this returns None
48- dict.setdefault("key", 1)
49- **dict # expands all k/v pairs in place
50-
51-### Iteration
52-
53- for item in ["a", "b", "c"]:
54- for i in range(4): # 0 to 3
55- for i in range(4, 8): # 4 to 7
56- for i in range(1, 9, 2): # 1, 3, 5, 7
57- for key, val in dict.items():
58- for index, item in enumerate(list):
59-
60-### [String](https://docs.python.org/2/library/stdtypes.html#string-methods)
61-
62- str[0:4]
63- len(str)
64-
65- string.replace("-", " ")
66- ",".join(list)
67- "hi {0}".format('j')
68- f"hi {name}" # same as "hi {}".format('name')
69- str.find(",")
70- str.index(",") # same, but raises IndexError
71- str.count(",")
72- str.split(",")
73-
74- str.lower()
75- str.upper()
76- str.title()
77-
78- str.lstrip()
79- str.rstrip()
80- str.strip()
81-
82- str.islower()
83-
84- /* escape characters */
85- >>> 'doesn\'t' # use \' to escape the single quote...
86- "doesn't"
87- >>> "doesn't" # ...or use double quotes instead
88- "doesn't"
89- >>> '"Yes," they said.'
90- '"Yes," they said.'
91- >>> "\"Yes,\" they said."
92- '"Yes," they said.'
93- >>> '"Isn\'t," they said.'
94- '"Isn\'t," they said.'
95-
96-### Casting
97-
98- int(str)
99- float(str)
100- str(int)
101- str(float)
102- 'string'.encode()
103-
104-### Comprehensions
105-
106- [fn(i) for i in list] # .map
107- map(fn, list) # .map, returns iterator
108-
109- filter(fn, list) # .filter, returns iterator
110- [fn(i) for i in list if i > 0] # .filter.map
111-
112-### Regex
113-
114- import re
115-
116- re.match(r'^[aeiou]', str)
117- re.sub(r'^[aeiou]', '?', str)
118- re.sub(r'(xyz)', r'\1', str)
119-
120- expr = re.compile(r'^...$')
121- expr.match(...)
122- expr.sub(...)
123-
124-## File manipulation
125-
126-### Reading
127-
128-```py
129-file = open("hello.txt", "r") # open in read mode 'r'
130-file.close()
131-```
132-
133-```py
134-print(file.read()) # read the entire file and set the cursor at the end of file
135-print file.readline() # Reading one line
136-file.seek(0, 0) # place the cursor at the beginning of the file
137-```
138-
139-### Writing (overwrite)
140-
141-```py
142-file = open("hello.txt", "w") # open in write mode 'w'
143-file.write("Hello World")
144-
145-text_lines = ["First line", "Second line", "Last line"]
146-file.writelines(text_lines)
147-
148-file.close()
149-```
150-
151-### Writing (append)
152-
153-```py
154-file = open("Hello.txt", "a") # open in append mode
155-file.write("Hello World again")
156-file.close()
157-```
158-
159-### Context manager
160-
161-```py
162-with open("welcome.txt", "r") as file:
163- # 'file' refers directly to "welcome.txt"
164- data = file.read()
165-
166-# It closes the file automatically at the end of scope, no need for `file.close()`.
167-```
168-
169-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
170-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -38
......@@ -1,38 +0,0 @@
1----
2-title: Rake
3-category: Ruby
4-layout: 2017/sheet
5----
6-
7-### Basic syntax
8-
9-```rb
10-namespace :foo do
11- desc "Description"
12- task :bar do
13- ...
14- end
15-
16- task :baz => :dependency do
17- end
18-
19- task :baz => [:dep1, :dep2, :dep3] do
20- end
21-end
22-
23-# rake foo:bar
24-```
25-
26-### Rake task with arguments
27-
28-```rb
29-desc "Do something"
30-task :workit, [:id] => :environment do |_, args|
31- id = args[:id]
32-end
33-
34-# rake workit[234]
35-```
36-
37-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
38-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -34
......@@ -1,34 +0,0 @@
1----
2-title: Ruby
3-category: Ruby
4-tags: [WIP]
5-layout: 2017/sheet
6-intro: |
7- Quick reference to some features of the Ruby programming language.
8----
9-
10-### Reference
11-
12-{:.-one-column}
13-
14-| Code | Description |
15-| ----------------------- | --------------------------------------------------------- |
16-| `$!` | latest error message |
17-| `$@` | location of error |
18-| `$_` | string last read by gets |
19-| `$.` | line number last read by interpreter |
20-| `$&` | string last matched by regexp |
21-| `$~` | the last regexp match, as an array of subexpressions |
22-| `$n` | the nth subexpression in the last match (same as `$~[n]`) |
23-| `$=` | case-insensitivity flag |
24-| `$/` | input record separator |
25-| `$\` | output record separator |
26-| `$0` | the name of the ruby script file |
27-| `$*` (or `ARGV`) | the command line arguments |
28-| `$$` | interpreter's process ID |
29-| `$?` | exit status of last executed child process |
30-| `$-i` `$-l` `$-p` `$-v` | Command line switches |
31-| `$-v` (or `$VERBOSE`) | verbose mode |
32-
33-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
34-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -59
......@@ -1,59 +0,0 @@
1----
2-title: sed
3-category: CLI
4-layout: 2017/sheet
5-intro: |
6- Here's some hints on using sed.
7----
8-
9-## In place replacements
10-
11-### In-place replacement (GNU)
12-
13-```bash
14-sed -i -e 's/foo/bar/' example.md
15-```
16-
17-In GNU sed: use `-i` without arg.
18-
19-#### In-place replacement (BSD)
20-
21-```bash
22-sed -i '' -e 's/foo/bar/' example.md
23-```
24-
25- In OSX, `-i ''` is required.
26-
27-## File regions
28-{:.-three-column}
29-
30-### Print until a certain line is met
31-
32-```bash
33-sed '/begin api/q'
34-```
35-
36-### Print until a certain line is met, but not that line
37-
38-```bash
39-sed '/^# begin/,$d'
40-```
41-
42-### Print everything after a given line
43-
44-```bash
45-sed -n '/end api/,$p'
46-```
47-
48-Print after a given line is found.
49-
50-### Print everything except matching
51-
52-```bash
53-sed -n '/regex/!p'
54-```
55-
56-Print everything except lines matching regex. Useful for printing files with comments.
57-
58-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
59-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -843
......@@ -1,843 +0,0 @@
1----
2-title: Bash scripting
3-category: CLI
4-layout: 2017/sheet
5-tags: [Featured]
6-updated: 2020-07-05
7-keywords:
8- - Variables
9- - Functions
10- - Interpolation
11- - Brace expansions
12- - Loops
13- - Conditional execution
14- - Command substitution
15----
16-
17-Getting started
18----------------
19-{: .-three-column}
20-
21-### Introduction
22-{: .-intro}
23-
24-This is a quick reference to getting started with Bash scripting.
25-
26-- [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
27-- [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
28-- [Bash Hackers Wiki](https://wiki.bash-hackers.org) _(wiki.bash-hackers.org)_
29-
30-### Example
31-
32-```bash
33-#!/usr/bin/env bash
34-
35-name="John"
36-echo "Hello $name!"
37-```
38-
39-### Variables
40-
41-```bash
42-name="John"
43-echo $name # see below
44-echo "$name"
45-echo "${name}!"
46-```
47-Generally quote your variables unless they contain wildcards to expand or command fragments.
48-
49-```bash
50-wildcard="*.txt"
51-option="iv"
52-cp -$options $wildcard /tmp
53-```
54-
55-### String quotes
56-
57-```bash
58-name="John"
59-echo "Hi $name" #=> Hi John
60-echo 'Hi $name' #=> Hi $name
61-```
62-
63-### Shell execution
64-
65-```bash
66-echo "I'm in $(pwd)"
67-echo "I'm in `pwd`" # obsolescent
68-# Same
69-```
70-
71-See [Command substitution](http://wiki.bash-hackers.org/syntax/expansion/cmdsubst)
72-
73-### Conditional execution
74-
75-```bash
76-git commit && git push
77-git commit || echo "Commit failed"
78-```
79-
80-### Functions
81-{: id='functions-example'}
82-
83-```bash
84-get_name() {
85- echo "John"
86-}
87-
88-echo "You are $(get_name)"
89-```
90-
91-See: [Functions](#functions)
92-
93-### Conditionals
94-{: id='conditionals-example'}
95-
96-```bash
97-if [[ -z "$string" ]]; then
98- echo "String is empty"
99-elif [[ -n "$string" ]]; then
100- echo "String is not empty"
101-fi
102-```
103-
104-See: [Conditionals](#conditionals)
105-
106-### Strict mode
107-
108-```bash
109-set -euo pipefail
110-IFS=$'\n\t'
111-```
112-
113-See: [Unofficial bash strict mode](http://redsymbol.net/articles/unofficial-bash-strict-mode/)
114-
115-### Brace expansion
116-
117-```bash
118-echo {A,B}.js
119-```
120-
121-| Expression | Description |
122-| ---------- | ------------------- |
123-| `{A,B}` | Same as `A B` |
124-| `{A,B}.js` | Same as `A.js B.js` |
125-| `{1..5}` | Same as `1 2 3 4 5` |
126-
127-See: [Brace expansion](http://wiki.bash-hackers.org/syntax/expansion/brace)
128-
129-
130-Parameter expansions
131---------------------
132-{: .-three-column}
133-
134-### Basics
135-
136-```bash
137-name="John"
138-echo "${name}"
139-echo "${name/J/j}" #=> "john" (substitution)
140-echo "${name:0:2}" #=> "Jo" (slicing)
141-echo "${name::2}" #=> "Jo" (slicing)
142-echo "${name::-1}" #=> "Joh" (slicing)
143-echo "${name:(-1)}" #=> "n" (slicing from right)
144-echo "${name:(-2):1}" #=> "h" (slicing from right)
145-echo "${food:-Cake}" #=> $food or "Cake"
146-```
147-
148-```bash
149-length=2
150-echo "${name:0:length}" #=> "Jo"
151-```
152-
153-See: [Parameter expansion](http://wiki.bash-hackers.org/syntax/pe)
154-
155-```bash
156-str="/path/to/foo.cpp"
157-echo "${str%.cpp}" # /path/to/foo
158-echo "${str%.cpp}.o" # /path/to/foo.o
159-echo "${str%/*}" # /path/to
160-
161-echo "${str##*.}" # cpp (extension)
162-echo "${str##*/}" # foo.cpp (basepath)
163-
164-echo "${str#*/}" # path/to/foo.cpp
165-echo "${str##*/}" # foo.cpp
166-
167-echo "${str/foo/bar}" # /path/to/bar.cpp
168-```
169-
170-```bash
171-str="Hello world"
172-echo "${str:6:5}" # "world"
173-echo "${str: -5:5}" # "world"
174-```
175-
176-```bash
177-src="/path/to/foo.cpp"
178-base=${src##*/} #=> "foo.cpp" (basepath)
179-dir=${src%$base} #=> "/path/to/" (dirpath)
180-```
181-
182-### Substitution
183-
184-| Code | Description |
185-| ----------------- | ------------------- |
186-| `${foo%suffix}` | Remove suffix |
187-| `${foo#prefix}` | Remove prefix |
188-| --- | --- |
189-| `${foo%%suffix}` | Remove long suffix |
190-| `${foo##prefix}` | Remove long prefix |
191-| --- | --- |
192-| `${foo/from/to}` | Replace first match |
193-| `${foo//from/to}` | Replace all |
194-| --- | --- |
195-| `${foo/%from/to}` | Replace suffix |
196-| `${foo/#from/to}` | Replace prefix |
197-
198-### Comments
199-
200-```bash
201-# Single line comment
202-```
203-
204-```bash
205-: '
206-This is a
207-multi line
208-comment
209-'
210-```
211-
212-### Substrings
213-
214-| Expression | Description |
215-| --------------- | ------------------------------ |
216-| `${foo:0:3}` | Substring _(position, length)_ |
217-| `${foo:(-3):3}` | Substring from the right |
218-
219-### Length
220-
221-| Expression | Description |
222-| ---------- | ---------------- |
223-| `${#foo}` | Length of `$foo` |
224-
225-### Manipulation
226-
227-```bash
228-str="HELLO WORLD!"
229-echo "${str,}" #=> "hELLO WORLD!" (lowercase 1st letter)
230-echo "${str,,}" #=> "hello world!" (all lowercase)
231-
232-str="hello world!"
233-echo "${str^}" #=> "Hello world!" (uppercase 1st letter)
234-echo "${str^^}" #=> "HELLO WORLD!" (all uppercase)
235-```
236-
237-### Default values
238-
239-| Expression | Description |
240-| ----------------- | -------------------------------------------------------- |
241-| `${foo:-val}` | `$foo`, or `val` if unset (or null) |
242-| `${foo:=val}` | Set `$foo` to `val` if unset (or null) |
243-| `${foo:+val}` | `val` if `$foo` is set (and not null) |
244-| `${foo:?message}` | Show error message and exit if `$foo` is unset (or null) |
245-
246-Omitting the `:` removes the (non)nullity checks, e.g. `${foo-val}` expands to `val` if unset otherwise `$foo`.
247-
248-Loops
249------
250-{: .-three-column}
251-
252-### Basic for loop
253-
254-```bash
255-for i in /etc/rc.*; do
256- echo "$i"
257-done
258-```
259-
260-### C-like for loop
261-
262-```bash
263-for ((i = 0 ; i < 100 ; i++)); do
264- echo "$i"
265-done
266-```
267-
268-### Ranges
269-
270-```bash
271-for i in {1..5}; do
272- echo "Welcome $i"
273-done
274-```
275-
276-#### With step size
277-
278-```bash
279-for i in {5..50..5}; do
280- echo "Welcome $i"
281-done
282-```
283-
284-### Reading lines
285-
286-```bash
287-while read -r line; do
288- echo "$line"
289-done <file.txt
290-```
291-
292-### Forever
293-
294-```bash
295-while true; do
296- ···
297-done
298-```
299-
300-Functions
301----------
302-{: .-three-column}
303-
304-### Defining functions
305-
306-```bash
307-myfunc() {
308- echo "hello $1"
309-}
310-```
311-
312-```bash
313-# Same as above (alternate syntax)
314-function myfunc() {
315- echo "hello $1"
316-}
317-```
318-
319-```bash
320-myfunc "John"
321-```
322-
323-### Returning values
324-
325-```bash
326-myfunc() {
327- local myresult='some value'
328- echo "$myresult"
329-}
330-```
331-
332-```bash
333-result=$(myfunc)
334-```
335-
336-### Raising errors
337-
338-```bash
339-myfunc() {
340- return 1
341-}
342-```
343-
344-```bash
345-if myfunc; then
346- echo "success"
347-else
348- echo "failure"
349-fi
350-```
351-
352-### Arguments
353-
354-| Expression | Description |
355-| --- | --- |
356-| `$#` | Number of arguments |
357-| `$*` | All positional arguments (as a single word) |
358-| `$@` | All positional arguments (as separate strings) |
359-| `$1` | First argument |
360-| `$_` | Last argument of the previous command |
361-
362-**Note**: `$@` and `$*` must be quoted in order to perform as described.
363-Otherwise, they do exactly the same thing (arguments as separate strings).
364-
365-See [Special parameters](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).
366-
367-Conditionals
368-------------
369-{: .-three-column}
370-
371-### Conditions
372-
373-Note that `[[` is actually a command/program that returns either `0` (true) or `1` (false). Any program that obeys the same logic (like all base utils, such as `grep(1)` or `ping(1)`) can be used as condition, see examples.
374-
375-| Condition | Description |
376-| --- | --- |
377-| `[[ -z STRING ]]` | Empty string |
378-| `[[ -n STRING ]]` | Not empty string |
379-| `[[ STRING == STRING ]]` | Equal |
380-| `[[ STRING != STRING ]]` | Not Equal |
381-| --- | --- |
382-| `[[ NUM -eq NUM ]]` | Equal |
383-| `[[ NUM -ne NUM ]]` | Not equal |
384-| `[[ NUM -lt NUM ]]` | Less than |
385-| `[[ NUM -le NUM ]]` | Less than or equal |
386-| `[[ NUM -gt NUM ]]` | Greater than |
387-| `[[ NUM -ge NUM ]]` | Greater than or equal |
388-| --- | --- |
389-| `[[ STRING =~ STRING ]]` | Regexp |
390-| --- | --- |
391-| `(( NUM < NUM ))` | Numeric conditions |
392-
393-#### More conditions
394-
395-| Condition | Description |
396-| -------------------- | ------------------------ |
397-| `[[ -o noclobber ]]` | If OPTIONNAME is enabled |
398-| --- | --- |
399-| `[[ ! EXPR ]]` | Not |
400-| `[[ X && Y ]]` | And |
401-| `[[ X || Y ]]` | Or |
402-
403-### File conditions
404-
405-| Condition | Description |
406-| --- | --- |
407-| `[[ -e FILE ]]` | Exists |
408-| `[[ -r FILE ]]` | Readable |
409-| `[[ -h FILE ]]` | Symlink |
410-| `[[ -d FILE ]]` | Directory |
411-| `[[ -w FILE ]]` | Writable |
412-| `[[ -s FILE ]]` | Size is > 0 bytes |
413-| `[[ -f FILE ]]` | File |
414-| `[[ -x FILE ]]` | Executable |
415-| --- | --- |
416-| `[[ FILE1 -nt FILE2 ]]` | 1 is more recent than 2 |
417-| `[[ FILE1 -ot FILE2 ]]` | 2 is more recent than 1 |
418-| `[[ FILE1 -ef FILE2 ]]` | Same files |
419-
420-### Example
421-
422-```bash
423-# String
424-if [[ -z "$string" ]]; then
425- echo "String is empty"
426-elif [[ -n "$string" ]]; then
427- echo "String is not empty"
428-else
429- echo "This never happens"
430-fi
431-```
432-
433-```bash
434-# Combinations
435-if [[ X && Y ]]; then
436- ...
437-fi
438-```
439-
440-```bash
441-# Equal
442-if [[ "$A" == "$B" ]]
443-```
444-
445-```bash
446-# Regex
447-if [[ "A" =~ . ]]
448-```
449-
450-```bash
451-if (( $a < $b )); then
452- echo "$a is smaller than $b"
453-fi
454-```
455-
456-```bash
457-if [[ -e "file.txt" ]]; then
458- echo "file exists"
459-fi
460-```
461-
462-Arrays
463-------
464-
465-### Defining arrays
466-
467-```bash
468-Fruits=('Apple' 'Banana' 'Orange')
469-```
470-
471-```bash
472-Fruits[0]="Apple"
473-Fruits[1]="Banana"
474-Fruits[2]="Orange"
475-```
476-
477-### Working with arrays
478-
479-```bash
480-echo "${Fruits[0]}" # Element #0
481-echo "${Fruits[-1]}" # Last element
482-echo "${Fruits[@]}" # All elements, space-separated
483-echo "${#Fruits[@]}" # Number of elements
484-echo "${#Fruits}" # String length of the 1st element
485-echo "${#Fruits[3]}" # String length of the Nth element
486-echo "${Fruits[@]:3:2}" # Range (from position 3, length 2)
487-echo "${!Fruits[@]}" # Keys of all elements, space-separated
488-```
489-
490-### Operations
491-
492-```bash
493-Fruits=("${Fruits[@]}" "Watermelon") # Push
494-Fruits+=('Watermelon') # Also Push
495-Fruits=( "${Fruits[@]/Ap*/}" ) # Remove by regex match
496-unset Fruits[2] # Remove one item
497-Fruits=("${Fruits[@]}") # Duplicate
498-Fruits=("${Fruits[@]}" "${Veggies[@]}") # Concatenate
499-lines=(`cat "logfile"`) # Read from file
500-```
501-
502-### Iteration
503-
504-```bash
505-for i in "${arrayName[@]}"; do
506- echo "$i"
507-done
508-```
509-
510-Dictionaries
511-------------
512-{: .-three-column}
513-
514-### Defining
515-
516-```bash
517-declare -A sounds
518-```
519-
520-```bash
521-sounds[dog]="bark"
522-sounds[cow]="moo"
523-sounds[bird]="tweet"
524-sounds[wolf]="howl"
525-```
526-
527-Declares `sound` as a Dictionary object (aka associative array).
528-
529-### Working with dictionaries
530-
531-```bash
532-echo "${sounds[dog]}" # Dog's sound
533-echo "${sounds[@]}" # All values
534-echo "${!sounds[@]}" # All keys
535-echo "${#sounds[@]}" # Number of elements
536-unset sounds[dog] # Delete dog
537-```
538-
539-### Iteration
540-
541-#### Iterate over values
542-
543-```bash
544-for val in "${sounds[@]}"; do
545- echo "$val"
546-done
547-```
548-
549-#### Iterate over keys
550-
551-```bash
552-for key in "${!sounds[@]}"; do
553- echo "$key"
554-done
555-```
556-
557-Options
558--------
559-
560-### Options
561-
562-```bash
563-set -o noclobber # Avoid overlay files (echo "hi" > foo)
564-set -o errexit # Used to exit upon error, avoiding cascading errors
565-set -o pipefail # Unveils hidden failures
566-set -o nounset # Exposes unset variables
567-```
568-
569-### Glob options
570-
571-```bash
572-shopt -s nullglob # Non-matching globs are removed ('*.foo' => '')
573-shopt -s failglob # Non-matching globs throw errors
574-shopt -s nocaseglob # Case insensitive globs
575-shopt -s dotglob # Wildcards match dotfiles ("*.sh" => ".foo.sh")
576-shopt -s globstar # Allow ** for recursive matches ('lib/**/*.rb' => 'lib/a/b/c.rb')
577-```
578-
579-Set `GLOBIGNORE` as a colon-separated list of patterns to be removed from glob
580-matches.
581-
582-History
583--------
584-
585-### Commands
586-
587-| Command | Description |
588-| --------------------- | ----------------------------------------- |
589-| `history` | Show history |
590-| `shopt -s histverify` | Don't execute expanded result immediately |
591-
592-### Expansions
593-
594-| Expression | Description |
595-| ------------ | ---------------------------------------------------- |
596-| `!$` | Expand last parameter of most recent command |
597-| `!*` | Expand all parameters of most recent command |
598-| `!-n` | Expand `n`th most recent command |
599-| `!n` | Expand `n`th command in history |
600-| `!<command>` | Expand most recent invocation of command `<command>` |
601-
602-### Operations
603-
604-| Code | Description |
605-| -------------------- | --------------------------------------------------------------------- |
606-| `!!` | Execute last command again |
607-| `!!:s/<FROM>/<TO>/` | Replace first occurrence of `<FROM>` to `<TO>` in most recent command |
608-| `!!:gs/<FROM>/<TO>/` | Replace all occurrences of `<FROM>` to `<TO>` in most recent command |
609-| `!$:t` | Expand only basename from last parameter of most recent command |
610-| `!$:h` | Expand only directory from last parameter of most recent command |
611-
612-`!!` and `!$` can be replaced with any valid expansion.
613-
614-### Slices
615-
616-| Code | Description |
617-| -------- | ---------------------------------------------------------------------------------------- |
618-| `!!:n` | Expand only `n`th token from most recent command (command is `0`; first argument is `1`) |
619-| `!^` | Expand first argument from most recent command |
620-| `!$` | Expand last token from most recent command |
621-| `!!:n-m` | Expand range of tokens from most recent command |
622-| `!!:n-$` | Expand `n`th token to last from most recent command |
623-
624-`!!` can be replaced with any valid expansion i.e. `!cat`, `!-2`, `!42`, etc.
625-
626-
627-Miscellaneous
628--------------
629-
630-### Numeric calculations
631-
632-```bash
633-$((a + 200)) # Add 200 to $a
634-```
635-
636-```bash
637-$(($RANDOM%200)) # Random number 0..199
638-```
639-
640-### Subshells
641-
642-```bash
643-(cd somedir; echo "I'm now in $PWD")
644-pwd # still in first directory
645-```
646-
647-### Redirection
648-
649-```bash
650-python hello.py > output.txt # stdout to (file)
651-python hello.py >> output.txt # stdout to (file), append
652-python hello.py 2> error.log # stderr to (file)
653-python hello.py 2>&1 # stderr to stdout
654-python hello.py 2>/dev/null # stderr to (null)
655-python hello.py >output.txt 2>&1 # stdout and stderr to (file), equivalent to &>
656-python hello.py &>/dev/null # stdout and stderr to (null)
657-echo "$0: warning: too many users" >&2 # print diagnostic message to stderr
658-```
659-
660-```bash
661-python hello.py < foo.txt # feed foo.txt to stdin for python
662-diff <(ls -r) <(ls) # Compare two stdout without files
663-```
664-
665-### Inspecting commands
666-
667-```bash
668-command -V cd
669-#=> "cd is a function/alias/whatever"
670-```
671-
672-### Trap errors
673-
674-```bash
675-trap 'echo Error at about $LINENO' ERR
676-```
677-
678-or
679-
680-```bash
681-traperr() {
682- echo "ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}"
683-}
684-
685-set -o errtrace
686-trap traperr ERR
687-```
688-
689-### Case/switch
690-
691-```bash
692-case "$1" in
693- start | up)
694- vagrant up
695- ;;
696-
697- *)
698- echo "Usage: $0 {start|stop|ssh}"
699- ;;
700-esac
701-```
702-
703-### Source relative
704-
705-```bash
706-source "${0%/*}/../share/foo.sh"
707-```
708-
709-### printf
710-
711-```bash
712-printf "Hello %s, I'm %s" Sven Olga
713-#=> "Hello Sven, I'm Olga
714-
715-printf "1 + 1 = %d" 2
716-#=> "1 + 1 = 2"
717-
718-printf "This is how you print a float: %f" 2
719-#=> "This is how you print a float: 2.000000"
720-
721-printf '%s\n' '#!/bin/bash' 'echo hello' >file
722-# format string is applied to each group of arguments
723-printf '%i+%i=%i\n' 1 2 3 4 5 9
724-```
725-
726-### Transform strings
727-
728-| Command option | Description |
729-| ------------------ | --------------------------------------------------- |
730-| `-c` | Operations apply to characters not in the given set |
731-| `-d` | Delete characters |
732-| `-s` | Replaces repeated characters with single occurrence |
733-| `-t` | Truncates |
734-| `[:upper:]` | All upper case letters |
735-| `[:lower:]` | All lower case letters |
736-| `[:digit:]` | All digits |
737-| `[:space:]` | All whitespace |
738-| `[:alpha:]` | All letters |
739-| `[:alnum:]` | All letters and digits |
740-
741-#### Example
742-
743-```bash
744-echo "Welcome To Devhints" | tr '[:lower:]' '[:upper:]'
745-WELCOME TO DEVHINTS
746-```
747-
748-### Directory of script
749-
750-```bash
751-dir=${0%/*}
752-```
753-
754-### Getting options
755-
756-```bash
757-while [[ "$1" =~ ^- && ! "$1" == "--" ]]; do case $1 in
758- -V | --version )
759- echo "$version"
760- exit
761- ;;
762- -s | --string )
763- shift; string=$1
764- ;;
765- -f | --flag )
766- flag=1
767- ;;
768-esac; shift; done
769-if [[ "$1" == '--' ]]; then shift; fi
770-```
771-
772-### Heredoc
773-
774-```sh
775-cat <<END
776-hello world
777-END
778-```
779-
780-### Reading input
781-
782-```bash
783-echo -n "Proceed? [y/n]: "
784-read -r ans
785-echo "$ans"
786-```
787-
788-The `-r` option disables a peculiar legacy behavior with backslashes.
789-
790-```bash
791-read -n 1 ans # Just one character
792-```
793-
794-### Special variables
795-
796-| Expression | Description |
797-| ------------------ | -------------------------------------- |
798-| `$?` | Exit status of last task |
799-| `$!` | PID of last background task |
800-| `$$` | PID of shell |
801-| `$0` | Filename of the shell script |
802-| `$_` | Last argument of the previous command |
803-| `${PIPESTATUS[n]}` | return value of piped commands (array) |
804-
805-See [Special parameters](http://wiki.bash-hackers.org/syntax/shellvars#special_parameters_and_shell_variables).
806-
807-### Go to previous directory
808-
809-```bash
810-pwd # /home/user/foo
811-cd bar/
812-pwd # /home/user/foo/bar
813-cd -
814-pwd # /home/user/foo
815-```
816-
817-### Check for command's result
818-
819-```bash
820-if ping -c 1 google.com; then
821- echo "It appears you have a working internet connection"
822-fi
823-```
824-
825-### Grep check
826-
827-```bash
828-if grep -q 'foo' ~/.bash_history; then
829- echo "You appear to have typed 'foo' in the past"
830-fi
831-```
832-
833-## Also see
834-{: .-one-column}
835-
836-* [Bash-hackers wiki](http://wiki.bash-hackers.org/) _(bash-hackers.org)_
837-* [Shell vars](http://wiki.bash-hackers.org/syntax/shellvars) _(bash-hackers.org)_
838-* [Learn bash in y minutes](https://learnxinyminutes.com/docs/bash/) _(learnxinyminutes.com)_
839-* [Bash Guide](http://mywiki.wooledge.org/BashGuide) _(mywiki.wooledge.org)_
840-* [ShellCheck](https://www.shellcheck.net/) _(shellcheck.net)_
841-
842-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
843-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -27
......@@ -1,27 +0,0 @@
1----
2-title: PostgreSQL
3-category: Databases
4----
5-
6-Replace anything within `<placeholder>` accordingly
7-
8-### Console
9-
10- $ psql #logs in to default database & default user
11- $ sudo -u <rolename:postgres> psql #logs in with a particular user
12-
13-### Commands
14-
15- * Show roles: `\du`
16- * Show tables: `\dt`
17- * Show databases: `\l`
18- * Connect to a database: `\c <database>`
19- * Show columns of a table: `\d <table>` or `\d+ <table>`
20- * Quit: `\q`
21-
22-### Creating database
23-
24- $ createdb databasename
25-
26-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
27-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -287
......@@ -1,287 +0,0 @@
1----
2-title: TypeScript
3-category: JavaScript libraries
4----
5-
6-TypeScript is just like ES2015 with type-checking. All ES2015 (classes, etc) should work.
7-
8-## Basic types
9-
10-```ts
11-any
12-void
13-
14-boolean
15-number
16-string
17-
18-null
19-undefined
20-
21-bigint
22-symbol
23-
24-string[] /* or Array<string> */
25-[string, number] /* tuple */
26-
27-string | null | undefined /* union */
28-
29-never /* unreachable */
30-unknown
31-```
32-
33-```ts
34-enum Color {
35- Red,
36- Green,
37- Blue = 4
38-};
39-
40-let c: Color = Color.Green
41-```
42-
43-## Declarations
44-
45-```ts
46-let isDone: boolean
47-let isDone: boolean = false
48-```
49-
50-```ts
51-function add (a: number, b: number): number {
52- return a + b
53-}
54-
55-// Return type is optional
56-function add (a: number, b: number) { ... }
57-```
58-
59-## Type assertions
60-
61-#### Variables
62-```ts
63-let len: number = (input as string).length
64-let len: number = (<string> input).length /* not allowed in JSX */
65-```
66-
67-#### Functions
68-```ts
69-function object(this: {a: number, b: number}, a: number, b: number) {
70- this.a = a;
71- this.b = b;
72- return this;
73-}
74-
75-// this is used only for type declaration
76-let a = object(1,2);
77-// a has type {a: number, b: number}
78-```
79-
80-
81-## Interfaces
82-
83-### Inline
84-
85-```ts
86-function printLabel (options: { label: string }) {
87- console.log(options.label)
88-}
89-
90-// Note the semicolon
91-function getUser (): { name: string; age?: number } {
92-}
93-```
94-
95-### Explicit
96-
97-```ts
98-interface LabelOptions {
99- label: string
100-}
101-
102-function printLabel(options: LabelOptions) { ... }
103-```
104-
105-### Optional properties
106-
107-```ts
108-interface User {
109- name: string;
110- age?: number;
111-}
112-```
113-
114-### Read only
115-
116-```ts
117-interface User {
118- readonly name: string
119-}
120-```
121-
122-### Dynamic keys
123-
124-```ts
125-{
126- [key: string]: Object[]
127-}
128-```
129-
130-## Type aliases
131-
132-```ts
133-type Name = string | string[]
134-```
135-
136-### Intersection
137-
138-```ts
139-interface Colorful { ... }
140-
141-interface Circle { ... }
142-
143-type ColorfulCircle = Colorful & Circle;
144-```
145-
146-## Function types
147-
148-```ts
149-interface User { ... }
150-
151-function getUser(callback: (user: User) => any) { callback({...}) }
152-
153-getUser(function (user: User) { ... })
154-```
155-
156-## Classes
157-
158-```ts
159-class Point {
160- x: number
161- y: number
162- static instances = 0
163- constructor(x: number, y: number) {
164- this.x = x
165- this.y = y
166- }
167-}
168-```
169-
170-#### Inheritance
171-
172-```ts
173-class Point {...}
174-
175-class Point3D extends Point {...}
176-
177-interface Colored {...}
178-
179-class Pixel extends Point implements Colored {...}
180-```
181-
182-#### Short fields initialisation
183-
184-```ts
185-class Point {
186- static instances = 0;
187- constructor(
188- public x: number,
189- public y: number,
190- ){}
191-}
192-```
193-
194-#### Fields which do not require initialisation
195-```ts
196-class Point {
197- public someUselessValue!: number;
198- ...
199-}
200-```
201-
202-## Generics
203-
204-```ts
205-class Greeter<T> {
206- greeting: T
207- constructor(message: T) {
208- this.greeting = message
209- }
210-}
211-
212-let greeter = new Greeter<string>('Hello, world')
213-```
214-
215-## Modules
216-
217-```ts
218-export interface User { ... }
219-```
220-
221-## Type extraction
222-
223-```ts
224-interface Building {
225- room: {
226- door: string;
227- walls: string[];
228- };
229-}
230-
231-type Walls = Building['room']['walls']; // string[]
232-```
233-
234-## Keyof Type Operator
235-
236-```ts
237-type Point = { x: number; y: number };
238-
239-type P = keyof Point; // x | y
240-```
241-
242-## Conditinal Types
243-
244-```ts
245-// SomeType extends OtherType ? TrueType : FalseType;
246-
247-type ToArray<T> = T extends any ? T[] : never;
248-
249-type StrArrOrNumArr = ToArray<string | number>; // string[] | number[]
250-```
251-
252-### Inferring
253-
254-```ts
255-type GetReturnType<T> = T extends (...args: unknown[]) => infer R
256- ? R
257- : never;
258-
259-type Num = GetReturnType<() => number>; // number
260-```
261-
262-```ts
263-type First<T extends Array<any>> = T extends [infer F, ...infer Rest] ? F : never;
264-
265-type Str = First<['hello', 1, false]>; // 'hello'
266-```
267-
268-## Literal Type
269-
270-```ts
271-const point = { x: 4, y: 2 }; // { x: number, y: number }
272-
273-const literalPoint = { x: 4, y: 2 } as const; // { readonly x: 4, readonly y: 2 };
274-```
275-
276-## Template Literal Types
277-
278-```ts
279-type SpaceChar = ' ' | '\n' | '\t';
280-
281-type TrimLeft<S extends string> = S extends `${SpaceChar}${infer Rest}` ? TrimLeft<Rest> : S;
282-
283-type Str = TrimLeft<' hello'>; // 'hello'
284-```
285-
286-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
287-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -130
......@@ -1,130 +0,0 @@
1----
2-title: Vagrantfile
3-category: Devops
4-layout: 2017/sheet
5----
6-
7-## Vagrantfile
8-{: .-one-column}
9-
10-```rb
11-Vagrant.configure("2") do |config|
12- # All Vagrant configuration is done here. The most common configuration
13- # options are documented and commented below. For a complete reference,
14- # please see the online documentation at vagrantup.com.
15-
16- # Every Vagrant virtual environment requires a box to build off of.
17- config.vm.box = "precise64"
18-
19- # The url from where the 'config.vm.box' box will be fetched if it
20- # doesn't already exist on the user's system.
21- # config.vm.box_url = "http://domain.com/path/to/above.box"
22-
23- # Create a forwarded port mapping which allows access to a specific port
24- # within the machine from a port on the host machine. In the example below,
25- # accessing "localhost:8080" will access port 80 on the guest machine.
26- # config.vm.network :forwarded_port, guest: 80, host: 8080
27-
28- # Create a private network, which allows host-only access to the machine
29- # using a specific IP.
30- # config.vm.network :private_network, ip: "192.168.33.10"
31-
32- # Create a public network, which generally matched to bridged network.
33- # Bridged networks make the machine appear as another physical device on
34- # your network.
35- # config.vm.network :public_network
36-
37- # If true, then any SSH connections made will enable agent forwarding.
38- # Default value: false
39- # config.ssh.forward_agent = true
40-
41- # Share an additional folder to the guest VM. The first argument is
42- # the path on the host to the actual folder. The second argument is
43- # the path on the guest to mount the folder. And the optional third
44- # argument is a set of non-required options.
45- # config.vm.synced_folder "../data", "/vagrant_data"
46-
47- # Provider-specific configuration so you can fine-tune various
48- # backing providers for Vagrant. These expose provider-specific options.
49- # Example for VirtualBox:
50- #
51- # config.vm.provider :virtualbox do |vb|
52- # # Don't boot with headless mode
53- # vb.gui = true
54- #
55- # # Use VBoxManage to customize the VM. For example to change memory:
56- # vb.customize ["modifyvm", :id, "--memory", "1024"]
57- # end
58- #
59- # View the documentation for the provider you're using for more
60- # information on available options.
61-
62- # Enable provisioning with Puppet stand alone. Puppet manifests
63- # are contained in a directory path relative to this Vagrantfile.
64- # You will need to create the manifests directory and a manifest in
65- # the file precise64.pp in the manifests_path directory.
66- #
67- # An example Puppet manifest to provision the message of the day:
68- #
69- # # group { "puppet":
70- # # ensure => "present",
71- # # }
72- # #
73- # # File { owner => 0, group => 0, mode => 0644 }
74- # #
75- # # file { '/etc/motd':
76- # # content => "Welcome to your Vagrant-built virtual machine!
77- # # Managed by Puppet.\n"
78- # # }
79- #
80- # config.vm.provision :puppet do |puppet|
81- # puppet.manifests_path = "manifests"
82- # puppet.manifest_file = "init.pp"
83- # end
84-
85- # Enable provisioning with chef solo, specifying a cookbooks path, roles
86- # path, and data_bags path (all relative to this Vagrantfile), and adding
87- # some recipes and/or roles.
88- #
89- # config.vm.provision :chef_solo do |chef|
90- # chef.cookbooks_path = "../my-recipes/cookbooks"
91- # chef.roles_path = "../my-recipes/roles"
92- # chef.data_bags_path = "../my-recipes/data_bags"
93- # chef.add_recipe "mysql"
94- # chef.add_role "web"
95- #
96- # # You may also specify custom JSON attributes:
97- # chef.json = { :mysql_password => "foo" }
98- # end
99-
100- # Enable provisioning with chef server, specifying the chef server URL,
101- # and the path to the validation key (relative to this Vagrantfile).
102- #
103- # The Opscode Platform uses HTTPS. Substitute your organization for
104- # ORGNAME in the URL and validation key.
105- #
106- # If you have your own Chef Server, use the appropriate URL, which may be
107- # HTTP instead of HTTPS depending on your configuration. Also change the
108- # validation key to validation.pem.
109- #
110- # config.vm.provision :chef_client do |chef|
111- # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME"
112- # chef.validation_key_path = "ORGNAME-validator.pem"
113- # end
114- #
115- # If you're using the Opscode platform, your validator client is
116- # ORGNAME-validator, replacing ORGNAME with your organization name.
117- #
118- # If you have your own Chef Server, the default validation client name is
119- # chef-validator, unless you changed the configuration.
120- #
121- # chef.validation_client_name = "ORGNAME-validator"
122-end
123-```
124-
125-## Also see
126-
127-* [Vagrant cheatsheet](./vagrant)
128-
129-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
130-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -147
......@@ -1,147 +0,0 @@
1----
2-title: Vainglory
3-layout: 2017/sheet
4----
5-
6-## T3 items by use
7-{: .-one-column}
8-
9-| Use | CP | WP | Util |
10-| --- | --- | --- | --- |
11-| __Anti-armor/shield__ | [Myth][BM] | [Bonesaw][BS], [Tension][TB] | |
12-| __Stacking damage__ | [Myth][BM] | [Break][BP] | |
13-| __Lifesteal__ | [Eve][Eve] | [Serpent][SM], [Shiv][PS] | |
14-| __Raw power__ | [Shatterglass][SG] | [Sorrowblade][SB] | |
15-| __Burst damage__ | [Aftershock][AS] | [Tension][TB] | |
16-| __Attack speed__ | [AC][AC] | [Tornado][TT], [Break][BP] | |
17-| __Critical__ | | [Monocle][TM] | |
18-| __Auto-attack damage__ | [AC][AC], [Aftershock][AS] | _everything_ | [Stormcrown][SC] |
19-| __Cooldown__ | [Clockwork][CW], [Aftershock][AS] | Spellsword | [Stormcrown][SC], [Contraption][Con], [Nullwave][Null], [Halcyon Boots][HBoot] |
20-| __Slow__ | [Frostburn][FB] | | [Shiversteel][SS] |
21-| __Reflex block__ | | | [Aegis][Aegis] (self/shield) <br> [Crucible][Cru] (team/HP) |
22-| __Ability repeat__ | [Echo][Echo] | | |
23-{: .-left-align.-headers}
24-
25-## Tier 3 items
26-{: .-one-column}
27-
28-### Crystal power
29-
30-| Item | Cost | CP | Use |
31-| ---- | --- | --- | --- |
32-| AS: [Aftershock][AS] | 2400 | +35 cp | __Basic dmg, atk speed__ <br> *+basic dmg after ability*, +25% cooldown, +2.5 recharge |
33-| EoH: [Eve of Harvest][Eve] | 2600 | +55 cp | __Lifesteal__ <br> *+10% lifesteal*, +250 energy, +5 recharge |
34-| AC: [Alternating Current][AC] | 2800 | +60 cp | __Basic dmg__ <br> *+basic dmg based on CP*, +65% atk speed |
35-| BM: [Broken Myth][BM] | 2150 | +70 cp | __Stack dmg__ <br> +10% shield pierce, stacking dmg |
36-| FB: [Frostburn][FB] | 2600 | +100 cp | __Slow__ <br> *slow for 1.5s* at (10% + 1% per 10CP) |
37-| SG: [Shatterglass][SG] | 3000 | +150 cp | __Raw power__ <br> - |
38-| CW: [Clockwork][CW] | 2500 | +30% cp | __Cooldown__ <br> *+40% cooldown*, +250 energy, +7.5 recharge |
39-| [Echo][Echo] | 2500? | | __Ability repeat__ <br> +250 energy, +4 recharge |
40-{: .-left-align.-headers}
41-
42-[AS]: http://www.vaingloryfire.com/vainglory/wiki/items/aftershock
43-[AC]: http://www.vaingloryfire.com/vainglory/wiki/items/alternating-current
44-[Eve]: http://www.vaingloryfire.com/vainglory/wiki/items/eve-of-harvest
45-[SG]: http://www.vaingloryfire.com/vainglory/wiki/items/shatterglass
46-[BM]: http://www.vaingloryfire.com/vainglory/wiki/items/broken-myth
47-[CW]: http://www.vaingloryfire.com/vainglory/wiki/items/clockwork
48-[FB]: http://www.vaingloryfire.com/vainglory/wiki/items/frostburn
49-[Echo]: http://www.vaingloryfire.com/vainglory/wiki/items/echo
50-
51-### Weapon power
52-
53-| Item | Cost | WP | Other |
54-| ---- | --- | --- | --- |
55-| TT: [Tornado Trigger][TT] | 2600 | | __Atk speed__ <br> *+75% atk speed*, +20% crit change, +20% crit dmg |
56-| BS: [Bonesaw][BS] | 2700 | +15 wp | __Armor shred__ <br> *stacking armor shred* |
57-| TB: [Tension Bow][TB] | 2300 | +45 wp | __Bonus dmg__ <br> *bonus dmg every 6s*, +8% armor pierce |
58-| TM: [Tyrant's Monocle][TM] | 2750 | +50 wp | __Crit__ <br> *+40% crit chance*, +20% crit dmg |
59-| BP: [Breaking Point][BP] | 2600 | +55 wp | __Stacking dmg__ <br> *stacking weapon dmg*, +35% atk speed |
60-| SM: [Serpent Mask][SM] | 2800 | +85 wp | __Lifesteal__ <br> *stacking lifesteal*, +10% lifesteal |
61-| SB: [Sorrowblade][SB] | 3100 | +150 wp | __Raw power__ <br> - |
62-| PS: [Poisoned Shiv][PS] | 2250 | +30 wp | __Mortal wounds__ <br> *mortal wounds for 2s*, +10% lifesteal, +30% atk speed |
63-| SS: Spellsword | ? | +90 wp | __Cooldown__ <br> ? |
64-{: .-left-align.-headers}
65-
66-[BS]: http://www.vaingloryfire.com/vainglory/wiki/items/bonesaw
67-[BP]: http://www.vaingloryfire.com/vainglory/wiki/items/breaking-point
68-[SM]: http://www.vaingloryfire.com/vainglory/wiki/items/serpent-mask
69-[SB]: http://www.vaingloryfire.com/vainglory/wiki/items/sorrowblade
70-[TB]: http://www.vaingloryfire.com/vainglory/wiki/items/tension-bow
71-[TT]: http://www.vaingloryfire.com/vainglory/wiki/items/tornado-trigger
72-[TM]: http://www.vaingloryfire.com/vainglory/wiki/items/tyrants-monocle
73-[PS]: http://www.vaingloryfire.com/vainglory/wiki/items/poisoned-shiv
74-
75-### Utilities
76-
77-| Item | Cost | HP | Use |
78-| --- | --- | --- | --- |
79-| [Halcyon Chargers][HBoot] | 2300 | +200 hp | 👟 __Boots__ <br> +15% cooldown, +250 energy, +4 recharge |
80-| [Stormcrown][SC] | 2200 | +200 hp | 🔴 __Bonus dmg__ <br> +30% cooldown, +4 recharge, bonus true damage |
81-| [Journey Boots][JBoot] | 1900 | +250 hp | 👟 __Boots__ <br> damaging heroes resets sprint cooldown |
82-| [Nullwave Gauntlet][Null] (2.0) | 2250 | +300 hp | 😶 __Item silence__ <br> +25% cooldown |
83-| [Contraption][Con] | 2100 | +350 hp | 👀 __Vision__ <br> traps/flares, +40% cooldown, +3 recharge |
84-| [Shiversteel][SS] | 1450 | +500 hp | 🐌 __Slow__ <br> active: slow targets |
85-| [War Treads][WBoot] | 2500 | +600 hp | 👟 __Boots__ <br> gives sprint to nearby teammates |
86-{: .-left-align.-headers}
87-
88-### Defense
89-
90-| Item | Cost | HP | Armor | Shield | Use |
91-| --- | --- | --- | --- | --- | --- |
92-| [Aegis][Aegis] | 2250 | | +30 ar | +125 sh | ✊__Reflex block__ (self) |
93-| [Fountain of Renewal][Fountain] | 2300 | +200 hp | +30 ar | +75 sh | ❤ __Heal__ allies |
94-| [Atlas Pauldron][Atlas] | 1900 | | +85 ar | +35 sh | 🐌 __Slow__ target attack speed |
95-| [Metal Jacket][Metal] | 2100 | | +170 ar | +35 sh | |
96-| [Crucible][Cru] | 1850 | +600 hp | | | ✊ __Reflex block__ (team) |
97-| [Slumbering Husk][Husk] (2.0) | 1600 | +400 hp | | | __Fortification__ against burst damage |
98-{: .-left-align.-headers}
99-
100-[Fountain]: http://www.vaingloryfire.com/vainglory/wiki/items/fountain-of-renewal
101-[Cru]: http://www.vaingloryfire.com/vainglory/wiki/items/aegis
102-[Aegis]: http://www.vaingloryfire.com/vainglory/wiki/items/aegis
103-[Atlas]: http://www.vaingloryfire.com/vainglory/wiki/items/atlas-pauldron
104-[Metal]: http://www.vaingloryfire.com/vainglory/wiki/items/metal-jacket
105-[Husk]: http://www.vaingloryfire.com/vainglory/wiki/items/slumbering-husk
106-[Null]: http://www.vaingloryfire.com/vainglory/wiki/items/nullwave-gauntlet
107-
108-### Boots
109-
110-| Item | Movement speed | HP | Sprint | Use |
111-| --- | --- | --- | --- | --- |
112-| [War Treads][WBoot] | +0.4 | +600 hp | 2s (60s cooldown) <br> incl. nearby teammates | __HP, assist__ |
113-| [Halcyon Chargers][HBoot] | +0.5 | | 3s (50s cooldown) | __Energy__ |
114-| [Journey Boots][JBoot] | +0.6 | +250 hp | 2s (60s cooldown) <br> damaging resets cooldown | __Gap close__ |
115-{: .-left-align.-headers}
116-
117-[Con]: http://www.vaingloryfire.com/vainglory/wiki/items/contraption
118-[HBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/halcyon-chargers
119-[WBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/war-treads
120-[JBoot]: http://www.vaingloryfire.com/vainglory/wiki/items/journey-boots
121-[SC]: http://www.vaingloryfire.com/vainglory/wiki/items/stormcrown
122-[SS]: http://www.vaingloryfire.com/vainglory/wiki/items/shiversteel
123-
124-## Skill tier names
125-
126-| Just Beginning | 1 |
127-| Getting There | 2 |
128-| Rock Solid | 3 |
129-| Worthy Foe |4 |
130-| Got Swagger | 5 |
131-| Credible Threat | 6 |
132-| The Hotness | 7 |
133-| Simply Amazing | 8 |
134-| Pinnacle of Awesome | 9 |
135-| Vainglorious | 10 |
136-
137-See: [Skill tier names](http://www.vaingloryfire.com/vainglory/forum/general-discussion/bronze-silver-gold-rankings-5312)
138-
139-## References
140-
141-- Last updated for Vainglory 1.22 with some 2.0 stuff.
142-- [Vaingloryfire.com](http://www.vaingloryfire.com/)
143-- [Version history](http://forums.vainglorygame.com/index.php?threads/41129/) (forums.vainglorygame.com)
144-- [Skill tier points](http://brokenmyth.net/skill-tier-point-far-next-tier/#more-10043) (brokenmyth.net)
145-
146-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
147-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -720
......@@ -1,720 +0,0 @@
1----
2-title: Vim scripting
3-category: Vim
4-prism_languages: [vim]
5-layout: 2017/sheet
6-updated: 2020-07-05
7-weight: -10
8-tags: [Featurable]
9----
10-
11-### Start hacking
12-
13-```vim
14-let name = "John"
15-echo "Hello, " . name
16-```
17-
18-You can either put this in a script (`script.vim`) and run it (`:source script.vim`), or you can type the commands individually in normal mode as `:let` and `:echo`.
19-
20-### Learn by example
21-
22-```vim
23-function! SuperTab()
24- let l:part = strpart(getline('.'),col('.')-2,1)
25- if (l:part =~ '^\W\?$')
26- return "\<Tab>"
27- else
28- return "\<C-n>"
29- endif
30-endfunction
31-
32-imap <Tab> <C-R>=SuperTab()<CR>
33-```
34-
35-[Here](http://www.vimbits.com/bits/46)'s another example with [functions](#functions), [variables](#variables) and [mapping](#mapping).
36-
37-Variables
38----------
39-
40-### Defining
41-{: .-prime}
42-
43-```vim
44-let var = "hello"
45-```
46-
47-### Variable prefixes
48-
49-```vim
50-let g:ack_options = '-s -H' " g: global
51-let s:ack_program = 'ack' " s: local (to script)
52-let l:foo = 'bar' " l: local (to function)
53-```
54-
55-The `s:` prefix is also available in function names. See `:help local-variables`
56-
57-### Other prefixes
58-
59-```vim
60-let w:foo = 'bar' " w: window
61-let b:state = 'on' " b: buffer
62-let t:state = 'off' " t: tab
63-echo v:var " v: vim special
64-```
65-
66-```vim
67-let @/ = '' " @ register (this clears last search pattern)
68-echo $PATH " $ env
69-```
70-
71-### Vim options
72-
73-```vim
74-echo 'tabstop is ' . &tabstop
75-if &insertmode
76-echo &g:option
77-echo &l:option
78-```
79-
80-Prefix Vim options with `&`
81-
82-### Operators
83-
84-```vim
85-a + b " numbers only!
86-'hello ' . name " concat
87-```
88-
89-```vim
90-let var -= 2
91-let var += 5
92-let var .= 'string' " concat
93-```
94-
95-## Strings
96-
97-### Strings
98-
99-```vim
100-let str = "String"
101-let str = "String with \n newline"
102-
103-let literal = 'literal, no \ escaping'
104-let literal = 'that''s enough' " double '' => '
105-
106-echo "result = " . re " concatenation
107-```
108-
109-Also see `:help literal-string` and `:help expr-quote`.
110-See: [Strings](http://learnvimscriptthehardway.stevelosh.com/chapters/26.html)
111-
112-### String functions
113-
114-```vim
115-strlen(str) " length
116-len(str) " same
117-strchars(str) " character length
118-
119-split("one two three") "=> ['one', 'two', 'three']
120-split("one.two.three", '.') "=> ['one', 'two', 'three']
121-
122-join(['a', 'b'], ',') "=> 'a,b'
123-
124-tolower('Hello')
125-toupper('Hello')
126-```
127-
128-Also see `:help functions`
129-See: [String functions](http://learnvimscriptthehardway.stevelosh.com/chapters/27.html)
130-
131-Functions
132----------
133-
134-### Functions
135-{: .-prime}
136-
137-```vim
138-" prefix with s: for local script-only functions
139-function! s:Initialize(cmd, args)
140- " a: prefix for arguments
141- echo "Command: " . a:cmd
142-
143- return 1
144-endfunction
145-```
146-
147-See: [Functions](http://learnvimscriptthehardway.stevelosh.com/chapters/23.html)
148-
149-### Namespacing
150-
151-```vim
152-function! myplugin#hello()
153-```
154-
155-### Calling functions
156-
157-```vim
158-call s:Initialize()
159-call s:Initialize("hello")
160-```
161-
162-### Consuming return values
163-
164-```vim
165-echo "Result: " . s:Initialize()
166-```
167-
168-### Abortable
169-
170-```vim
171-function! myfunction() abort
172-endfunction
173-```
174-
175-Aborts when an error occurs.
176-
177-### Var arguments
178-
179-```vim
180-function! infect(...)
181- echo a:0 "=> 2
182- echo a:1 "=> jake
183- echo a:2 "=> bella
184-
185- for s in a:000 " a list
186- echon ' ' . s
187- endfor
188-endfunction
189-
190-infect('jake', 'bella')
191-```
192-
193-See `:help function-argument`. See: [Var arguments](http://learnvimscriptthehardway.stevelosh.com/chapters/24.html)
194-
195-Loops
196------
197-
198-```vim
199-for s in list
200- echo s
201- continue " jump to start of loop
202- break " breaks out of a loop
203-endfor
204-```
205-
206-```vim
207-while x < 5
208-endwhile
209-```
210-
211-Custom commands
212----------------
213-
214-### Custom commands
215-{: .-prime}
216-
217-```vim
218-command! Save :set fo=want tw=80 nowrap
219-```
220-
221-Custom commands start with uppercase letters. The `!` redefines a command if it already exists.
222-
223-### Commands calling functions
224-
225-```vim
226-command! Save call <SID>foo()
227-```
228-{: .-setup}
229-
230-```vim
231-function! s:foo()
232- ...
233-endfunction
234-```
235-
236-### Commands with arguments
237-
238-```vim
239-command! -nargs=? Save call script#foo(<args>)
240-```
241-{: .-setup}
242-
243-| What | What |
244-| ---- | ---- |
245-| `-nargs=0` | 0 arguments, default |
246-| `-nargs=1` | 1 argument, includes spaces |
247-| `-nargs=?` | 0 or 1 argument |
248-| `-nargs=*` | 0+ arguments, space separated |
249-| `-nargs=+` | 1+ arguments, space reparated |
250-
251-Flow
252-----
253-
254-### Conditionals
255-
256-```vim
257-let char = getchar()
258-if char == "\<LeftMouse>"
259- " ...
260-elseif char == "\<RightMouse>"
261- " ...
262-else
263- " ...
264-endif
265-```
266-
267-### Truthiness
268-
269-```vim
270-if 1 | echo "true" | endif
271-if 0 | echo "false" | endif
272-```
273-
274-```vim
275-if 1 "=> 1 (true)
276-if 0 "=> 0 (false)
277-if "1" "=> 1 (true)
278-if "456" "=> 1 (true)
279-if "xfz" "=> 0 (false)
280-```
281-
282-No booleans. `0` is false, `1` is true.
283-See: [Truthiness](http://learnvimscriptthehardway.stevelosh.com/chapters/21.html)
284-
285-### Operators
286-
287-```vim
288-if 3 > 2
289-if a && b
290-if (a && b) || (c && d)
291-if !c
292-```
293-
294-See `:help expression-syntax`.
295-See: [Operators](http://learnvimscriptthehardway.stevelosh.com/chapters/22.html)
296-
297-### Strings
298-
299-```vim
300-if name ==# 'John' " case-sensitive
301-if name ==? 'John' " case-insensitive
302-if name == 'John' " depends on :set ignorecase
303-
304-" also: is#, is?, >=#, >=?, and so on
305-```
306-
307-### Identity operators
308-
309-```vim
310-a is b
311-a isnot b
312-```
313-
314-Checks if it's the same instance object.
315-
316-### Regexp matches
317-
318-```vim
319-"hello" =~ 'xx*'
320-"hello" !~ 'xx*'
321-"hello" =~ '\v<\d+>'
322-```
323-
324-`\v` enables "extended" regex mode which allows word boundary (`<>`), `+`, and more.
325-
326-### Single line
327-
328-```vim
329-if empty(a:path) | return [] | endif
330-a ? b : c
331-```
332-
333-Use `|` to join lines together.
334-
335-### Boolean logic
336-
337-```vim
338-if g:use_dispatch && s:has_dispatch
339- ···
340-endif
341-```
342-
343-Lists
344------
345-
346-### Lists
347-
348-```vim
349-let mylist = [1, two, 3, "four"]
350-
351-let first = mylist[0]
352-let last = mylist[-1]
353-
354-" Suppresses errors
355-let second = get(mylist, 1)
356-let second = get(mylist, 1, "NONE")
357-```
358-
359-### Functions
360-
361-```vim
362-len(mylist)
363-empty(mylist)
364-
365-sort(list)
366-let sortedlist = sort(copy(list))
367-
368-split('hello there world', ' ')
369-```
370-
371-### Concatenation
372-
373-```vim
374-let longlist = mylist + [5, 6]
375-let mylist += [7, 8]
376-```
377-
378-### Sublists
379-
380-```vim
381-let shortlist = mylist[2:-1]
382-let shortlist = mylist[2:] " same
383-
384-let shortlist = mylist[2:2] " one item
385-```
386-
387-### Push
388-
389-```vim
390-let alist = [1, 2, 3]
391-let alist = add(alist, 4)
392-```
393-
394-### Map
395-
396-```vim
397-call map(files, "bufname(v:val)") " use v:val for value
398-call filter(files, 'v:val != ""')
399-```
400-
401-Dictionaries
402-------------
403-
404-### Dictionaries
405-
406-```vim
407-let colors = {
408- \ "apple": "red",
409- \ "banana": "yellow"
410-}
411-
412-echo colors["a"]
413-echo get(colors, "apple") " suppress error
414-```
415-
416-See `:help dict`
417-
418-### Using dictionaries
419-
420-```vim
421-remove(colors, "apple")
422-```
423-
424-```vim
425-" :help E715
426-if has_key(dict, 'foo')
427-if empty(dict)
428-keys(dict)
429-len(dict)
430-```
431-
432-```vim
433-max(dict)
434-min(dict)
435-```
436-
437-```vim
438-count(dict, 'x')
439-string(dict)
440-```
441-
442-```vim
443-map(dict, '<>> " . v:val')
444-```
445-
446-### Iteration
447-
448-```vim
449-for key in keys(mydict)
450- echo key . ': ' . mydict(key)
451-endfor
452-```
453-
454-### Prefixes
455-
456-```vim
457-keys(s:)
458-```
459-
460-Prefixes (`s:`, `g:`, `l:`, etc) are actually dictionaries.
461-
462-### Extending
463-
464-```vim
465-" Extending with more
466-let extend(s:fruits, { ... })
467-```
468-
469-Casting
470--------
471-
472-```vim
473-str2float("2.3")
474-str2nr("3")
475-float2nr("3.14")
476-```
477-
478-Numbers
479--------
480-
481-### Numbers
482-{: .-prime}
483-
484-```vim
485-let int = 1000
486-let int = 0xff
487-let int = 0755 " octal
488-```
489-
490-See `:help Number`.
491-See: [Numbers](http://learnvimscriptthehardway.stevelosh.com/chapters/25.html)
492-
493-### Floats
494-
495-```vim
496-let fl = 100.1
497-let fl = 5.4e4
498-```
499-
500-See `:help Float`
501-
502-### Arithmetic
503-
504-```vim
505-3 / 2 "=> 1, integer division
506-3 / 2.0 "=> 1.5
507-3 * 2.0 "=> 6.0
508-```
509-
510-### Math functions
511-
512-```vim
513-sqrt(100)
514-floor(3.5)
515-ceil(3.3)
516-abs(-3.4)
517-
518-sin() cos() tan()
519-sinh() cosh() tanh()
520-asin() acos() atan()
521-```
522-
523-Vim-isms
524---------
525-
526-### Execute a command
527-
528-```vim
529-execute "vsplit"
530-execute "e " . fnameescape(filename)
531-```
532-
533-Runs an ex command you typically run with `:`. Also see `:help execute`.
534-See: [Execute a command](http://learnvimscriptthehardway.stevelosh.com/chapters/28.html)
535-
536-### Running keystrokes
537-
538-```vim
539-normal G
540-normal! G " skips key mappings
541-
542-execute "normal! gg/foo\<cr>dd"
543-```
544-
545-Use `:normal` to execute keystrokes as if you're typing them in normal mode. Combine with `:execute` for special keystrokes.
546-See: [Running keystrokes](http://learnvimscriptthehardway.stevelosh.com/chapters/29.html)
547-
548-### Getting filenames
549-
550-```vim
551-echo expand("%") " path/file.txt
552-echo expand("%:t") " file.txt
553-echo expand("%:p:h") " /home/you/path/file.txt
554-echo expand("%:r") " path/file
555-echo expand("%:e") " txt
556-```
557-
558-See `:help expand`
559-
560-### Silencing
561-
562-```vim
563-silent g/Aap/p
564-```
565-
566-Suppresses output. See `:help silent`
567-
568-### Echo
569-
570-```vim
571-echoerr 'oh it failed'
572-echomsg 'hello there'
573-echo 'hello'
574-
575-echohl WarningMsg | echomsg "=> " . a:msg | echohl None
576-```
577-
578-
579-### Settings
580-
581-```vim
582-set number
583-set nonumber
584-set number! " toggle
585-set numberwidth=5
586-set guioptions+=e
587-```
588-
589-### Prompts
590-
591-```vim
592-let result = confirm("Sure?")
593-execute "confirm q"
594-```
595-
596-### Built-ins
597-
598-```vim
599-has("feature") " :h feature-list
600-executable("python")
601-globpath(&rtp, "syntax/c.vim")
602-
603-exists("$ENV")
604-exists(":command")
605-exists("variable")
606-exists("+option")
607-exists("g:...")
608-```
609-
610-Mapping
611--------
612-{: .-three-column}
613-
614-### Mapping commands
615-
616-```vim
617-nmap
618-vmap
619-imap
620-xmap
621-nnoremap
622-vnoremap
623-inoremap
624-xnoremap
625-...
626-```
627-
628-### Explanation
629-
630-```vim
631-[nvixso](nore)map
632-```
633-
634-```
635- │ └ don't recurse
636- │
637- └ normal, visual, insert,
638- eX mode, select, operator-pending
639-```
640-{: .-setup}
641-
642-### Arguments
643-
644-| `<buffer>` | only in current buffer |
645-| `<silent>` | no echo |
646-| `<nowait>` | |
647-
648-Syntax
649-------
650-
651-### Highlights
652-
653-```vim
654-hi Comment
655- term=bold,underline
656- gui=bold
657- ctermfg=4
658- guifg=#80a0ff
659-```
660-
661-### Filetype detection
662-
663-```vim
664-augroup filetypedetect
665- au! BufNewFile,BufRead *.json setf javascript
666-augroup END
667-
668-au Filetype markdown setlocal spell
669-```
670-
671-### Conceal
672-
673-```vim
674-set conceallevel=2
675-syn match newLine "<br>" conceal cchar=}
676-hi newLine guifg=green
677-```
678-
679-### Region conceal
680-
681-```vim
682-syn region inBold concealends matchgroup=bTag start="<b>" end="</b>"
683-hi inBold gui=bold
684-hi bTag guifg=blue
685-```
686-
687-### Syntax
688-
689-```vim
690-syn match :name ":regex" :flags
691-
692-syn region Comment start="/\*" end="\*/"
693-syn region String start=+"+ end=+"+ skip=+\\"+
694-
695-syn cluster :name contains=:n1,:n2,:n3...
696-
697-flags:
698- keepend
699- oneline
700- nextgroup=
701- contains=
702- contained
703-
704-hi def link markdownH1 htmlH1
705-```
706-
707-### Include guards
708-
709-```vim
710-if exists('g:loaded_myplugin')
711- finish
712-endif
713-
714-" ...
715-
716-let g:loaded_myplugin = 1
717-```
718-
719-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
720-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -365
......@@ -1,365 +0,0 @@
1----
2-title: Vue.js
3-category: JavaScript
4-layout: 2017/sheet
5-updated: 2019-12-26
6-weight: -10
7-intro: |
8- [Vue.js](https://vuejs.org/) is an open-source Model–view–viewmodel JavaScript framework for building user interfaces and single-page applications.
9----
10-
11-{%raw%}
12-
13-Expressions
14-----------
15-{: .-three-column}
16-
17-### Expressions
18-
19-```html
20-<div id="app">
21- <p>I have a {{ product }}</p>
22- <p>{{ product + 's' }}</p>
23- <p>{{ isWorking ? 'YES' : 'NO' }}</p>
24- <p>{{ product.getSalePrice() }}</p>
25-</div>
26-```
27-
28-See: [Delimiters](https://vuejs.org/v2/api/#delimiters)
29-
30-### Binding
31-
32-```html
33-<a v-bind:href="url">...</a>
34-```
35-
36-#### Shorthand syntax
37-```html
38-<a :href="url">...</a>
39-```
40-{: data-line="1"}
41-
42-#### True or false will add or remove attribute
43-```html
44-<button :disabled="isButtonDisabled">...
45-```
46-
47-#### If isActive is truthy, the class ‘active’ will appear
48-```html
49-<div :class="{ active: isActive }">...
50-```
51-
52-#### Style color set to value of activeColor
53-```html
54-<div :style="{ color: activeColor }">
55-```
56-
57-See: [v-bind](https://vuejs.org/v2/api/#v-bind)
58-
59-### Directives
60-
61-#### Element inserted/removed based on truthiness
62-```html
63-<p v-if="inStock">{{ product }}</p>
64-```
65-```html
66-<p v-else-if="onSale">...</p>
67-<p v-else>...</p>
68-```
69-
70-#### Toggles the display: none CSS property
71-```html
72-<p v-show="showProductDetails">...</p>
73-```
74-
75-#### Two-way data binding
76-```html
77-<input v-model="firstName" >
78-```
79-
80-| Method | Description |
81-| --- | --- |
82-| `v-model.lazy="..."` | Syncs input after change event |
83-| `v-model.number="..."` | Always returns a number |
84-| `v-model.trim="..."` | Strips whitespace |
85-
86-See: [Directives](https://vuejs.org/v2/api/#Directives)
87-
88-### Actions/Events
89-
90-#### Calls addToCart method on component
91-```html
92-<button v-on:click="addToCart">...
93-```
94-
95-#### Shorthand syntax
96-```html
97-<button @click="addToCart">...
98-```
99-{: data-line="1"}
100-
101-#### Arguments can be passed
102-```html
103-<button @click="addToCart(product)">...
104-```
105-
106-#### To prevent default behavior (e.g. page reload)
107-```html
108-<form @submit.prevent="addProduct">...
109-```
110-
111-#### Only trigger once
112-```html
113-<img @mouseover.once="showImage">...
114-```
115-
116-| Method | Description |
117-| --- | --- |
118-| `.stop` | Stop all event propagation |
119-| `.self ` | Only trigger if event.target is element itself |
120-
121-#### Keyboard entry example
122-```html
123-<input @keyup.enter="submit">
124-```
125-
126-#### Call onCopy when control-c is pressed
127-```html
128-<input @keyup.ctrl.c="onCopy">
129-```
130-
131-See: [Events](https://vuejs.org/v2/guide/events.html)
132-
133-### List rendering
134-
135-#### The `:key` is always recommended
136-```html
137-<li v-for="item in items"
138- :key="item.id">
139- {{ item }}
140-</li>
141-```
142-{: data-line="2"}
143-
144-#### To access the position in the array
145-```html
146-<li v-for="(item, index) in items">...
147-```
148-
149-#### To iterate through objects
150-```html
151-<li v-for="(value, key) in object">...
152-```
153-
154-#### Using `v-for` with a component
155-```html
156-<cart-product v-for="item in products"
157- :product="item"
158- :key="item.id">
159-```
160-
161-See: [List Rendering](https://vuejs.org/v2/guide/list.html)
162-
163-
164-Component
165---------
166-
167-### Component anatomy
168-
169-```js
170-Vue.component('my-component', {
171- components: {
172- // Components that can be used in the template
173- ProductComponent,
174- ReviewComponent
175- },
176- props: {
177- // The parameters the component accepts
178- message: String,
179- product: Object,
180- email: {
181- type: String,
182- required: true,
183- default: "none"
184- validator: function (value) {
185- // Should return true if value is valid
186- }
187- }
188- },
189- data: function() {
190- // `data` must be a function
191- return {
192- firstName: 'Vue',
193- lastName: 'Mastery'
194- }
195- },
196- computed: {
197- // Return cached values until dependencies change
198- fullName: function () {
199- return this.firstName + ' ' + this.lastName
200- }
201- },
202- watch: {
203- // Called when firstName changes value
204- firstName: function (value, oldValue) { ... }
205- },
206- methods: { ... },
207- template: '<span>{{ message }}</span>',
208- // Can also use backticks in `template` for multi-line
209-})
210-```
211-{: data-line="3, 8, 16, 21, 28, 34, 39"}
212-
213-See: [Components Basics](https://vuejs.org/v2/guide/components.html)
214-
215-### Lifecycle hooks
216-
217-| Method | Description |
218-| --- | --- |
219-| `beforeCreate` | After the instance has been initialized [#](https://vuejs.org/v2/api/#beforeCreate) |
220-| `created` | After the instance is created [#](https://vuejs.org/v2/api/#created) |
221-| `beforeMount` | Before the first render [#](https://vuejs.org/v2/api/#beforeMount) |
222-| `mounted` | After the instance has been mounted [#](https://vuejs.org/v2/api/#mounted) |
223-| `beforeUpdate` | When data changes, before the DOM is patched [#](https://vuejs.org/v2/api/#beforeUpdate) |
224-| `updated` | After a data change [#](https://vuejs.org/v2/api/#updated) |
225-| `beforeDestroy` | Before the instance is destroyed [#](https://vuejs.org/v2/api/#beforeDestroy) |
226-| `destroyed` | After a Vue instance has been destroyed [#](https://vuejs.org/v2/api/#destroyed) |
227-
228-See: [Lifecycle Hooks](https://vuejs.org/v2/api/#Options-Lifecycle-Hooks)
229-
230-### Custom events
231-
232-#### Set listener on component, within its parent
233-```html
234-<button-counter v-on:incrementBy="incWithVal">
235-```
236-
237-#### Inside parent component
238-```js
239-methods: {
240- incWithVal: function (toAdd) { ... }
241-}
242-```
243-
244-#### Inside button-counter template
245-```js
246-this.$emit(
247- 'incrementBy', // Custom event name
248- 5 // Data sent up to parent
249- )
250-```
251-
252-Use props to pass data into child components,
253-custom events to pass data to parent elements.
254-
255-See: [Custom Events](https://vuejs.org/v2/guide/components-custom-events.html)
256-
257-Single file components
258---------
259-
260-### Single file
261-```html
262-<template>
263- <p>{{ greeting }} World!</p>
264-</template>
265-
266-<script>
267-module.exports = {
268- data: function () {
269- return {
270- greeting: 'Hello'
271- }
272- }
273-}
274-</script>
275-
276-<style scoped>
277-p {
278- font-size: 2em;
279- text-align: center;
280-}
281-</style>
282-```
283-
284-See: [Single File Components](https://vuejs.org/v2/guide/single-file-components.html)
285-
286-### Separation
287-```html
288-<template>
289- <div>This will be pre-compiled</div>
290-</template>
291-<script src="./my-component.js"></script>
292-<style src="./my-component.css"></style>
293-```
294-
295-See: [What About Separation of Concerns?](https://vuejs.org/v2/guide/single-file-components.html#What-About-Separation-of-Concerns)
296-
297-Slots
298---------
299-
300-### Using a single slot
301-
302-#### Component template
303-```html
304-<div>
305- <h2>I'm a title</h2>
306- <slot>
307- Only displayed if no slot content
308- </slot>
309-</div>
310-```
311-{: data-line="3,4,5"}
312-
313-#### Use of component with data for slot
314-```html
315-<my-component>
316- <p>This will go in the slot</p>
317-</my-component>
318-```
319-{: data-line="2"}
320-
321-See: [Slots](https://vuejs.org/v2/guide/components-slots.html)
322-
323-### Multiple slots
324-
325-#### Component template
326-```html
327-<div class="container">
328- <header>
329- <slot name="header"></slot>
330- </header>
331- <main>
332- <slot>Default content</slot>
333- </main>
334- <footer>
335- <slot name="footer"></slot>
336- </footer>
337-</div>
338-```
339-{: data-line="3,6,9"}
340-
341-#### Use of component with data for slots
342-```html
343-<app-layout>
344- <h1 slot="header">Page title</h1>
345- <p>the main content.</p>
346- <p slot="footer">Contact info</p>
347-</app-layout>
348-```
349-{: data-line="2,3,4"}
350-
351-See: [Slots](https://vuejs.org/v2/guide/components-slots.html)
352-
353-Also see
354---------
355-
356-* [Vue CLI](https://cli.vuejs.org/) _(cli.vuejs.org)_
357-* [Vue Router](https://router.vuejs.org/) _(router.vuejs.org)_
358-* [Vue DevTools](https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd?hl=en) _(chrome.google.com)_
359-* [Nuxt.js](https://nuxtjs.org/) _(nuxtjs.org)_
360-* [Vue.js v1.0.28 cheatsheet](vue@1.0.28/) _Legacy version_
361-
362-{%endraw%}
363-
364-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
365-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -40
......@@ -1,40 +0,0 @@
1----
2-title: Yaml
3-category: Markup
4-layout: 2017/sheet
5-prism_languages: [yaml]
6----
7-
8-### Multiline strings
9-
10-```yaml
11-Multiline: |
12- hello
13- world
14-```
15-
16-### Inheritance
17-
18-```yaml
19-parent: &defaults
20- a: 2
21- b: 3
22-
23-child:
24- <<: *defaults
25- b: 4
26-```
27-
28-### Reference content
29-
30-```yaml
31-values: &ref
32- - These values
33- - will be reused below
34-
35-other_values:
36- <<: *ref
37-```
38-
39-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
40-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -45
......@@ -1,45 +0,0 @@
1----
2-title: zsh
3-category: CLI
4-layout: 2017/sheet
5----
6-
7-### Expressions
8-
9-| Expression | Example | Description
10-| --- | --- | ---
11-| `!!` | `sudo !!` | Last command (`sudo !!`)
12-| --- | --- | ---
13-| `!*` | `vim !*` | Last command's parameters (`vim !*`)
14-| `!^` | | Last command's first parameter
15-| `!$` | | Last command's last parameter
16-| --- | --- | ---
17-| `!?ls` `<tab>` | `sudo !?mv` `<tab>` | Command and params of last `ls` command
18-| `!?ls?:*` `<tab>` | | Params of last `ls` command
19-| --- | --- | ---
20-| `*(m0)` | `rm *(m0)` | Last modified today
21-| `*(m-4)` | | Last modified <4 days ago
22-{: .-headers}
23-
24-### Change default shell
25-
26-```bash
27-chsh -s `which zsh`
28-```
29-
30-### Process Substitution
31-
32-| Expression | Example | Description
33-| --- | --- | ---
34-| `<(COMMAND)` | `grep "needle" <(curl "https://haystack.io")` | Replace argument with _named pipe/FIFO_ (read-only) with command output
35-| `=(COMMAND)` | `vim =(curl "https://haystack.io")` | Replace argument with _file_ (writable) containing command output
36-{: .-headers}
37-
38-### Also see
39-
40-- [Bash cheatsheet](./bash)
41-
42-Zsh is mostly compatible with Bash, so most everything in Bash's cheatsheet also applies.
43-
44-https://devhints.io/ cheatsheets - Copyright (c) 2021 Rico Sta. Cruz and contributors - MIT license
45-micro-cheat plugin Copyright 2022 Tero Karvinen https://TeroKarvinen.com/micro - MIT license
+0, -1
......@@ -1 +0,0 @@
1-2024/12/29 01:44:02 Micro started
+0, -40
......@@ -1,40 +0,0 @@
1--- micro-cheat copyright 2022 Tero Karvinen https://TeroKarvinen.com
2-
3--- Cheatsheets are copyrighted by their original authors
4-
5--- Cheatsheets from Devhints.io are copyright 2021
6--- Rico Sta. Cruz and contributors, received under the MIT license
7-
8-local micro = import("micro")
9-local config = import("micro/config")
10-
11-local cheatdir = config.ConfigDir.."/plug/cheat/cheatsheets/"
12-
13-function init()
14- -- runs once when micro starts
15- config.MakeCommand("cheat", cheatCommand, config.NoComplete)
16- config.TryBindKey("F1", "command:cheat", false)
17-end
18-
19-function cheatCommand(bp)
20- local filename = bp.Buf:GetName()
21- local filetype = bp.Buf:FileType()
22-
23- if "Vagrantfile" == filename or "Dockerfile" == filename then
24- filetype = filename:lower()
25- micro.InfoBar():Message("Cheatsheet by file name: "..filename)
26- elseif string.find(filename, "\.org$") then -- not detected by micro
27- filetype = "org"
28- micro.InfoBar():Message("Cheatsheet by file suffix: "..filename)
29- elseif "unknown" ~= filetype then
30- -- micro hopefully detected the filetype, the typical case
31- micro.InfoBar():Message("Cheatsheet by file type: "..filetype)
32- else
33- micro.InfoBar():Message("Cheatsheet not found for type '"..filetype.."', filename '"..filename.."'")
34- return
35- end
36-
37- local cmd = "tab " .. cheatdir .. filetype .. ".md"
38- bp:HandleCommand(cmd)
39-
40-end
+0, -35
......@@ -1,35 +0,0 @@
1-[{
2- "Name": "cheat",
3- "Description": "F1 for cheatsheet related to the type of file you're editing: Lua, Go, Python...",
4- "Website": "https://terokarvinen.com/micro",
5- "Tags": ["cheatsheet", "help", "docs", "Lua", "Go", "Python", "reference"],
6- "Versions": [
7- {
8- "Version": "0.0.4",
9- "Url": "https://github.com/terokarvinen/micro-cheat/archive/v0.0.4.zip",
10- "Require": {
11- "micro": ">=2.0.0"
12- }
13- },
14- {
15- "Version": "0.0.3",
16- "Url": "https://github.com/terokarvinen/micro-cheat/archive/v0.0.3.zip",
17- "Require": {
18- "micro": ">=2.0.0"
19- }
20- },
21- {
22- "Version": "0.0.2",
23- "Url": "https://github.com/terokarvinen/micro-cheat/archive/v0.0.2.zip",
24- "Require": {
25- "micro": ">=2.0.0"
26- }
27- },
28- {
29- "Version": "0.0.1",
30- "Require": {
31- "micro": ">=2.0.0"
32- }
33- }
34- ]
35-}]
+0, -6
......@@ -1,6 +0,0 @@
1-Version 1.2.1
2-* Fixed utf8 character count
3-
4-Version 1.2.0
5-+ Now counts lines
6-+ Added Support for counting lines, words and characters in selection
+0, -21
......@@ -1,21 +0,0 @@
1-MIT License
2-
3-Copyright (c) 2020 bananaapple
4-
5-Permission is hereby granted, free of charge, to any person obtaining a copy
6-of this software and associated documentation files (the "Software"), to deal
7-in the Software without restriction, including without limitation the rights
8-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9-copies of the Software, and to permit persons to whom the Software is
10-furnished to do so, subject to the following conditions:
11-
12-The above copyright notice and this permission notice shall be included in all
13-copies or substantial portions of the Software.
14-
15-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21-SOFTWARE.
+0, -4
......@@ -1,4 +0,0 @@
1-# Micro Word Count Plugin
2-
3-Word, character and line counter for micro editor.
4-(forked from https://github.com/adamnpeace/micro-wc-plugin)
+0, -25
......@@ -1,25 +0,0 @@
1-# WordCount (wc) Plugin #
2-
3-The wc plugin provides the user with the ability to count either
4-characters or strings in any text being edited with micro.
5-
6-A word is defined as a string of characters delimited by white
7-space characters. White space characters are the set of characters
8-for which the iswspace(3) function returns true.
9-
10-A line is defined as a string of characters delimited by \n
11-characters, or by the beginning or end of the file. \r\n line
12-endings will be counted correctly as well, since there is only
13-one \n per \r\n.
14-
15-Character count includes white space and newline characters.
16-
17-To initiate the function, you can either:
18-
19-Press "F5"
20-
21-Or run:
22-
23-```
24-> wc
25-```
+0, -10
......@@ -1,10 +0,0 @@
1-{
2- "name": "wc",
3- "description": "Word count plugin",
4- "website": "",
5- "install": "",
6- "version": "1.2.1",
7- "require": [
8- "micro >= 2.0.0"
9- ]
10-}
+0, -22
......@@ -1,22 +0,0 @@
1-[{
2- "Name": "wc",
3- "Description": "Plugin to count words/characters in micro",
4- "Tags": ["wc", "word", "character", "count"],
5- "Website": "https://github.com/adamnpeace/micro-wc-plugin",
6- "Versions": [
7- {
8- "Version": "1.1.0",
9- "Url": "https://github.com/adamnpeace/micro-wc-plugin/archive/v1.1.0.zip",
10- "Require": {
11- "micro": ">=2.0.0-1"
12- }
13- },
14- {
15- "Version": "1.0.1",
16- "Url": "https://github.com/adamnpeace/micro-wc-plugin/archive/v1.0.1.zip",
17- "Require": {
18- "micro": ">=1.1.0"
19- }
20- }
21- ]
22-}]
+0, -37
......@@ -1,37 +0,0 @@
1-VERSION = "1.2.1"
2-
3-local micro = import("micro")
4-local config = import("micro/config")
5-local util = import("micro/util")
6-local utf8 = import("unicode/utf8")
7-
8-function init()
9- config.MakeCommand("wc", wordCount, config.NoComplete)
10- config.AddRuntimeFile("wc", config.RTHelp, "help/wc.md")
11- config.TryBindKey("F5", "lua:wc.wordCount", false)
12-end
13-
14-function wordCount(bp)
15- -- Buffer of selection/whole document
16- local buffer
17- --Get active cursor (to get selection)
18- local cursor = bp.Buf:GetActiveCursor()
19- --If cursor exists and there is selection, convert selection byte[] to string
20- if cursor and cursor:HasSelection() then
21- buffer = util.String(cursor:GetSelection())
22- else
23- --no selection, convert whole buffer byte[] to string
24- buffer = util.String(bp.Buf:Bytes())
25- end
26- --length of the buffer/selection (string), utf8 friendly
27- charCount = utf8.RuneCountInString(buffer)
28- --Get word/line count using gsub's number of substitutions
29- -- number of substitutions, pattern: %S+ (more than one non-whitespace characters)
30- local _ , wordCount = buffer:gsub("%S+","")
31- -- number of substitutions, pattern: \n (number of newline characters)
32- local _, lineCount = buffer:gsub("\n", "")
33- --add one to line count (since we're counting separators not lines above)
34- lineCount = lineCount + 1
35- --display the message
36- micro.InfoBar():Message("Lines:" .. lineCount .. " Words:"..wordCount.." Characters:"..charCount)
37-end
+0, -111
......@@ -1,111 +0,0 @@
1-[General]
2-AskOnExit=false
3-BoldIntense=true
4-BookmarksFile=/home/kat/.config/qterminal.org/qterminal_bookmarks.xml
5-BookmarksVisible=true
6-Borderless=false
7-ChangeWindowIcon=true
8-ChangeWindowTitle=true
9-CloseTabOnMiddleClick=true
10-ConfirmMultilinePaste=true
11-DisableBracketedPasteMode=false
12-FixedTabWidth=true
13-FixedTabWidthValue=500
14-HandleHistory=
15-HideTabBarWithOneTab=false
16-HistoryLimited=true
17-HistoryLimitedTo=1000
18-KeyboardCursorShape=0
19-LastWindowMaximized=true
20-MenuVisible=true
21-MotionAfterPaste=2
22-NoMenubarAccel=true
23-OpenNewTabRightToActiveTab=false
24-PrefDialogSize=@Size(700 700)
25-SavePosOnExit=true
26-SaveSizeOnExit=true
27-ScrollbarPosition=2
28-ShowCloseTabButton=true
29-TabBarless=false
30-TabsPosition=0
31-Term=xterm-256color
32-TerminalBackgroundImage=
33-TerminalBackgroundMode=0
34-TerminalMargin=0
35-TerminalTransparency=0
36-TerminalsPreset=0
37-TrimPastedTrailingNewlines=false
38-UseBookmarks=false
39-UseCWD=false
40-UseFontBoxDrawingChars=false
41-colorScheme=DarkPastels
42-emulation=default
43-enabledBidiSupport=true
44-fontFamily=Ubuntu Mono
45-fontSize=14
46-guiStyle=
47-highlightCurrentTerminal=false
48-showTerminalSizeHint=true
49-version=0.17.0
50-
51-[DropMode]
52-Height=45
53-KeepOpen=false
54-ShortCut=F12
55-ShowOnStart=true
56-Width=70
57-
58-[MainWindow]
59-ApplicationTransparency=15
60-fixedSize=@Size(600 400)
61-pos=@Point(0 32)
62-size=@Size(1920 1020)
63-state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\0\xfc\x2\0\0\0\x1\xfb\0\0\0&\0\x42\0o\0o\0k\0m\0\x61\0r\0k\0s\0\x44\0o\0\x63\0k\0W\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x9b\x1\0\0\x3\0\0\a\x80\0\0\x3\xdf\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\0)
64-
65-[Sessions]
66-size=0
67-
68-[Shortcuts]
69-Add%20Tab=Ctrl+Shift+T
70-Bottom%20Subterminal=Alt+Down
71-Clear%20Active%20Terminal=Ctrl+Shift+X
72-Close%20Tab=Ctrl+Shift+W
73-Collapse%20Subterminal=
74-Copy%20Selection=Ctrl+Shift+C
75-Find=Ctrl+Shift+F
76-Fullscreen=F11
77-Handle%20history=
78-Hide%20Window%20Borders=
79-Left%20Subterminal=Alt+Left
80-Move%20Tab%20Left=Alt+Shift+Left|Ctrl+Shift+PgUp
81-Move%20Tab%20Right=Alt+Shift+Right|Ctrl+Shift+PgDown
82-New%20Window=Ctrl+Shift+N
83-Next%20Tab=Ctrl+PgDown
84-Next%20Tab%20in%20History=Ctrl+Shift+Tab
85-Paste%20Clipboard=Ctrl+Shift+V
86-Paste%20Selection=Shift+Ins
87-Preferences...=
88-Previous%20Tab=Ctrl+PgUp
89-Previous%20Tab%20in%20History=Ctrl+Tab
90-Quit=
91-Rename%20Session=Alt+Shift+S
92-Right%20Subterminal=Alt+Right
93-Show%20Tab%20Bar=
94-Split%20Terminal%20Horizontally=
95-Split%20Terminal%20Vertically=
96-Tab%201=
97-Tab%2010=
98-Tab%202=
99-Tab%203=
100-Tab%204=
101-Tab%205=
102-Tab%206=
103-Tab%207=
104-Tab%208=
105-Tab%209=
106-Toggle%20Bookmarks=Ctrl+Shift+B
107-Toggle%20Menu=Ctrl+Shift+M
108-Top%20Subterminal=Alt+Up
109-Zoom%20in=Ctrl++
110-Zoom%20out=Ctrl+-
111-Zoom%20reset=Ctrl+0
+0, -25
......@@ -1,25 +0,0 @@
1-[Base]
2-defDir=/media/kat/disk/Pictures/Screenshots
3-defImgFormat=png
4-defScreenshotType=Area
5-includeCursor=false
6-insDateTimeInFilename=false
7-noDecorations=false
8-templateDateTime=yyyy-MM-dd-hh-mm-ss
9-
10-[Display]
11-lastSelection=@Rect(392 178 1096 588)
12-zoomAroundMouse=false
13-
14-[GlobalShortcuts]
15-ActiveWindow=
16-AreaSelection=
17-FullScreen=
18-
19-[LocalShortcuts]
20-Close=Esc
21-CopyScreen=Ctrl+C
22-Help=F1
23-NewScreen=Ctrl+N
24-Options=Ctrl+P
25-SaveScreen=Ctrl+S
+0, -431
......@@ -1,431 +0,0 @@
1-[Analyzer]
2-framerate=25
3-type=NyanCatAnalyzer
4-
5-[Appearance]
6-background_image_do_not_cut=true
7-background_image_keep_aspect_ratio=true
8-background_image_max_size=0
9-background_image_position=5
10-background_image_stretch=false
11-background_image_type=1
12-blur_radius=0
13-icon_size_configure_buttons=16
14-icon_size_left_panel_buttons=22
15-icon_size_play_control_buttons=32
16-icon_size_playlist_buttons=20
17-icon_size_tabbar_large_mode=40
18-icon_size_tabbar_small_mode=32
19-opacity_level=40
20-playlist_playing_song_color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
21-style=default
22-system_icons=false
23-tab_color=@Variant(\0\0\0\x43\x2\xff\xffOL\x87\x87\x92+\0\0)
24-tab_gradient=true
25-tab_system_color=true
26-
27-[Backend]
28-AutoCrossfadeEnabled=false
29-CrossfadeEnabled=false
30-FadeoutDuration=2000
31-FadeoutEnabled=false
32-FadeoutPauseDuration=250
33-FadeoutPauseEnabled=false
34-NoCrossfadeSameAlbum=true
35-alsaplugin=3
36-bs2b=false
37-bufferduration=4000
38-bufferhighwatermark=0.99
39-bufferlowwatermark=0.33
40-channels=2
41-channels_enabled=false
42-device=@Invalid()
43-ebur128_loudness_normalization=false
44-ebur128_target_level_lufs=-23
45-engine=gstreamer
46-http2=false
47-output=autoaudiosink
48-rgcompression=true
49-rgenabled=false
50-rgfallbackgain=0
51-rgmode=0
52-rgpreamp=0
53-strict_ssl=false
54-volume_control=true
55-
56-[Behaviour]
57-doubleclick_addmode=1
58-doubleclick_playlist_addmode=1
59-doubleclick_playmode=1
60-keeprunning=false
61-language=
62-menu_playmode=1
63-menu_previousmode=1
64-playing_widget=true
65-resumeplayback=false
66-seek_step_sec=10
67-showtrayicon=true
68-startupbehaviour=1
69-taskbar_progress=true
70-trayicon_progress=false
71-volume_increment=5
72-
73-[Collection]
74-auto_open=true
75-cache_size=160
76-cache_size_unit=1
77-cover_art_patterns=front, cover
78-delete_files=false
79-disk_cache_enable=false
80-disk_cache_size=360
81-disk_cache_size_unit=1
82-expire_unavailable_songs=60
83-group_by1=12
84-group_by2=3
85-group_by3=0
86-group_by_version=1
87-last_path=/media/kat/disk/Music/Not Mine
88-mark_songs_unavailable=true
89-monitor=true
90-overwrite_playcount=false
91-overwrite_rating=false
92-pretty_covers=true
93-save_playcounts=false
94-save_ratings=false
95-separate_albums_by_grouping=false
96-show_dividers=true
97-song_ebur128_loudness_analysis=false
98-song_tracking=false
99-sort_skips_articles=true
100-startup_scan=true
101-various_artists=true
102-
103-[Context]
104-AlbumEnable=true
105-SearchCoverEnable=true
106-SearchLyricsEnable=true
107-SongLyricsEnable=true
108-SummaryFmt=%album%
109-TechnicalDataEnable=false
110-TitleFmt=%title% - %artist%
111-font_headline=Sans Serif
112-font_normal=Sans Serif
113-font_size_headline=11
114-font_size_normal=9
115-
116-[Covers]
117-providers=Last.fm, MusicBrainz, Deezer, Musixmatch, OpenTidal, Tidal, Spotify, Qobuz
118-save_filename=2
119-save_lowercase=true
120-save_overwrite=false
121-save_pattern=%albumartist-%album
122-save_replace_spaces=true
123-save_type=1
124-types=art_unset, art_manual, art_automatic, art_embedded
125-
126-[EditTagDialog]
127-current_tab=1
128-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x2\x1e\0\0\0i\0\0\x5N\0\0\x3\x8e\0\0\x2 \0\0\0\x87\0\0\x5L\0\0\x3\x8c\0\0\0\0\0\0\0\0\a\x80\0\0\x2 \0\0\0\x87\0\0\x5L\0\0\x3\x8c)
129-
130-[Equalizer]
131-enable_stereo_balancer=false
132-enabled=false
133-presets\1\name=Classical
134-presets\1\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xd8\xff\xff\xff\xd8\xff\xff\xff\xd8\xff\xff\xff\xce)
135-presets\10\name=Live
136-presets\10\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xe7\0\0\0\0\0\0\0\x14\0\0\0\x19\0\0\0\x1e\0\0\0\x1e\0\0\0\x14\0\0\0\xf\0\0\0\xf\0\0\0\n)
137-presets\11\name=Party
138-presets\11\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0#\0\0\0#\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0#\0\0\0#)
139-presets\12\name=Pop
140-presets\12\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xf6\0\0\0\x19\0\0\0#\0\0\0(\0\0\0\x19\xff\xff\xff\xfb\xff\xff\xff\xf1\xff\xff\xff\xf1\xff\xff\xff\xf6\xff\xff\xff\xf6)
141-presets\13\name=Reggae
142-presets\13\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\xff\xff\xff\xfb\xff\xff\xff\xe2\0\0\0\0\xff\xff\xff\xdd\xff\xff\xff\xdd\0\0\0\0\0\0\0\0\0\0\0\0)
143-presets\14\name=Rock
144-presets\14\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0(\0\0\0\x19\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xec\0\0\0\x14\0\0\0-\0\0\0\x37\0\0\0\x37\0\0\0\x37)
145-presets\15\name=Ska
146-presets\15\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xf1\xff\xff\xff\xe7\xff\xff\xff\xe7\xff\xff\xff\xfb\0\0\0\x14\0\0\0\x1e\0\0\0-\0\0\0\x32\0\0\0\x37\0\0\0\x32)
147-presets\16\name=Soft
148-presets\16\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x19\0\0\0\n\xff\xff\xff\xfb\xff\xff\xff\xf1\xff\xff\xff\xfb\0\0\0\x14\0\0\0-\0\0\0\x32\0\0\0\x37\0\0\0<)
149-presets\17\name=Soft Rock
150-presets\17\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x14\0\0\0\x14\0\0\0\n\xff\xff\xff\xfb\xff\xff\xff\xe7\xff\xff\xff\xe2\xff\xff\xff\xec\xff\xff\xff\xfb\0\0\0\xf\0\0\0-)
151-presets\18\name=Techno
152-presets\18\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0(\0\0\0\x1e\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xe7\0\0\0\0\0\0\0(\0\0\0\x32\0\0\0\x32\0\0\0-)
153-presets\19\name=Zero
154-presets\19\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)
155-presets\2\name=Club
156-presets\2\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\x1e\0\0\0\x1e\0\0\0\x1e\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0)
157-presets\3\name=Custom
158-presets\3\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0)
159-presets\4\name=Dance
160-presets\4\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x32\0\0\0#\0\0\0\n\0\0\0\0\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xd8\0\0\0\0\0\0\0\0)
161-presets\5\name=Full Bass
162-presets\5\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x46\0\0\0\x46\0\0\0\x46\0\0\0(\0\0\0\x14\xff\xff\xff\xd3\xff\xff\xff\xce\xff\xff\xff\xc9\xff\xff\xff\xc9\xff\xff\xff\xc9)
163-presets\6\name=Full Bass + Treble
164-presets\6\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0#\0\0\0\x1e\0\0\0\0\xff\xff\xff\xd8\xff\xff\xff\xe7\0\0\0\n\0\0\0-\0\0\0\x37\0\0\0<\0\0\0<)
165-presets\7\name=Full Treble
166-presets\7\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\xff\xff\xff\xce\xff\xff\xff\xce\xff\xff\xff\xce\xff\xff\xff\xe7\0\0\0\xf\0\0\0\x37\0\0\0P\0\0\0P\0\0\0P\0\0\0U)
167-presets\8\name=Laptop/Headphones
168-presets\8\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x19\0\0\0\x32\0\0\0\x19\xff\xff\xff\xec\0\0\0\0\xff\xff\xff\xe2\xff\xff\xff\xd8\xff\xff\xff\xd8\0\0\0\0\0\0\0\0)
169-presets\9\name=Large Hall
170-presets\9\params=@Variant(\0\0\0\x7f\0\0\0\x12\x45qualizer::Params\0\0\0\0\0\0\0\0\x32\0\0\0\x32\0\0\0\x1e\0\0\0\x1e\0\0\0\0\xff\xff\xff\xe7\xff\xff\xff\xe7\xff\xff\xff\xe7\0\0\0\0\0\0\0\0)
171-presets\size=19
172-selected_preset=Custom
173-stereo_balance=0
174-
175-[GlobalShortcuts]
176-dec_volume=
177-inc_volume=
178-love=
179-mute=
180-next_track=Media Next
181-pause=
182-play=
183-play_pause=Media Play
184-prev_track=Media Previous
185-repeat_mode=
186-seek_backward=
187-seek_forward=
188-show_hide=
189-show_osd=
190-shuffle_mode=
191-stop=Media Stop
192-stop_after=
193-toggle_pretty_osd=
194-toggle_scrobbling=
195-use_gnome=false
196-use_kde=false
197-use_mate=false
198-use_x11=false
199-
200-[LastFM]
201-enabled=true
202-session_key=py5Cpj5PVXmR3mPxkaliet9HdIq4ufq0
203-subscriber=false
204-username=springpool
205-
206-[LibreFM]
207-enabled=false
208-
209-[ListenBrainz]
210-enabled=false
211-user_token=
212-
213-[Lyrics]
214-providers=Genius, Lyrics.ovh, LoloLyrics, Musixmatch, songlyrics.com, azlyrics.com, elyrics.net, letras.mus.br
215-
216-[MainWindow]
217-current_tab=2
218-do_not_show_sponsor_message=true
219-file_path=/home/kat
220-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0 \0\0\a\x7f\0\0\x4\x37\0\0\0\0\0\0\0\x34\0\0\x4j\0\0\x2\xe0\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0<\0\0\a\x7f\0\0\x4\x37)
221-hidden=false
222-maximized=true
223-minimized=false
224-search_for_cover_auto=true
225-show_sidebar=true
226-splitter_state=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\x1Y\0\0\x6#\0\xff\xff\xff\xff\x1\0\0\0\x1\0)
227-tab_collection=1
228-tab_context=0
229-tab_devices=7
230-tab_files=5
231-tab_mode=1
232-tab_playlists=3
233-tab_queue=2
234-tab_radios=6
235-tab_smartplaylists=4
236-
237-[Moodbar]
238-enabled=false
239-save=false
240-show=false
241-style=0
242-
243-[NetworkProxy]
244-engine=true
245-hostname=
246-mode=0
247-password=
248-port=0
249-type=3
250-use_authentication=false
251-username=
252-
253-[OSD]
254-Behaviour=1
255-CustomText1=
256-CustomText2=
257-CustomTextEnabled=false
258-ShowArt=true
259-ShowOnPausePlayback=true
260-ShowOnPlayModeChange=true
261-ShowOnResumePlayback=false
262-ShowOnVolumeChange=false
263-Timeout=5000
264-
265-[OSDPretty]
266-background_color=4284913379
267-background_opacity=0.85
268-disable_duration=false
269-fading=false
270-font="Verdana,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
271-foreground_color=4278190080
272-popup_pos=@Point(1524 0)
273-popup_screen=HDMI-0
274-
275-[OpenTidal]
276-access_token=eyJraWQiOiJ2OU1GbFhqWSIsImFsZyI6IkVTMjU2In0.eyJ0eXBlIjoibzJfYWNjZXNzIiwic2NvcGUiOiIiLCJnVmVyIjowLCJzVmVyIjowLCJjaWQiOjk3MDYsImV4cCI6MTczNDM4NDI2MCwiaXNzIjoiaHR0cHM6Ly9hdXRoLnRpZGFsLmNvbS92MSJ9.8_vc5o1C0UhXeB6t4v5GYgXqfiY3X0Fg59D_UKJGfbXxKRluQ2Muf-aEjhINFHhZAvgtVRWRlgsHlxS_x0ZjrA
277-expires_in=86400
278-login_time=1734297860
279-token_type=Bearer
280-
281-[OrganizeDialog]
282-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x2\x9d\0\0\0\x7f\0\0\x4\xe6\0\0\x3\xf8\0\0\x2\x9f\0\0\0\x9d\0\0\x4\xe4\0\0\x3\xf6\0\0\0\0\0\0\0\0\a\x80\0\0\x2\x9f\0\0\0\x9d\0\0\x4\xe4\0\0\x3\xf6)
283-
284-[Player]
285-playback_playlist=1
286-playback_position=299
287-playback_state=3
288-volume=100
289-
290-[Playlist]
291-alternating_row_colors=true
292-auto_sort=false
293-column_alignments=@Variant(\0\0\0\x7f\0\0\0\x13\x43olumnAlignmentMap\0\0\0\0\v\0\0\0\x6\0\0\0\x82\0\0\0\a\0\0\0\x82\0\0\0\b\0\0\0\x82\0\0\0\t\0\0\0\x82\0\0\0\n\0\0\0\x82\0\0\0\f\0\0\0\x82\0\0\0\r\0\0\0\x82\0\0\0\xe\0\0\0\x82\0\0\0\x11\0\0\0\x82\0\0\0\x15\0\0\0\x82\0\0\0\x16\0\0\0\x82)
294-continue_on_error=false
295-current_playlist=1
296-delete_files=false
297-editmetadatainline=true
298-glow_effect=true
299-greyout_songs_play=true
300-greyout_songs_startup=true
301-path_type=0
302-playlist_clear=true
303-rating_locked=false
304-select_track=false
305-show_bars=true
306-show_toolbar=true
307-state="@ByteArray(P,\x95\x10\0\0\0\0 \0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\b\0\0\0\x3\0\0\0\x4\0\0\0\x5\0\0\0\x6\0\0\0\a\0\0\0\t\0\0\0\n\0\0\0\v\0\0\0\f\0\0\0\r\0\0\0\xe\0\0\0\xf\0\0\0\x10\0\0\0\x11\0\0\0\x12\0\0\0\x13\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1a\0\0\0\x1b\0\0\0\x1c\0\0\0\x1d\0\0\0\x1e\0\0\0\x1f\0\0\0 \0\0\x1\xe5\0\0\x1\xbb\0\0\x1\x81\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\0\0\0\0\0\0\0\x31\0\0\0\0\0\0\0\x41\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0L\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\a\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\x6\0\0\0\b\0\0\0\n\0\0\0\xe\0\0\0 ?\xd0\x36v.hH\f?\xd3*):\xbe \x5?\xd5\x8c\xa3RO\x11\x80\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\x93\xd8\x39\x63:\xdf\x83\0\0\0\0\0\0\0\0?\xb7T\xe6\xb9[a\xdd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1)"
308-state_version=1
309-warn_close_playlist=true
310-write_metadata=false
311-
312-[Qobuz]
313-albums_group_by1=1
314-albums_group_by2=4
315-albums_group_by3=0
316-albums_group_by_version=1
317-albums_separate_albums_by_grouping=false
318-artists_group_by1=1
319-artists_group_by2=4
320-artists_group_by3=0
321-artists_group_by_version=1
322-artists_separate_albums_by_grouping=false
323-search_group_by1=1
324-search_group_by2=4
325-search_group_by3=0
326-search_group_by_version=1
327-songs_group_by1=1
328-songs_group_by2=4
329-songs_group_by3=0
330-songs_group_by_version=1
331-songs_separate_albums_by_grouping=false
332-tab=artists
333-
334-[Scrobbler]
335-albumartist=false
336-enabled=true
337-love_button=true
338-offline=false
339-scrobble_button=true
340-show_error_dialog=true
341-sources=collection, file, cd, device, subsonic, tidal, qobuz, stream, somafm, radioparadise, unknown
342-strip_remastered=true
343-submit=0
344-
345-[SerializedSmartPlaylists]
346-songs\1\data=@ByteArray(\0\0\0\0\x2\x11\0\0\0\x14\x2\0)
347-songs\1\name=Newest tracks
348-songs\1\type=1
349-songs\10\data=@ByteArray(\0\0\0\0\0\x3\0\0\0\x14\x2\x1)
350-songs\10\name=Dynamic random mix
351-songs\10\type=1
352-songs\2\data=@ByteArray(\0\0\0\0\0\x3\0\0\0\x32\x2\0)
353-songs\2\name=50 random tracks
354-songs\2\type=1
355-songs\3\data=@ByteArray(\0\0\0\x1\x13\x4\0\0\0\x2\0\0\0\0\0\0\0\0\0\x1\0\0\x3\0\0\0\x14\0\0)
356-songs\3\name=Ever played
357-songs\3\type=1
358-songs\4\data=@ByteArray(\0\0\0\x1\x13\x6\0\0\0\x2\0\0\0\0\0\0\0\0\0\x1\0\0\x3\0\0\0\x14\0\0)
359-songs\4\name=Never played
360-songs\4\type=1
361-songs\5\data=@ByteArray(\0\0\0\0\x2\x15\0\0\0\x14\x2\0)
362-songs\5\name=Last played
363-songs\5\type=1
364-songs\6\data=@ByteArray(\0\0\0\0\x2\x13\0\0\0\x14\x2\0)
365-songs\6\name=Most played
366-songs\6\type=1
367-songs\7\data=@ByteArray(\0\0\0\0\x2\x16\0\0\0\x14\x2\0)
368-songs\7\name=Favourite tracks
369-songs\7\type=1
370-songs\8\data=@ByteArray(\0\0\0\x2\x16\x5\0\0\0\x6\0?\xe0\0\0\0\0\0\0\0\0\0\0\x1\0\x14\x4\0\0\0\x2\0\0\0\0\x4\0\0\0\0\x1\0\x2\x14\0\0\0\x14\x1\0)
371-songs\8\name=Least favourite tracks
372-songs\8\type=1
373-songs\9\data=@ByteArray(\0\0\0\0\x1\x1\xff\xff\xff\xff\x2\0)
374-songs\9\name=All tracks
375-songs\9\type=1
376-songs\size=10
377-songs_version=3
378-
379-[SettingsDialog]
380-geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x2 \0\0\0\x8e\0\0\x5^\0\0\x3\xad\0\0\x2\"\0\0\0\xac\0\0\x5\\\0\0\x3\xab\0\0\0\0\0\0\0\0\a\x80\0\0\x2\"\0\0\0\xac\0\0\x5\\\0\0\x3\xab)
381-
382-[Spotify]
383-albums_group_by1=1
384-albums_group_by2=4
385-albums_group_by3=0
386-albums_group_by_version=1
387-albums_separate_albums_by_grouping=false
388-artists_group_by1=1
389-artists_group_by2=4
390-artists_group_by3=0
391-artists_group_by_version=1
392-artists_separate_albums_by_grouping=false
393-search_group_by1=1
394-search_group_by2=4
395-search_group_by3=0
396-search_group_by_version=1
397-songs_group_by1=1
398-songs_group_by2=4
399-songs_group_by3=0
400-songs_group_by_version=1
401-songs_separate_albums_by_grouping=false
402-tab=artists
403-
404-[Subsonic]
405-group_by1=1
406-group_by2=4
407-group_by3=0
408-group_by_version=1
409-separate_albums_by_grouping=false
410-
411-[Tidal]
412-albums_group_by1=1
413-albums_group_by2=4
414-albums_group_by3=0
415-albums_group_by_version=1
416-albums_separate_albums_by_grouping=false
417-artists_group_by1=1
418-artists_group_by2=4
419-artists_group_by3=0
420-artists_group_by_version=1
421-artists_separate_albums_by_grouping=false
422-search_group_by1=1
423-search_group_by2=4
424-search_group_by3=0
425-search_group_by_version=1
426-songs_group_by1=1
427-songs_group_by2=4
428-songs_group_by3=0
429-songs_group_by_version=1
430-songs_separate_albums_by_grouping=false
431-tab=artists
R home/scripts/charmbracelet_vhs/nyancat.tape => scripts/Scripts/charmbracelet_vhs/nyancat.tape
+0, -0
R home/scripts/charmbracelet_vhs/parrot.tape => scripts/Scripts/charmbracelet_vhs/parrot.tape
+0, -0
R home/scripts/charmbracelet_vhs/pbtape2.tape => scripts/Scripts/charmbracelet_vhs/pbtape2.tape
+0, -0
R home/scripts/charmbracelet_vhs/train.tape => scripts/Scripts/charmbracelet_vhs/train.tape
+0, -0
R home/scripts/lastfm.py => scripts/Scripts/lastfm.py
+0, -0
R home/scripts/phantomjs-wttr/Dockerfile => scripts/Scripts/phantomjs-wttr/Dockerfile
+0, -0
R home/scripts/phantomjs-wttr/README.md => scripts/Scripts/phantomjs-wttr/README.md
+2, -0
......@@ -1,3 +1,5 @@
1+### i don't use this anymore (i replaced it with a curl command piped to imagemagick. felt like a god doing that.) but keeping here just in case...
2+
13 ## for optiplex 9020 server
24
35 run with following cron job on the server:
R home/scripts/phantomjs-wttr/docker-compose.yml => scripts/Scripts/phantomjs-wttr/docker-compose.yml
+0, -0
R home/scripts/phantomjs-wttr/entrypoint.sh => scripts/Scripts/phantomjs-wttr/entrypoint.sh
+0, -0
R home/scripts/phantomjs-wttr/rasterize.js => scripts/Scripts/phantomjs-wttr/rasterize.js
+0, -0
R home/scripts/phantomjs-wttr/rsync.sh => scripts/Scripts/phantomjs-wttr/rsync.sh
+0, -0
+15, -0
......@@ -0,0 +1,15 @@
1+#!/bin/bash
2+
3+echo "pulling from git..." | gum style --foreground "#f4b8e4" --border none
4+
5+git pull
6+
7+echo "stowing your shit..." | gum style --foreground "#f4b8e4" --border none
8+
9+stow --adopt -v -R -t ~ "config"
10+
11+stow --adopt -v -R -t ~ "git"
12+
13+stow --adopt -v -R -t ~ "scripts"
14+
15+echo "done ^_^" | gum style --foreground "#f4b8e4" --border none
R home/config/calibre/themes/frappe/catppuccin-frappe-lavender.calibre-palette => themes/calibre/themes/frappe/catppuccin-frappe-lavender.calibre-palette
+0, -0
R home/config/lxqt/catppuccin-frappe/LICENSE => themes/lxqt/catppuccin-frappe/LICENSE
+0, -0
R home/config/lxqt/catppuccin-frappe/arrow-left.svg => themes/lxqt/catppuccin-frappe/arrow-left.svg
+0, -0
R home/config/lxqt/catppuccin-frappe/arrow-right.svg => themes/lxqt/catppuccin-frappe/arrow-right.svg
+0, -0
R home/config/lxqt/catppuccin-frappe/ic_back.png => themes/lxqt/catppuccin-frappe/ic_back.png
+0, -0
R home/config/lxqt/catppuccin-frappe/ic_next.png => themes/lxqt/catppuccin-frappe/ic_next.png
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-notificationd.qss => themes/lxqt/catppuccin-frappe/lxqt-notificationd.qss
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-notificationd/cancel.svg => themes/lxqt/catppuccin-frappe/lxqt-notificationd/cancel.svg
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-panel.qss => themes/lxqt/catppuccin-frappe/lxqt-panel.qss
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-runner.qss => themes/lxqt/catppuccin-frappe/lxqt-runner.qss
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-runner/clear.svg => themes/lxqt/catppuccin-frappe/lxqt-runner/clear.svg
+0, -0
R home/config/lxqt/catppuccin-frappe/lxqt-runner/navigation-menu.svg => themes/lxqt/catppuccin-frappe/lxqt-runner/navigation-menu.svg
+0, -0
R home/config/lxqt/catppuccin-frappe/penguin.png => themes/lxqt/catppuccin-frappe/penguin.png
+0, -0
R home/config/lxqt/catppuccin-frappe/preview.png => themes/lxqt/catppuccin-frappe/preview.png
+0, -0
R home/config/lxqt/catppuccin-frappe/preview.png~ => themes/lxqt/catppuccin-frappe/preview.png~
+0, -0
R home/config/lxqt/catppuccin-frappe/spacer-plugin/spacer-dots.png => themes/lxqt/catppuccin-frappe/spacer-plugin/spacer-dots.png
+0, -0
R home/config/lxqt/catppuccin-frappe/spacer-plugin/spacer-line.png => themes/lxqt/catppuccin-frappe/spacer-plugin/spacer-line.png
+0, -0
R home/config/lxqt/catppuccin-frappe/unknown.png => themes/lxqt/catppuccin-frappe/unknown.png
+0, -0
R home/config/lxqt/catppuccin-frappe/wallpaper.cfg => themes/lxqt/catppuccin-frappe/wallpaper.cfg
+0, -0
R home/config/lxqt/catppuccin-frappe/wallpaper.png => themes/lxqt/catppuccin-frappe/wallpaper.png
+0, -0
R home/config/qbittorrent/legacy-4.3.8-qBittorrent-bluewave2-v1.18.qbtheme => themes/qbittorrent/legacy-4.3.8-qBittorrent-bluewave2-v1.18.qbtheme
+0, -0
R home/config/qbittorrent/legacy-qBittorrent.qbtheme => themes/qbittorrent/legacy-qBittorrent.qbtheme
+0, -0
R home/config/qtermwidget5/color-schemes/Catppuccin-Frappe.colorscheme => themes/qtermwidget5/color-schemes/Catppuccin-Frappe.colorscheme
+0, -0
R home/config/thunderbird/themes/latte/frappe-lavender.xpi => themes/thunderbird/themes/latte/frappe-lavender.xpi
+0, -0
R home/config/thunderbird/themes/latte/latte-lavender.xpi => themes/thunderbird/themes/latte/latte-lavender.xpi
+0, -0