2009-04-20 22 views
5

Conkeror ha cambiado la forma en que navego por la web: básicamente es Emacs + Firefox con configuración basada en Javascript en .conkerrorc en lugar de la configuración de elisp en .emacs.¿Cómo se ve tu .conkerorrc?

He creado una gran biblioteca de personalizaciones .emacs a lo largo de los años obteniendo pequeños detalles de otros. Estoy comenzando con Conkeror, pero el hecho de que use JS (mucho más conocido que Elisp) debe significar que hay algunas cosas increíbles por ahí.

¿Cuidas para compartir tus piezas? Estoy particularmente interesado en cosas que interactúan bien con páginas producidas por Django (u otras páginas web dinámicas).

Por ejemplo, me encantaría una grabadora de acción basada en Conkeror que me permitiera explorar un sitio y encontrar errores, y luego guardar inmediatamente & enviar la secuencia de acciones como un informe de error con una sola pulsación de tecla. Al incluir las acciones de JS requeridas para replicar el error, sería el mejor arnés de prueba, incluso mejor que Selenium, ya que sería totalmente controlado por el teclado.

+0

Por qué los votos para cerrar? Esto es muy similar a los hilos que piden consejos sobre la personalización de Emacs/elisp: http: //i.stackoverflow.com/questions/41522/tips-for-learning-elisp/156861 – ramanujan

+2

Has abierto una recompensa por esto, pero no está del todo claro que esta pregunta tenga una respuesta definitiva. Yo votaría para cerrar, también, si tuviera el representante para eso. – bignose

Respuesta

3

Dado que nadie más parece interesado en publicar una respuesta real, lo haré.

function my_title_format (window) { 
    return 'conkeror {'+get_current_profile()+'}'+window.buffers.current.description; 
} 

Encuentro útil tener el nombre del perfil en el título de la ventana ya que utilizo varios perfiles. No me ayuda mucho ahora que uso StumpWM y no miro mucho la lista de ventanas, pero es muy útil en otros administradores de ventanas.

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

Estos dos me impiden cerrar accidentalmente una ventana de conkeror al cerrar el último buffer.

1

Bueno, realmente no puedo ayudarte aquí, pero solo quería decir que, aunque soy un chico de emacs, dejé Conkeror por vimperator porque en mi humilde opinión la experiencia de navegación es mucho mejor.

-2

Conkeror es simplemente Firefox con combinaciones de teclas de Emacs. No creo que sea, ni pretende ser, un entorno con todas las funciones como Emacs.

Facilita su experiencia de navegación al permitirle usar su bien gastada memoria muscular Emacs. Y le permite mantener sus manos sobre el teclado más, en lugar de saltar de teclado en mouse todo el tiempo.

Así que no creo que sea realmente capaz de hacer algunas de las cosas que imaginas.

Su desarrollo también es bastante lento y probablemente no tenga suficiente personal. Encontrarás, por ejemplo, que no puedes usar los complementos/extensiones de Firefox más comunes con él. Firebug, Greasemonkey, Gears, etc.

Me gusta para algunas tareas de navegación: tiene modos especiales para leer Reddit, Google Reader y otros que hacen las cosas mucho más fáciles.

Pero también estoy de acuerdo con binOr que vimperator es mucho mejor, incluso si eres un chico de emacs. Ayuda si usas VIM, por supuesto.

+1

¡El equipo de desarrollo puede ser pequeño pero estamos desorientados! :-) Debido a que tiene un completo lenguaje completo de Turing para la configuración y, de hecho, está escrito en JS, puede hacer prácticamente cualquier cosa que desee. Además, es un poco doloroso tratar de golpear principalmente las extensiones impulsadas por el mouse como Firebug para trabajar con el teclado. ¿Y para qué necesitarías Greasemonkey porque ya tienes acceso al DOM con JS? – baudtack

+0

Además, no puedes usar muchas extensiones de Firefox porque Conkeror no es Firefox. Ambos están basados ​​en xulrunner, pero muchas extensiones, como Firebug, se basan en Chrome de Firefox. – baudtack

5

Esta es la mía:

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