Conkeror改变了我浏览网页的方式:它基本上是.conkerrorc中基于javascript配置的Emacs + Firefox,而不是.emacs中的elisp配置。
多年来,我通过从其他人那里获得一点点零碎,建立了一个庞大的.emacs自定义库。我刚刚开始使用Conkeror,但事实上它使用JS(比Elisp广为人知)必须意味着那里有一些惊人的东西。
小心分享你的作品? 我对与Django(或其他动态网页)生成的页面进行良好交互的内容特别感兴趣。
例如,我喜欢基于Conkeror的动作录制器,让我浏览网站并查找错误,然后立即保存&通过单击键提交操作序列作为错误报告。通过包含复制错误所需的JS动作,它将成为最终的测试工具 - 甚至比Selenium更好,因为它将完全由键盘驱动。
答案 0 :(得分:5)
这是我的:
// homepage = "http://www.google.com";
// set default webjump
read_url_handler_list = [read_url_make_default_webjump_handler("google")];
// possibly valid URL
function possibly_valid_url (str) {
return (/[\.\/:]/.test(str)) &&
!(/\S\s+\S/.test(str)) &&
!(/^\s*$/.test(str));
}
// page modes
require("page-modes/google-search-results.js"); // google search results
require("page-modes/wikipedia.js"); // wikipedia mode
// webjumps
define_webjump("gmail", "https://mail.google.com"); // gmail inbox
define_webjump("twitter", "http://twitter.com/#!/search/%s", $alternative = "https://twitter.com/"); // twitter
define_webjump("w3schools", "http://www.w3schools.com"); // w3schools site
define_webjump("w3search", "http://www.google.com/search?sitesearch=www.w3schools.com&as_q=%s"); // w3schools search
define_webjump("jquery", "http://docs.jquery.com/Special:Search?ns0=1&search=%s"); // jquery
define_webjump("archwiki", "https://wiki.archlinux.org/index.php?search=%s"); // arch wiki
define_webjump("stackoverflow", "http://stackoverflow.com/search?q=%s", $alternative = "http://stackoverflow.com/"); // stackoverflow
define_webjump("sor", "http://stackoverflow.com/search?q=[r]+%s", $alternative = "http://stackoverflow.com/questions/tagged/r"); // stackoverflow R section
define_webjump("stats", "http://stats.stackexchange.com/search?q=%s"); // stats
define_webjump("torrentz", "http://torrentz.eu/search?q=%s"); // torrentz
define_webjump("avaxsearch", "http://avaxsearch.com/avaxhome_search?q=%s&a=&c=&l=&sort_by=&commit=Search"); // avaxsearch
define_webjump("imdb", "http://www.imdb.com/find?s=all;q=%s"); // imdb
define_webjump("duckgo", "http://duckduckgo.com/?q=%s", $alternative = "http://duckduckgo.com"); // duckduckgo
define_webjump("blekko", "http://blekko.com/ws/%s", $alternative = "http://blekko.com/"); // blekko
define_webjump("youtube", "http://www.youtube.com/results?search_query=%s&aq=f", $alternative = "http://www.youtube.com"); // youtube
define_webjump("duckgossl", "https://duckduckgo.com/?q=%s"); // duckduckgo SSL
define_webjump("downforeveryoneorjustme", "http://www.downforeveryoneorjustme.com/%s"); // downforeveryoneorjustme
define_webjump("urbandictionary", "http://www.urbandictionary.com/define.php?term=%s"); // urban dictionary
define_webjump("rts", "http://rts.rs"); // RTS
define_webjump("facebook", "http://www.facebook.com"); // facebook homepage
// tab bar
require("new-tabs.js");
// clicks in new buffer
require("clicks-in-new-buffer.js");
// Set to either OPEN_NEW_BUFFER(_BACKGROUND)
clicks_in_new_buffer_target = OPEN_NEW_BUFFER_BACKGROUND; // Now buffers open in background.
// history webjump
define_browser_object_class(
"history-url", null,
function (I, prompt) {
check_buffer (I.buffer, content_buffer);
var result = yield I.buffer.window.minibuffer.read_url(
$prompt = prompt, $use_webjumps = false, $use_history = true, $use_bookmarks = false);
yield co_return (result);
});
interactive("find-url-from-history",
"Find a page from history in the current buffer",
"find-url",
$browser_object = browser_object_history_url);
interactive("find-url-from-history-new-buffer",
"Find a page from history in the current buffer",
"find-url-new-buffer",
$browser_object = browser_object_history_url);
define_key(content_buffer_normal_keymap, "h", "find-url-from-history-new-buffer");
define_key(content_buffer_normal_keymap, "H", "find-url-from-history");
// load session module
require("session.js");
session_auto_save_auto_load = true; // auto-load session
// don't open download buffer automatically
remove_hook("download_added_hook", open_download_buffer_automatically);
// don't show clock
remove_hook("mode_line_hook", mode_line_adder(clock_widget));
// add favicons
require("favicon");
add_hook("mode_line_hook", mode_line_adder(buffer_icon_widget), true);
read_buffer_show_icons = true;
// add content handlers
content_handlers.set("application/pdf", content_handler_save); // pdf
// torrent
// mp3
// ogg
function define_switch_buffer_key (key, buf_num) {
define_key(default_global_keymap, key,
function (I) {
switch_to_buffer(I.window,
I.window.buffers.get_buffer(buf_num));
});
}
for (let i = 0; i < 10; ++i) {
define_switch_buffer_key(String((i+1)%10), i);
}
function enable_scrollbars (buffer) {
buffer.top_frame.scrollbars.visible = true;
}
add_hook("create_buffer_late_hook", enable_scrollbars);
答案 1 :(得分:3)
由于没有其他人似乎对发布实际回复感兴趣,我会。
function my_title_format (window) {
return 'conkeror {'+get_current_profile()+'}'+window.buffers.current.description;
}
我发现在窗口标题中使用配置文件名称很有帮助,因为我使用了多个配置文件。现在我使用StumpWM并且不要多看窗口列表对我这么做没什么帮助,但它在其他窗口管理器中非常有用。
define_key(content_buffer_normal_keymap, "C-x C-c", "confirm-quit");
can_kill_last_buffer = false;
这两个阻止我通过关闭最后一个缓冲区意外关闭一个conkeror窗口。
答案 2 :(得分:1)
好吧,我真的不能帮助你,但我只是想说虽然我是一个emacs的家伙,但我放弃了Conkeror vimperator,因为恕我直言,浏览体验要好得多!
答案 3 :(得分:-2)
Conkeror只是带有Emacs键绑定的Firefox。我不认为它是,而且它也不打算成为Emacs所具有的全功能环境。
通过让您使用陈旧的Emacs肌肉记忆,它可以促进您的浏览体验。并且让您可以更多地将手放在键盘上,而不是一直从键盘跳到鼠标。
所以我不认为它真的能够做你想象的一些事情。
它的发展也相当缓慢,可能人手不足。例如,你会发现你不能使用最常见的Firefox插件/扩展。萤火虫,Greasemonkey,齿轮等
我喜欢它的一些浏览任务:它有特殊的模式来阅读Reddit,谷歌阅读器和其他让事情变得更容易的模式。
但是我也同意binOr的说法,即使你是一个emacs家伙,vimperator要好得多。如果您使用VIM当然有帮助。