Update examples [skip ci]
This commit is contained in:
parent
6246e1e605
commit
e1408f2bfb
6 changed files with 140 additions and 28 deletions
|
|
@ -1,5 +1,37 @@
|
|||
# Examples
|
||||
|
||||
- [Examples](#examples)
|
||||
- [Delete a list of files returned by a Unix command](#delete-a-list-of-files-returned-by-a-unix-command)
|
||||
- [Calculate aggregate size of directory](#calculate-aggregate-size-of-directory)
|
||||
- [Shuffle the lines of a file](#shuffle-the-lines-of-a-file)
|
||||
- [Fetch latest Github release tag](#fetch-latest-github-release-tag)
|
||||
- [Generate deps.edn entry for a gitlib](#generate-depsedn-entry-for-a-gitlib)
|
||||
- [View download statistics from Clojars](#view-download-statistics-from-clojars)
|
||||
- [Portable tree command](#portable-tree-command)
|
||||
- [List outdated maven dependencies](#list-outdated-maven-dependencies)
|
||||
- [Convert project.clj to deps.edn](#convert-projectclj-to-depsedn)
|
||||
- [Print current time in California](#print-current-time-in-california)
|
||||
- [Tiny http server](#tiny-http-server)
|
||||
- [Print random docstring](#print-random-docstring)
|
||||
- [Cryptographic hash](#cryptographic-hash)
|
||||
- [Package script as Docker image](#package-script-as-docker-image)
|
||||
- [Extract single file from zip](#extract-single-file-from-zip)
|
||||
- [Note taking app](#note-taking-app)
|
||||
- [which](#which)
|
||||
- [pom.xml version](#pomxml-version)
|
||||
- [Whatsapp frequencies](#whatsapp-frequencies)
|
||||
- [Find unused vars](#find-unused-vars)
|
||||
- [List contents of jar file](#list-contents-of-jar-file)
|
||||
- [Invoke vim inside a script](#invoke-vim-inside-a-script)
|
||||
- [Portal](#portal)
|
||||
- [Image viewer](#image-viewer)
|
||||
- [File server](#file-server)
|
||||
- [Torrent viewer](#torrent-viewer)
|
||||
- [cprop.clj](#cpropclj)
|
||||
- [fzf](#fzf)
|
||||
- [digitalocean-ping.clj](#digitalocean-pingclj)
|
||||
- [download-aliases.clj](#download-aliasesclj)
|
||||
|
||||
Here's a gallery of useful examples. Do you have a useful example? PR welcome!
|
||||
|
||||
## Delete a list of files returned by a Unix command
|
||||
|
|
@ -161,7 +193,9 @@ See [examples/pst.clj](https://github.com/babashka/babashka/blob/master/examples
|
|||
|
||||
## Tiny http server
|
||||
|
||||
See [examples/http_server.clj](https://github.com/babashka/babashka/blob/master/examples/http_server.clj)
|
||||
This implements an http server from scratch. Note that babashka comes with `org.httpkit.server` now, so you don't need to build an http server from scratch anymore.
|
||||
|
||||
See [examples/http_server_from_scratch.clj](https://github.com/babashka/babashka/blob/master/examples/http_server_from_scratch.clj)
|
||||
|
||||
Original by [@souenzzo](https://gist.github.com/souenzzo/a959a4c5b8c0c90df76fe33bb7dfe201)
|
||||
|
||||
|
|
@ -330,10 +364,22 @@ Opens browser window and lets user navigate through images of all sub-directorie
|
|||
Example usage:
|
||||
|
||||
``` shell
|
||||
$ examples/image_viewer.clj
|
||||
$ examples/image-viewer.clj
|
||||
```
|
||||
|
||||
See [image_viewer.clj](image_viewer.clj).
|
||||
See [image-viewer.clj](image-viewer.clj).
|
||||
|
||||
## File server
|
||||
|
||||
Opens browser window and lets user navigate through filesystem.
|
||||
|
||||
Example usage:
|
||||
|
||||
``` shell
|
||||
$ examples/file-server.clj
|
||||
```
|
||||
|
||||
See [file-server.clj](file-server.clj).
|
||||
|
||||
## Torrent viewer
|
||||
|
||||
|
|
@ -370,18 +416,6 @@ Example usage:
|
|||
$ cat src/babashka/main.clj | bb examples/fzf.clj
|
||||
```
|
||||
|
||||
## [rofi](rofi.clj)
|
||||
|
||||
Invoke [rofi](https://github.com/davatorium/rofi), a type-to-filter menu on linux, from babashka.
|
||||
|
||||
See [rofi.clj](rofi.clj)
|
||||
|
||||
Example usage:
|
||||
|
||||
``` shell
|
||||
$ cat src/babashka/main.clj | bb examples/rofi.clj
|
||||
```
|
||||
|
||||
## [digitalocean-ping.clj](digitalocean-ping.clj)
|
||||
|
||||
The script allows to define which DigitalOcean cloud datacenter (region) has best network performance (ping latency).
|
||||
|
|
|
|||
82
examples/file-server.clj
Executable file
82
examples/file-server.clj
Executable file
|
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env bb
|
||||
#_" -*- mode: clojure; -*-"
|
||||
;; Source: https://gist.github.com/holyjak/36c6284c047ffb7573e8a34399de27d8
|
||||
|
||||
;; Based on https://github.com/babashka/babashka/blob/master/examples/image_viewer.clj
|
||||
(ns file-server
|
||||
(:require [babashka.fs :as fs]
|
||||
[clojure.java.browse :as browse]
|
||||
[clojure.string :as str]
|
||||
[clojure.tools.cli :refer [parse-opts]]
|
||||
[hiccup2.core :as html]
|
||||
[org.httpkit.server :as server])
|
||||
(:import [java.net URLDecoder URLEncoder]))
|
||||
|
||||
(def cli-options [["-p" "--port PORT" "Port for HTTP server" :default 8090 :parse-fn #(Integer/parseInt %)]
|
||||
["-d" "--dir DIR" "Directory to serve files from" :default "."]
|
||||
["-h" "--help" "Print usage info"]])
|
||||
|
||||
(def parsed-args (parse-opts *command-line-args* cli-options))
|
||||
(def opts (:options parsed-args))
|
||||
|
||||
(cond
|
||||
(:help opts)
|
||||
(do (println "Start a http server for static files in the given dir. Usage:\n" (:summary parsed-args))
|
||||
(System/exit 0))
|
||||
|
||||
(:errors parsed-args)
|
||||
(do (println "Invalid arguments:\n" (str/join "\n" (:errors parsed-args)))
|
||||
(System/exit 1))
|
||||
|
||||
:else
|
||||
:continue)
|
||||
|
||||
|
||||
(def port (:port opts))
|
||||
(def dir (fs/path (:dir opts)))
|
||||
|
||||
(assert (fs/directory? dir) (str "The given dir `" dir "` is not a directory."))
|
||||
|
||||
(defn index [f]
|
||||
(let [files (map #(str (.relativize dir %))
|
||||
(fs/list-dir f))]
|
||||
{:body (-> [:html
|
||||
[:head
|
||||
[:meta {:charset "UTF-8"}]
|
||||
[:title (str "Index of `" f "`")]]
|
||||
[:body
|
||||
[:h1 "Index of " [:code (str f)]]
|
||||
[:ul
|
||||
(for [child files]
|
||||
[:li [:a {:href (URLEncoder/encode (str child))} child
|
||||
(when (fs/directory? (fs/path dir child)) "/")]])]
|
||||
[:hr]
|
||||
[:footer {:style {"text-aling" "center"}} "Served by http-server.clj"]]]
|
||||
html/html
|
||||
str)}))
|
||||
|
||||
(defn body [path]
|
||||
{:body (fs/file path)})
|
||||
|
||||
(server/run-server
|
||||
(fn [{:keys [:uri]}]
|
||||
(let [f (fs/path dir (str/replace-first (URLDecoder/decode uri) #"^/" ""))
|
||||
index-file (fs/path f "index.html")]
|
||||
(cond
|
||||
(and (fs/directory? f) (fs/readable? index-file))
|
||||
(body index-file)
|
||||
|
||||
(fs/directory? f)
|
||||
(index f)
|
||||
|
||||
(fs/readable? f)
|
||||
(body f)
|
||||
|
||||
:else
|
||||
{:status 404 :body (str "Not found `" f "` in " dir)})))
|
||||
{:port port})
|
||||
|
||||
(println "Starting http server at " port "for" (str dir))
|
||||
(browse/browse-url (format "http://localhost:%s/" port))
|
||||
|
||||
@(promise)
|
||||
|
|
@ -1,10 +1,13 @@
|
|||
#!/usr/bin/env bb
|
||||
|
||||
;; This example creates a file serving web server
|
||||
;; This example creates a file serving web server from scratch.
|
||||
;; It accepts a single connection from a browser and serves content to the connected browser
|
||||
;; after the connection times out, this script will serve no more.
|
||||
;; Also see notes.clj for another web app example.
|
||||
|
||||
;; Note that babashka comes with org.httpkit.server now, so you don't need to
|
||||
;; build an http server from scratch anymore. We leave this script here for educational purposes.
|
||||
|
||||
(import (java.net ServerSocket))
|
||||
(require '[clojure.java.io :as io]
|
||||
'[clojure.string :as string])
|
||||
|
|
@ -1,5 +1,10 @@
|
|||
#!/usr/bin/env bb
|
||||
|
||||
;; Note that babashka comes with org.httpkit.server now, so you don't need to
|
||||
;; build an http server from scratch anymore like we do here. We should update
|
||||
;; this script to the built-in webserver. Whoever reads this is welcome to
|
||||
;; submit a PR.
|
||||
|
||||
(import (java.net ServerSocket))
|
||||
(require '[clojure.java.io :as io]
|
||||
'[clojure.string :as str])
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
(require '[babashka.process :as p])
|
||||
|
||||
(defn rofi [s]
|
||||
(let [proc (p/process
|
||||
["rofi" "-i" "-dmenu" "-mesg" "Select" "-sync" "-p" "*"]
|
||||
{:in s :err :inherit
|
||||
:out :string})]
|
||||
(:out @proc)))
|
||||
|
||||
(rofi (slurp *in*))
|
||||
|
||||
;; `echo "hi\nthere\nclj" | bb examples/rofi.clj`
|
||||
Loading…
Reference in a new issue