From 93444b4d839df511da00a33657d5ad3e57dc7179 Mon Sep 17 00:00:00 2001 From: Romain Prieto Date: Sun, 8 Dec 2013 19:56:16 +1100 Subject: [PATCH] initial commit --- .gitignore | 1 + README.md | 36 ++++++++++++++++++++++++++++++++++++ bin/tldr | 11 +++++++++++ lib/output.js | 37 +++++++++++++++++++++++++++++++++++++ lib/repo.js | 18 ++++++++++++++++++ lib/request.js | 14 ++++++++++++++ lib/tldr.js | 14 ++++++++++++++ package.json | 40 ++++++++++++++++++++++++++++++++++++++++ pages/osx/curl.md | 20 ++++++++++++++++++++ pages/osx/grep.md | 23 +++++++++++++++++++++++ pages/osx/less.md | 25 +++++++++++++++++++++++++ pages/osx/ps.md | 7 +++++++ pages/osx/scp.md | 20 ++++++++++++++++++++ pages/osx/tar.md | 16 ++++++++++++++++ screenshot.png | Bin 0 -> 27518 bytes server.js | 12 ++++++++++++ 16 files changed, 294 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 bin/tldr create mode 100644 lib/output.js create mode 100644 lib/repo.js create mode 100644 lib/request.js create mode 100644 lib/tldr.js create mode 100644 package.json create mode 100755 pages/osx/curl.md create mode 100755 pages/osx/grep.md create mode 100755 pages/osx/less.md create mode 100755 pages/osx/ps.md create mode 100755 pages/osx/scp.md create mode 100644 pages/osx/tar.md create mode 100644 screenshot.png create mode 100644 server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..3c3629e647 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/README.md b/README.md new file mode 100644 index 0000000000..7b385bf174 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# What is this? + +New to the command-line world? Or just a little rusty? +Or like me you can't always remember the arguments to `lsof` or `tar`? + +Maybe it doesn't help that the first option explained in `man tar` is: + +``` +-b blocksize + Specify the block size, in 512-byte records, for tape drive I/O. + As a rule, this argument is only needed when reading from or writing to tape drives, + and usually not even then as the default block size of 20 records (10240 bytes) is very common. +``` + +I'm sure people could benefit from simplified "teach me the basics" man pages. +What about: + +[tldr screenshot](http://raw.github.com/rprieto/tldr/master/screenshot.png)! + +# Installing + +```bash +$ npm install -g tldr +``` + +# Contributing + +Your favourite command isn't covered? You can think of more examples? + +Just [open an issue](http://github.com/rprieto/tldr/issues) or [send a pull request](http://github.com/rprieto/tldr/pullrequest), it's all **Markdown** stored right here on Github. + +The rough guidelines are: + +- the main description is 2 or 3 bullet points (80 columns) +- give around 5 examples of the most common usages +- when in doubt, keep new command-line users in mind diff --git a/bin/tldr b/bin/tldr new file mode 100644 index 0000000000..eceb314914 --- /dev/null +++ b/bin/tldr @@ -0,0 +1,11 @@ +#!/usr/bin/env node + +var util = require('util'); +var tldr = require('../lib/tldr'); + +if (process.argv.length != 3) { + util.log('Usage: tldr '); + process.exit(1); +} else { + tldr.get(process.argv[2]); +} diff --git a/lib/output.js b/lib/output.js new file mode 100644 index 0000000000..78de4b15a6 --- /dev/null +++ b/lib/output.js @@ -0,0 +1,37 @@ +var markit = require('markit'); +var colors = require('ansicolors'); +var styles = require('ansistyles'); + +exports.fromMarkdown = function(markdown) { + var r = new markit.Renderer(); + + // automatically created by new lines + r.paragraph = function(text) { + return text; + }; + + // high-level command description + r.list = function(body, ordered) { + return body + '\n'; + } + + r.listitem = function(text) { + return ' ' + styles.italic(styles.bright(text)) + '\n'; + }; + + // description for each example + r.header = function(text, level) { + if (level == 2) { + return colors.green(' - ' + text) + '\n'; + } else { + return ''; + } + }; + + // example code + r.codespan = function(code, lang) { + return ' ' + colors.white(' ' + colors.bgBlack(code)) + '\n\n'; + }; + + return markit(markdown, {renderer: r}); +}; diff --git a/lib/repo.js b/lib/repo.js new file mode 100644 index 0000000000..6a88a1c8ee --- /dev/null +++ b/lib/repo.js @@ -0,0 +1,18 @@ +var os = require('os'); +var util = require('util'); + +exports.url = function(command) { + if (process.env.NODE_ENV == 'development') { + return 'http://localhost:3000/pages/' + osGroup() + '/' + command + '.md'; + } else { + return 'http://raw.github.com/rprieto/tldr/master/pages/' + osGroup() + '/' + command + '.md'; + } +} + +function osGroup() { + if (os.platform() == 'darwin') { + return 'osx'; + } else { + return 'unsupported'; + } +} diff --git a/lib/request.js b/lib/request.js new file mode 100644 index 0000000000..0782b51430 --- /dev/null +++ b/lib/request.js @@ -0,0 +1,14 @@ +var request = require('request'); +var repo = require('./repo'); + +exports.get = function(command, done) { + // TODO: add local disk cache that respects HTTP headers + // for example https://github.com/matteoagosti/node-request-caching + request.get(repo.url(command), function(err, res, body) { + if (err || res.statusCode != 200) { + done(command + ' command not available'); + } else { + done(null, body); + } + }) +}; diff --git a/lib/tldr.js b/lib/tldr.js new file mode 100644 index 0000000000..4f38a1b547 --- /dev/null +++ b/lib/tldr.js @@ -0,0 +1,14 @@ +var util = require('util'); +var request = require('./request'); +var output = require('./output'); + +exports.get = function(command) { + request.get(command, function(err, body) { + if (err) { + util.error(err); + process.exit(1); + } else { + util.puts(output.fromMarkdown(body)); + } + }); +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000000..a91c52e648 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "tldr", + "version": "0.0.1", + "description": "Simplified and community-driven man pages", + "author": "Romain Prieto", + "license": "BSD", + "repository": { + "type": "git", + "url": "https://github.com/rprieto/tldr.git" + }, + "keywords": [ + "tldr", + "man", + "unix", + "commands" + ], + "main": "./bin/tldr", + "bin": { + "tldr": "./bin/tldr" + }, + "directories": { + "test": "test" + }, + "scripts": { + "start": "NODE_ENV=development node server.js", + "example": "NODE_ENV=development node ./bin/tldr tar", + "test": "./node_modules/.bin/mocha" + }, + "dependencies": { + "request": "~2.29.0", + "markit": "~0.1.0", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3" + }, + "devDependencies": { + "mocha": "~1.15.1", + "connect": "~2.11.2", + "should": "~2.1.1" + } +} diff --git a/pages/osx/curl.md b/pages/osx/curl.md new file mode 100755 index 0000000000..6a6bcb5bb7 --- /dev/null +++ b/pages/osx/curl.md @@ -0,0 +1,20 @@ +# curl + +- Transfers data from or to a server +- Supports most protocols including HTTP, FTP, POP + +## Head request + +`curl --head http://localhost` + +## Send form-encoded data + +`curl --data name=bob http://localhost/form` + +## Send JSON data + +`curl -X POST -H "Content-Type: application/json" -d '{"name":"bob"}' http://localhost/login` + +## Specify an HTTP method + +`curl -X DELETE http://localhost/item/123` diff --git a/pages/osx/grep.md b/pages/osx/grep.md new file mode 100755 index 0000000000..73962ec6f2 --- /dev/null +++ b/pages/osx/grep.md @@ -0,0 +1,23 @@ +# grep + +- Matches patterns in input text +- Supports simple patterns and regular expressions + +## Search for an exact string +`grep something FILE` + +## Use a regex instead of a word + +`grep -e ^regex$ FILE` + +## See 3 lines of context + +`grep -C 3 something FILE` + +## Print the count of matches + +`grep -c something FILE` + +## Use the standard input instead + +`cat FILE | grep something` diff --git a/pages/osx/less.md b/pages/osx/less.md new file mode 100755 index 0000000000..cf5dc8eb07 --- /dev/null +++ b/pages/osx/less.md @@ -0,0 +1,25 @@ +# less + +- Opens a file for reading +- Allows movement and search +- Doesn't read the entire file (suitable for logs) + +## Open a file + +`less source_file` + +## Page up / down + +`d (next), D (previous)` + +## Start / end of file + +`g (start), G (end)` + +## Search for a string + +`/something then n (next), N (previous)` + +## Exit + +`q` diff --git a/pages/osx/ps.md b/pages/osx/ps.md new file mode 100755 index 0000000000..425d0709df --- /dev/null +++ b/pages/osx/ps.md @@ -0,0 +1,7 @@ +# ps + +- Information about running processes + +## List all running processes + +`ps aux` diff --git a/pages/osx/scp.md b/pages/osx/scp.md new file mode 100755 index 0000000000..4968c70af9 --- /dev/null +++ b/pages/osx/scp.md @@ -0,0 +1,20 @@ +# scp + +- Copies files between hosts on a network +- Works over a secure connection (SSH) + +## Uploading a file + +`scp local_file 10.0.0.1:/remote/path/filename` + +## Uploading a directory + +`scp -r local_folder 10.0.0.1:/remote/path/` + +## Downloading a file + +`scp 10.0.0.1:/remote/path/filename local_file` + +## Specifying credentials + +`scp local_file my_user@10.0.0.1:/remote/path` diff --git a/pages/osx/tar.md b/pages/osx/tar.md new file mode 100644 index 0000000000..e26c6a2cd7 --- /dev/null +++ b/pages/osx/tar.md @@ -0,0 +1,16 @@ +# tar + +- Archiving utility +- Supports tar / gzip / bzip + +## create an archive from files + +`tar cf target.tar file1 file2 file3` + +## create a gzipped archive + +`tar cfz target.tar.gz file1 file2 file3` + +## extract an archive in a target folder + +`tar xf source.tar -C folder` diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d20e57ab53a7371bb308ff3d176e0e176d0dcd69 GIT binary patch literal 27518 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

n9(=!AY~*f72RhZq#mm!L042sh*v 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 yMft`_7uH8KLj$8gR~!@