コモンズ・マーカーの表示/非表示をtoggleするgresemonkey

http://commonsmarker.com/bookmarkletをみたら、結構かんたんにできそうだったのでつくりました。

機能

"\"のキー*1を押すとコモンズ・マーカーが表示したり、非表示になったりします。

こーど

// ==UserScript==
// @name          commons's marker visuble toggle
// @namespace     http://d.hatena.ne.jp/trotr
// @description
// @include       http://*
// @version       0.0.0
// @author        trotr
// ==/UserScript==

(function() {
   var BINDKEY="\\";

   function CMKtls(){
     this.is_view = false;
     this.element_is_exsit = false;
     this.id ='cmktls_root';
   }

   var cmktls = new CMKtls();

   function delete_cmktls(){
     //console.log("delete");
     var e = document.getElementById(cmktls.id);
     if(e){
       cmktls.element = e;
       e.parentNode.removeChild(e);
     }
   }

   function revert_cmktls(){
     if(!cmktls.element_is_exsit){
       cmktls.element_is_exsit =  !cmktls.element_is_exsit;
       var e = document.createElement("script");
       e.src = "http://commonsmarker.com/boot/tools_loader.js";
       e.charset='utf-8';
       document.body.appendChild(e);
     } else{
       document.body.appendChild(cmktls.element);
     }
   }

   function toggle_view_or_notview(){
     cmktls.is_view ?  delete_cmktls() : revert_cmktls();
     cmktls.is_view = !cmktls.is_view;
   }

   var skipEl = {'input': true, 'button': true, 'select': true, 'textarea': true, 'password': true};
   window.addEventListener('keypress', function(e){
			     if (skipEl[e.target.tagName.toLowerCase()]) {return;}
			     if (String.fromCharCode(e.charCode) == BINDKEY){
			       toggle_view_or_notview(cmktls);
			     }
			},false);

 })();

javascriptわからないです><。
動くコードは書けますが、きれいなコードがわかりません><。

追記

noscriptjavascriptを無効にしたurlでは動かなくなるみたい。

*1:backspaceの左にあるあれです。

はてなのsuper-pre記法のかっこの挿入を楽にするelisp

http://d.hatena.ne.jp/syou6162/20080710/1215642057を見て、どうせなら言語の名前を補完できた方がおもしろいと思ったのでここを参考に作ってみました。*1

(defvar simple-hatena-last-lang "") ;;最後に挿入した言語の名前

(defun simple-hatena-insert-lang (beg end) (interactive "r")
  (let ((lang (completing-read "lang: " hatena-highlightable-language-alist nil nil simple-hatena-last-lang)))
    (setq simple-hatena-last-lang lang)
    (save-excursion
      (goto-char end)
      (insert "||<\n")
      (goto-char beg)
      (insert (concat ">|" lang "|\n")))))


(setq hatena-highlightable-language-alist '("a2ps" "a65" "aap" "abap" "abaqus" "abc" "abel" "acedb" "ada" "aflex" "ahdl" "alsaconf" "amiga" "aml" "ampl" "ant" "antlr" "apache" "apachestyle" "arch" "art" "asm" "asm68k" "asmh8300" "asn" "aspperl" "aspvbs" "asterisk" "asteriskvm" "atlas" "automake" "ave" "awk" "ayacc" "b" "baan" "basic" "bc" "bdf" "bib" "bindzone" "blank" "bst" "btm" "c" "calendar" "catalog" "cdl" "cf" "cfg" "ch" "change" "changelog" "chaskell" "cheetah" "chill" "chordpro" "cl" "clean" "clipper" "cmake" "cobol" "colortest" "conf" "config" "context" "cpp" "crm" "crontab" "cs" "csc" "csh" "csp" "css" "cterm" "ctrlh" "cupl" "cuplsim" "cvs" "cvsrc" "cweb" "cynlib" "cynpp" "d" "dcd" "dcl" "debchangelog" "debcontrol" "debsources" "def" "desc" "desktop" "dictconf" "dictdconf" "diff" "dircolors" "diva" "django" "dns" "docbk" "docbksgml" "docbkxml" "dosbatch" "dosini" "dot" "doxygen" "dracula" "dsl" "dtd" "dtml" "dylan" "dylanintr" "dylanlid" "ecd" "edif" "eiffel" "elf" "elinks" "elmfilt" "erlang" "eruby" "esmtprc" "esqlc" "esterel" "eterm" "eviews" "exim" "expect" "exports" "fasm" "fdcc" "fetchmail" "fgl" "flexwiki" "focexec" "form" "forth" "fortran" "foxpro" "fstab" "fvwm" "fvwm2m4" "gdb" "gdmo" "gedcom" "gkrellmrc" "gnuplot" "gp" "gpg" "grads" "gretl" "groff" "groovy" "group" "grub" "gsp" "gtkrc" "haskell" "hb" "help" "hercules" "hex" "hitest" "hog" "html" "htmlcheetah" "htmldjango" "htmlm4" "htmlos" "ia64" "icemenu" "icon" "idl" "idlang" "indent" "inform" "initex" "inittab" "ipfilter" "ishd" "iss" "ist" "jal" "jam" "jargon" "java" "javacc" "javascript" "jess" "jgraph" "jproperties" "jsp" "kconfig" "kix" "kscript" "kwt" "lace" "latte" "ld" "ldif" "lex" "lftp" "lhaskell" "libao" "lifelines" "lilo" "limits" "lisp" "lite" "loginaccess" "logindefs" "logtalk" "lotos" "lout" "lpc" "lprolog" "lscript" "lss" "lua" "lynx" "m4" "mail" "mailaliases" "mailcap" "make" "man" "manconf" "manual" "maple" "masm" "mason" "master" "matlab" "maxima" "mel" "mf" "mgl" "mgp" "mib" "mma" "mmix" "modconf" "model" "modsim3" "modula2" "modula3" "monk" "moo" "mp" "mplayerconf" "mrxvtrc" "msidl" "msql" "mupad" "mush" "muttrc" "mysql" "named" "nanorc" "nasm" "nastran" "natural" "ncf" "netrc" "netrw" "nosyntax" "nqc" "nroff" "nsis" "objc" "objcpp" "ocaml" "occam" "omnimark" "openroad" "opl" "ora" "pamconf" "papp" "pascal" "passwd" "pcap" "pccts" "perl" "pf" "pfmain" "php" "phtml" "pic" "pike" "pilrc" "pine" "pinfo" "plaintex" "plm" "plp" "plsql" "po" "pod" "postscr" "pov" "povini" "ppd" "ppwiz" "prescribe" "procmail" "progress" "prolog" "protocols" "psf" "ptcap" "purifylog" "pyrex" "python" "qf" "quake" "r" "racc" "radiance" "ratpoison" "rc" "rcs" "rcslog" "readline" "rebol" "registry" "remind" "resolv" "rexx" "rhelp" "rib" "rnc" "rnoweb" "robots" "rpcgen" "rpl" "rst" "rtf" "ruby" "samba" "sas" "sather" "scheme" "scilab" "screen" "sdl" "sed" "sendpr" "sensors" "services" "setserial" "sgml" "sgmldecl" "sgmllnx" "sh" "sicad" "sieve" "simula" "sinda" "sindacmp" "sindaout" "sisu" "skill" "sl" "slang" "slice" "slpconf" "slpreg" "slpspi" "slrnrc" "slrnsc" "sm" "smarty" "smcl" "smil" "smith" "sml" "snnsnet" "snnspat" "snnsres" "snobol4" "spec" "specman" "spice" "splint" "spup" "spyce" "sql" "sqlanywhere" "sqlforms" "sqlinformix" "sqlj" "sqloracle" "sqr" "squid" "sshconfig" "sshdconfig" "st" "stata" "stp" "strace" "sudoers" "svn" "syncolor" "synload" "syntax" "sysctl" "tads" "tags" "tak" "takcmp" "takout" "tar" "tasm" "tcl" "tcsh" "terminfo" "tex" "texinfo" "texmf" "tf" "tidy" "tilde" "tli" "tpp" "trasys" "trustees" "tsalt" "tsscl" "tssgm" "tssop" "uc" "udevconf" "udevperm" "udevrules" "uil" "updatedb" "valgrind" "vb" "vera" "verilog" "verilogams" "vgrindefs" "vhdl" "vim" "viminfo" "virata" "vmasm" "vrml" "vsejcl" "wdiff" "web" "webmacro" "wget" "whitespace" "winbatch" "wml" "wsh" "wsml" "wvdial" "xdefaults" "xf86conf" "xhtml" "xinetd" "xkb" "xmath" "xml" "xmodmap" "xpm" "xpm2" "xquery" "xs" "xsd" "xslt" "xxd" "yacc" "yaml" "z8a" "zsh"))

*1:実際に使うときは、自分の使う言語だけにした方が良いとおもいます><