2012年07月25日

仕事中にこっそりあれな動画を楽しむ苦肉の策

先日のOkinawa.rb Meetup! に参加した時に 「Emacsで仕事中にこっそりバレないようにWeb上のあれな動画を見られるなら乗り換えてやりますよ」 って感じのことを言われました。

「無理難題をふっかけて来やがって、こいつは仮に出来ても乗り換えはしないな」 なんて思ったりもしました。 まあこの手の問題に対して「無理」って突き返すのは簡単。

しかし、そういう無理な問題に対しても どうにか比較的近い代替案を大人のやることらしいので、 一応挑戦してみる。

まあ、まず、Emacs上で動画を再生するってのが、 少なくとも通常のEmacs環境だと無理。 でもまあ、Emacsから動画プレイヤーを起動できればいいよねってことにすると 以前に書いた、 やたー。emacs-w3mでリンク先のyoutubeの動画をmplayerを使ってストリーミング再生できたよー で既にyoutubeはそれに対応している。

で、ちょっと調べてみると、 やはりyoutube-dlは他のサイトにもいくらか対応していて その対応サイト一覧を出してみると

$ youtube-dl --list-extractors
youtube:playlist
youtube:user
youtube:search
youtube
metacafe
dailymotion
video.google
video.google:search
photobucket
video.yahoo
video.yahoo:search
DepositFiles
facebook
blip.tv
vimeo
myvideo
comedycentral
escapist
collegehumor
xvideos
soundcloud
infoq
mixcloud
stanfordoc
mtv
generic

こんな感じ。目的のサイトも入っている。

しかし実際にそのサイトの物をDLしようとすると

ERROR: unable to extract video thumbnail

とか怒られるのでぱっちを当てる必要がある。

なんだけど https://github.com/rg3/youtube-dl/issues/370 に丁度いいぱっちがある! まあこれからどう当てるかわからんので手で当てましたけども。 (というかこれに気付かずに自分で同じの書いたけど) Homebrewで入れたやつだとPythonスクリプトがそのまままとめられてるだけなので 簡単にパッチ当てられます。

youtube-dl -Uしたものの場合はzipで固めらてるようなので諦めて Githubからcloneしてきてぱっち当ててmakeしましょう。

で、ぱっちを当てたところで、以前に書いたw3m-play-movieって関数の string-matchのところに目的のサイトのURLに適当にマッチするのを書けばいいはずだけど それはあれ。 どうせなら他にもまとめて対応したいじゃん? (目的のサイトがバレバレだと恥ずかしいしね! 上のぱっちでバレバレだけど)

というわけで、以下のようにその関数を定義する

(defun w3m-play-movie ()
  (interactive)
  (let ((url (w3m-anchor))
        file-name)
    (cond ((string-match (concat "^http.*" (regexp-opt '(".mpg" ".wmv" ".avi" ".flv" ".mp4")) "$") url)
           (call-process "mplayer" nil nil nil "-fs" url))
          ((string-match "^http:\\/" url)
           (message (concat "loading from website... " url))
           (call-process "play-youtube" nil nil nil url))
          (t
           (message "not movie.")))))

うん、対応なんてかっこいいこと言ってたけど、 実際はhttpで始まるURLを渡されたらplay-youtubeってコマンドに投げてるだけだ。

そしてそのplay-youtubeの中身は

#!/bin/bash

mplayer -fs $(youtube-dl -g $1)

こんな感じ。 youtube-dlが動画のURLの取得に失敗したらmplayerも再生に失敗するだけなんで 細かいことは気にしない方針で。

で、ここからが次の大きな問題。 「仕事中にこっそり」って動画でどうやるんでしょうか。

まず、絵じゃなくて文字列を眺めてるんだったら怒られないんじゃね? って発想で Mac(Lionちゃん)で文字だけで素敵に動画を再生しちゃおう☆ で用意した環境を使ってみる。

ということで例のplay-youtubeをこう変える。

#!/bin/bash

CACA_FONT=6x10 CACA_GEOMETRY=100x32 mplayer -vo caca $(youtube-dl -g $1)

CACA_GEOMETRYを半分にしてちょっと小さめに表示してこっそり感をアピール!

とかやってみたけど、予想通りやっぱり、見るに耐えないw というわけで却下。

でも画面を小さく表示するって発想は悪くないよね。 なので普通に再生して縦横のpixelを小さくしたらどうだろう。

#!/bin/bash

mplayer -xy 200 $(youtube-dl -g $1)

よし、これぐらいなら普通に見れるぞ! だけど普通に見れるから何もこっそりじゃないよね! それはよくない! ちなみに100だと今度は小さすぎて見られたもんじゃない! やっぱり映像を流しておいてこっそりってのは無理なんじゃないだろうか。

じゃあもういっそ映像は諦めよう! 音声だけ聞こう!

#!/bin/bash

mplayer -vo null $(youtube-dl -g $1)

って感じ。

まあ、仕事中にそんなもの見るとか不埒なことを考えんなよ、さすがに俺でもしないぞ。

タグ:Emacs MPlayer video
posted by 麦汁 at 14:58 | Comment(0) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする

2012年06月19日

左手の小指を守るためにsticky-control.el を導入してみた。

いつもいつも左手の小指を酷使しているので これからはそこをほぼ使わないようにするために 前回の記事では skk-sticky-key を設定したのですが、 今回はさらにcontrolを使わずに済むように sticky-control.el を導入してみました。

まず、インストールから。

http://www.cs.toronto.edu/~ryanjohn/sticky-control.el

に落ちているので

M-x auto-install-from-url

で、urlとして上記のurlを投入。

んで、普通に使う分には

(require 'sticky-control)

して

M-x sticky-control-mode

を実行したら使えるようになる。 んだけども、こいつがデフォルトで使うキーが"j"なので なんかどうにも使いづらい。

他の推奨キーもあって、それが"v"なんだけども こいつでもやっぱり使いづらい。

F1 v

で describe-variables を見たくてもそこのvで何かのっとられて 妙な動きをしやがるので非常によろしくない。

というかアルファベットから使わなくてもいいだろって思うので

(sticky-control-set-key 'sticky-control-key 44)

しておく。

こうすると C-x が ,x で入力できたり C-g が ,g で入力できたり C-c が ,c で入力できたり C-s が ,s で入力できたり C-r が ,r で入力できたりするんだけども C-j を入力するために ,j では入力できないあたりとか不便。

なので

(setq sticky-control-shortcuts
      '((?c . "\C-c")
        (?g . "\C-g")
        (?k . "\C-k")
        (?a . "\C-a")
        (?e . "\C-e")
        (?n . "\C-n")
        (?o . "\C-o")
        (?p . "\C-p")
        (?j . "\C-j")
        (?f . "\C-f")
        (?b . "\C-b")
        (?x . "\C-x")
        (?r . "\C-r")
        (?s . "\C-s")))

とか設定しておく。 こうするとまあ、,を先に書くだけで色々とcontrolキーを押した感じになって そこそこ幸せな感じ。 fとかbとかは連続で入力しがちなのでいらない気もしてきたけど。

あと、本当は

(59 . (kbd "C-;"))

も紛れこませたかったけど 作りのせいかそういう記号系はどうやらだめっぽい。 まあそういう感じで対応してないやつでも

",,;"とか入力したらC-;で入力しているのと同じことになるので ま、これでいいかなって感じ。

ただ、;と,をstickyなキーに設定しているから今度は右手がなんか忙しいような……。 ここらあたりも考えないといかないかも。

posted by 麦汁 at 20:30 | Comment(0) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする

2012年06月17日

暇だったからddskkの設定いじった

今日も見事にやる気が足りないので とりあえず少しでも幸せになれるようにということで SKKの設定を弄ることにした。

まずはこんなのを置いている

(add-hook 'skk-load-hook
          (lambda ()
            ;; コード中では自動的に英字にする。
            (require 'context-skk)

            ;; 半角で入力したい文字
            (setq skk-rom-kana-rule-list
                  (nconc skk-rom-kana-rule-list
                         '((";" nil nil)
                           (":" nil nil)
                           ("?" nil nil)
                           ("!" nil nil))))))

skkが読み込まれた時に実行されるhookですね。 context-skk-modeってのを有効にして ";", ":", "?", "!" が半角で入力されるように設定。

context-skk-mode ってのは プログラムファイルのコード部分で「かな」とかになってた場合に 自動的に英字入力モードに戻してくれる地味に便利な子。 何も考えないでコードを書けるから地味に強力。

その後に

(require 'skk-autoloads)
(when (require 'skk nil t)
  (global-set-key "\C-\\" 'skk-mode))

こんなのを書いている。 skkをrequireしてその時にC-\をskk-mode起動のコマンドにしているのだけども なんかskk-autoloadsもあるし変な気はするな。まいっか。 C-\をskk起動にしているのは、 dired-xとコマンドが重複するっぽいので一時的な対策。

それから動的補完機能を有効にしてみた。

; 動的自動補完機能
(setq skk-dcomp-activate t)

これを導入すると、予測変換的な機能が使えるようになる。

それから閉括弧の自動入力機能を有効にしてみた

; 閉じ括弧の自動入力
(setq skk-auto-insert-paren t)

"「"を入力したら自動的に"」"まで入力してくれて便利。

それから左手の小指を守るために

; ";"をsticky shiftに用いることにする
(setq skk-sticky-key ";")

を設定してみた。

これをすると ";" を押したら"▽"が表示されて、 まあ変換開始位置の指定をしている感じになる。 ";" じゃあない方がいいかもしれないけどまずはこれで。

それから送り仮名の問題。 「おおく」を変換しようとした時に 「大く」が先に変換候補に出るとすごくうっとーしいので

; 見出し語と送り仮名がマッチした候補を優先して表示
(setq skk-henkan-strict-okuri-precedence t)

を設定。 skk-henkan-okuri-strictly という変数もあるのだけども 個人辞書の送りありエントリが充実していれば、 標準の設定よりも候補が絞り込まれるので変換効率がアップしますが、 さもなければ、すぐに辞書登録モードに入ってしまうため逆に不便になります。 ということなので緩い方にしておいた。

それから、変換候補の絞り込みに使えるskk-hintを有効化。 で、そのデフォルトのキーがskk-sticky-keyと重複するのでその対策として こっちは代わりに":"をそのキーにしておく。

(require 'skk-hint)
(setq skk-hint-start-char 58)

58ってのが":"のASCIIコードね。最初は":"を指定してハマった。

それから、注釈を表示するように設定

(setq skk-show-annotation t)

辞書内に注釈があればそれが勝手に表示されるし、 無かった場合にはTABを押すとなんとWikipediaから注釈を拾ってくるぞ! インターネットばんじゃーい。

後は一応ようやく学習機能を有効化してみたけど ちゃんと動いているかはよくわかんね。

;; 学習機能
(require 'skk-study)

んで、辞書をAquaSKKと共有するために

;; AquaSKKの辞書をつかうようにする
(if (eq window-system 'mac)
    (progn
      (setq skk-large-jisyo (expand-file-name "~/Library/Application Support/AquaSKK/SKK-JISYO.L"))
      (setq mac-pass-control-to-system nil)))

なんてのも放り込んでいる。

今回設定した中ではsticky-keyと閉じ括弧補完と動的補完と注釈機能が 小指に優しかったり入力減らしたり注釈面白そうだったりで今すぐ幸せになれそうな感じ。

なんか他にこれをやったら幸せになれそうって設定あったら誰か教えてください><

タグ:Emacs ddskk
posted by 麦汁 at 23:20 | Comment(0) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。