ex-html-mode エスケープ文字やリストなどの入力機能追加
ちなみに lisp ファイルのリンク先は Subversion なので、どの記事のリンクでも最新版へのリンクとなってます。
- リンク貼り付けでの C-u の動作変更
- エスケープ文字、空白の挿入
- 自動改行の考慮
- リンク、テーブルの挿入
リンク貼り付けの動作変更
C-c i C-y でクリップボードの文字列をリンクとして貼り付ける機能を付けていました。また、 C-u の後では新規ウィンドウでのリンクにしていたのですが、新規ウィンドウでのリンクの方をよく使っていたので、逆にしました。つまり C-u C-c i C-y で新規ウィンドウで開かないリンクとなります。
エスケープ文字と空白の入力
<, >, & の HTML で使えない文字と空白を入力するためのキーワードの入力機能を付けましたキー | 挿入文字 |
---|---|
C-c & | & |
C-c < | < |
C-c > | > |
C-c [SPC] | |
自動改行の考慮
ブログでは改行を自動的に <br /> にするモードとそのまま html とするモードがあります。 これを考慮するようにしました。ex-html-target-mode-auto-newline の変数を nil に設定すると [Enter] で改行する時に<br /> を入力してから改行するようになります。
タグを入力せずに改行したい場合には C-j で改行してください。
リンク、タグの挿入
html の各リンク、テーブルを挿入する機能を付けました。- C-c i u
- リスト(番号なし)
- C-c i o
- 番号付きリスト
- C-c i d
- 定義リスト(今書いているのに使っているリスト)
- C-c i t
- テーブル
番号あり、なしのリストの場合、リスト項目が順次聞かれます。リスト項目に何も入力しないと終了します。
定義リストの場合には、定義名と定義の説明が聞かれます。 定義名を聞かれた時に何も入力しないと終了です。定義の説明には何も入力したくない時があるので、 何も入力しなかった場合は何も入力しないだけにしています。
テーブルは先頭行はヘッダで決め打ちにしています。 最初にヘッダのカラムを入力していき、空入力でヘッダの入力を終わります。 その後、各カラムの内容を聞かれます。先頭カラムで何も入力しないと終了します。
前節の自動改行用のモードが non-nil の場合、改行が入らないようにつなげて入力されます。
html モードのタグ挿入(C-c C-t) のように領域選択で動作を変えようかなともちょっと思いました。 しかし、 ul, ol はいいのですが、 定義リストやテーブルでできません。
: や, を置換してもいいかなとも思ったのですが、やりすぎると rdoc のようなフォーマットで書いて変換した方が早い気がしてやめてしまいました。
![]() | やさしいEmacs‐Lisp講座 (2011/06) 広瀬 雄二 商品詳細を見る |
プラグイン開発記 - 中国語の翻訳
http://www.r-labs.org/issues/835
次もやってくれるとは書いてなかったけど、多分やってくれるかなということで送ってくれた人をメンバに加えてみた。
だいぶ国際的になってきた気がするので、今開発中のバージョンが完成したら、本家の方のプラグインにも登録しようかな。
![]() | Rails Way (Professional Ruby Series) (2008/12/04) Obie Fernandez 商品詳細を見る |
![]() | Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応 (2008/05/31) 大場 寧子、大場 光一郎 他 商品詳細を見る |
プラグイン開発記 - レコードの一括変更
http://www.r-labs.org/issues/750
画面を作ったりとかはすんなりできたのだが、プロジェクト変更後の用語の保存で結構はまってしまった。
最初の方針では、 find(:all, ...) メソッドでプロジェクトの用語と用語のカテゴリの配列を取得して、 一個づつプロジェクト ID を変更して、 save メソッドで保存していくようにしていた。しかし、何故か save メソッドが false を返して、保存に失敗していた。
原因が分からなかったので、 調べていたら、save メソッドを save! にすると、保存時に false を返すのではなく、例外を発生させることができるらしいということがわかった。
http://www.atmarkit.co.jp/fcoding/rails/articles/rails3/04/rails304a.html
そこで、 save! を使ってわざと例外を発生させてみると、プロジェクトが指定されていないということでエラーになっていた。
それで、よくみてみると id メソッドで変更後のプロジェクトを取得するとき、間違って Project クラスのオブジェクトではなく、単に識別名の文字列のオブジェクトに対して id メソッドを呼び出していた。
Ruby の全ての上位クラスである Object クラスにも id メソッドがあって、それで String でもエラーとはならず、おかしな値をプロジェクト ID に入れていたらしい。
原因が分かったので、そのまま修正しても良かったのだが、調べているときに update_all という ActiveRecord のクラスメソッドを使えば、一気に変更できるということも知ったので、そちらを使うことにした。
次のようにして用語とカテゴリのプロジェクトを変更するようにすると上手く動くようになった。
[TermCategory, Term].each {|cl| cl::update_all("project_id = #{newproj.id}", "project_id = #{@project.id}") }ただ、この update_all メソッドは、第一引数が変更の操作で、第二引数が変更対象の条件になっていて、 第二引数を省略するためにそうなっているのだとは思うが、感覚的に逆の方がしっくりくる気がして、ちょっと分かりづらい。
この機能追加で 0.6.0 の変更予定が完了したので、後はざっと確認して、翻訳してもらったら、 0.6.0 をリリースできそう。
![]() | Ruby on Rails 逆引きクイックリファレンス Rails 2.0対応 (2008/05/31) 大場 寧子、大場 光一郎 他 商品詳細を見る |
![]() | Rails Way (Professional Ruby Series) (2008/12/04) Obie Fernandez 商品詳細を見る |