surf 辅助浏览器(添加 bookmarks 补丁)

仅仅用于软件推荐,不适合发求软件或软件使用问题方面的贴子
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

surf 辅助浏览器(添加 bookmarks 补丁)

#1

帖子 aBiNg » 2011-01-09 22:38

因为连 EE 都不知晓这神器,故推荐。基于 gtk+/webkit,源代码 800+ 行,不想开 firefox/opera/chrome 之流时非常实用,譬如临时搜索个东东,用下 google 翻译,看下 google news,打开 irc 上帖的网页等。

用法:(高手都会想到在 WM 中绑定个 google 的快捷键)
surf url

快捷键:(c 指 Ctrl 键)
c-h: 后退
c-r: 刷新
c-g: 输入 url(需要 dmenu 支援)
c-d: 添加到收藏夹
c-b: 打开收藏夹

我只会这么多,其余看 man。:P

遗憾:
需手动編輯收藏夹条目,位于 ~/.surf/bookmarks 文件中。

下载见附件(i386 版本)。另一个附件伪装得还可以吧。XD

忘了说,我动态编译的这个是 0.4.1 版本,主页:http://surf.suckless.org/

14/01/2011 更新:我给补个 dirty patch,用以收藏夹功能,并顺带将下载目录改到 ~/download 下,而不是家目录:

代码: 全选

diff -r 7a931a352cf9 Makefile
--- a/Makefile	Thu Sep 09 11:15:02 2010 +0200
+++ b/Makefile	Fri Jan 14 18:30:40 2011 +0800
@@ -20,7 +20,7 @@
 
 ${OBJ}: config.h config.mk
 
-config.h:
+config.h: config.def.h
 	@echo creating $@ from config.def.h
 	@cp config.def.h $@
 
diff -r 7a931a352cf9 config.def.h
--- a/config.def.h	Thu Sep 09 11:15:02 2010 +0200
+++ b/config.def.h	Fri Jan 14 18:30:40 2011 +0800
@@ -5,6 +5,7 @@
 static char *stylefile      = ".surf/style.css";
 static char *scriptfile     = ".surf/script.js";
 static char *cookiefile     = ".surf/cookies.txt";
+static char *bookmarkfile   = ".surf/bookmarks";
 static time_t sessiontime   = 3600;
 #define NOBACKGROUND 0
 
@@ -14,8 +15,14 @@
 	p, q, winid, NULL } }
 #define DOWNLOAD(d) { \
 	.v = (char *[]){ "/bin/sh", "-c", \
-	"xterm -e \"wget --load-cookies ~/.surf/cookies.txt '$0';\"", \
+	"xterm -e \"wget --load-cookies ~/.surf/cookies.txt '$0' -P ~/download;\"", \
 	d, NULL } }
+#define GETBOOKMARKS(p, q) { \
+	.v = (char *[]){ "/bin/sh", "-c", \
+	"prop=\"`cat ~/.surf/bookmarks | dmenu`\" &&" \
+	"xprop -id $2 -f $1 8s -set $1 \"$prop\"", \
+	p, q, winid, NULL } }
 #define MODKEY GDK_CONTROL_MASK
 static Key keys[] = {
     /* modifier	            keyval      function    arg             Focus */
@@ -37,4 +44,6 @@
     { MODKEY,               GDK_f,      spawn,      SETPROP("_SURF_FIND", "_SURF_FIND") },
     { MODKEY,               GDK_n,      find,       { .b = TRUE } },
     { MODKEY|GDK_SHIFT_MASK,GDK_n,      find,       { .b = FALSE } },
+    { MODKEY,               GDK_d,      bookmarks,  { 0 } },
+    { MODKEY,               GDK_b,      spawn,      GETBOOKMARKS("_SURF_URI", "_SURF_GO") },
 };
diff -r 7a931a352cf9 surf.c
--- a/surf.c	Thu Sep 09 11:15:02 2010 +0200
+++ b/surf.c	Fri Jan 14 18:30:40 2011 +0800
@@ -82,6 +82,7 @@
 static char *geturi(Client *c);
 void gotheaders(SoupMessage *msg, gpointer user_data);
 static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
+static void bookmarks(Client *c, const Arg *arg);
 static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
 static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *c);
 static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
@@ -337,6 +338,26 @@
 	return FALSE;
 }
 
+void
+bookmarks(Client *c, const Arg *arg) {
+    char *uri;
+    char buf[512];
+    FILE *f;
+    gboolean exists = FALSE;
+
+    uri = (char *)webkit_web_view_get_uri(c->view);
+    f = fopen(bookmarkfile, "r+");
+    while(fgets(buf, sizeof buf, f)) {
+        if(strncmp(buf, uri, strlen(uri)) == 0) {
+            exists = TRUE;
+            break;
+        }
+    }
+    if(!exists)
+        fputs(strcat(uri, "\n"), f);
+    fclose(f);
+}
+
 gboolean
 keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
 	guint i;
@@ -692,6 +713,7 @@
 	cookiefile = buildpath(cookiefile);
 	scriptfile = buildpath(scriptfile);
 	stylefile = buildpath(stylefile);
+	bookmarkfile = buildpath(bookmarkfile);
 
 	/* request handler */
 	s = webkit_get_default_session();
15/01/2011 更新:收藏夾帶標題,但多個 zenity 依賴了,悲劇(要讓 dmenu 搞出中文更悲劇啊 XD):

代码: 全选

diff -r 7a931a352cf9 Makefile
--- a/Makefile	Thu Sep 09 11:15:02 2010 +0200
+++ b/Makefile	Sat Jan 15 16:02:08 2011 +0800
@@ -20,7 +20,7 @@
 
 ${OBJ}: config.h config.mk
 
-config.h:
+config.h: config.def.h
 	@echo creating $@ from config.def.h
 	@cp config.def.h $@
 
diff -r 7a931a352cf9 config.def.h
--- a/config.def.h	Thu Sep 09 11:15:02 2010 +0200
+++ b/config.def.h	Sat Jan 15 16:02:08 2011 +0800
@@ -5,6 +5,7 @@
 static char *stylefile      = ".surf/style.css";
 static char *scriptfile     = ".surf/script.js";
 static char *cookiefile     = ".surf/cookies.txt";
+static char *bookmarkfile   = ".surf/bookmarks";
 static time_t sessiontime   = 3600;
 #define NOBACKGROUND 0
 
@@ -14,8 +15,15 @@
 	p, q, winid, NULL } }
 #define DOWNLOAD(d) { \
 	.v = (char *[]){ "/bin/sh", "-c", \
-	"xterm -e \"wget --load-cookies ~/.surf/cookies.txt '$0';\"", \
+	"xterm -e \"wget --load-cookies ~/.surf/cookies.txt '$0' -P ~/download;\"", \
 	d, NULL } }
+#define GETBOOKMARKS(p, q) { \
+	.v = (char *[]){ "/bin/sh", "-c", \
+	"prop=$(sel=`cut -d '@' -f 1 ~/.surf/bookmarks | \
+    zenity --list --column='Bookmarks' --width=320 --height=280` && \
+    awk -F@ -v a=\"$sel\" '{if($1==a) print $2}' ~/.surf/bookmarks) &&" \
+	"xprop -id $2 -f $1 8s -set $1 \"$prop\"", \
+	p, q, winid, NULL } }
 #define MODKEY GDK_CONTROL_MASK
 static Key keys[] = {
     /* modifier	            keyval      function    arg             Focus */
@@ -37,4 +45,6 @@
     { MODKEY,               GDK_f,      spawn,      SETPROP("_SURF_FIND", "_SURF_FIND") },
     { MODKEY,               GDK_n,      find,       { .b = TRUE } },
     { MODKEY|GDK_SHIFT_MASK,GDK_n,      find,       { .b = FALSE } },
+    { MODKEY,               GDK_d,      bookmarks,  { 0 } },
+    { MODKEY,               GDK_b,      spawn,      GETBOOKMARKS("_SURF_URI", "_SURF_GO") },
 };
diff -r 7a931a352cf9 surf.c
--- a/surf.c	Thu Sep 09 11:15:02 2010 +0200
+++ b/surf.c	Sat Jan 15 16:02:08 2011 +0800
@@ -82,6 +82,7 @@
 static char *geturi(Client *c);
 void gotheaders(SoupMessage *msg, gpointer user_data);
 static gboolean initdownload(WebKitWebView *v, WebKitDownload *o, Client *c);
+static void bookmarks(Client *c, const Arg *arg);
 static gboolean keypress(GtkWidget *w, GdkEventKey *ev, Client *c);
 static void linkhover(WebKitWebView *v, const char* t, const char* l, Client *c);
 static void loadstatuschange(WebKitWebView *view, GParamSpec *pspec, Client *c);
@@ -337,6 +338,32 @@
 	return FALSE;
 }
 
+void
+bookmarks(Client *c, const Arg *arg) {
+    char uri[256];
+    char tit[512];
+    char buf[512];
+    FILE *f;
+    gboolean exists = FALSE;
+
+    memcpy(uri, webkit_web_view_get_uri(c->view), sizeof(uri) - 1);
+    uri[255] = '\0';
+    memcpy(tit, webkit_web_view_get_title(c->view), sizeof(uri) - 1);
+    strcat(tit, "@");
+    strcat(tit, uri);
+
+    f = fopen(bookmarkfile, "r+");
+    while(fgets(buf, sizeof buf, f)) {
+        if(strncmp(buf, tit, strlen(tit)) == 0) {
+            exists = TRUE;
+            break;
+        }
+    }
+    if(!exists)
+        fputs(strcat(tit, "\n"), f);
+    fclose(f);
+}
+
 gboolean
 keypress(GtkWidget* w, GdkEventKey *ev, Client *c) {
 	guint i;
@@ -692,6 +719,7 @@
 	cookiefile = buildpath(cookiefile);
 	scriptfile = buildpath(scriptfile);
 	stylefile = buildpath(stylefile);
+	bookmarkfile = buildpath(bookmarkfile);
 
 	/* request handler */
 	s = webkit_get_default_session();
以上二個 patch,自己權衡了。
附件
surf_ti.tar
收藏夾帶標題的 surf
(40 KiB) 已下载 56 次
surf.tar
带收藏夹功能的 surf
(40 KiB) 已下载 73 次
2011-01-09-221400_304x600_scrot.png
上次由 aBiNg 在 2011-01-15 16:18,总共编辑 5 次。
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: surf 辅助浏览器

#2

帖子 adagio » 2011-01-09 22:41

不愧是老鸟,有档次 :em11
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: surf 辅助浏览器

#4

帖子 susbarbatus » 2011-01-09 22:50

这东西弱到我都佩服了……
我比较期待jumanji
沉迷将棋中……
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: surf 辅助浏览器

#5

帖子 adagio » 2011-01-09 22:53

哇哈哈,居然是类vi的键绑定 :em05
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: surf 辅助浏览器

#6

帖子 susbarbatus » 2011-01-09 22:57

800+ 行源码用来学习浏览器倒是不错,就好像用linux0.01学OS
沉迷将棋中……
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: surf 辅助浏览器

#7

帖子 eexpress » 2011-01-10 12:46

支持bt的,上。
● 鸣学
levee
帖子: 3030
注册时间: 2009-10-03 23:31

Re: surf 辅助浏览器

#8

帖子 levee » 2011-01-11 10:08

喜欢VI风格浏览器的不妨试试这个:http://opensource.conformal.com/wiki/XXXTerm
头像
momova
帖子: 3381
注册时间: 2007-07-11 21:43
系统: archlinux
来自: 东江边

Re: surf 辅助浏览器

#9

帖子 momova » 2011-01-11 20:07

EE竟然不知道,神,你已经堕落神坛了
我来了,我看见了,我征服了!
求勾搭,不管饭。
feng8899
帖子: 716
注册时间: 2008-10-31 3:18
联系:

Re: surf 辅助浏览器

#10

帖子 feng8899 » 2011-01-11 21:36

susbarbatus 写了:800+ 行源码用来学习浏览器倒是不错,就好像用linux0.01学OS
这个给力
Ubuntu 桌面培训
Duo T6400 GeForce 9300MGS 4G win10 Lubuntu18.04 64bit双系统奔跑中
P3 667 512M GeForce MX200 Lbuntu10.04
从零开始学游泳 萨顶顶
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: surf 辅助浏览器

#11

帖子 susbarbatus » 2011-01-12 16:44

levee 写了:喜欢VI风格浏览器的不妨试试这个:http://opensource.conformal.com/wiki/XXXTerm
试了一下,不好用……
沉迷将棋中……
头像
后山人
帖子: 299
注册时间: 2010-02-16 16:58
联系:

Re: surf 辅助浏览器

#12

帖子 后山人 » 2011-01-12 16:57

:em03

不好意思。这东西 怎么用啊???

代码: 全选

我一定要在我选择的道路上,疯狂,执着,勇敢的走下去!
youworld时尚服装
我的微博
头像
adagio
论坛版主
帖子: 22110
注册时间: 2008-02-17 23:47
来自: 美丽富饶的那啥星球

Re: surf 辅助浏览器

#13

帖子 adagio » 2011-01-12 20:31

后山人 写了::em03

不好意思。这东西 怎么用啊???
用神器的第一步,鼠标扔掉,其他的慢慢就知道了
明天就换大三八!
——8核CPU、8G内存、8T硬盘……
8卡交火,80寸大屏放8个……
IPv8的光纤要8条……

---------------------------------------------------------------------------------
[图片版]新手当自强(续)FAQ
[新手进阶]挂载、fstab、调整linux分区
[图片版]E17桌面环境配置手把手
billbear
帖子: 3681
注册时间: 2008-05-03 23:42

Re: surf 辅助浏览器

#14

帖子 billbear » 2011-01-12 20:39

:em01
头像
后山人
帖子: 299
注册时间: 2010-02-16 16:58
联系:

Re: surf 辅助浏览器

#15

帖子 后山人 » 2011-01-12 22:08

adagio 写了:
后山人 写了::em03

不好意思。这东西 怎么用啊???
用神器的第一步,鼠标扔掉,其他的慢慢就知道了

你说的没懂。不过我把他拷到/bin 下了。不知道这样有没有什么不好的?

代码: 全选

我一定要在我选择的道路上,疯狂,执着,勇敢的走下去!
youworld时尚服装
我的微博
回复