出しちゃいます。
/dotfiles/vim/mattn-vimrc - CodeRepos::Share - Trac正直デカイです。
/dotfiles/vim/mattn-gvimrc - CodeRepos::Share - Trac
もう随分昔からあるvimrcなので使ってない機能もあれば、忘れてしまったノウハウもいっぱい...
あまり参考にならないかもしれませんが、どうぞ。
mattn the vimmer!
追記
マルチプラットフォーム用です。
/dotfiles/vim/mattn-vimrc - CodeRepos::Share - Trac正直デカイです。
/dotfiles/vim/mattn-gvimrc - CodeRepos::Share - Trac
#!/usr/bin/perlちょっと日付まわりで苦労してますが...
use encoding 'utf-8';
use strict;
use warnings;
use Encode qw(from_to);
use URI;
use URI::Escape qw(uri_escape_utf8);
use Web::Scraper;
use YAML;
if ($^O eq 'MSWin32') {
binmode(STDERR, ':encoding(shift_jis)');
Encode::from_to($ARGV[0], 'cp932', 'utf-8');
}
my $talent = shift || '小島よしお';
my $talent_schedule = scraper {
process '//div[@class="find_bl"]/following-sibling::*[1]//td', day => 'TEXT';
process '//div[@class="find_bl"]/following-sibling::*[1]//td/div',
'schedule[]' => scraper {
process 'div', media => sub { my $m = $_->attr('class'); $m =~ s/^icon_//g; $m };
process '/div/a', url => '@href';
process '/div/a', title => 'TEXT';
process '/div/node()[1]', timespan => sub {
my $s = $_->string_value;
$s =~ s/ //;
$s =~ s/(^|[^\d])(\d):(\d\d)/0$2:$3/g;
my @span = split(/[^\d:]/, $s);
\@span;
};
};
result qw/day schedule/;
};
my $uri = URI->new('http://talent-schedule.jp/'.uri_escape_utf8($talent));
my $oppappi_schedule = $talent_schedule->scrape($uri);
warn Dump $oppappi_schedule;
はてなTIPS - アドレスから「id naoya」でダイアリーにこんなの使えないかなぁ...
javascript:alert(%s);void 0これを「js」てキーでレジストリ登録しておけば今まで
javascript:alert(document.getElementById('banner'));void 0ってやってたオブジェクトの存在確認が
js document.getElementById('banner')って感じに少し楽になる。
js document.getElementById('banner').innerHTML = 'ばなー';ってな感じにも使えますね。
xpath //div[@id='foo']//spanなんて事も出来るのかも。もちろんIEなのでtoJSONなんかを実装した方がalertで確認し易いけど...。
:shutdownソースは
// ==UserScript==こんな感じ。
// @name Minibuffer Shutdown Command
// @namespace Minibuffer.Shutdown.Command
// @include http://*
// ==/UserScript==
(function(){
var mes = [
'System is going down for system shutdown now.......',
'Starting local stop scripts. ',
'Exiting Syslogd! ',
'Syncing all filesystems: [OK]',
'Unmounting all filesystems: [OK]',
'The system is going down NOW !! ',
'Sending SIGTERM to all processes. ',
'The system is halted. Press Reset or turn off power',
'flushing ide devices: [OK]',
'System halted. ',
];
function shutdown( stdin ) {
GM_addStyle(<><![CDATA[
#gm_minibuffer_flash_status * {
font-family: 'terminal', 'monospace';
font-weight: bold;
}
]]></>);
var n = 0;
var timer = setInterval(function(){
window.Minibuffer.status('shutdown'+n, mes[n], 50000);
if (n++ >= mes.length) {
clearInterval(timer);
document.open();
document.close();
document.body.style.backgroundColor='black';
}
}, 1000);
return stdin;
}
if (typeof window.Minibuffer != 'undefined') {
window.Minibuffer.addCommand({
name: "shutdown",
command: shutdown,
});
}
})();
インストール:minibuffer.shutdown.user.jsてか実用的な物つくれ!俺
MinibufferBookmarkCommand - 3.14
--- minibufferbookmarkcomman.user.js.orig Sat Nov 24 14:53:01 2007
+++ minibufferbookmarkcomman.user.js Sat Nov 24 14:51:57 2007
@@ -140,6 +140,90 @@
postToHatenaB(nodes, urls);
}
+ // delicious bookmark
+ var delicious = function(nodes, urls, tags, comment){
+ if(!urls.length) return;
+ var total = urls.length;
+ var time = new Date().getTime();
+ var getParam = function(node, url, fn, afterPost){
+ if(!url) return;
+ var callback = function(res){
+ var html = res.responseText.createHTML();
+ var form = window.Minibuffer.$X('//form[@id="delForm"]', html)[0];
+ var inputs = window.Minibuffer.$X('//form[@id="delForm"]//input', html);
+ var res = {};
+ inputs.forEach(function(node){
+ res[node.getAttribute('name')] = node.getAttribute('value');
+ });
+ if(keys(res).length == 1){
+ // already bookmarked
+ var text = url;
+ if(window.LDRize){
+ var siteinfo = window.LDRize.getSiteinfo();
+ if(siteinfo && siteinfo.view){
+ var view = window.Minibuffer.$X(siteinfo.view, node)[0];
+ if(view) text = view.textContent;
+ }
+ }
+ window.Minibuffer.message('<small>'+text+'</small><br/> has already bookmarked.', 2000);
+ afterPost();
+ }else{
+ res.action = 'http://del.icio.us/' + form.action.replace(/^https?:\/\/[^\/]+\//, '');
+ // not yet bookmarked
+ fn(res, afterPost);
+ }
+ }
+ GM_xmlhttpRequest({
+ method: 'GET',
+ url: "http://del.icio.us/post?v=4&url="+encodeURIComponent(url),
+ onload: callback,
+ onerror: function(res){log('onerror',res.responseText, '\n',res.responseHeaders)},
+ });
+ }
+ var post = function(opt, afterPost){
+ if (!opt.description) {
+ var x = new XMLHttpRequest();
+ x.open('GET', opt.url, false);
+ x.send(null);
+ if (x.readyState == 4 && x.status == 200) {
+ try {
+ var html = x.responseText.createHTML();
+ opt.description = window.Minibuffer.$X('//title', html)[0].text;
+ } catch(e) {}
+ }
+ }
+ var request = [
+ "url=", encodeURIComponent(opt.url),
+ "&oldurl=", encodeURIComponent(opt.url),
+ "&private=", opt.private,
+ "&description=", encodeURIComponent(opt.description),
+ "¬es=", encodeURIComponent(comment),
+ "&tags=", encodeURIComponent(opt.tags),
+ "&v=", opt.v,
+ "&key=", opt.key,
+ ].join('');
+ GM_xmlhttpRequest({
+ method: 'POST',
+ url: opt.action,
+ headers: {
+ 'Content-Type': 'application/x-www-form-urlencoded'
+ },
+ onload: afterPost,
+ onerror: function(res){log('onerror',res.responseText, '\n',res.responseHeaders)},
+ data: request
+ });
+ }
+ var postToDelicious = function(nodes, urls){
+ if(!urls.length){
+ window.Minibuffer.status('bookmark'+time,'Bookmark 100 %', 1000)
+ return;
+ }
+ window.Minibuffer.status('bookmark'+time,'Bookmark ' + Math.floor((total-urls.length) / total * 100) + '%');
+ getParam(nodes.shift(), urls.shift(), post, function(){postToDelicious(nodes, urls)});
+ }
+ postToDelicious(nodes, urls);
+ };
+
// var delicious = function(urls, tags){
// log('delicious: urls:tags',urls, tags);
// }
@@ -147,7 +231,7 @@
// log('livedoor: urls:tags',urls, tags);
// }
addBookmark('hatena', 'h', hatenab);
-// addBookmark('delicious', 'd', delicious);
+ addBookmark('delicious', 'd', delicious);
// addBookmark('livedoor', 'l', livedoorclip);
window.Minibuffer.addCommand({
// ==UserScript==こんなの使っても
// @name Speedtest Ikasama
// @namespace Speedtest.Ikasama
// @include http://speedtest.10-fast-fingers.com/
// ==/UserScript==
var w=document.getElementById('eingabe');
var v=document.getElementById('vorgabe');
var s = 0;
var z = unsafeWindow.pruefstring;
var f1 = unsafeWindow.welchedown;
var f2 = unsafeWindow.welcheup;
unsafeWindow.wort = (z+z+z+z+z).split(' ');
(function go() {
clearTimeout(s);
var t = v.innerHTML.replace(/<[^>]+>/g, '');
if (t){
var i=0;
while(true){
t = v.innerHTML.replace(/<[^>]+>/g, '');
var e = document.createEvent('KeyboardEvent');
e.initKeyEvent('keypress', true, true, window, false, false, false, false, 0, t.charCodeAt(i));
w.dispatchEvent(e);
f1(e);f2(e);
if (++i >= t.length) break;
}
}
s = setTimeout(go, 0);
})();
8位って事は、1位の人もHackingやん!www![]()
speedtest.ikasama.user.js# 10-fast-fingers.com - Speedtest
:fuckとすれば良い。 もしくはpinを付けて
:pinned-link | fuckとすればpinを付けたリンクが全部「Fuck!」になる。
:pinned-node | fuckとすれば、pinが指すノード自体が削除される。
followerの発言をpinしてfuckしようもんなら![]()
こんなんになっちゃう!![]()
// ==UserScript==
// @name Minibuffer Fuck Command
// @namespace Minibuffer.Fuck.Command
// @description add fuck command to Minibuffer.
// @include http://*
// @include https://*
// ==/UserScript==
window.Minibuffer.addCommand({
name: 'fuck',
command: function(stdin){
if (stdin.length == 0) {
document.open();
document.write('<h1>Fuck!</h1>');
document.close();
} else {
stdin.forEach(function(obj){
if (("" + obj).match(/^https?:.*/)) {
var links = document.getElementsByTagName('a');
for(var n = 0; n < links.length; n++) {
if (links[n].href == obj) {
links[n].href = 'javascript:void(0);';
links[n].addEventListener('click', function() {alert(this.innerHTML)}, false);
links[n].innerHTML = 'Fuck!';
}
}
} else if (typeof obj == 'object') {
try {
obj.parentNode.removeChild(obj);
} catch(e) { }
}
});
}
return stdin;
}
});
インストール:minibuffer.fuck.user.js
/lang/c/sonydb - CodeRepos::Share - TracSONY製WalkmanをSonicStage無しに転送するソフトです。
# sonydb songsで曲一覧
# sonydb songsadd /path/to/mp3/music.mp3で曲転送
# sonydb songsdel 40で、songsで一覧される際に表示される番号の曲を削除します。
「Apply」ボタンを押すと転送開始です。GUI版はまだまだといった所です。私はどっちかっていうと![]()
# find /home/mattn/Music/XXX -name "*.mp3" | xargs -n 1 sonydb songsadd的な使い方しかしてません。
/media/usbdiskをベタで見に行く様になっています。ソースを触れる方は適当に弄って下さい。この辺は今後どうにかする予定です。
/media/usbdisk1