Plug your own filter into Catalyst

Template::Manual::Filters里面提供了好多很好用的filter,当它们不够用的时候,还可以提供自己写的filter函数。但是怎么告诉Catalyst呢?没有找到文档,只好又去看代码。方法是在MyApp.pm里面__PACKAGE__->setup;一行之前添加如下代码:

__PACKAGE__->config( 'View::HTML' => {
    FILTERS => {
        'myown' => &myown_filter,
    },
});

View::HTML换成你自己的View,然后写一个名为myown_filter的函数来完成真正的filter功能。

Completing read

自动补全功能在任何时候都是受欢迎的,Emacs提供了一个基本的函数completing-read,可以在接受用户输入时提供补全功能。除此之外,我们还可以使用一些更加强大的函数,比如ido里面的ido-completing-read,或者使用iswitchb提供的功能。

使用ido-completing-read比较简单,参见psvn.el。而iswitchb并没有提供一个类似的函数,所以必须自己写一个。

(defun wl-completing-read (prompt choices dummy require-match)
  "Use iswitchb completion functionality."
  (let ((iswitchb-make-buflist-hook
         (lambda ()
           (setq iswitchb-temp-buflist choices))))
    (iswitchb-read-buffer prompt nil require-match)))

(defvar wl-completing-read-function
  (if (fboundp 'iswitchb-read-buffer) 'wl-completing-read 'completing-read))

在引入wl-completing-read-function变量之后,要使用funcall来调用它,而不是直接进行函数调用。

(funcall wl-completing-read-function prompt choice nil t)