119 Commits

Author SHA1 Message Date
eeeck 85d2bb6cad Install on global path 2025-12-30 11:35:30 +01:00
eeeck 1fcada4536 Change cronjob to once a week
Sync less regularly since upstream repo is updated seldom
2025-11-11 15:41:32 +01:00
eeeck 1d1cbc83f5 Fix issue with pathspec 'master' 2025-11-11 15:01:15 +01:00
eeeck 3f21829810 Fix master branch name 2025-11-11 14:56:44 +01:00
eeeck 63fe59c7de Regularly fetch from upstream 2025-10-19 23:53:53 +02:00
Quentin Rameau 48517e586c Fix (2) some typo for kiosk mode in the man-page
Looks like I didn't pay enough attention the first time,
that's what you get for pushing without review!

Thanks to Hiltjo for spotting this!
2025-04-19 12:02:45 +02:00
Quentin Rameau ca380ccb93 Add configuration option for PDF-JS-viewer 2025-04-18 13:56:14 +02:00
Artyom Bologov 22cc5ceee2 Support PDFs 2025-04-18 13:38:56 +02:00
Quentin Rameau c3b3b95f4a Fix some typo for kiosk mode in the man-page
Thanks to Tim Dickson <dickson.tim@googlemail.com> for spotting it!
2025-01-05 12:02:38 +01:00
Quentin Rameau 7f1156f9b0 Build against Webkit 4.1
Seems that this is needed for libsoup3.
2025-01-05 12:02:38 +01:00
Quentin Rameau b3ba9f5991 Request HTTPS by default instead of HTTP
This might be more reasonable privacy-wise in 2025.
2025-01-05 12:02:38 +01:00
Quentin Rameau 9ef79bf710 webext: Process full messages
Piped messages would not always be fully sent in a single read.
Do a bit of message reassembly.
2024-03-24 15:27:20 +01:00
Quentin Rameau d5f45bffe0 webext: Free JavaScript objects
Webkit documentation says JavaScript objects refcount is always
increased, and has to be released always.
2024-03-24 15:27:20 +01:00
Quentin Rameau b48be75179 Fix message sizes for web extension communication 2024-03-17 09:13:56 +01:00
Quentin Rameau 2ea91766bb webext: Remove unused functions
Communication from web extension to surf isn't used,
this code can always be brought back if needed.
2024-03-17 08:22:18 +01:00
Quentin Rameau 7513a622e3 Update get frame name function
webkit_navigation_policy_decision_get_frame_name has been deprecated
since 2.40.
2024-03-17 08:22:18 +01:00
Quentin Rameau 4bab57968d Remove setting processing model
The processing model we want is actually the only one supported
since 2.40.
2024-03-17 08:22:18 +01:00
Quentin Rameau 5e591b89a1 Update deprecated JavaScript eval function
Function webkit_web_view_run_javascript has been deprecated since 2.40.
2024-03-17 08:22:18 +01:00
Quentin Rameau 85bfff1083 Move TLS parameters handling to datamanager
Using web context is deprecated since 2.32.
2024-03-17 08:22:18 +01:00
Quentin Rameau 3f4292b7cc Remove Java support toggle
This has been deprecated since 2.38.
2024-03-17 08:22:18 +01:00
Quentin Rameau 175710126c Remove frame flattening toggle
This has been deprecated since 2.38.
2024-03-17 08:22:18 +01:00
Quentin Rameau f1d47112d6 Add webkit URI scheme 2024-03-17 08:22:17 +01:00
Quentin Rameau 30f5464eb1 Fix usage message: -Pp don't exist anymore
Thanks to Eric Pruitt <eric.pruitt@gmail.com> for reporting!
2023-11-18 12:48:19 +01:00
Petr Vaněk e9b7ec6722 webext: add missing gio/gunixfdlist.h includes
This resolves two set of warnings pointed by compiler
-Wimplicit-function-declaration and -Wint-conversion, where the later
one can result with segfault caused by invalid cast from int to pointer.

Fixes: 665a709b52 ("webext: Exchange fd over webkit messages")
2022-10-22 13:07:19 +02:00
Quentin Rameau 665a709b52 webext: Exchange fd over webkit messages
This is more complex, but webkit2gtk prevents passing file descriptors
to processes in 2.38.0.
2022-10-16 17:39:05 +02:00
Quentin Rameau 609ea1c8e6 Do not reload page when toggling dark mode
This change had actually been applied in previous commit d3ee652
by mistake.
2022-05-04 03:31:58 +02:00
Quentin Rameau 38cb1632bf Fix dark mode parameter application 2022-04-10 18:50:02 +02:00
Quentin Rameau d3ee652860 Only get webkit context and settings once 2022-04-10 18:49:35 +02:00
Quentin Rameau 1f5b8f3bd1 Add dark mode toggle
This sets dark gtk theme variant,
which should make webkit2gtk use dark css variant
from websites that provide it.
2022-04-10 16:35:24 +02:00
Quentin Rameau 11dca18a2d Improve non-ASCII character search handling
Before, the XA_STRING would only let use ASCII characters properly.
Now UTF-8 characters should be handled correctly.
2021-07-19 22:27:50 +02:00
Quentin Rameau 238d2273b5 Improve SETPROP xprop parsing
This handles correctly quotes, backslashes, etc.
2021-07-19 22:27:32 +02:00
Quentin Rameau 761ea9e4c6 Fix togglestats array 2021-05-21 00:16:17 +02:00
Quentin Rameau bcd7d74e61 Update LICENSE file 2021-05-10 00:44:36 +02:00
Quentin Rameau 327cca048b Fix distfile generation 2021-05-10 00:37:46 +02:00
Quentin Rameau d75c3ded0b Bump version to 2.1 2021-05-08 16:53:53 +02:00
Quentin Rameau 4540b4a97c Remove accelerated canvas parameter
This has been deprecated since release 2.32.
2021-04-30 08:48:19 +02:00
Quentin Rameau fce76429b8 Remove external plugin handling
This has been deprecated since release 2.32.
2021-04-30 08:47:20 +02:00
Quentin Rameau 7dcce9e1b9 Makefile: use explicit targets
Some make implementation have trouble with following inference rules
indirection
2020-11-07 18:43:11 +01:00
Quentin Rameau 262c3ee24a webext: Fix missing flags for gio 2020-11-07 15:32:46 +01:00
Quentin Rameau 55c65b21f6 Simplify communication with webext 2020-11-01 16:59:12 +01:00
Quentin Rameau 5f81d4a99f Set title on committed load 2020-11-01 16:59:12 +01:00
Quentin Rameau e92fd1aa5f Communicate through a Unix socket instead of a pipe pair 2020-11-01 16:59:12 +01:00
Quentin Rameau f61cfc720c Add support for ephemeral (zero disk access) 2020-11-01 16:59:12 +01:00
Quentin Rameau 6850365d7c Add support for configuring plugins directories 2020-11-01 16:59:12 +01:00
Quentin Rameau 8d5e2b3a40 Remove common 2020-11-01 16:59:11 +01:00
Quentin Rameau 21fcbc004e Makefile: rework how webextensions are handled 2019-02-10 19:50:25 +01:00
efe d068a3878b Fix vertical scroll directions in the config file 2019-02-09 00:25:39 +01:00
Leonardo Taccari bf46e40f3a Makefile: fix a typo in clean: target 2019-02-07 21:28:15 +01:00
Quentin Rameau 890b2fc396 Makefile: include common to webext 2019-02-06 10:53:05 +01:00
Quentin Rameau b9cd3bb0bc Makefile: fix a typo for the webext CFLAGS
Thanks to Justin Keogh <suckless@v6y.net> for spotting this
2019-02-06 10:22:15 +01:00
Quentin Rameau 02541c3146 Send message size inside messages through pipes 2018-10-15 13:15:54 +02:00
Leonardo Taccari 2b71a22755 Use pkg-config for X11{INC,LIB} 2018-10-09 21:50:20 +02:00
Quentin Rameau 16beb6f8ac Makefile: fix dependencies 2018-10-09 12:41:00 +02:00
Quentin Rameau 4e7371317c Fix, again, webext directory in Makefile 2018-10-08 14:25:37 +02:00
Quentin Rameau 47e39851ca Fix webext directory in Makefile 2018-10-08 14:12:51 +02:00
Quentin Rameau 3321c42d36 Remove libtool depencency, reorganise Makefile
We don't need libtool anymore, just build the library directly.
This lets us simplify the Makefile too.
2018-10-08 13:51:51 +02:00
Quentin Rameau e7c629b258 Unobfuscate Makefile 2018-10-08 13:51:51 +02:00
Quentin Rameau 660413256f ext: get the right DOM on msg
When navigating history, the document-loaded signal isn't triggered and
we can't directly get back the previous webview, so we have no other
choice than to look it up everytime a new message is received.
2018-10-08 11:38:03 +02:00
Quentin Rameau 1901359efa Add a file for shared functions
New common.[hc] files where shared functions between surf and
webkitextension will be put. First addition is die().
2018-10-08 11:38:03 +02:00
Quentin Rameau 7ea0c2f7f8 Communicate with webextension via a pipe 2018-10-08 11:38:03 +02:00
Quentin Rameau 1bd6d20102 ext: first commit for surf lib 2018-10-08 11:38:03 +02:00
Quentin Rameau 0bd553a078 Request cookiemanager only once at creation 2018-10-08 11:38:03 +02:00
Quentin Rameau c60523a702 Exit more gracefully on web process crash. 2018-10-08 11:38:03 +02:00
nzl befe481a9b Allow tilde expansion in loaduri
also fixed a bug that ~foo/ was expanded to /home/fo/o/
2018-10-08 11:38:03 +02:00
Eddie Thieda d6954e1541 Fixed wording in FAQ.md 2018-06-18 12:34:52 +02:00
Quentin Rameau 6f6b343721 Force printing the winid when requested
Do not wait for the libc to decide flushing buffers, force it ourselves.

Thanks to koniu for reporting the issue.
2018-06-09 21:55:20 +02:00
Jochen Sprickerhof 81f0452bc6 Document SIGHUP in manpage 2018-02-23 13:39:35 +01:00
nzl d2e4989c3c Script text shouldn't go through formatted conversion 2018-02-23 13:39:35 +01:00
Eon S. Jeon 7817d0ec83 Add support for WebGL
Allows enabling and disabling WebGL support built into WebKit.
The feature is turned off by default.
2018-02-23 13:39:35 +01:00
Quentin Rameau 723ff26c36 Disable media autoplay by default 2017-06-03 10:23:40 +02:00
Quentin Rameau a0c3c80ee6 Store modified parameters list 2017-05-30 10:33:36 +02:00
Quentin Rameau a8bf206827 Use priority values instead of “forced” parameters
This makes parameter handling a bit easier and lets the user override
parameters as he sees fit.
2017-05-22 12:38:49 +02:00
Quentin Rameau a0ef4ba41d Get rid of config parameter MACROs
There's no need to obfuscate so much what is done, the user can deal
with a few extra knobs to set instead.
2017-05-22 12:38:49 +02:00
Quentin Rameau d3e974f4ea Get rid of integer member b in Arg
There's no need to keep another integer member there, use directly the i
integer one.
2017-05-22 12:38:49 +02:00
Quentin Rameau 70c1b548ab Only apply parameters when needed
Specify which parameter should be applied on which load state.
2017-05-22 12:38:49 +02:00
Quentin Rameau 2223417c91 Fix handling of uri-specific parameters
We need to (re)apply uri-specific parameters for each new uri even if
the parameter has already been set to get the correct value.

Thanks to Julien STEINHAUSER <julien.steinhauser@orange.fr> for the
report!
2017-05-22 12:38:49 +02:00
Quentin Rameau a1328457cf Unset previous user styles before applying another one 2017-05-22 12:38:49 +02:00
Constantine Bytensky 25652669ef Add config option for cross requests from file URLs
I use it to open local .xml files with .xsl style-sheets.
2017-05-22 12:38:49 +02:00
Quentin Rameau bcd05ae321 Add config option for microphone and webcam access 2017-05-21 17:13:02 +02:00
Quentin Rameau f5be376ccc Fix synchronization issue with atoms
Be sure to sync after setting an atom.
Sync too before reading one.
2017-05-12 00:30:51 +02:00
Quentin Rameau 5e2216c414 There's no need to call geturi() again in loadchanged
Also call the variable “uri” instead of “title” which was ambiguous
regarding what it is.
2017-05-12 00:30:45 +02:00
Quentin Rameau 4a1876eb80 Add config option for smooth scrolling activation 2017-05-11 15:33:42 +02:00
Quentin Rameau 93a3e4cda0 Add config option for Java activation 2017-05-11 15:27:27 +02:00
Quentin Rameau 298e688933 Add config option for setting default charset.
This will be used for pages with no specified charset.
2017-05-11 15:23:22 +02:00
Quentin Rameau 745a319baf Improve parameters handling
There's no need to reload all parameters each time a new url is loaded,
instead set only custom parameters and restore those to defaults when
needed.
2017-05-11 09:22:43 +02:00
ssd b115434720 Change PROMPT_GO from "URL:" to "Go:"
This looks more apropriate because URL is too specific and _SURF_GO can
be set to other things.
2017-05-11 09:22:43 +02:00
Quentin Rameau 47b145f2ec Add prompts for SETPROP
Imported from __20h__ repo, thanks to him and Ben Woolley.
2017-05-08 11:34:00 +02:00
Quentin Rameau b8b0c05035 Embed dmenu into the surf window by default 2017-05-08 11:33:59 +02:00
Quentin Rameau dca4264863 Simplify DOWNLOAD macro
No need to spawn an extra sh.
Use short flags for curl and quote operands.
Replace sleep with read, let the user close the download window instead
of waiting for an arbitrary time.
Rename d to reflect what it's used for.
Reorder sh positional arguments.
Set $0 to a command name and shift other positional parameters to
clarify the "sh -c" command.
2017-05-08 11:33:55 +02:00
Quentin Rameau 654d527f87 Simplify SETPROP macro
Get rid of xargs by using a subshell instead.
Use two replacement commands in sed because back-references in BRE are
too differently implemented in different libc.
Rename p, q, to reflect what they're used for.
Reorder sh positional arguments.
Set $0 to a command name and shift other positional parameters to
clarify the "sh -c" command.
2017-05-08 11:30:20 +02:00
Quentin Rameau d984d12de7 Simplify usage()
There's no real need for using the real executable call name, especially
with basename requiring special care.
2017-05-04 10:29:02 +02:00
Quentin Rameau 2901145301 Simplify version message 2017-05-04 10:27:07 +02:00
Ivan Tham e23d5c1c45 Use Ctrl-t for showcert instead of Ctrl-x 2017-05-02 17:20:11 +02:00
Quentin Rameau 5936806949 Cleanup and fix formatage issues in surf.1 2017-05-01 01:09:52 +02:00
Quentin Rameau 0df9f79d95 Fix forgotten options in surf.1 2017-05-01 01:08:27 +02:00
Hiltjo Posthuma edddfbc14a setcert: check uri before adding a certificate
Also directly check for https scheme, we won't need a certificate for
others.
2017-04-30 11:39:15 +02:00
Hiltjo Posthuma 21d81a71cc fix mini typo 2017-04-30 00:10:11 +02:00
Hiltjo Posthuma b466bb5bbd surf.1: remove trailing spaces 2017-04-30 00:09:07 +02:00
Quentin Rameau cc887cf2ab Add forgotten tT indicator description in surf.1 2017-04-29 17:59:09 +02:00
Quentin Rameau 0326e42bb3 Add forgotten fF indicator description in surf.1 2017-04-29 17:59:08 +02:00
Quentin Rameau d66904675d Add a flag for custom certificates
I don't think a keybinding would be useful here because we can't
remove a custom certificate which is alread set anyway.
I'll add it if somebody convince me of it's usefulness.
2017-04-29 17:59:08 +02:00
Quentin Rameau 7823ab6fc0 Move xid printing option from -x to -w 2017-04-29 17:59:08 +02:00
Quentin Rameau 9eda6f5dd5 Add a keybinding to show current TLS certificate 2017-04-29 17:59:07 +02:00
Quentin Rameau 1dc3cd513a Display an error message and certificate on tls error 2017-04-29 16:34:48 +02:00
Quentin Rameau c870098b82 Arrange Makefile
Let the user specify his own C and LD FLAGS.
Remove unuseful and non portable CFLAGS like pendantic and Wall.
2017-04-29 16:34:47 +02:00
Quentin Rameau db7922f173 Free temporary certificate in setcert 2017-04-29 14:34:02 +02:00
Quentin Rameau 0d1e670ac3 Do not build SiteSpecific file when regex is invalid 2017-04-28 13:09:39 +02:00
Quentin Rameau 3c2c0a6525 Add support for using custom certificates per url 2017-04-28 12:58:36 +02:00
Quentin Rameau eb32dd6eca Avoid using global name stylefile in setstyle() 2017-04-27 15:41:16 +02:00
Quentin Rameau d0e3c69e59 Change site styles structure for a more generic one 2017-04-27 15:02:40 +02:00
Quentin Rameau 5c52733984 Fix 27cec48 Add a flag/keybinding for strict TLS
Forgot to add changes in main(), usage() and newwindow() too.
2017-04-23 18:31:32 +02:00
Quentin Rameau 2940d2bd07 Fix a981959 Move -t stylefile flag to -C stylefile
Forgot to modify usage() and newwindow() too.
2017-04-23 18:28:06 +02:00
Quentin Rameau 4b752834d8 Fix possible oob access of cmd in newwindow()
Thanks to tarug0 for spotting this!
2017-04-23 18:27:43 +02:00
Quentin Rameau ac837f43b9 Bump year in program 2017-04-20 00:10:46 +02:00
Quentin Rameau 27cec48408 Add a flag and toggle keybinding for strict TLS 2017-04-20 00:10:45 +02:00
Quentin Rameau a981959124 Move -t stylefile flag to -C stylefile 2017-04-20 00:09:01 +02:00
Quentin Rameau ee854bb095 Rename SSL instances to TLS 2017-04-19 17:45:20 +02:00
Quentin Rameau 0247e91b00 Set strict ssl by default and handle insecure content
Non-https content in https pages is now handled separately from https
connection establishment.
2017-04-19 17:41:23 +02:00
Quentin Rameau 2355c20e92 Add a configure option for default window size 2017-04-19 19:10:21 +02:00
10 changed files with 1088 additions and 467 deletions
+31
View File
@@ -0,0 +1,31 @@
name: Sync Upstream (12h)
on:
schedule:
- cron: "0 0 * * 0"
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout fork
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: surf-webkit2
- name: Add upstream remote
run: |
git remote add upstream https://git.suckless.org/surf || true
git fetch upstream
- name: Merge upstream into surf-webkit2
run: |
git config user.name "gitea-runner[bot]"
git config user.email "gitea-runner[bot]@noreply.erickahmed.com"
git merge upstream/surf-webkit2 --strategy-option ours --no-edit || true
- name: Push merged branch
run: |
git push origin surf-webkit2
+5 -5
View File
@@ -1,10 +1,10 @@
# Frequently Asked Questions # Frequently Asked Questions
## Surf is starting up slowly. What might happen? ## Surf is starting up slowly. What might be causing this?
The first suspect for such a behaviour is the plugin handling. Run surf The first suspect for such behaviour is the plugin handling. Run surf on
on the commandline and see if there are errors because of »nspluginwrap the commandline and see if there are errors because of nspluginwrapper”
per« or failed RPCs to them. If that is true, go to ~/.mozilla/plugins or failed RPCs to them. If that is true, go to ~/.mozilla/plugins and
and try removing stale links to plugins not on your system anymore. This try removing stale links to plugins not on your system anymore. This
will stop surf from trying to load them. will stop surf from trying to load them.
+11 -2
View File
@@ -15,18 +15,27 @@ MIT/X Consortium License
© 2013 Alexander Sedov <alex0player@gmail.com> © 2013 Alexander Sedov <alex0player@gmail.com>
© 2013 Nick White <git@njw.me.uk> © 2013 Nick White <git@njw.me.uk>
© 2013 David Dufberg <david@dufberg.se> © 2013 David Dufberg <david@dufberg.se>
© 2014-2017 Quentin Rameau <quinq@fifth.space> © 2014-2021 Quentin Rameau <quinq@fifth.space>
© 2014-2016 Markus Teich <markus.teich@stusta.mhn.de> © 2014-2016 Markus Teich <markus.teich@stusta.mhn.de>
© 2015 Jakukyo Friel <weakish@gmail.com> © 2015 Jakukyo Friel <weakish@gmail.com>
© 2015 Ben Woolley <tautolog@gmail.com> © 2015 Ben Woolley <tautolog@gmail.com>
© 2015 Greg Reagle <greg.reagle@umbc.edu> © 2015 Greg Reagle <greg.reagle@umbc.edu>
© 2015 GhostAV <ghostav@riseup.net> © 2015 GhostAV <ghostav@riseup.net>
© 2015 Ivan Tham <pickfire@riseup.net> © 2015-2017 Ivan Tham <pickfire@riseup.net>
© 2015 Alexander Huemer <alexander.huemer@xx.vu> © 2015 Alexander Huemer <alexander.huemer@xx.vu>
© 2015 Michael Stevens <mstevens@etla.org> © 2015 Michael Stevens <mstevens@etla.org>
© 2015 Felix Janda <felix.janda@posteo.de> © 2015 Felix Janda <felix.janda@posteo.de>
© 2016 Charles Lehner <cel@celehner.com> © 2016 Charles Lehner <cel@celehner.com>
© 2016 Dmitry Bogatov <KAction@gnu.org> © 2016 Dmitry Bogatov <KAction@gnu.org>
© 2017 Hiltjo Posthuma <hiltjo@codemadness.org>
© 2017 ssd <ssd@mailless.org>
© 2017 Constantine Bytensky <kostya3@gmail.com>
© 2017 Eon S. Jeon <esjeon@hyunmu.am>
© 2017 Jochen Sprickerhof <git@jochen.sprickerhof.de>
© 2018 nzl <uruabi@gmail.com>
© 2018 Eddie Thieda <eddie.thieda@gmail.com>
© 2018 Leonardo Taccari <iamleot@gmail.com>
© 2019 efe <efe@efe.kim>
Permission is hereby granted, free of charge, to any person obtaining a Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"), copy of this software and associated documentation files (the "Software"),
+53 -38
View File
@@ -1,61 +1,76 @@
# surf - simple browser # surf - simple browser
# See LICENSE file for copyright and license details. # See LICENSE file for copyright and license details.
.POSIX:
include config.mk include config.mk
SRC = surf.c SRC = surf.c
OBJ = ${SRC:.c=.o} WSRC = webext-surf.c
OBJ = $(SRC:.c=.o)
WOBJ = $(WSRC:.c=.o)
WLIB = $(WSRC:.c=.so)
all: options surf all: options surf $(WLIB)
options: options:
@echo surf build options: @echo surf build options:
@echo "CFLAGS = ${CFLAGS}" @echo "CC = $(CC)"
@echo "LDFLAGS = ${LDFLAGS}" @echo "CFLAGS = $(SURFCFLAGS) $(CFLAGS)"
@echo "CC = ${CC}" @echo "WEBEXTCFLAGS = $(WEBEXTCFLAGS) $(CFLAGS)"
@echo "LDFLAGS = $(LDFLAGS)"
.c.o: surf: $(OBJ)
@echo CC $< $(CC) $(SURFLDFLAGS) $(LDFLAGS) -o $@ $(OBJ) $(LIBS)
@${CC} -c ${CFLAGS} $<
${OBJ}: config.h config.mk $(OBJ) $(WOBJ): config.h common.h config.mk
config.h: config.h:
@echo creating $@ from config.def.h cp config.def.h $@
@cp config.def.h $@
surf: ${OBJ} $(OBJ): $(SRC)
@echo CC -o $@ $(CC) $(SURFCFLAGS) $(CFLAGS) -c $(SRC)
@${CC} -o $@ surf.o ${LDFLAGS}
$(WLIB): $(WOBJ)
$(CC) -shared -Wl,-soname,$@ $(LDFLAGS) -o $@ $? $(WEBEXTLIBS)
$(WOBJ): $(WSRC)
$(CC) $(WEBEXTCFLAGS) $(CFLAGS) -c $(WSRC)
clean: clean:
@echo cleaning rm -f surf $(OBJ)
@rm -f surf ${OBJ} surf-${VERSION}.tar.gz rm -f $(WLIB) $(WOBJ)
dist: clean distclean: clean
@echo creating dist tarball rm -f config.h surf-$(VERSION).tar.gz
@mkdir -p surf-${VERSION}
@cp -R LICENSE Makefile config.mk config.def.h README \ dist: distclean
surf-open.sh arg.h TODO.md surf.png \ mkdir -p surf-$(VERSION)
surf.1 ${SRC} surf-${VERSION} cp -R LICENSE Makefile config.mk config.def.h README \
@tar -cf surf-${VERSION}.tar surf-${VERSION} surf-open.sh arg.h TODO.md surf.png \
@gzip surf-${VERSION}.tar surf.1 common.h $(SRC) $(WSRC) surf-$(VERSION)
@rm -rf surf-${VERSION} tar -cf surf-$(VERSION).tar surf-$(VERSION)
gzip surf-$(VERSION).tar
rm -rf surf-$(VERSION)
install: all install: all
@echo installing executable file to ${DESTDIR}${PREFIX}/bin mkdir -p $(DESTDIR)$(PREFIX)/bin
@mkdir -p ${DESTDIR}${PREFIX}/bin cp -f surf $(DESTDIR)$(PREFIX)/bin
@cp -f surf ${DESTDIR}${PREFIX}/bin chmod 755 $(DESTDIR)$(PREFIX)/bin/surf
@chmod 755 ${DESTDIR}${PREFIX}/bin/surf mkdir -p $(DESTDIR)$(LIBDIR)
@echo installing manual page to ${DESTDIR}${MANPREFIX}/man1 cp -f $(WLIB) $(DESTDIR)$(LIBDIR)
@mkdir -p ${DESTDIR}${MANPREFIX}/man1 for wlib in $(WLIB); do \
@sed "s/VERSION/${VERSION}/g" < surf.1 > ${DESTDIR}${MANPREFIX}/man1/surf.1 chmod 644 $(DESTDIR)$(LIBDIR)/$$wlib; \
@chmod 644 ${DESTDIR}${MANPREFIX}/man1/surf.1 done
mkdir -p $(DESTDIR)$(MANPREFIX)/man1
sed "s/VERSION/$(VERSION)/g" < surf.1 > $(DESTDIR)$(MANPREFIX)/man1/surf.1
chmod 644 $(DESTDIR)$(MANPREFIX)/man1/surf.1
uninstall: uninstall:
@echo removing executable file from ${DESTDIR}${PREFIX}/bin rm -f $(DESTDIR)$(PREFIX)/bin/surf
@rm -f ${DESTDIR}${PREFIX}/bin/surf rm -f $(DESTDIR)$(MANPREFIX)/man1/surf.1
@echo removing manual page from ${DESTDIR}${MANPREFIX}/man1 for wlib in $(WLIB); do \
@rm -f ${DESTDIR}${MANPREFIX}/man1/surf.1 rm -f $(DESTDIR)$(LIBDIR)/$$wlib; \
done
- rmdir $(DESTDIR)$(LIBDIR)
.PHONY: all options clean dist install uninstall .PHONY: all options distclean clean dist install uninstall
+1
View File
@@ -0,0 +1 @@
#define MSGBUFSZ 8
+89 -61
View File
@@ -3,65 +3,85 @@ static int surfuseragent = 1; /* Append Surf version to default WebKit user
static char *fulluseragent = ""; /* Or override the whole user agent string */ static char *fulluseragent = ""; /* Or override the whole user agent string */
static char *scriptfile = "~/.surf/script.js"; static char *scriptfile = "~/.surf/script.js";
static char *styledir = "~/.surf/styles/"; static char *styledir = "~/.surf/styles/";
static char *certdir = "~/.surf/certificates/";
static char *cachedir = "~/.surf/cache/"; static char *cachedir = "~/.surf/cache/";
static char *cookiefile = "~/.surf/cookies.txt"; static char *cookiefile = "~/.surf/cookies.txt";
/* Webkit default features */ /* Webkit default features */
/* Highest priority value will be used.
* Default parameters are priority 0
* Per-uri parameters are priority 1
* Command parameters are priority 2
*/
static Parameter defconfig[ParameterLast] = { static Parameter defconfig[ParameterLast] = {
SETB(AcceleratedCanvas, 1), /* parameter Arg value priority */
SETB(CaretBrowsing, 0), [AccessMicrophone] = { { .i = 0 }, },
SETV(CookiePolicies, "@Aa"), [AccessWebcam] = { { .i = 0 }, },
SETB(DiskCache, 1), [Certificate] = { { .i = 0 }, },
SETB(DNSPrefetch, 0), [CaretBrowsing] = { { .i = 0 }, },
SETI(FontSize, 12), [CookiePolicies] = { { .v = "@Aa" }, },
SETB(FrameFlattening, 0), [DarkMode] = { { .i = 0 }, },
SETB(Geolocation, 0), [DefaultCharset] = { { .v = "UTF-8" }, },
SETB(HideBackground, 0), [DiskCache] = { { .i = 1 }, },
SETB(Inspector, 0), [DNSPrefetch] = { { .i = 0 }, },
SETB(JavaScript, 1), [Ephemeral] = { { .i = 0 }, },
SETB(KioskMode, 0), [FileURLsCrossAccess] = { { .i = 0 }, },
SETB(LoadImages, 1), [FontSize] = { { .i = 12 }, },
SETB(MediaManualPlay, 0), [Geolocation] = { { .i = 0 }, },
SETB(Plugins, 1), [HideBackground] = { { .i = 0 }, },
SETV(PreferredLanguages, ((char *[]){ NULL })), [Inspector] = { { .i = 0 }, },
SETB(RunInFullscreen, 0), [JavaScript] = { { .i = 1 }, },
SETB(ScrollBars, 1), [KioskMode] = { { .i = 0 }, },
SETB(ShowIndicators, 1), [LoadImages] = { { .i = 1 }, },
SETB(SiteQuirks, 1), [MediaManualPlay] = { { .i = 1 }, },
SETB(SpellChecking, 0), [PDFJSviewer] = { { .i = 1 }, },
SETV(SpellLanguages, ((char *[]){ "en_US", NULL })), [PreferredLanguages] = { { .v = (char *[]){ NULL } }, },
SETB(StrictSSL, 0), [RunInFullscreen] = { { .i = 0 }, },
SETB(Style, 1), [ScrollBars] = { { .i = 1 }, },
SETF(ZoomLevel, 1.0), [ShowIndicators] = { { .i = 1 }, },
[SiteQuirks] = { { .i = 1 }, },
[SmoothScrolling] = { { .i = 0 }, },
[SpellChecking] = { { .i = 0 }, },
[SpellLanguages] = { { .v = ((char *[]){ "en_US", NULL }) }, },
[StrictTLS] = { { .i = 1 }, },
[Style] = { { .i = 1 }, },
[WebGL] = { { .i = 0 }, },
[ZoomLevel] = { { .f = 1.0 }, },
}; };
static UriParameters uriparams[] = { static UriParameters uriparams[] = {
{ "(://|\\.)suckless\\.org(/|$)", { { "(://|\\.)suckless\\.org(/|$)", {
FSETB(JavaScript, 0), [JavaScript] = { { .i = 0 }, 1 },
FSETB(Plugins, 0),
}, }, }, },
}; };
/* default window size: width, height */
static int winsize[] = { 800, 600 };
static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE | static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
WEBKIT_FIND_OPTIONS_WRAP_AROUND; WEBKIT_FIND_OPTIONS_WRAP_AROUND;
#define SETPROP(p, q) { \ #define PROMPT_GO "Go:"
#define PROMPT_FIND "Find:"
/* SETPROP(readprop, setprop, prompt)*/
#define SETPROP(r, s, p) { \
.v = (const char *[]){ "/bin/sh", "-c", \ .v = (const char *[]){ "/bin/sh", "-c", \
"prop=\"`xprop -id $2 $0 " \ "prop=\"$(printf '%b' \"$(xprop -id $1 "r" " \
"| sed \"s/^$0(STRING) = \\(\\\\\"\\?\\)\\(.*\\)\\1$/\\2/\" " \ "| sed -e 's/^"r"(UTF8_STRING) = \"\\(.*\\)\"/\\1/' " \
"| xargs -0 printf %b | dmenu`\" &&" \ " -e 's/\\\\\\(.\\)/\\1/g')\" " \
"xprop -id $2 -f $1 8s -set $1 \"$prop\"", \ "| dmenu -p '"p"' -w $1)\" " \
p, q, winid, NULL \ "&& xprop -id $1 -f "s" 8u -set "s" \"$prop\"", \
"surf-setprop", winid, NULL \
} \ } \
} }
/* DOWNLOAD(URI, referer) */ /* DOWNLOAD(URI, referer) */
#define DOWNLOAD(d, r) { \ #define DOWNLOAD(u, r) { \
.v = (const char *[]){ "/bin/sh", "-c", \ .v = (const char *[]){ "st", "-e", "/bin/sh", "-c",\
"st -e /bin/sh -c \"curl -g -L -J -O --user-agent '$1'" \ "curl -g -L -J -O -A \"$1\" -b \"$2\" -c \"$2\"" \
" --referer '$2' -b $3 -c $3 '$0';" \ " -e \"$3\" \"$4\"; read", \
" sleep 5;\"", \ "surf-download", useragent, cookiefile, r, u, NULL \
d, useragent, r, cookiefile, NULL \
} \ } \
} }
@@ -87,11 +107,20 @@ static WebKitFindOptions findopts = WEBKIT_FIND_OPTIONS_CASE_INSENSITIVE |
* The iteration will stop at the first match, beginning at the beginning of * The iteration will stop at the first match, beginning at the beginning of
* the list. * the list.
*/ */
static SiteStyle styles[] = { static SiteSpecific styles[] = {
/* regexp file in $styledir */ /* regexp file in $styledir */
{ ".*", "default.css" }, { ".*", "default.css" },
}; };
/* certificates */
/*
* Provide custom certificate for urls
*/
static SiteSpecific certs[] = {
/* regexp file in $certdir */
{ "://suckless\\.org/", "suckless.org.crt" },
};
#define MODKEY GDK_CONTROL_MASK #define MODKEY GDK_CONTROL_MASK
/* hotkeys */ /* hotkeys */
@@ -101,28 +130,26 @@ static SiteStyle styles[] = {
*/ */
static Key keys[] = { static Key keys[] = {
/* modifier keyval function arg */ /* modifier keyval function arg */
{ MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO") }, { MODKEY, GDK_KEY_g, spawn, SETPROP("_SURF_URI", "_SURF_GO", PROMPT_GO) },
{ MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND") }, { MODKEY, GDK_KEY_f, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
{ MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND") }, { MODKEY, GDK_KEY_slash, spawn, SETPROP("_SURF_FIND", "_SURF_FIND", PROMPT_FIND) },
{ 0, GDK_KEY_Escape, stop, { 0 } }, { 0, GDK_KEY_Escape, stop, { 0 } },
{ MODKEY, GDK_KEY_c, stop, { 0 } }, { MODKEY, GDK_KEY_c, stop, { 0 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .b = 1 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_r, reload, { .i = 1 } },
{ MODKEY, GDK_KEY_r, reload, { .b = 0 } }, { MODKEY, GDK_KEY_r, reload, { .i = 0 } },
{ MODKEY, GDK_KEY_l, navigate, { .i = +1 } }, { MODKEY, GDK_KEY_l, navigate, { .i = +1 } },
{ MODKEY, GDK_KEY_h, navigate, { .i = -1 } }, { MODKEY, GDK_KEY_h, navigate, { .i = -1 } },
/* Currently we have to use scrolling steps that WebKit2GTK+ gives us /* vertical and horizontal scrolling, in viewport percentage */
* d: step down, u: step up, r: step right, l:step left { MODKEY, GDK_KEY_j, scrollv, { .i = +10 } },
* D: page down, U: page up */ { MODKEY, GDK_KEY_k, scrollv, { .i = -10 } },
{ MODKEY, GDK_KEY_j, scroll, { .i = 'd' } }, { MODKEY, GDK_KEY_space, scrollv, { .i = +50 } },
{ MODKEY, GDK_KEY_k, scroll, { .i = 'u' } }, { MODKEY, GDK_KEY_b, scrollv, { .i = -50 } },
{ MODKEY, GDK_KEY_b, scroll, { .i = 'U' } }, { MODKEY, GDK_KEY_i, scrollh, { .i = +10 } },
{ MODKEY, GDK_KEY_space, scroll, { .i = 'D' } }, { MODKEY, GDK_KEY_u, scrollh, { .i = -10 } },
{ MODKEY, GDK_KEY_i, scroll, { .i = 'r' } },
{ MODKEY, GDK_KEY_u, scroll, { .i = 'l' } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_j, zoom, { .i = -1 } },
@@ -131,35 +158,36 @@ static Key keys[] = {
{ MODKEY, GDK_KEY_minus, zoom, { .i = -1 } }, { MODKEY, GDK_KEY_minus, zoom, { .i = -1 } },
{ MODKEY, GDK_KEY_plus, zoom, { .i = +1 } }, { MODKEY, GDK_KEY_plus, zoom, { .i = +1 } },
{ MODKEY, GDK_KEY_p, clipboard, { .b = 1 } }, { MODKEY, GDK_KEY_p, clipboard, { .i = 1 } },
{ MODKEY, GDK_KEY_y, clipboard, { .b = 0 } }, { MODKEY, GDK_KEY_y, clipboard, { .i = 0 } },
{ MODKEY, GDK_KEY_n, find, { .i = +1 } }, { MODKEY, GDK_KEY_n, find, { .i = +1 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_n, find, { .i = -1 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, print, { 0 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_p, print, { 0 } },
{ MODKEY, GDK_KEY_t, showcert, { 0 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_a, togglecookiepolicy, { 0 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_a, togglecookiepolicy, { 0 } },
{ 0, GDK_KEY_F11, togglefullscreen, { 0 } }, { 0, GDK_KEY_F11, togglefullscreen, { 0 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_o, toggleinspector, { 0 } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_o, toggleinspector, { 0 } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_c, toggle, { .i = CaretBrowsing } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_c, toggle, { .i = CaretBrowsing } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_f, toggle, { .i = FrameFlattening } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_g, toggle, { .i = Geolocation } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_g, toggle, { .i = Geolocation } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_s, toggle, { .i = JavaScript } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_s, toggle, { .i = JavaScript } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_i, toggle, { .i = LoadImages } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_i, toggle, { .i = LoadImages } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_v, toggle, { .i = Plugins } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_b, toggle, { .i = ScrollBars } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_t, toggle, { .i = StrictTLS } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } }, { MODKEY|GDK_SHIFT_MASK, GDK_KEY_m, toggle, { .i = Style } },
{ MODKEY|GDK_SHIFT_MASK, GDK_KEY_d, toggle, { .i = DarkMode } },
}; };
/* button definitions */ /* button definitions */
/* target can be OnDoc, OnLink, OnImg, OnMedia, OnEdit, OnBar, OnSel, OnAny */ /* target can be OnDoc, OnLink, OnImg, OnMedia, OnEdit, OnBar, OnSel, OnAny */
static Button buttons[] = { static Button buttons[] = {
/* target event mask button function argument stop event */ /* target event mask button function argument stop event */
{ OnLink, 0, 2, clicknewwindow, { .b = 0 }, 1 }, { OnLink, 0, 2, clicknewwindow, { .i = 0 }, 1 },
{ OnLink, MODKEY, 2, clicknewwindow, { .b = 1 }, 1 }, { OnLink, MODKEY, 2, clicknewwindow, { .i = 1 }, 1 },
{ OnLink, MODKEY, 1, clicknewwindow, { .b = 1 }, 1 }, { OnLink, MODKEY, 1, clicknewwindow, { .i = 1 }, 1 },
{ OnAny, 0, 8, clicknavigate, { .i = -1 }, 1 }, { OnAny, 0, 8, clicknavigate, { .i = -1 }, 1 },
{ OnAny, 0, 9, clicknavigate, { .i = +1 }, 1 }, { OnAny, 0, 9, clicknavigate, { .i = +1 }, 1 },
{ OnMedia, MODKEY, 1, clickexternplayer, { 0 }, 1 }, { OnMedia, MODKEY, 1, clickexternplayer, { 0 }, 1 },
+20 -19
View File
@@ -1,31 +1,32 @@
# surf version # surf version
VERSION = 2.0 VERSION = 2.1
# Customize below to fit your system # Customize below to fit your system
# paths # paths
PREFIX = /usr/local PREFIX = /usr
MANPREFIX = ${PREFIX}/share/man MANPREFIX = $(PREFIX)/share/man
LIBPREFIX = ${PREFIX}/lib/surf LIBPREFIX = $(PREFIX)/lib
LIBDIR = $(LIBPREFIX)/surf
X11INC = /usr/X11R6/include X11INC = `pkg-config --cflags x11`
X11LIB = /usr/X11R6/lib X11LIB = `pkg-config --libs x11`
GTKINC = `pkg-config --cflags gtk+-3.0 webkit2gtk-4.0` GTKINC = `pkg-config --cflags gtk+-3.0 gcr-3 webkit2gtk-4.1`
GTKLIB = `pkg-config --libs gtk+-3.0 webkit2gtk-4.0` GTKLIB = `pkg-config --libs gtk+-3.0 gcr-3 webkit2gtk-4.1`
WEBEXTINC = `pkg-config --cflags webkit2gtk-4.1 webkit2gtk-web-extension-4.1 gio-2.0`
WEBEXTLIBS = `pkg-config --libs webkit2gtk-4.1 webkit2gtk-web-extension-4.1 gio-2.0`
# includes and libs # includes and libs
INCS = -I. -I/usr/include -I${X11INC} ${GTKINC} INCS = $(X11INC) $(GTKINC)
LIBS = -L/usr/lib -lc -L${X11LIB} -lX11 ${GTKLIB} -lgthread-2.0 LIBS = $(X11LIB) $(GTKLIB) -lgthread-2.0
# flags # flags
CPPFLAGS = -DVERSION=\"${VERSION}\" -DWEBEXTDIR=\"${LIBPREFIX}\" -D_DEFAULT_SOURCE CPPFLAGS = -DVERSION=\"$(VERSION)\" -DGCR_API_SUBJECT_TO_CHANGE \
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} -DLIBPREFIX=\"$(LIBPREFIX)\" -DWEBEXTDIR=\"$(LIBDIR)\" \
LDFLAGS = -s ${LIBS} -D_DEFAULT_SOURCE
SURFCFLAGS = -fPIC $(INCS) $(CPPFLAGS)
WEBEXTCFLAGS = -fPIC $(WEBEXTINC)
# Solaris # compiler
#CFLAGS = -fast ${INCS} -DVERSION=\"${VERSION}\" #CC = c99
#LDFLAGS = ${LIBS}
# compiler and linker
CC = cc
+56 -55
View File
@@ -3,15 +3,15 @@
surf \- simple webkit-based browser surf \- simple webkit-based browser
.SH SYNOPSIS .SH SYNOPSIS
.B surf .B surf
.RB [-bBdDfFgGiIkKmMnNpPsSvx] .RB [-bBdDfFgGiIkKmMnNpPsStTvwxX]
.RB [-a\ cookiepolicies] .RB [-a\ cookiepolicies]
.RB [-c\ cookiefile] .RB [-c\ cookiefile]
.RB [-C\ stylefile]
.RB [-e\ xid] .RB [-e\ xid]
.RB [-r\ scriptfile] .RB [-r\ scriptfile]
.RB [-t\ stylefile]
.RB [-u\ useragent] .RB [-u\ useragent]
.RB [-z\ zoomlevel] .RB [-z\ zoomlevel]
.RB "URI" .RB [URI]
.SH DESCRIPTION .SH DESCRIPTION
surf is a simple Web browser based on WebKit/GTK+. It is able surf is a simple Web browser based on WebKit/GTK+. It is able
to display websites and follow links. It supports the XEmbed protocol to display websites and follow links. It supports the XEmbed protocol
@@ -21,25 +21,30 @@ one can point surf to another URI by setting its XProperties.
.TP .TP
.B \-a cookiepolicies .B \-a cookiepolicies
Define the order of Define the order of
.I cookie policies. .I cookie policies\fR.
The default is "Aa@" but could be The default is "@Aa" but could be
redefined in the redefined in the
.I config.h, .IR config.h ,
with "A" meaning to with "A" meaning to
accept all cookies, "a" to deny all cookies and "@", which tells surf to accept all cookies, "a" to deny all cookies and "@", which tells surf to
accept no third party cookies. accept no third party cookies.
.TP .TP
.B \-b .B \-b
Disable Scrollbars Disable Scrollbars.
.TP .TP
.B \-B .B \-B
Enable Scrollbars Enable Scrollbars.
.TP .TP
.B \-c cookiefile .B \-c cookiefile
Specify the Specify the
.I cookiefile .I cookiefile
to use. to use.
.TP .TP
.B \-C stylefile
Specify the user
.IR stylefile .
This does disable the site-specific styles.
.TP
.B \-d .B \-d
Disable the disk cache. Disable the disk cache.
.TP .TP
@@ -48,7 +53,7 @@ Enable the disk cache.
.TP .TP
.B \-e xid .B \-e xid
Reparents to window specified by Reparents to window specified by
.I xid. .IR xid .
.TP .TP
.B \-f .B \-f
Start surf in windowed mode (not fullscreen). Start surf in windowed mode (not fullscreen).
@@ -63,16 +68,16 @@ Disable giving the geolocation to websites.
Enable giving the geolocation to websites. Enable giving the geolocation to websites.
.TP .TP
.B \-i .B \-i
Disable Images Disable Images.
.TP .TP
.B \-I .B \-I
Enable Images Enable Images.
.TP .TP
.B \-k .B \-k
Disable kiosk mode (disable key strokes and right click) Disable kiosk mode (enable key strokes and right click).
.TP .TP
.B \-K .B \-K
Enable kiosk mode (disable key strokes and right click) Enable kiosk mode (disable key strokes and right click).
.TP .TP
.B \-m .B \-m
Disable application of user style sheets. Disable application of user style sheets.
@@ -86,26 +91,21 @@ Disable the Web Inspector (Developer Tools).
.B \-N .B \-N
Enable the Web Inspector (Developer Tools). Enable the Web Inspector (Developer Tools).
.TP .TP
.B \-p
Disable Plugins
.TP
.B \-P
Enable Plugins
.TP
.B \-r scriptfile .B \-r scriptfile
Specify the user Specify the user
.I scriptfile. .IR scriptfile .
.TP .TP
.B \-s .B \-s
Disable Javascript Disable Javascript.
.TP .TP
.B \-S .B \-S
Enable Javascript Enable Javascript.
.TP .TP
.B \-t stylefile .B \-t
Specify the user Disable strict TLS check.
.I stylefile. .TP
This does disable the site-specific styles. .B \-T
Enable strict TLS check.
.TP .TP
.B \-u useragent .B \-u useragent
Specify the Specify the
@@ -115,16 +115,21 @@ which surf should use.
.B \-v .B \-v
Prints version information to standard output, then exits. Prints version information to standard output, then exits.
.TP .TP
.B \-x .B \-w
Prints xid to standard output. This can be used to script the browser in for Prints xid to standard output. This can be used to script the browser in for
example example
.BR xdotool(1). .BR xdotool(1) .
.TP
.B -x
Disable custom certificates.
.TP
.B -X
Enable custom certificates.
.TP .TP
.B \-z zoomlevel .B \-z zoomlevel
Specify the Specify the
.I zoomlevel .I zoomlevel
which surf should use. which surf should use.
.BR xprop(1).
.SH USAGE .SH USAGE
.B Escape .B Escape
Stops loading current page or stops download. Stops loading current page or stops download.
@@ -157,10 +162,10 @@ Scroll horizontally to the left.
Zooms page in. Zooms page in.
.TP .TP
.B Ctrl\-Shift\-j or Ctrl\-- .B Ctrl\-Shift\-j or Ctrl\--
Zooms page out Zooms page out.
.TP .TP
.B Ctrl\-Shift\-q .B Ctrl\-Shift\-q
Resets Zoom Resets Zoom.
.TP .TP
.B Ctrl\-f and Ctrl\-/ .B Ctrl\-f and Ctrl\-/
Opens the search-bar. Opens the search-bar.
@@ -189,12 +194,12 @@ Reloads the website without using the cache.
.B Ctrl\-y .B Ctrl\-y
Copies current URI to primary selection. Copies current URI to primary selection.
.TP .TP
.B Ctrl\-o .B Ctrl\-t
Show the sourcecode of the current page. Display the current TLS certificate in a popup window.
.TP .TP
.B Ctrl\-Shift\-a .B Ctrl\-Shift\-a
Toggle through the the Toggle through the the
.I cookie policies. .I cookie policies\fR.
This will not reload the page. This will not reload the page.
.TP .TP
.B Ctrl\-Shift\-b .B Ctrl\-Shift\-b
@@ -203,6 +208,9 @@ Toggle scrollbars. This will reload the page.
.B Ctrl\-Shift\-c .B Ctrl\-Shift\-c
Toggle caret browsing. This will reload the page. Toggle caret browsing. This will reload the page.
.TP .TP
.B Ctrl\-Shift\-d
Toggle dark mode.
.TP
.B Ctrl\-Shift\-i .B Ctrl\-Shift\-i
Toggle auto-loading of images. This will reload the page. Toggle auto-loading of images. This will reload the page.
.TP .TP
@@ -217,9 +225,8 @@ Open the Web Inspector (Developer Tools) window for the current page.
.B Ctrl\-Shift\-s .B Ctrl\-Shift\-s
Toggle script execution. This will reload the page. Toggle script execution. This will reload the page.
.TP .TP
.B Ctrl\-Shift\-v .B Ctrl\-Shift\-t
Toggle the enabling of plugins on that surf instance. This will reload the Toggle strict TLS check. This will reload the page.
page.
.TP .TP
.B F11 .B F11
Toggle fullscreen mode. Toggle fullscreen mode.
@@ -251,11 +258,14 @@ images
.B s S .B s S
scripts scripts
.TP .TP
.B v V
plugins
.TP
.B m M .B m M
styles styles
.TP
.B x X
custom certificates
.TP
.B t T
strict TLS
.SH INDICATORS OF WEB PAGE .SH INDICATORS OF WEB PAGE
The second part of the indicators specifies modes of the web page itself. The second part of the indicators specifies modes of the web page itself.
.SS First character: encryption .SS First character: encryption
@@ -264,7 +274,7 @@ The second part of the indicators specifies modes of the web page itself.
unencrypted unencrypted
.TP .TP
.B T .B T
encrypted (SSL) encrypted (TLS)
.TP .TP
.B U .B U
attempted encryption but failed attempted encryption but failed
@@ -279,26 +289,17 @@ using proxy
.B SURF_USERAGENT .B SURF_USERAGENT
If this variable is set upon startup, surf will use it as the If this variable is set upon startup, surf will use it as the
.I useragent .I useragent
string string.
.TP .TP
.B http_proxy .B http_proxy
If this variable is set and not empty upon startup, surf will use it as the http proxy If this variable is set and not empty upon startup, surf will use it as the http proxy.
.SH PLUGINS .SH SIGNALS
For using plugins in surf, first determine your running architecture. Then get Surf will reload the current page on
the appropriate plugin for that architecture and copy it to .BR SIGHUP .
.BR /usr/lib/browser-plugins
or
.BR /usr/lib64/browser-plugins.
Surf should load them automatically.
.BR
If you want to use a 32bit plugin on a 64bit system,
.BR nspluginwrapper(1)
will help you.
.SH SEE ALSO .SH SEE ALSO
.BR dmenu(1), .BR dmenu(1),
.BR xprop(1), .BR xprop(1),
.BR tabbed(1), .BR tabbed(1),
.BR nspluginwrapper(1),
.BR xdotool(1) .BR xdotool(1)
.SH BUGS .SH BUGS
Please report them! Please report them!
+651 -282
View File
File diff suppressed because it is too large Load Diff
+166
View File
@@ -0,0 +1,166 @@
#include <sys/socket.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <inttypes.h>
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <gio/gio.h>
#include <gio/gunixfdlist.h>
#include <webkit2/webkit-web-extension.h>
#include <webkitdom/webkitdom.h>
#include <webkitdom/WebKitDOMDOMWindowUnstable.h>
#include "common.h"
#define LENGTH(x) (sizeof(x) / sizeof(x[0]))
static WebKitWebExtension *webext;
static int sock;
/*
* Return:
* 0 No data processed: need more data
* > 0 Amount of data processed or discarded
*/
static size_t
evalmsg(char *msg, size_t sz)
{
char js[48];
WebKitWebPage *page;
JSCContext *jsc;
JSCValue *jsv;
if (!(page = webkit_web_extension_get_page(webext, msg[0])))
return sz;
if (sz < 2)
return 0;
jsc = webkit_frame_get_js_context(webkit_web_page_get_main_frame(page));
jsv = NULL;
switch (msg[1]) {
case 'h':
if (sz < 3) {
sz = 0;
break;
}
sz = 3;
snprintf(js, sizeof(js),
"window.scrollBy(window.innerWidth/100*%hhd,0);",
msg[2]);
jsv = jsc_context_evaluate(jsc, js, -1);
break;
case 'v':
if (sz < 3) {
sz = 0;
break;
}
sz = 3;
snprintf(js, sizeof(js),
"window.scrollBy(0,window.innerHeight/100*%hhd);",
msg[2]);
jsv = jsc_context_evaluate(jsc, js, -1);
break;
default:
fprintf(stderr, "%s:%d:evalmsg: unknown cmd(%zu): '%#x'\n",
__FILE__, __LINE__, sz, msg[1]);
}
g_object_unref(jsc);
if (jsv)
g_object_unref(jsv);
return sz;
}
static gboolean
readsock(GIOChannel *s, GIOCondition c, gpointer unused)
{
static char msg[MSGBUFSZ];
static size_t msgoff;
GError *gerr = NULL;
size_t sz;
gsize rsz;
if (g_io_channel_read_chars(s, msg+msgoff, sizeof(msg)-msgoff, &rsz, &gerr) !=
G_IO_STATUS_NORMAL) {
if (gerr) {
fprintf(stderr, "webext: error reading socket: %s\n",
gerr->message);
g_error_free(gerr);
}
return TRUE;
}
if (msgoff >= sizeof(msg)) {
fprintf(stderr, "%s:%d:%s: msgoff: %zu", __FILE__, __LINE__, __func__, msgoff);
return FALSE;
}
for (rsz += msgoff; rsz; rsz -= sz) {
sz = evalmsg(msg, rsz);
if (sz == 0) {
/* need more data */
break;
}
if (sz != rsz) {
/* continue processing message */
memmove(msg, msg+sz, rsz-sz);
}
}
msgoff = rsz;
return TRUE;
}
static void
pageusermessagereply(GObject *o, GAsyncResult *r, gpointer page)
{
WebKitUserMessage *m;
GUnixFDList *gfd;
GIOChannel *gchansock;
const char *name;
int nfd;
m = webkit_web_page_send_message_to_view_finish(page, r, NULL);
name = webkit_user_message_get_name(m);
if (strcmp(name, "surf-pipe") != 0) {
fprintf(stderr, "webext-surf: Unknown User Reply: %s\n", name);
return;
}
gfd = webkit_user_message_get_fd_list(m);
if ((nfd = g_unix_fd_list_get_length(gfd)) != 1) {
fprintf(stderr, "webext-surf: Too many file-descriptors: %d\n", nfd);
return;
}
sock = g_unix_fd_list_get(gfd, 0, NULL);
gchansock = g_io_channel_unix_new(sock);
g_io_channel_set_encoding(gchansock, NULL, NULL);
g_io_channel_set_flags(gchansock, g_io_channel_get_flags(gchansock)
| G_IO_FLAG_NONBLOCK, NULL);
g_io_channel_set_close_on_unref(gchansock, TRUE);
g_io_add_watch(gchansock, G_IO_IN, readsock, NULL);
}
void
pagecreated(WebKitWebExtension *e, WebKitWebPage *p, gpointer unused)
{
WebKitUserMessage *msg;
msg = webkit_user_message_new("page-created", NULL);
webkit_web_page_send_message_to_view(p, msg, NULL, pageusermessagereply, p);
}
G_MODULE_EXPORT void
webkit_web_extension_initialize(WebKitWebExtension *e)
{
webext = e;
g_signal_connect(G_OBJECT(e), "page-created",
G_CALLBACK(pagecreated), NULL);
}