aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2022-01-12 00:42:15 +0100
committerThomas Voss <mail@thomasvoss.com> 2022-01-12 00:42:15 +0100
commit641fe408b1b9b45d1dc20905d8ec3c00cd4fc804 (patch)
tree8acc6ee7ca4badff69a392812eb9159b017e97a6
parentfc0b71e67c9165978edab7cadda066a129bef78f (diff)
Add support for customizable tab widths
-rw-r--r--mpaste.114
-rw-r--r--mpaste.go11
2 files changed, 17 insertions, 8 deletions
diff --git a/mpaste.1 b/mpaste.1
index f163734..a739936 100644
--- a/mpaste.1
+++ b/mpaste.1
@@ -1,5 +1,5 @@
.\" vi: tw=100
-.Dd $Mdocdate: October 12 2021 $
+.Dd $Mdocdate: January 12 2022 $
.Dt MPASTE 1 URM
.Os UNIX
.Sh NAME
@@ -16,8 +16,9 @@
.Sh DESCRIPTION
.Nm
is a minimal paste server for hosting plaintext data.
-The paste server has support for file uploads, syntax highlighting, a customizable homepage, and a
-password protected mode where only users with valid API keys can upload pastes.
+The paste server has support for file uploads, syntax highlighting, a customizable homepage,
+customizable tab width, and a password protected mode where only users with valid API keys can
+upload pastes.
For the simplest example of a working paste server, simply run
.Nm
and provide it with a
@@ -45,6 +46,13 @@ If you would like syntax highlighting simply append the appropiate file extensio
For example, to syntax highlight C code with paste ID 5, go to
.Dq domain.com/5.c .
.Pp
+By default when syntax highlighting the server displays tab characters with a width of 8 columns. If
+you would like to customize the width of a tab you can set the
+.Dq tabs
+query parameter in the URI.
+For example, to view a Python file with a tab width of 4 columns, go to
+.Dq domain.com/1.py?tabs=4 .
+.Pp
If you would like to protect the server by requiring all users to have an API key, simply set the
.Ev MPASTE_SECRET
environment variable.
diff --git a/mpaste.go b/mpaste.go
index f105c2b..b5de948 100644
--- a/mpaste.go
+++ b/mpaste.go
@@ -37,11 +37,7 @@ var (
user_file string
)
-var (
- style = styles.Get("pygments")
- formatter = html.New(html.Standalone(true), html.WithClasses(true),
- html.WithLineNumbers(true), html.LineNumbersInTable(true))
-)
+var style = styles.Get("pygments")
func usage() {
fmt.Fprintf(os.Stderr,
@@ -147,6 +143,11 @@ func syntax_highlighting(w http.ResponseWriter, r *http.Request) {
WRITE_HEADER(http.StatusInternalServerError, "Failed to tokenize output")
}
+ tw, err := strconv.Atoi(r.URL.Query().Get("tabs"))
+ if err != nil {
+ tw = 8
+ }
+ formatter := html.New(html.Standalone(true), html.WithClasses(true), html.WithLineNumbers(true), html.LineNumbersInTable(true), html.TabWidth(tw))
if err := formatter.Format(w, style, iterator); err != nil {
WRITE_HEADER(http.StatusInternalServerError, "Failed to format output")
}