2009-04-20 6 views
5

Conkeror zmienił sposób, w jaki przeglądam sieć: to w zasadzie Emacs + Firefox z konfiguracją opartą na javascript w .conkerrorc zamiast konfiguracji elisp w .emacs.Jak wygląda Twój .conkerorrc?

Zbudowałem ogromną bibliotekę dostosowań .emacs na przestrzeni lat, otrzymując małe kawałki od innych. Właśnie zaczynam od Conkeror, ale fakt, że używa JS (znacznie szerzej znany niż Elisp) musi oznaczać, że jest tam coś niesamowitego.

Chcesz podzielić się swoimi dziełami? Szczególnie interesują mnie rzeczy, które dobrze współdziałają ze stronami produkowanymi przez Django (lub inne dynamiczne strony internetowe).

Na przykład, bardzo mi się podoba rejestrator akcji oparty na Conkerorze, który pozwala mi przeglądać witrynę i znajdować błędy, a następnie natychmiast zapisuje sekwencję działań jako raport błędu za pomocą jednego naciśnięcia klawisza. Uwzględniając działania JS wymagane do odtworzenia błędu, byłaby to najlepsza wiązka testowa - nawet lepsza niż Selenium, ponieważ byłaby całkowicie sterowana za pomocą klawiatury.

+0

Dlaczego głosy, aby zamknąć? Jest to bardzo podobne do wątków z prośbą o wskazówki dotyczące dostosowywania Emacs/elisp: http: //i.stackoverflow.com/questions/41522/tips-for-learning-elisp/156861 – ramanujan

+2

Utworzyłeś nagrodę za to, ale nie jest wcale jasne, czy to pytanie ma ostateczną odpowiedź. Chciałbym też głosować, żeby zamknąć, gdybym miał przedstawiciela. – bignose

Odpowiedz

3

Ponieważ nikt inny nie jest zainteresowany publikowaniem aktualnej odpowiedzi, zrobię to.

Uważam, że pomocne jest posiadanie nazwy profilu w tytule okna, ponieważ używam wielu profili. To nie pomaga mi tak bardzo, że używam StumpWM i nie patrzę na listę okien dużo, ale jest to bardzo pomocne w innych menedżerach okien.

define_key(content_buffer_normal_keymap, "C-x C-c", "confirm-quit"); 
can_kill_last_buffer = false; 

Ta dwójka powstrzymuje mnie od przypadkowego zamknięcia okna oszustwa przez zamknięcie ostatniego bufora.

1

Cóż, nie mogę ci naprawdę pomóc, ale chciałem tylko powiedzieć, że chociaż jestem facetem emacs, upuściłem Conkeror za vimperator, ponieważ IMHO jest znacznie lepsze w przeglądaniu stron!

-2

Conkeror to po prostu Firefox ze skrótami Emacsa. Nie sądzę, że to jest, ani nie ma być, w pełni funkcjonalnym środowiskiem, jakim jest Emacs.

Ułatwia to przeglądanie Internetu, umożliwiając korzystanie z dobrze zużytej pamięci mięśniowej Emacs. I pozwala ci trzymać ręce na klawiaturze bardziej, zamiast przeskakiwać z klawiatury na mysz przez cały czas.

Więc nie sądzę, że naprawdę jest w stanie wykonać niektóre z rzeczy, które sobie wyobrazisz.

Jego rozwój jest również powolny i prawdopodobnie ma za mało personelu. Przekonasz się na przykład, że nie możesz korzystać z najpopularniejszych dodatków/rozszerzeń Firefox. Firebug, Greasemonkey, Gears, itp.

Podobają mi się niektóre zadania związane z przeglądaniem: mają specjalne tryby czytania Reddita, Czytnika Google i innych, które znacznie ułatwiają pracę.

Ale zgadzam się również z binOr, że vimperator jest znacznie lepszy, nawet jeśli jesteś facetem emacs. Pomaga, jeśli używasz VIM oczywiście.

+1

Zespół programistów może być mały, ale jesteśmy niezadowoleni! :-) Ponieważ ma pełny język programowania Turinga dla konfiguracji i jest w rzeczywistości napisany w JS, możesz zrobić wszystko, co tylko chcesz. Poza tym jest to rodzaj bólu, który polega na próbie oblężenia głównie obsługiwanych przez myszy rozszerzeń, takich jak Firebug, do pracy z klawiaturą. A do czego byś potrzebował Greasemonkey, skoro i tak masz już dostęp do DOM z JS? – baudtack

+0

Nie można również używać wielu rozszerzeń Firefox, ponieważ Conkeror nie jest Firefox. Oba oparte są na xulrunner, ale wiele rozszerzeń, takich jak Firebug, opiera się na chrome Firefoksa. – baudtack

5

Oto moje:

// 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);