From 591d85c00ea8c833b5687c512191eec052e747df Mon Sep 17 00:00:00 2001 From: Lauri Piisang Date: Wed, 11 Jul 2018 14:24:46 +0300 Subject: [PATCH 01/49] remove unnecessary recursive flag You are dealing with files, not directories, so using recursive flag for removal can only create potential disaster scenarios (in case variable is blank for example). Most likely, you don't need the `-f` flag either. --- share/cht.sh.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/cht.sh.txt b/share/cht.sh.txt index 1031368..4551737 100755 --- a/share/cht.sh.txt +++ b/share/cht.sh.txt @@ -149,7 +149,7 @@ mkdir -p "$HOME/.cht.sh/" lines=$(tput lines) TMP1=$(mktemp /tmp/cht.sh.XXXXXXXXXXXXX) -trap 'rm -rf $TMP1 $TMP2' EXIT +trap 'rm -f $TMP1 $TMP2' EXIT trap 'true' INT if ! [ -e "$HOME/.cht.sh/.hushlogin" ] && [ -z "$this_query" ]; then From c06a9e9410fe6b5d8089e05a48b8bf90d164a5fb Mon Sep 17 00:00:00 2001 From: Sven Neuhaus Date: Wed, 11 Jul 2018 14:50:23 +0200 Subject: [PATCH 02/49] "what ... looks like" instead of "how ... looks like" --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 34ca9cb..c53cde8 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Unified access to the best community driven cheat sheets repositories of the world. Let's imagine for a moment that there is such a thing as an ideal cheat sheet. -How it should look like? +What it should look like? What features should it have? * **concise** — it should be concise; it should contain only things you need and nothing else; @@ -82,7 +82,7 @@ If there is no cheat sheet for some programming language query (and it is almost it is generated on the fly, basing on available cheat sheets and answers on StackOverflow. Of course, there is no guarantee that the returned cheat sheet will be a 100% hit, but it is almost always exactly what you are looking for. -Try these (and your own) queries to get the impression of that, how the answers look like: +Try these (and your own) queries to get the impression of that, what the answers look like: ``` curl cht.sh/go/reverse+a+list curl cht.sh/python/random+list+elements @@ -375,7 +375,7 @@ and eventually copying the code snippets you need into the clipboard and later pasting them into the editor, you can achieve the same instantly and without leaving the editor at all! -Here is how it looks like in Vim: +Here is what it looks like in Vim: 1. If you have a question while editing a program, you can just type your question directly in the buffer and press `KK`. You will get From d8e48d38c4a612057d2255c7b19f4137b636a30b Mon Sep 17 00:00:00 2001 From: Juan Pablo Orsay Date: Wed, 11 Jul 2018 10:42:03 -0300 Subject: [PATCH 03/49] Using pbcopy/pbpaste in macOS instead --- share/cht.sh.txt | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/share/cht.sh.txt b/share/cht.sh.txt index 4551737..b1b99fe 100755 --- a/share/cht.sh.txt +++ b/share/cht.sh.txt @@ -29,6 +29,11 @@ __CHTSH_DATETIME="2018-07-08 22:26:46 +0200" export LESSSECURE=1 STEALTH_MAX_SELECTION_LENGTH=5 +case "$OSTYPE" in + darwin*) is_macos=yes ;; + *) is_macos=no ;; +esac + get_query_options() { local query="$*" @@ -141,7 +146,9 @@ else fi fi -which xsel >& /dev/null || { echo 'DEPENDENCY: please install "xsel" for "copy"' >&2; } +if [ "$is_macos" != yes ]; then + which xsel >& /dev/null || { echo 'DEPENDENCY: please install "xsel" for "copy"' >&2; } +fi which rlwrap >& /dev/null || { echo 'DEPENDENCY: install "rlwrap" to use cht.sh in the shell mode' >&2; exit 1; } which curl >& /dev/null || { echo 'DEPENDENCY: install "curl" to use cht.sh' >&2; exit 1; } @@ -227,7 +234,11 @@ EOF continue else curl -s https://cht.sh/"$(get_query_options "$query"?T)" > "$TMP1" - xsel -i < "$TMP1" + if [ "$is_macos" != yes ]; then + xsel -i < "$TMP1" + else + cat "$TMP1" | pbcopy + fi echo "copy: $(wc -l "$TMP1" | awk '{print $1}') lines copied to the selection" continue fi @@ -242,7 +253,11 @@ EOF continue else curl -s https://cht.sh/"$(get_query_options "$query"?TQ)" > "$TMP1" - xsel -i < "$TMP1" + if [ "$is_macos" != yes ]; then + xsel -i < "$TMP1" + else + cat "$TMP1" | pbcopy + fi echo "copy: $(wc -l "$TMP1" | awk '{print $1}') lines copied to the selection" continue fi @@ -299,7 +314,11 @@ EOF arguments=$(echo "$input" | sed 's/stealth //; s/ /\&/') fi trap break SIGINT - past=$(xsel -o) + if [ "$is_macos" == yes ]; then + past=$(pbpaste) + else + past=$(xsel -o) + fi printf "\033[0;31mstealth:\033[0m you are in the stealth mode; select any text in any window for a query\n" printf "\033[0;31mstealth:\033[0m selections longer than $STEALTH_MAX_SELECTION_LENGTH words are ignored\n" if [ -n "$arguments" ]; then @@ -307,7 +326,11 @@ EOF fi printf "\033[0;31mstealth:\033[0m use ^C to leave this mode\n" while true; do - current=$(xsel -o) + if [ $is_macos == yes ]; then + current=$(pbpaste) + else + current=$(xsel -o) + fi if [ "$past" != "$current" ]; then past=$current current_text="$(echo $current | tr -c '[a-zA-Z0-9]' ' ')" From 3ce21e7d6b8b91a540bfc00ee5ddf04c105ead7a Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Wed, 11 Jul 2018 17:18:20 +0100 Subject: [PATCH 04/49] Correct spelling mistake. --- README.md | 4 ++-- lib/beautifier.py | 2 +- lib/cheat_wrapper.py | 4 ++-- lib/get_answer.py | 2 +- lib/globals.py | 2 +- lib/panela/panela_colors.py | 8 ++++---- share/ansi2html.sh | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index c53cde8..e871333 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ Read more about the programming languages queries below. ## Command line client, cht.sh The cheat.sh service has its own command line client (`cht.sh`), that, -comparing to quering the service directly with `curl`, +comparing to querying the service directly with `curl`, has several useful features: * Special shell mode with a persistent queries context and readline support; @@ -654,7 +654,7 @@ of the repository, whom belongs the current cheat sheet. You can edit the cheat sheet directly in your browser (you need a github account for it). There is a edit button in the top right corner. If you click on it, an editor will be open. There you will change the cheat sheet (under the hood: the upstrem repository is forked, your changes are -commited in the forked repository, a pull request to the upstream repository owner is sent). +committed in the forked repository, a pull request to the upstream repository owner is sent). ![cheat.sh cheat sheets repositories](http://cheat.sh/files/edit-cheat-sheet.png) diff --git a/lib/beautifier.py b/lib/beautifier.py index bbe974c..48491fd 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -148,7 +148,7 @@ def _classify_lines(lines): def _wrap_lines(lines_classes, unindent_code=False): """ - Wrap classified lines. Add the splitted lines to the stream. + Wrap classified lines. Add the split lines to the stream. If `unindent_code` is True, remove leading four spaces. """ diff --git a/lib/cheat_wrapper.py b/lib/cheat_wrapper.py index cb3eca0..49f5d9c 100644 --- a/lib/cheat_wrapper.py +++ b/lib/cheat_wrapper.py @@ -179,7 +179,7 @@ def _render_html(query, result, editable, repository_button, request_options): edit_button = '' if editable: - # It's possible that topic directory starts with omited underscore + # It's possible that topic directory starts with omitted underscore if '/' in query: query = '_' + query edit_page_link = 'https://github.com/chubin/cheat.sheets/edit/master/sheets/' + query @@ -268,7 +268,7 @@ def _visualize(query, keyword, answers, request_options, html=None): # pylint: d def cheat_wrapper(query, request_options=None, html=False): """ Giant megafunction that delivers cheat sheet for `query`. - If `html` is True, the answer is formated as HTML. + If `html` is True, the answer is formatted as HTML. Additional request options specified in `request_options`. This function is really really bad, and should be rewritten diff --git a/lib/get_answer.py b/lib/get_answer.py index 8776ad5..2fc4a9a 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -245,7 +245,7 @@ def _get_cheat(topic): def _get_cheat_sheets(topic): """ Get the cheat sheet topic from the own repository (cheat.sheets). - It's possible that topic directory starts with omited underscore + It's possible that topic directory starts with omitted underscore """ filename = PATH_CHEAT_SHEETS + "%s" % topic if not os.path.exists(filename): diff --git a/lib/globals.py b/lib/globals.py index d4664a5..76e6636 100644 --- a/lib/globals.py +++ b/lib/globals.py @@ -1,6 +1,6 @@ """ Global configuration of the project. -All hardcoded pathes should be (theoretically) here. +All hardcoded paths should be (theoretically) here. """ from __future__ import print_function diff --git a/lib/panela/panela_colors.py b/lib/panela/panela_colors.py index 649bb1f..4c1eaa2 100644 --- a/lib/panela/panela_colors.py +++ b/lib/panela/panela_colors.py @@ -6,7 +6,7 @@ import itertools """ -After panela will be ready for it, it will be splitted out in a separate project, +After panela will be ready for it, it will be split out in a separate project, that will be used for all chubin's console services. There are several features that not yet implemented (see ___doc___ in Panela) @@ -206,7 +206,7 @@ class Panela: """ Paste starting at , . If is True current panela space will be automatically extended - If is True, then is overlayed and characters behind them are seen + If is True, then is overlaid and characters behind them are seen """ # FIXME: @@ -278,7 +278,7 @@ class Panela: def put_point(self, col, row, char=None, color=None, background=None): """ - Puts charachter with color and background color on the field. + Puts character with color and background color on the field. Char can be a Point or a character. """ @@ -305,7 +305,7 @@ class Panela: def put_line(self, x1, y1, x2, y2, char=None, color=None, background=None): """ Draw line (x1, y1) - (x2, y2) fith foreground color , background color - and charachter , if specified. + and character , if specified. """ def get_line(start, end): diff --git a/share/ansi2html.sh b/share/ansi2html.sh index 2221a1e..964ffdd 100644 --- a/share/ansi2html.sh +++ b/share/ansi2html.sh @@ -453,7 +453,7 @@ function encode(string,start,end,i,ret,pos,sc,buf) { } if(dumpStatus==dsNew) { # After moving/clearing we are now ready to write - # somthing to the screen so start recording now + # something to the screen so start recording now ret=ret"\n" dumpStatus=dsActive } From 5edf7fda28e6967c3d2630d42794224b574d2261 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 00:48:08 -0300 Subject: [PATCH 05/49] fix grammar and punctuation a bit --- README.md | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index e871333..3fa9b16 100644 --- a/README.md +++ b/README.md @@ -4,15 +4,15 @@ Unified access to the best community driven cheat sheets repositories of the world. Let's imagine for a moment that there is such a thing as an ideal cheat sheet. -What it should look like? +What should it look like? What features should it have? -* **concise** — it should be concise; it should contain only things you need and nothing else; -* **fast** — it should be possible to use it instantly; -* **comprehensive** — it should contain answers for every question you could have; -* **universal** — it should be available everywhere, as soon as needed, without any preparations; -* **unobtrusive** — it does not distract you from your main task when you are using it; -* **tutoring** — it helps you to learn the subject; +* **concise** — it should be concise; it should only contain the things you need, and nothing else. +* **fast** — it should be possible to use it instantly. +* **comprehensive** — it should contain answers for every question you could have. +* **universal** — it should be available everywhere, as soon as needed, without any preparations. +* **unobtrusive** — it does not distract you from your main task when you are using it. +* **tutoring** — it helps you to learn the subject. * **inconspicuous** — it should be possible to use it completely unnoticed. Such a thing does exist. @@ -21,14 +21,14 @@ Such a thing does exist. **cheat.sh** -* has simple curl/browser interface; -* covers 55 programming languages, several DBMSes, and more than 1000 most important UNIX/Linux commands; -* provides access to the best community driven cheat sheets repositories in the world as well as to StackOverflow; -* available everywhere, no installation needed; -* ultrafast, returns answers, as a rule, within 100 ms; -* has a convenient command line client, `cht.sh`, that is very advantageous and helpful, though not mandatory; -* can be used directly from code editors, without opening a browser and not switching your mental context; -* supports a special mode (stealth mode), where it can be used fully invisibly, not even touching a key and not making a sound. +* Has a simple curl/browser interface; +* Covers 55 programming languages, several DBMSes, and more than 1000 most important UNIX/Linux commands. +* Provides access to the best community driven cheat sheets repositories in the world as well as to StackOverflow. +* Available everywhere, no installation needed. +* Ultrafast, returns answers, as a rule, within 100 ms. +* Has a convenient command line client, `cht.sh`, that is very advantageous and helpful, though not mandatory. +* Can be used directly from code editors, without opening a browser and not switching your mental context. +* Supports a special mode (stealth mode), where it can be used fully invisibly, not even touching a key and not making a sound.

@@ -151,10 +151,10 @@ Full list of all options described below and in `/:help`. Try your own queries. Follow these rules: -1. Try to be more specific (`/python/append+file` is better than `/python/file` and `/python/append`); -2. Ask practical question if possible (yet theoretical question are possible too); -3. Ask programming language questions only; specify the name of the programming language as the section name; -4. Separate words with `+` instead of spaces; +1. Try to be more specific (`/python/append+file` is better than `/python/file` and `/python/append`). +2. Ask practical question if possible (yet theoretical question are possible too). +3. Ask programming language questions only; specify the name of the programming language as the section name. +4. Separate words with `+` instead of spaces. 5. Do not use special characters, they are ignored anyway. Read more about the programming languages queries below. @@ -165,10 +165,10 @@ The cheat.sh service has its own command line client (`cht.sh`), that, comparing to querying the service directly with `curl`, has several useful features: -* Special shell mode with a persistent queries context and readline support; -* Queries history; -* Clipboard integration; -* Tab completion support for shells (bash, fish, zsh); +* Special shell mode with a persistent queries context and readline support. +* Queries history. +* Clipboard integration. +* Tab completion support for shells (bash, fish, zsh). * Stealth mode. To install the client: @@ -288,8 +288,8 @@ One of the important properties of any real cheat sheet, is that it could be used fully unnoticed. cheat.sh can be used completely unnoticed too. The cheat.sh client, `cht.sh`, has -a special mode, called **stealth mode**, using that you don't even need to touch your -keyboard to open some cheat sheet. +a special mode, called **stealth mode**. Using that you don't even need to touch your +keyboard to open a cheat sheet. In this mode, as soon as you select some text with the mouse (and thus it is added into the selection buffer of X Window System or into the clipboard) it's used From aeeef1c978830d624e8d2f026cb7a7b8fbface4e Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 00:50:00 -0300 Subject: [PATCH 06/49] add uppercase where it seemed fit --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3fa9b16..22e6b1e 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ Let's imagine for a moment that there is such a thing as an ideal cheat sheet. What should it look like? What features should it have? -* **concise** — it should be concise; it should only contain the things you need, and nothing else. -* **fast** — it should be possible to use it instantly. -* **comprehensive** — it should contain answers for every question you could have. -* **universal** — it should be available everywhere, as soon as needed, without any preparations. -* **unobtrusive** — it does not distract you from your main task when you are using it. -* **tutoring** — it helps you to learn the subject. -* **inconspicuous** — it should be possible to use it completely unnoticed. +* **Concise** — It should be concise; it should only contain the things you need, and nothing else. +* **Fast** — It should be possible to use it instantly. +* **Comprehensive** — It should contain answers for every question you could have. +* **Universal** — It should be available everywhere, as soon as needed, without any preparations. +* **Unobtrusive** — It does not distract you from your main task when you are using it. +* **Tutoring** — It helps you to learn the subject. +* **Inconspicuous** — It should be possible to use it completely unnoticed. Such a thing does exist. @@ -21,7 +21,7 @@ Such a thing does exist. **cheat.sh** -* Has a simple curl/browser interface; +* Has a simple curl/browser interface. * Covers 55 programming languages, several DBMSes, and more than 1000 most important UNIX/Linux commands. * Provides access to the best community driven cheat sheets repositories in the world as well as to StackOverflow. * Available everywhere, no installation needed. From deea09800b496a7b564dacda4cf9db3ab2c8065c Mon Sep 17 00:00:00 2001 From: Kishan Date: Thu, 12 Jul 2018 12:12:37 +0530 Subject: [PATCH 07/49] fix typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 22e6b1e..f76a230 100644 --- a/README.md +++ b/README.md @@ -362,7 +362,7 @@ She: Yes! Perfect! Exactly what I wanted to see! | ``` -Or course, it is just fun, and you should never cheat in your coding interviews, +Of course, it is just fun, and you should never cheat in your coding interviews, because you know what happens when you do. ![when you lie in your interview](http://cheat.sh/files/when-you-lie-katze.png) From 402f5d0aad6001601cbec32886cac5c10b766f90 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 12 Jul 2018 20:39:42 +0000 Subject: [PATCH 08/49] added share/static/malformed-response.html --- share/static/malformed-response.html | 35 ++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/share/static/malformed-response.html b/share/static/malformed-response.html index e69de29..79e04d6 100644 --- a/share/static/malformed-response.html +++ b/share/static/malformed-response.html @@ -0,0 +1,35 @@ + +cheat.sh + + + + +

+#  Sorry, we are experiencing extremely high load now.
+#  We are working on the problem and hope to get it fixed soon.
+#  Please come back in several hours or try some other queries:
+#  
+#  For example:
+
+ curl cht.sh/:list               to list available cheat sheets
+ curl cht.sh/LANGUAGE/:list      to list available cheat sheets for LANGUAGE
+ curl cht.sh/LANGUAGE/:learn     to learn the LANGUAGE
+
+ for the updates. 
+
+If you do not use Twitter, drop a short email to Igor Chubin (igor@chub.in),
+and you will be notified as soon as the service is fixed.
+If you have any feature requests, wishes, ideas, criticism,
+you can use them as the payload for this email.
+
+If you like to code (and you surely do), you can check the cheat.sh repository
+to see how the scalability problem is (not yet) solved.
+
+
+ + + + + + + From 4e288f9c88f70cb74eb5d54f9004dc5976a89bda Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 12 Jul 2018 20:40:39 +0000 Subject: [PATCH 09/49] use malformed-response.html instead of high load failure --- bin/srv.py | 7 +++++-- lib/globals.py | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/srv.py b/bin/srv.py index cf09b3e..c7bde53 100644 --- a/bin/srv.py +++ b/bin/srv.py @@ -23,7 +23,7 @@ from flask import Flask, request, send_from_directory, redirect, Response MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) sys.path.append("%s/lib/" % MYDIR) -from globals import FILE_QUERIES_LOG, LOG_FILE, TEMPLATES, STATIC +from globals import FILE_QUERIES_LOG, LOG_FILE, TEMPLATES, STATIC, MALFORMED_RESPONSE_HTML_PAGE from limits import Limits from cheat_wrapper import cheat_wrapper from post import process_post_request @@ -193,7 +193,10 @@ def answer(topic=None): if not_allowed: return "429 %s\n" % not_allowed, 429 - result, found = cheat_wrapper(topic, request_options=options, html=is_html_needed(user_agent)) + html_is_needed = is_html_needed(user_agent) + result, found = cheat_wrapper(topic, request_options=options, html=html_is_needed) + if 'Please come back in several hours' in result and html_is_needed: + return MALFORMED_RESPONSE_HTML_PAGE log_query(ip_address, found, topic, user_agent) return result diff --git a/lib/globals.py b/lib/globals.py index 76e6636..a726320 100644 --- a/lib/globals.py +++ b/lib/globals.py @@ -25,6 +25,8 @@ PATH_CHEAT_SHEETS_SPOOL = "/home/igor/cheat.sheets/spool/" COLOR_STYLES = sorted(list(get_all_styles())) +MALFORMED_RESPONSE_HTML_PAGE = open(os.path.join(STATIC, 'malformed-response.html')).read() + def error(text): """ Log error `text` and produce a RuntimeError exception From 901f4b31e291cfbd847890209f4f41d62670446c Mon Sep 17 00:00:00 2001 From: joerho Date: Thu, 12 Jul 2018 14:46:25 -0700 Subject: [PATCH 10/49] Update README.md --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f76a230..1ad9830 100644 --- a/README.md +++ b/README.md @@ -162,7 +162,7 @@ Read more about the programming languages queries below. ## Command line client, cht.sh The cheat.sh service has its own command line client (`cht.sh`), that, -comparing to querying the service directly with `curl`, +compared to querying the service directly with `curl`, has several useful features: * Special shell mode with a persistent queries context and readline support. @@ -288,10 +288,10 @@ One of the important properties of any real cheat sheet, is that it could be used fully unnoticed. cheat.sh can be used completely unnoticed too. The cheat.sh client, `cht.sh`, has -a special mode, called **stealth mode**. Using that you don't even need to touch your +a special mode, called **stealth mode**. Using that, you don't even need to touch your keyboard to open a cheat sheet. -In this mode, as soon as you select some text with the mouse (and thus it is added +In this mode, as soon as you select some text with the mouse (and thus adding it into the selection buffer of X Window System or into the clipboard) it's used as a query string for cheat.sh, and the correspondent cheat sheet is automatically shown. @@ -362,7 +362,7 @@ She: Yes! Perfect! Exactly what I wanted to see! | ``` -Of course, it is just fun, and you should never cheat in your coding interviews, +Of course, it is just for fun, and you should never cheat in your coding interviews, because you know what happens when you do. ![when you lie in your interview](http://cheat.sh/files/when-you-lie-katze.png) @@ -647,12 +647,12 @@ Pie diagram reflecting cheat sheets sources distribution (by number of cheat she ### How to edit a cheat sheet If you want to edit a cheat.sh cheat sheet, you should edit it in the upstream repository. -You will find the name of the source repository in a browser, when you open a cheat sheet. -There are two github buttons in the bottom of the page: the second one is the button -of the repository, whom belongs the current cheat sheet. +You will find the name of the source repository in a browser when you open a cheat sheet. +There are two github buttons at the bottom of the page: the second one is the button +of the repository, which belongs the current cheat sheet. You can edit the cheat sheet directly in your browser (you need a github account for it). -There is a edit button in the top right corner. If you click on it, an editor will be open. +There is an edit button in the top right corner. If you click on it, an editor will be open. There you will change the cheat sheet (under the hood: the upstrem repository is forked, your changes are committed in the forked repository, a pull request to the upstream repository owner is sent). From da287716460d1c40c8badafb57038b70b679ca01 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 21:37:29 -0300 Subject: [PATCH 11/49] add constants for improved readibility of code. --- lib/beautifier.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/beautifier.py b/lib/beautifier.py index 48491fd..26ed2fe 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -7,8 +7,8 @@ Supports three modes of normalization and commenting: 2. Add comments 3. Remove text, leave code only -Since several operations are quite expensice, -actively uses caching. +Since several operations are quite expensive, +it actively uses caching. Exported functions: From 28fb2bfec601eaba76628c926358ff5092f6253e Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 21:39:22 -0300 Subject: [PATCH 12/49] abstract functions away for improved readibility and maintainability --- lib/beautifier.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/lib/beautifier.py b/lib/beautifier.py index 26ed2fe..5f22c5c 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -41,35 +41,37 @@ from globals import PATH_VIM_ENVIRONMENT REDIS = redis.StrictRedis(host='localhost', port=6379, db=1) FNULL = open(os.devnull, 'w') - +TEXT = 0 +CODE = 1 +UNDEFINED = -1 +CODE_WHITESPACE = -2 def _language_name(name): return VIM_NAME.get(name, name) -def _cleanup_lines(lines): - """ - Cleanup `lines` a little bit: remove empty lines at the beginning - and at the end; remove to much empty lines in between. - """ - if lines == []: - return lines - - # remove empty lines from the beginning +def _remove_empty_lines_from_beginning(lines): start = 0 while start < len(lines) and lines[start].strip() == '': start += 1 lines = lines[start:] - if lines == []: - return lines + return lines - # remove empty lines from the end +def _remove_empty_lines_from_end(lines): end = len(lines) - 1 while end >= 0 and lines[end].strip() == '': end -= 1 lines = lines[:end+1] + return lines + +def _cleanup_lines(lines): + """ + Cleanup `lines` a little bit: remove empty lines at the beginning + and at the end; remove too many empty lines in between. + """ + lines = _remove_empty_lines_from_beginning(lines) + lines = _remove_empty_lines_from_end(lines) if lines == []: return lines - # remove repeating empty lines lines = list(chain.from_iterable( [(list(x[1]) if x[0] else ['']) From defd1e397aa698d4475aad4902914aa06d00fd8c Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 21:40:16 -0300 Subject: [PATCH 13/49] use constant names to reaplce number. It is easier to understand what the code does now, and future refactors will be less error prone. --- lib/beautifier.py | 39 ++++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/lib/beautifier.py b/lib/beautifier.py index 5f22c5c..d2a53c4 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -80,7 +80,7 @@ def _cleanup_lines(lines): return lines -def _classify_lines(lines): +def _line_type(line): """ Classify each line and say which of them are text (0) and which of them are code (1). @@ -92,39 +92,40 @@ def _classify_lines(lines): empty and is not code. If line is empty, it is considered to be - code if it surrounded but two other code lines - (or if it is the first/last line and it has + code if it surrounded but two other code lines, + or if it is the first/last line and it has code on the other side. """ + if line.strip() == '': + return UNDEFINED - def _line_type(line): - if line.strip() == '': - return -1 + # some line may start with spaces but still be not code. + # we need some heuristics here, but for the moment just + # whitelist such cases: + if line.strip().startswith('* ') or re.match(r'[0-9]+\.', line.strip()): + return TEXT - # some line may start with spaces but still be not code. - # we need some heuristics here, but for the moment just - # whitelist such cases: - if line.strip().startswith('* ') or re.match(r'[0-9]+\.', line.strip()): - return 0 + if line.startswith(' '): + return CODE + return TEXT - if line.startswith(' '): - return 1 - return 0 + +def _classify_lines(lines): line_types = [_line_type(line) for line in lines] # pass 2: # adding empty code lines to the code for i in range(len(line_types) - 1): - if line_types[i] == 1 and line_types[i+1] == -1: - line_types[i+1] = -2 + if line_types[i] == CODE and line_types[i+1] == UNDEFINED: + line_types[i+1] = CODE_WHITESPACE changed = True for i in range(len(line_types) - 1)[::-1]: - if line_types[i] == -1 and line_types[i+1] == 1: - line_types[i] = -2 + if line_types[i] == UNDEFINED and line_types[i+1] == CODE: + line_types[i] = CODE_WHITESPACE changed = True - line_types = [1 if x == -2 else x for x in line_types] + line_types = [CODE if x == CODE_WHITESPACE else x for x in line_types] # pass 3: # fixing undefined line types (-1) From 3a111580e0fc45058370f8fc493b4a46bd02fe91 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 21:45:45 -0300 Subject: [PATCH 14/49] make code here a bit cleaner. --- lib/beautifier.py | 55 ++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/lib/beautifier.py b/lib/beautifier.py index d2a53c4..95403a5 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -136,51 +136,42 @@ def _classify_lines(lines): # changing all lines types that are near the text for i in range(len(line_types) - 1): - if line_types[i] == 0 and line_types[i+1] == -1: - line_types[i+1] = 0 + if line_types[i] == TEXT and line_types[i+1] == UNDEFINED: + line_types[i+1] = TEXT changed = True for i in range(len(line_types) - 1)[::-1]: - if line_types[i] == -1 and line_types[i+1] == 0: - line_types[i] = 0 + if line_types[i] == UNDEFINED and line_types[i+1] == TEXT: + line_types[i] = TEXT changed = True - # everything what is still undefined, change to 1 - line_types = [1 if x == -1 else x for x in line_types] + # everything what is still undefined, change to code type + line_types = [CODE if x == UNDEFINED else x for x in line_types] return line_types +def _unindent_code(line, shift=0): + #if line.startswith(' '): + # return line[4:] + + if shift == -1 and line != '': + return ' ' + line + + if shift > 0: + if line.startswith(' '*shift): + return line[shift:] + + return line + + + def _wrap_lines(lines_classes, unindent_code=False): """ Wrap classified lines. Add the split lines to the stream. If `unindent_code` is True, remove leading four spaces. """ - - def _unindent_code(line, shift=0): - #if line.startswith(' '): - # return line[4:] - - if shift == -1 and line != '': - return ' ' + line - - if shift > 0: - if line.startswith(' '*shift): - return line[shift:] - - return line - result = [] - for line_tuple in lines_classes: - if line_tuple[0] == 1: - if unindent_code: - shift = 3 if unindent_code is True else unindent_code - else: - shift = -1 - result.append((line_tuple[0], _unindent_code(line_tuple[1], shift=shift))) - else: - if line_tuple[1].strip() == "": - result.append((line_tuple[0], "")) - for line in textwrap.fill(line_tuple[1]).splitlines(): - result.append((line_tuple[0], line)) + for line_type,line_content in lines_classes: + _format_line(line_type,line_content) return result From fa95f843a3063d60a81fd1f64e0b6ef5217c937a Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Thu, 12 Jul 2018 21:57:05 -0300 Subject: [PATCH 15/49] correct my linting --- lib/beautifier.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/beautifier.py b/lib/beautifier.py index 95403a5..011bc5f 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -162,16 +162,23 @@ def _unindent_code(line, shift=0): return line - - def _wrap_lines(lines_classes, unindent_code=False): """ Wrap classified lines. Add the split lines to the stream. If `unindent_code` is True, remove leading four spaces. """ + result = [] for line_type,line_content in lines_classes: - _format_line(line_type,line_content) + if line_type == CODE: + + shift = 3 if unindent_code else -1 + result.append((line_type, _unindent_code(line_content, shift=shift))) + else: + if line_content.strip() == "": + result.append((line_type, "")) + for line in textwrap.fill(line_content).splitlines(): + result.append((line_type, line)) return result From b154cb592331c8cfe8f4b4d02de92d949b7bccc1 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Fri, 13 Jul 2018 10:30:04 +0000 Subject: [PATCH 16/49] added share/static/big-logo-v2-fixed.png --- share/static/big-logo-v2-fixed.png | Bin 0 -> 11943 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 share/static/big-logo-v2-fixed.png diff --git a/share/static/big-logo-v2-fixed.png b/share/static/big-logo-v2-fixed.png new file mode 100644 index 0000000000000000000000000000000000000000..2b84a27b041361db77d9791384b25aabbbb052c8 GIT binary patch literal 11943 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 M!W;Q2S<8t32OW9`asU7T literal 0 HcmV?d00001 From f7ee7c7837dffdd7a2f3ed41c77ba7589c505f8f Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Fri, 13 Jul 2018 10:30:17 +0000 Subject: [PATCH 17/49] fixed logo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f76a230..1164581 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -![cheat.sh logo](http://cheat.sh/files/big-logo-v2.png) +![cheat.sh logo](http://cheat.sh/files/big-logo-v2-fixed.png) Unified access to the best community driven cheat sheets repositories of the world. From 9af8e6294b24423ce465e8690e84e3a9e76e25c7 Mon Sep 17 00:00:00 2001 From: johnnadratowski Date: Fri, 13 Jul 2018 10:51:25 -0400 Subject: [PATCH 18/49] Add ZSH completion support --- README.md | 12 ++++++++++++ share/zsh.txt | 50 +++++++++++++++++++++----------------------------- 2 files changed, 33 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 280e251..c0d1e59 100644 --- a/README.md +++ b/README.md @@ -274,6 +274,9 @@ QUERY_OPTIONS="style=native" ### Tab completion + +#### Bash Tab completion + To activate tab completion support for `cht.sh`, add the `:bash_completion` script to your `~/.bashrc`: ``` @@ -282,6 +285,15 @@ To activate tab completion support for `cht.sh`, add the `:bash_completion` scri $ # and add . ~/.bash.d/cht.sh to ~/.bashrc ``` +#### ZSH Tab completion + +To activate tab completion support for `cht.sh`, add the `:zsh` script to the fpath in your `~/.zshrc`: + +``` + $ curl https://cheat.sh/:zsh > ~/.zsh.d/_cht + $ echo "fpath=(path/to/zsh-completions/src $fpath)" >> ~/.zshrc + $ # Open a new shell to load the plugin + ### Stealth mode One of the important properties of any real cheat sheet, diff --git a/share/zsh.txt b/share/zsh.txt index b8c501a..6833d2f 100644 --- a/share/zsh.txt +++ b/share/zsh.txt @@ -1,30 +1,22 @@ -### Temporary disabled zsh support for cheat.sh -### This code has to be fixed -### -### # add this to ~/.zshrc or any other place that will be sourced by your .dotfiles script -### -### cheat.sh() -### { -### # replace native with the color scheme you want -### # curl cheat.sh/:styles-demo to show the available color schemes -### curl -s cheat.sh/"$1"?style=native -### } -### -### _cheatsh_complete_cheatsh() -### { -### local cur opts #prev -### _get_comp_words_by_ref -n : cur -### -### COMPREPLY=() -### prev="${COMP_WORDS[COMP_CWORD-1]}" -### opts="$(curl -s cheat.sh/:list)" -### -### #if [[ "${cur}" == ch ]] ; then -### COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") ) -### __ltrim_colon_completions "$cur" -### return 0 -### #fi -### } -### -### compdef _cheatsh_complete_cheatsh cheat.sh +#compdef cht.sh + +__CHTSH_LANGS=($(curl -s cheat.sh/:list)) +_arguments -C \ + '--help[show this help message and exit]: :->noargs' \ + '--shell[enter shell repl]: :->noargs' \ + '1:Cheat Sheet:->lang' \ + '*::: :->noargs' && return 0 + +if [[ CURRENT -ge 1 ]]; then + case $state in + noargs) + _message "nothing to complete";; + lang) + compadd -X "Cheat Sheets" ${__CHTSH_LANGS[@]};; + *) + _message "Unknown state, error in autocomplete";; + esac + + return +fi From cc68c7cb9e18c0a77679ce471766f9622c374373 Mon Sep 17 00:00:00 2001 From: johnnadratowski Date: Fri, 13 Jul 2018 12:50:18 -0400 Subject: [PATCH 19/49] Fix issue in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0d1e59..3406e68 100644 --- a/README.md +++ b/README.md @@ -291,7 +291,7 @@ To activate tab completion support for `cht.sh`, add the `:zsh` script to the fp ``` $ curl https://cheat.sh/:zsh > ~/.zsh.d/_cht - $ echo "fpath=(path/to/zsh-completions/src $fpath)" >> ~/.zshrc + $ echo 'fpath=(~/.zsh.d/ $fpath)' >> ~/.zshrc $ # Open a new shell to load the plugin ### Stealth mode From 6f36a5a3604d0d86363fbdd2c6c7f40e1e1fea08 Mon Sep 17 00:00:00 2001 From: Per Persson Date: Fri, 13 Jul 2018 21:07:13 +0200 Subject: [PATCH 20/49] Simplify logic if : return False return True is equivalent to return not --- bin/srv.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/bin/srv.py b/bin/srv.py index c7bde53..22f1a2e 100644 --- a/bin/srv.py +++ b/bin/srv.py @@ -49,9 +49,7 @@ def is_html_needed(user_agent): Basing on `user_agent`, return whether it needs HTML or ANSI """ plaintext_clients = ['curl', 'wget', 'fetch', 'httpie', 'lwp-request', 'python-requests'] - if any([x in user_agent for x in plaintext_clients]): - return False - return True + return not any([x in user_agent for x in plaintext_clients]) @app.route('/files/') def send_static(path): From b8ab35db77cde13e1f00888e2c4e263bbb2e07f3 Mon Sep 17 00:00:00 2001 From: Per Persson Date: Fri, 13 Jul 2018 21:13:37 +0200 Subject: [PATCH 21/49] Move 'not' I think that this small change makes the code somewhat more readable. Logic: not any([ b1, b2, b3, ... ]) == all([ not b1, not b2, not b3, ... ]) --- bin/srv.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/srv.py b/bin/srv.py index 22f1a2e..f1bdfae 100644 --- a/bin/srv.py +++ b/bin/srv.py @@ -49,7 +49,7 @@ def is_html_needed(user_agent): Basing on `user_agent`, return whether it needs HTML or ANSI """ plaintext_clients = ['curl', 'wget', 'fetch', 'httpie', 'lwp-request', 'python-requests'] - return not any([x in user_agent for x in plaintext_clients]) + return all([x not in user_agent for x in plaintext_clients]) @app.route('/files/') def send_static(path): From 251256d418562b5f23220408e6828b7a14949a44 Mon Sep 17 00:00:00 2001 From: Per Persson Date: Fri, 13 Jul 2018 23:59:01 +0200 Subject: [PATCH 22/49] Fix incorrect MYDIR --- bin/srv.py | 2 +- lib/beautifier.py | 2 +- lib/cheat_wrapper.py | 2 +- lib/globals.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bin/srv.py b/bin/srv.py index c7bde53..fe3e7bc 100644 --- a/bin/srv.py +++ b/bin/srv.py @@ -20,7 +20,7 @@ import requests import jinja2 from flask import Flask, request, send_from_directory, redirect, Response -MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) +MYDIR = os.path.abspath(os.path.join(__file__, '..', '..')) sys.path.append("%s/lib/" % MYDIR) from globals import FILE_QUERIES_LOG, LOG_FILE, TEMPLATES, STATIC, MALFORMED_RESPONSE_HTML_PAGE diff --git a/lib/beautifier.py b/lib/beautifier.py index 48491fd..83a7e6d 100644 --- a/lib/beautifier.py +++ b/lib/beautifier.py @@ -33,7 +33,7 @@ from tempfile import NamedTemporaryFile import redis -MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) +MYDIR = os.path.abspath(os.path.join(__file__, '..', '..')) sys.path.append("%s/lib/" % MYDIR) from languages_data import VIM_NAME from globals import PATH_VIM_ENVIRONMENT diff --git a/lib/cheat_wrapper.py b/lib/cheat_wrapper.py index 49f5d9c..8552ada 100644 --- a/lib/cheat_wrapper.py +++ b/lib/cheat_wrapper.py @@ -17,7 +17,7 @@ import colored from pygments import highlight as pygments_highlight from pygments.formatters import Terminal256Formatter # pylint: disable=no-name-in-module -MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) +MYDIR = os.path.abspath(os.path.join(__file__, '..', '..')) sys.path.append("%s/lib/" % MYDIR) from globals import error, ANSI2HTML, COLOR_STYLES from buttons import TWITTER_BUTTON, GITHUB_BUTTON, GITHUB_BUTTON_FOOTER diff --git a/lib/globals.py b/lib/globals.py index a726320..5443e09 100644 --- a/lib/globals.py +++ b/lib/globals.py @@ -8,7 +8,7 @@ import logging import os from pygments.styles import get_all_styles -MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) +MYDIR = os.path.abspath(os.path.join(__file__, '..', '..')) ANSI2HTML = os.path.join(MYDIR, "share/ansi2html.sh") From 91176634bc24b10f6e36d454392dfa5f7e606731 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Fri, 13 Jul 2018 23:22:38 +0000 Subject: [PATCH 23/49] typo fixed --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3406e68..6d28308 100644 --- a/README.md +++ b/README.md @@ -287,12 +287,13 @@ To activate tab completion support for `cht.sh`, add the `:bash_completion` scri #### ZSH Tab completion -To activate tab completion support for `cht.sh`, add the `:zsh` script to the fpath in your `~/.zshrc`: +To activate tab completion support for `cht.sh`, add the `:zsh` script to the *fpath* in your `~/.zshrc`: ``` $ curl https://cheat.sh/:zsh > ~/.zsh.d/_cht $ echo 'fpath=(~/.zsh.d/ $fpath)' >> ~/.zshrc $ # Open a new shell to load the plugin +``` ### Stealth mode From 4da555859648240d640f642c38089876e453a39d Mon Sep 17 00:00:00 2001 From: lkylych Date: Fri, 13 Jul 2018 16:24:39 -0700 Subject: [PATCH 24/49] Update README.md Made a description of the ideal cheat sheet more concise and coherent. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 3406e68..2fd9459 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,17 @@ Let's imagine for a moment that there is such a thing as an ideal cheat sheet. What should it look like? What features should it have? -* **Concise** — It should be concise; it should only contain the things you need, and nothing else. +* **Concise** — It should only contain the things you need, and nothing else. * **Fast** — It should be possible to use it instantly. -* **Comprehensive** — It should contain answers for every question you could have. -* **Universal** — It should be available everywhere, as soon as needed, without any preparations. -* **Unobtrusive** — It does not distract you from your main task when you are using it. -* **Tutoring** — It helps you to learn the subject. +* **Comprehensive** — It should contain answers for every possible question. +* **Universal** — It should be available everywhere, anytime, without any preparations. +* **Unobtrusive** — It should not distract you from your main task. +* **Tutoring** — It should help you to learn the subject. * **Inconspicuous** — It should be possible to use it completely unnoticed. -Such a thing does exist. +Such a thing exists. -## Features +## Features: **cheat.sh** From 575054760f31670127cb3a0d8043200676fcacaa Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 00:42:30 -0300 Subject: [PATCH 25/49] refactor tldr_update so it fits in two lines. abrstracted logic away into a function. --- lib/get_answer.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index 2fc4a9a..d9d9499 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -56,13 +56,13 @@ INTERNAL_TOPICS = [ ':share', ] +def _get_filenames(): + return [os.path.split(topic)[1] for topic in glob.glob(PATH_TLDR_PAGES)] + + def _update_tldr_topics(): - answer = [] - for topic in glob.glob(PATH_TLDR_PAGES): - _, filename = os.path.split(topic) - if filename.endswith('.md'): - answer.append(filename[:-3]) - return answer + return [ filename[:-3] for filename in _get_filenames() if filename.endswith('.md') ] + TLDR_TOPICS = _update_tldr_topics() def _update_cheat_topics(): From ec6f7d133753eba81ce015945ff25b49fa2294d4 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 00:45:35 -0300 Subject: [PATCH 26/49] saw a common pattern and cleaned the code for cheat topics updater function --- lib/get_answer.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index d9d9499..2d8d05e 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -56,21 +56,18 @@ INTERNAL_TOPICS = [ ':share', ] -def _get_filenames(): - return [os.path.split(topic)[1] for topic in glob.glob(PATH_TLDR_PAGES)] +def _get_filenames(path): + return [os.path.split(topic)[1] for topic in glob.glob(path)] def _update_tldr_topics(): - return [ filename[:-3] for filename in _get_filenames() if filename.endswith('.md') ] + return [ filename[:-3] for filename in _get_filenames(PATH_TLDR_PAGES) if filename.endswith('.md') ] TLDR_TOPICS = _update_tldr_topics() def _update_cheat_topics(): - answer = [] - for topic in glob.glob(PATH_CHEAT_PAGES): - _, filename = os.path.split(topic) - answer.append(filename) - return answer + return _get_filenames(PATH_CHEAT_PAGES) + CHEAT_TOPICS = _update_cheat_topics() def _update_cheat_sheets_topics(): From c47c7eead4e58d6d39572a88af5ef3f292b70fb2 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 01:08:09 -0300 Subject: [PATCH 27/49] refactor first half of update_cheat_sheets_topics for clarity and maintainability --- lib/get_answer.py | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index 2d8d05e..fe832fa 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -59,29 +59,35 @@ INTERNAL_TOPICS = [ def _get_filenames(path): return [os.path.split(topic)[1] for topic in glob.glob(path)] - def _update_tldr_topics(): return [ filename[:-3] for filename in _get_filenames(PATH_TLDR_PAGES) if filename.endswith('.md') ] -TLDR_TOPICS = _update_tldr_topics() - def _update_cheat_topics(): return _get_filenames(PATH_CHEAT_PAGES) + + +TLDR_TOPICS = _update_tldr_topics() CHEAT_TOPICS = _update_cheat_topics() +def _sanitize_dirname(dirname): + dirname = os.path.basename(dirname) + if dirname.startswith('_'): + dirname = dirname[1:] + return dirname + +def _format_answer(dirname,filename): + return "%s/%s" % ( _sanitize_dirname(dirname), filename ) + +def _get_answer_files_from_folder(): + topics = map(glob.glob(PATH_CHEAT_SHEETS + "*/*"), os.path.split) + return [_format_answer(dirname,filename) for dirname, filename in topics if filename not in ['_info.yaml'] ] + def _update_cheat_sheets_topics(): - answer = [] + answers = [] answer_dirs = [] - for topic in glob.glob(PATH_CHEAT_SHEETS + "*/*"): - dirname, filename = os.path.split(topic) - if filename in ['_info.yaml']: - continue - dirname = os.path.basename(dirname) - if dirname.startswith('_'): - dirname = dirname[1:] - answer.append("%s/%s" % (dirname, filename)) + answers = _get_answer_files_from_folder() for topic in glob.glob(PATH_CHEAT_SHEETS + "*"): _, filename = os.path.split(topic) @@ -92,9 +98,11 @@ def _update_cheat_sheets_topics(): else: answer.append(filename) return answer, answer_dirs + CHEAT_SHEETS_TOPICS, CHEAT_SHEETS_DIRS = _update_cheat_sheets_topics() CACHED_TOPICS_LIST = [[]] + def get_topics_list(skip_dirs=False, skip_internal=False): """ List of topics returned on /:list From 3331608e98bfa2f13cbf6f6c6b23ea0df49f8a07 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 01:31:36 -0300 Subject: [PATCH 28/49] big refactor of update_cheat_sheets_topics to make it more readable and maintainable. --- lib/get_answer.py | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index fe832fa..f8ae349 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -70,34 +70,34 @@ def _update_cheat_topics(): TLDR_TOPICS = _update_tldr_topics() CHEAT_TOPICS = _update_cheat_topics() +def _remove_initial_underscore(filename): + if filename.startswith('_'): + filename = filename[1:] + return filename + def _sanitize_dirname(dirname): dirname = os.path.basename(dirname) - if dirname.startswith('_'): - dirname = dirname[1:] + dirname = remove_initial_underscore(dirname) return dirname def _format_answer(dirname,filename): return "%s/%s" % ( _sanitize_dirname(dirname), filename ) def _get_answer_files_from_folder(): - topics = map(glob.glob(PATH_CHEAT_SHEETS + "*/*"), os.path.split) + topics = map(os.path.split, glob.glob(PATH_CHEAT_SHEETS + "*/*")) return [_format_answer(dirname,filename) for dirname, filename in topics if filename not in ['_info.yaml'] ] +def isdir(topic): + return os.path.isdir(topic) +def _get_answers_and_dirs(): + topics = glob.glob(PATH_CHEAT_SHEETS + "*") + answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) for topic in topics if isdir(topic)] + answers = [ os.path.split(topic)[1] for topic in topics if not isdir(topic)] + return answer_dirs, answers def _update_cheat_sheets_topics(): - answers = [] - answer_dirs = [] - answers = _get_answer_files_from_folder() - - for topic in glob.glob(PATH_CHEAT_SHEETS + "*"): - _, filename = os.path.split(topic) - if os.path.isdir(topic): - if filename.startswith('_'): - filename = filename[1:] - answer_dirs.append(filename+'/') - else: - answer.append(filename) - return answer, answer_dirs + cheatsheet_answers, cheatsheet_dirs = _get_answers_and_dirs() + return answers+cheatsheet_answers, cheatsheet_dirs CHEAT_SHEETS_TOPICS, CHEAT_SHEETS_DIRS = _update_cheat_sheets_topics() From 1b7c80f2294a8894a3a466dda52780f0c985a6b4 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 01:32:29 -0300 Subject: [PATCH 29/49] rename function after privacy convention. --- lib/get_answer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index f8ae349..d896d10 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -86,11 +86,11 @@ def _format_answer(dirname,filename): def _get_answer_files_from_folder(): topics = map(os.path.split, glob.glob(PATH_CHEAT_SHEETS + "*/*")) return [_format_answer(dirname,filename) for dirname, filename in topics if filename not in ['_info.yaml'] ] -def isdir(topic): +def _isdir(topic): return os.path.isdir(topic) def _get_answers_and_dirs(): topics = glob.glob(PATH_CHEAT_SHEETS + "*") - answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) for topic in topics if isdir(topic)] + answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) for topic in topics if _isdir(topic)] answers = [ os.path.split(topic)[1] for topic in topics if not isdir(topic)] return answer_dirs, answers From e38f68f8bd863d7c333e59f593147f70e0c88034 Mon Sep 17 00:00:00 2001 From: Luciano Strika Date: Sat, 14 Jul 2018 01:39:00 -0300 Subject: [PATCH 30/49] end refactor of isdir --- lib/get_answer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index d896d10..59e47a5 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -91,7 +91,7 @@ def _isdir(topic): def _get_answers_and_dirs(): topics = glob.glob(PATH_CHEAT_SHEETS + "*") answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) for topic in topics if _isdir(topic)] - answers = [ os.path.split(topic)[1] for topic in topics if not isdir(topic)] + answers = [ os.path.split(topic)[1] for topic in topics if not _isdir(topic)] return answer_dirs, answers def _update_cheat_sheets_topics(): From 6e190adbcfa849c36d089ab0ec7305d49821b653 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 08:22:58 +0000 Subject: [PATCH 31/49] sanitizing query --- lib/cheat_wrapper.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/cheat_wrapper.py b/lib/cheat_wrapper.py index 49f5d9c..e2c20af 100644 --- a/lib/cheat_wrapper.py +++ b/lib/cheat_wrapper.py @@ -265,6 +265,9 @@ def _visualize(query, keyword, answers, request_options, html=None): # pylint: d return result, found +def _sanitize_query(query): + return re.sub('[<>"]', '', query) + def cheat_wrapper(query, request_options=None, html=False): """ Giant megafunction that delivers cheat sheet for `query`. @@ -297,6 +300,8 @@ def cheat_wrapper(query, request_options=None, html=False): return topic, keyword, search_options + query = _sanitize_query(query) + # at the moment, we just remove trailing slashes # so queries python/ and python are equal query = _strip_hyperlink(query.rstrip('/')) From f32a90233935aed986a668e6c9eec0de2e1dc6d6 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 20:03:43 +0000 Subject: [PATCH 32/49] fixed problem with wrong syntax highlighting for lang aliases --- lib/cheat_wrapper.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/cheat_wrapper.py b/lib/cheat_wrapper.py index e2c20af..7a09ffd 100644 --- a/lib/cheat_wrapper.py +++ b/lib/cheat_wrapper.py @@ -21,7 +21,7 @@ MYDIR = os.path.abspath(os.path.dirname(os.path.dirname('__file__'))) sys.path.append("%s/lib/" % MYDIR) from globals import error, ANSI2HTML, COLOR_STYLES from buttons import TWITTER_BUTTON, GITHUB_BUTTON, GITHUB_BUTTON_FOOTER -from languages_data import LEXER +from languages_data import LEXER, LANGUAGE_ALIAS from get_answer import get_topic_type, get_topics_list, get_answer, find_answer_by_keyword from beautifier import code_blocks # import beautifier @@ -92,13 +92,12 @@ def _colorize_ansi_answer(topic, answer, color_style, # pylint: di color_style = color_style or "native" lexer_class = LEXER['bash'] - for lexer_name, lexer_value in LEXER.items(): - if topic.startswith("%s/" % lexer_name): - # color_style = color_style or "monokai" - if lexer_name == 'php': - answer = "\n" % answer - lexer_class = lexer_value - break + if '/' in topic: + section_name = topic.split('/', 1)[0].lower() + section_name = LANGUAGE_ALIAS.get(section_name, section_name) + lexer_class = LEXER.get(section_name, lexer_class) + if section_name == 'php': + answer = "\n" % answer if highlight_all: highlight = lambda answer: pygments_highlight( From 96b752ba2d9bb4f525364ea05f0fe872e25b35f5 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 20:18:48 +0000 Subject: [PATCH 33/49] disabled unused langdetect --- lib/get_answer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index 59e47a5..bef4c07 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -20,7 +20,6 @@ import os import re import redis from fuzzywuzzy import process, fuzz -from langdetect import detect from polyglot.detect import Detector from polyglot.detect.base import UnknownLanguage import time From 0ae85c4d6708be7215aed5f6039dd83946e4cd08 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 20:53:34 +0000 Subject: [PATCH 34/49] added COLORIZED_INTERNAL_TOPICS --- lib/get_answer.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index bef4c07..8395caa 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -55,6 +55,10 @@ INTERNAL_TOPICS = [ ':share', ] +COLORIZED_INTERNAL_TOPICS = [ + ':intro', +] + def _get_filenames(path): return [os.path.split(topic)[1] for topic in glob.glob(path)] @@ -203,22 +207,19 @@ def _get_internal(topic): if x.startswith(topic_type + "/")] return "\n".join(topic_list)+"\n" + answer = "" if topic == ":list": - return "\n".join(x for x in get_topics_list()) + "\n" + answer = "\n".join(x for x in get_topics_list()) + "\n" + elif topic == ':styles': + answer = "\n".join(COLOR_STYLES) + "\n" + elif topic == ":stat": + answer = _get_stat()+"\n" + elif topic in INTERNAL_TOPICS: + answer = open(os.path.join(MYDIR, "share", topic[1:]+".txt"), "r").read() + if topic in COLORIZED_INTERNAL_TOPICS: + answer = colorize_internal(answer) - if topic == ':styles': - return "\n".join(COLOR_STYLES) + "\n" - - if topic == ":stat": - return _get_stat()+"\n" - - if topic in INTERNAL_TOPICS: - if topic[1:] == 'intro': - return colorize_internal(open(os.path.join(MYDIR, "share", topic[1:]+".txt"), "r").read()) - else: - return open(os.path.join(MYDIR, "share", topic[1:]+".txt"), "r").read() - - return "" + return answer def _get_tldr(topic): cmd = ["tldr", topic] From 10209437bf6c2111118bb94bea16109f021b9fb4 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 20:53:58 +0000 Subject: [PATCH 35/49] minfor fixes --- lib/get_answer.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index 8395caa..a5eb81c 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -63,7 +63,8 @@ def _get_filenames(path): return [os.path.split(topic)[1] for topic in glob.glob(path)] def _update_tldr_topics(): - return [ filename[:-3] for filename in _get_filenames(PATH_TLDR_PAGES) if filename.endswith('.md') ] + return [filename[:-3] + for filename in _get_filenames(PATH_TLDR_PAGES) if filename.endswith('.md')] def _update_cheat_topics(): return _get_filenames(PATH_CHEAT_PAGES) @@ -80,21 +81,23 @@ def _remove_initial_underscore(filename): def _sanitize_dirname(dirname): dirname = os.path.basename(dirname) - dirname = remove_initial_underscore(dirname) + dirname = _remove_initial_underscore(dirname) return dirname -def _format_answer(dirname,filename): - return "%s/%s" % ( _sanitize_dirname(dirname), filename ) +def _format_answer(dirname, filename): + return "%s/%s" % (_sanitize_dirname(dirname), filename) def _get_answer_files_from_folder(): topics = map(os.path.split, glob.glob(PATH_CHEAT_SHEETS + "*/*")) - return [_format_answer(dirname,filename) for dirname, filename in topics if filename not in ['_info.yaml'] ] + return [_format_answer(dirname, filename) + for dirname, filename in topics if filename not in ['_info.yaml']] def _isdir(topic): return os.path.isdir(topic) def _get_answers_and_dirs(): topics = glob.glob(PATH_CHEAT_SHEETS + "*") - answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) for topic in topics if _isdir(topic)] - answers = [ os.path.split(topic)[1] for topic in topics if not _isdir(topic)] + answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) + for topic in topics if _isdir(topic)] + answers = [os.path.split(topic)[1] for topic in topics if not _isdir(topic)] return answer_dirs, answers def _update_cheat_sheets_topics(): From abaea063b691bf9cd43f108cc4f8c9134fe41e42 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sat, 14 Jul 2018 21:03:05 +0000 Subject: [PATCH 36/49] added lib/colorize_internal.py --- lib/colorize_internal.py | 88 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 lib/colorize_internal.py diff --git a/lib/colorize_internal.py b/lib/colorize_internal.py new file mode 100644 index 0000000..746efc9 --- /dev/null +++ b/lib/colorize_internal.py @@ -0,0 +1,88 @@ +""" +Colorize internal cheat sheets. +Will be merged with panela later. +""" + +import re + +from colorama import Fore, Back, Style +import colored + +PALETTES = { + 0: { + 1: Fore.WHITE, + 2: Style.DIM, + }, + 1: { + 1: Fore.CYAN, + 2: Fore.GREEN, + 3: colored.fg('orange_3'), + 4: Style.DIM, + 5: Style.DIM, + }, + 2: { + 1: Fore.RED, + 2: Style.DIM, + }, +} + +PALETTES_REVERSE = { + 0: { + 1: Back.WHITE + Fore.BLACK, + 2: Style.DIM, + }, + 1: { + 1: Back.CYAN + Fore.BLACK, + 2: Style.DIM, + }, + 2: { + 1: Back.RED + Fore.BLACK, + 2: Style.DIM, + }, +} + + +def colorize_internal(text, palette_number=1): + """ + Colorize `text`, use `palette` + """ + + palette = PALETTES[palette_number] + palette_reverse = PALETTES_REVERSE[palette_number] + + def _colorize_curlies_block(text): + + text = text.group()[1:-1] + factor = 1 + if text.startswith('-'): + text = text[1:] + factor = -1 + stripped = text.lstrip('0123456789') + color_number = int(text[:len(text)-len(stripped)])*factor + if stripped.startswith('='): + stripped = stripped[1:] + + reverse = False + if color_number < 0: + color_number = -color_number + reverse = True + + if reverse: + stripped = palette_reverse[color_number] + stripped + Style.RESET_ALL + else: + stripped = palette[color_number] + stripped + Style.RESET_ALL + + return stripped + + def _colorize_headers(text): + if text.group(0).endswith('\n'): + newline = '\n' + else: + newline = '' + + color_number = 3 + return palette[color_number] + text.group(0).strip() + Style.RESET_ALL + newline + + text = re.sub("{.*?}", _colorize_curlies_block, text) + text = re.sub("#(.*?)\n", _colorize_headers, text) + return text From 7cb4d9dedd20b8e744c05b6ee150330725ba3d96 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sun, 15 Jul 2018 08:30:43 +0000 Subject: [PATCH 37/49] return text/plain always for :cht.sh (fixes #46) --- bin/srv.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/srv.py b/bin/srv.py index 8725894..e55fb46 100644 --- a/bin/srv.py +++ b/bin/srv.py @@ -51,6 +51,9 @@ def is_html_needed(user_agent): plaintext_clients = ['curl', 'wget', 'fetch', 'httpie', 'lwp-request', 'python-requests'] return all([x not in user_agent for x in plaintext_clients]) +def is_result_a_script(query): + return query in [':cht.sh'] + @app.route('/files/') def send_static(path): """ @@ -191,13 +194,15 @@ def answer(topic=None): if not_allowed: return "429 %s\n" % not_allowed, 429 - html_is_needed = is_html_needed(user_agent) + html_is_needed = is_html_needed(user_agent) and not is_result_a_script(topic) result, found = cheat_wrapper(topic, request_options=options, html=html_is_needed) if 'Please come back in several hours' in result and html_is_needed: return MALFORMED_RESPONSE_HTML_PAGE log_query(ip_address, found, topic, user_agent) - return result + if html_is_needed: + return result + return Response(result, mimetype='text/plain') SRV = WSGIServer(("", 8002), app) # log=None) SRV.serve_forever() From e3743e269c1de283e35cdc2f3eb91c5f7fe646fe Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Sun, 15 Jul 2018 16:45:32 +0200 Subject: [PATCH 38/49] Add link to Visual Studio Code plugin --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 8fafe4c..4d5c3be 100644 --- a/README.md +++ b/README.md @@ -463,6 +463,14 @@ Or, if you want to scroll and/or pause, the same on YouTube: [![asciicast](https://asciinema.org/a/3xvqwrsu9g4taj5w526sb2t35.png)](https://asciinema.org/a/3xvqwrsu9g4taj5w526sb2t35) + +### Visual Studio Code + +* [vscode-snippet](https://github.com/mre/vscode-snippet) + +[![vscode-snippet](https://raw.githubusercontent.com/mre/vscode-snippet/master/preview.gif)](https://github.com/mre/vscode-snippet) + + ## Special pages There are several special pages (their names are always starting with a colon), From 18f555a128ec4f18154a2f18d773ce0751b6022c Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Sun, 15 Jul 2018 23:41:19 +0200 Subject: [PATCH 39/49] updated info about vscode-snippet --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4d5c3be..2ca6b2e 100644 --- a/README.md +++ b/README.md @@ -382,7 +382,7 @@ because you know what happens when you do. ## Editors integration -You can use *cheat.sh* directly from the editor (*Vim* and *Emacs* are currently supported). +You can use *cheat.sh* directly from the editor (*Vim*, *Emacs* and *Visual Studio Code* are currently supported). Instead of opening your browser, googling, browsing Stack Overflow and eventually copying the code snippets you need into the clipboard and later pasting them into the editor, @@ -467,10 +467,16 @@ Or, if you want to scroll and/or pause, the same on YouTube: ### Visual Studio Code * [vscode-snippet](https://github.com/mre/vscode-snippet) +* Install it from [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=vscode-snippet.Snippet) + +Usage: + +1. Hit ⌘ Command + ⇧ Shift + p +2. Run `Snippet: Find`. +3. Type your query and hit enter. [![vscode-snippet](https://raw.githubusercontent.com/mre/vscode-snippet/master/preview.gif)](https://github.com/mre/vscode-snippet) - ## Special pages There are several special pages (their names are always starting with a colon), From 2fc67ee13b1e552a6e2c7a5cbceb0ac4e979938a Mon Sep 17 00:00:00 2001 From: mitch354 Date: Mon, 16 Jul 2018 08:21:40 -0700 Subject: [PATCH 40/49] Grammer Edit Extraneous use of commas --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2ca6b2e..a7e0780 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ specifying the name of the command in the query: ``` As you can see, you can use both HTTPS and HTTP to access the service, and both the long (cheat.sh) and the short (cht.sh) service names. -Here `tar`, `curl`, `rsync`, and `tr` are names of the UNIX/Linux commands, you want to get cheat sheets for. +Here `tar`, `curl`, `rsync`, and `tr` are names of the UNIX/Linux commands you want to get cheat sheets for. If you don't know the name of the command you need, you can search for it using the `~KEYWORD` notation. For example, to see how you can make `snapshots` of a filesystem/volume/something else: @@ -74,9 +74,9 @@ To get the list of available programming language cheat sheets, do a special que curl cht.sh/go/:list ``` -(almost) each programming language has a special page, named `:learn`, +(almost) each programming language has a special page named `:learn`, that describes the language basics (that's a direct mapping from the *"Learn X in Y"* project). -It could be a good starting point, if you've just started learning a language. +It could be a good starting point if you've just started learning a language. If there is no cheat sheet for some programming language query (and it is almost always the case), it is generated on the fly, basing on available cheat sheets and answers on StackOverflow. @@ -161,7 +161,7 @@ Read more about the programming languages queries below. ## Command line client, cht.sh -The cheat.sh service has its own command line client (`cht.sh`), that, +The cheat.sh service has its own command line client (`cht.sh`) that compared to querying the service directly with `curl`, has several useful features: @@ -256,7 +256,7 @@ Type `help` for other internal `cht.sh` commands. The `cht.sh` client has its configuration file which is located at `~/.cht.sh/cht.sh.conf`. Use it to specify query options that you would use with each query. -For example, to switch syntax highlighting off, create the file with the following +For example, to switch syntax highlighting off create the file with the following content: ``` @@ -297,7 +297,7 @@ To activate tab completion support for `cht.sh`, add the `:zsh` script to the *f ### Stealth mode -One of the important properties of any real cheat sheet, +One of the important properties of any real cheat sheet is that it could be used fully unnoticed. cheat.sh can be used completely unnoticed too. The cheat.sh client, `cht.sh`, has From 1ce9ae71b0e99d0afcbd19072bf17f1d760801d6 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Tue, 17 Jul 2018 15:48:16 +0000 Subject: [PATCH 41/49] added vscode-snippet-demo.gif (by @mre) --- share/static/vscode-snippet-demo.gif | Bin 0 -> 192127 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 share/static/vscode-snippet-demo.gif diff --git a/share/static/vscode-snippet-demo.gif b/share/static/vscode-snippet-demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..780db821c01a6635045c768baf913e9a26d296cb GIT binary patch literal 192127 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%0A4wQ8fGS#6N1JLTv;^$6`fEg411BF}ZQ*-UGv5_l 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 kY%s(FOB^u8{#wj0#` Date: Tue, 17 Jul 2018 15:50:42 +0000 Subject: [PATCH 42/49] updated link to vscode gif --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a7e0780..3bebc7a 100644 --- a/README.md +++ b/README.md @@ -475,7 +475,8 @@ Usage: 2. Run `Snippet: Find`. 3. Type your query and hit enter. -[![vscode-snippet](https://raw.githubusercontent.com/mre/vscode-snippet/master/preview.gif)](https://github.com/mre/vscode-snippet) +[![vscode-snippet](https://cheat.sh/files/vscode-snippet-demo.gif)](https://github.com/mre/vscode-snippet) +(GIF courtesy: Matthias Endler, @mre) ## Special pages From 730cf85a6cd67c6b82fa5733de6ffde0c945d373 Mon Sep 17 00:00:00 2001 From: zzxzzx8 <41276298+zzxzzx8@users.noreply.github.com> Date: Tue, 17 Jul 2018 14:42:40 -0700 Subject: [PATCH 43/49] Update README.md Changed grammar in a few places to improve readability. --- README.md | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 3bebc7a..92ba50c 100644 --- a/README.md +++ b/README.md @@ -23,12 +23,12 @@ Such a thing exists. * Has a simple curl/browser interface. * Covers 55 programming languages, several DBMSes, and more than 1000 most important UNIX/Linux commands. -* Provides access to the best community driven cheat sheets repositories in the world as well as to StackOverflow. +* Provides access to the best community driven cheat sheets repositories in the world, on par with StackOverflow. * Available everywhere, no installation needed. -* Ultrafast, returns answers, as a rule, within 100 ms. +* Ultrafast, returns answers within 100 ms, as a rule. * Has a convenient command line client, `cht.sh`, that is very advantageous and helpful, though not mandatory. * Can be used directly from code editors, without opening a browser and not switching your mental context. -* Supports a special mode (stealth mode), where it can be used fully invisibly, not even touching a key and not making a sound. +* Supports a special stealth mode where it can be used fully invisibly without ever touching a key and and making sounds.

@@ -59,8 +59,7 @@ For example, to see how you can make `snapshots` of a filesystem/volume/somethin

-Programming languages cheat sheets are located not directly in the root namespace, -but in special namespaces, dedicated to them: +The programming language cheat sheets are located in special namespaces dedicated to them. ``` curl cht.sh/go/Pointers @@ -68,18 +67,18 @@ but in special namespaces, dedicated to them: curl cht.sh/python/lambda ``` -To get the list of available programming language cheat sheets, do a special query `:list`: +To get the list of available programming language cheat sheets, use the special query `:list`: ``` curl cht.sh/go/:list ``` -(almost) each programming language has a special page named `:learn`, +Almost each programming language has a special page named `:learn` that describes the language basics (that's a direct mapping from the *"Learn X in Y"* project). It could be a good starting point if you've just started learning a language. -If there is no cheat sheet for some programming language query (and it is almost always the case), -it is generated on the fly, basing on available cheat sheets and answers on StackOverflow. +If there is no cheat sheet for a programming language query (and it is almost always the case), +it is generated on the fly, based on available cheat sheets and answers on StackOverflow. Of course, there is no guarantee that the returned cheat sheet will be a 100% hit, but it is almost always exactly what you are looking for. Try these (and your own) queries to get the impression of that, what the answers look like: @@ -91,7 +90,7 @@ Try these (and your own) queries to get the impression of that, what the answers curl cht.sh/clojure/variadic+function ``` -If you don't like an answer for some of your queries, you can pick another one: for that, repeat the query with an additional parameter `/1`, `/2` etc. appended: +If you don't like an answer for your queries, you can pick another one. For that, repeat the query with an additional parameter `/1`, `/2` etc. appended: ``` curl cht.sh/python/random+string @@ -162,8 +161,7 @@ Read more about the programming languages queries below. ## Command line client, cht.sh The cheat.sh service has its own command line client (`cht.sh`) that -compared to querying the service directly with `curl`, -has several useful features: +has several useful features compared to querying the service directly with `curl`: * Special shell mode with a persistent queries context and readline support. * Queries history. @@ -194,7 +192,7 @@ It is even more convenient to start the client in a special shell mode: cht.sh> go reverse a list ``` -If all your queries are supposed to be about the same language, you can change the context of the queries +If all your queries are about the same language, you can change the context and spare repeating the programming language name: ``` $ cht.sh --shell @@ -297,8 +295,7 @@ To activate tab completion support for `cht.sh`, add the `:zsh` script to the *f ### Stealth mode -One of the important properties of any real cheat sheet -is that it could be used fully unnoticed. +Being used fully unnoticed is one of the most important property of any cheat sheet. cheat.sh can be used completely unnoticed too. The cheat.sh client, `cht.sh`, has a special mode, called **stealth mode**. Using that, you don't even need to touch your @@ -375,7 +372,7 @@ She: Yes! Perfect! Exactly what I wanted to see! | ``` -Of course, it is just for fun, and you should never cheat in your coding interviews, +Of course, this is just for fun, and you should never cheat in your coding interviews, because you know what happens when you do. ![when you lie in your interview](http://cheat.sh/files/when-you-lie-katze.png) @@ -480,8 +477,8 @@ Usage: ## Special pages -There are several special pages (their names are always starting with a colon), -that are not cheat sheets and have special meaning. +There are several special pages that are not cheat sheets. +Their names start with colon and have special meaning. Getting started: @@ -525,7 +522,7 @@ To search for a keyword, use the query: /~keyword ``` -In this case search is not recursive — it is conducted only in a pages of the specified level. +In this case search is not recursive — it is conducted only in a page of the specified level. For example: ``` @@ -557,7 +554,7 @@ List of search options: Cheat sheets related to programming languages are organized in namespaces (subdirectories), that are named according -to the programming languages. +to the programming language. For each supported programming language there are several special cheat sheets: its own sheet, `hello`, `:list` and `:learn`. From 133008cfcfb4e6109d82808b91b30f47372a94e7 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Wed, 18 Jul 2018 16:15:18 +0200 Subject: [PATCH 44/49] Use "maybe" instead of "may be", bc grammar --- README.md | 2 +- lib/get_answer.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 92ba50c..ce6afb8 100644 --- a/README.md +++ b/README.md @@ -356,7 +356,7 @@ You: What do you mean? | pivot = array[0] | for x in array: She: I mean, | if x < pivot: less.append(x) She: do you really need all these ifs and fors? | if x == pivot: equal.append(x) -She: Could you may be just use filter instead? | if x > pivot: greater.append(x) +She: Could you maybe just use filter instead? | if x > pivot: greater.append(x) | return sort(less)+equal+sort(greater) You: quicksort with filter? | else: | return array diff --git a/lib/get_answer.py b/lib/get_answer.py index a5eb81c..9bb4058 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -318,7 +318,7 @@ def _get_unknown(topic): possible_topics_text = "\n".join([(" * %s %s" % x) for x in possible_topics]) return """ Unknown topic. -Do you mean one of these topics may be? +Do you mean one of these topics maybe? %s """ % possible_topics_text From 00e069f175e0bbd3b39923da1f3ef93b2212be27 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 19 Jul 2018 00:10:22 +0200 Subject: [PATCH 45/49] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce6afb8..67d8f83 100644 --- a/README.md +++ b/README.md @@ -356,7 +356,7 @@ You: What do you mean? | pivot = array[0] | for x in array: She: I mean, | if x < pivot: less.append(x) She: do you really need all these ifs and fors? | if x == pivot: equal.append(x) -She: Could you maybe just use filter instead? | if x > pivot: greater.append(x) +She: Could you maybe just use filter instead? | if x > pivot: greater.append(x) | return sort(less)+equal+sort(greater) You: quicksort with filter? | else: | return array From e0fd79de4db48690776f97033b39d1c8a7393f8b Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 19 Jul 2018 08:57:39 +0000 Subject: [PATCH 46/49] add / to the section names in :list (fixes #73, fixes #77) --- lib/get_answer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index a5eb81c..6a7d8e2 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -95,7 +95,7 @@ def _isdir(topic): return os.path.isdir(topic) def _get_answers_and_dirs(): topics = glob.glob(PATH_CHEAT_SHEETS + "*") - answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]) + answer_dirs = [_remove_initial_underscore(os.path.split(topic)[1]).rstrip('/')+'/' for topic in topics if _isdir(topic)] answers = [os.path.split(topic)[1] for topic in topics if not _isdir(topic)] return answer_dirs, answers From 271d5bde8aeb245d7de37267ba272f5127d09ede Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 19 Jul 2018 08:58:27 +0000 Subject: [PATCH 47/49] vim answers syntax highlighting --- lib/languages_data.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/languages_data.py b/lib/languages_data.py index 4d62d9e..8122e9e 100644 --- a/lib/languages_data.py +++ b/lib/languages_data.py @@ -62,6 +62,7 @@ LEXER = { "tcsh" : pygments.lexers.TcshLexer, "vb" : pygments.lexers.VbNetLexer, "vbnet" : pygments.lexers.VbNetLexer, + "vim" : pygments.lexers.VimLexer, # experimental "arduino": pygments.lexers.ArduinoLexer, From 99399c1d8abc205664ca10acbfb2cca62ed33e7c Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 19 Jul 2018 08:58:59 +0000 Subject: [PATCH 48/49] show empty list for empty sections --- lib/get_answer.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/get_answer.py b/lib/get_answer.py index 6a7d8e2..55e1967 100644 --- a/lib/get_answer.py +++ b/lib/get_answer.py @@ -169,10 +169,13 @@ def get_topic_type(topic): # pylint: disable=too-many-locals,too-many-branches,t if '+' in topic_name: result = 'question' else: - if topic_type in _get_topics_dirs() and topic_name in [':list']: + #if topic_type in _get_topics_dirs() and topic_name in [':list']: + if topic_name in [':list']: result = "internal" elif is_valid_learnxy(topic): result = 'learnxiny' + elif topic_name in [':learn']: + result = "internal" else: # let us activate the 'question' feature for all subsections result = 'question' @@ -258,7 +261,10 @@ def _get_cheat_sheets(topic): filename = PATH_CHEAT_SHEETS + "%s" % topic if not os.path.exists(filename): filename = PATH_CHEAT_SHEETS + "_%s" % topic - return open(filename, "r").read().decode('utf-8') + if os.path.isdir(filename): + return "" + else: + return open(filename, "r").read().decode('utf-8') def _get_cheat_sheets_dir(topic): answer = [] From 7473c261b696cedd20c0996106172206733169a0 Mon Sep 17 00:00:00 2001 From: Igor Chubin Date: Thu, 19 Jul 2018 09:01:05 +0000 Subject: [PATCH 49/49] do not call render_html for empty answers --- lib/cheat_wrapper.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/cheat_wrapper.py b/lib/cheat_wrapper.py index 3ec2eda..60e5a81 100644 --- a/lib/cheat_wrapper.py +++ b/lib/cheat_wrapper.py @@ -257,7 +257,7 @@ def _visualize(query, keyword, answers, request_options, html=None): # pylint: d else: repository_button = _github_button(topic_type) - if html: + if html and query: result = _render_html( query, result, editable, repository_button, request_options)