CopyURL+ のような事をするvimperator plugin
またプラグインを作ってしまった。
現状、開いているURLのコピーはできるが、タイトルのコピーにちょっと困る。CopyURL+のようなことをコマンドで出来たら良いなと思って作ってみた。作っていたら欲が出ていろいろ追加してしまったがw
インストールはいつものようにしてくださいな。今回はちょっと長いのでここに貼り付けずにファイルとしてサーバにアップしました。
通常のコピー
:copy copyString
とすることでクリップボードへcopyStringがコピーされます。
copyStringが登録された文字列である場合には、対応する値がコピーされます。登録されたものに関してはタブによる補完が効きます。
コピーされる時、対象に特定の以下のような文字列がある場合は置換されてコピーされます。
- %TITLE%
- 現在表示しているページのタイトル
- %URL%
- 現在表示しているページのURL
- %SEL%
- 選択文字列
- %HTMLSEL%
- %SEL%と似ているがHTMLのタグも文字列化されます
通常のコピーの例
copy %TITLE%
- ページのタイトルがコピーされる
copy titleAndURL
- ページのタイトルとURLが改行付きでコピーされる(デフォルトでは)
また、登録された文字列の値はオプションの登録されるので:set
コマンドで値の表示や変更が可能です。(現在セッションのみ有効です)
setコマンドの例
set titleAndURL
- 値の表示
set anchor = <a href="%URL%" title="%TITLE%">%TITLE%</a>
- 値の変更
コード中の先頭の方にあるtemplateオブジェクトに幾つか用意してあるので参考にしつつ自分で好きなように変更すると良いでしょう。
また、引数を省略した場合にはコード中のdefaultの値が用いられます。よく使うものを指定しておくと良いでしょう。
マップに登録してキータイプひとつで、という使い方もあるかと思います。
拡張コピー
:copy! expr
とcopy
の後ろに!
をつけると拡張コピーとなり、JavaScriptコードの結果をコピーできます。
コードが実際に実行されることに注意してください。また、コードの補完も効きます。:echo
コマンドの出力結果がコピーされるような感じです。
例
:copy! version
:copy! options.hintstyle
それと、コードがエラーを起こした場合はエラーメッセージがコピーされます。エラーメッセージをコピーしたい時もあるかなと思い、こういう仕様にしました。
余談
%HTMLSEL%
の置換と補完機能に苦労しました。
%HTMLSEL%
は選択範囲の文字列ではなくSelectionオブジェクトを取って来なければならず...とまぁ、これは前回(安全にSelectionオブジェクトを得る(XPCNativeWrapperの使用) - hogehoge @teramako)を参照してください。さらにSelectionオブジェクトからRangeオブジェクトを得て、cloneContents()
メソッドでDocumentFragmentオブジェクトを得て、XMLSerializerで文字列化ということをしてます。
補完機能はvimperatorのバグなのか仕様なのか、!
があると上手く作動しないので修正のために既存のコードを上書きしたりしてます。