首页 > 初级, 配置 > 我的 GNU Emacs 配置”程序”

我的 GNU Emacs 配置”程序”

2010年11月1日 ahei 发表评论 阅读评论

作者: 杨博华David Young

1 我的 GNU Emacs 配置程序

呃……一般来说大家都叫“配置文件”,是吧。当然我也是这么叫的。那就让我们还是继续延续这个名字,就叫 Emacs配置文件。

那么配置文件是我们定制和扩展Emacs最重要的地方,一般来说,最常用的配置文件是 .emacs 。当然也可以是别的文件,具体可以查阅 GNU Emacs Manual

然而随着使用的日久,日积月累,定制的设置越来越多, .emacs 变得越来越庞大,渐渐的就会增大到难以维护的地步。直到某日在 emacser.cn 看到王纯业的 组织 .emacs 的文件内容的技巧,将配置信息分成多个文件,维护的困难才稍稍得以缓解。但是即使是拆分以后,文件仍然会变得很大,而且还在不断增大,维护起来仍然压力很大。有没有好的解决办法呢? ahei 的DEA我还没有去仔细看过,毕竟他那个太大了,我的配置还没有大到那个地步。我希望的是简洁高效的解决办法。能够在我的配置文件里面只有我最关心的内容,不带一点多余的东西呢?

直到最近开始着手探索 Lisp,体会到 Lisp语言强大的描述能力和抽象能力,随即萌发了将众多的配置细节直接用写成简洁清晰的 list ,然后用 Lisp Code进行处理,这样就可以去掉配置文件里面那些无穷无尽的方法调用了。 走了这个路子之后,原来的“配置文件”就摇身一变,变成“配置程序”了。

1.1 .emacs

闲话不说了,开始捞干的吧。让我们先从最基本的 .emacs 开始。在这种方式下 .emacs 文件就非常简单了。它的核心部分一共只有两行。

1
2
3
(add-to-list 'load-path "~/Shell/config/emacs.el" "~/Shell/config/emacs.init")
 
(mapc 'load (directory-files "~/Shell/config/emacs.init" t "^[a-zA-Z0-9].*.el$"))

第一行通过 load-path 注册扩展文件的所在位置。第二行通过 mapcar 函数逐个装载 “~/Shell/config/emacs.init” 目录下的所有配置文件。就是这么简单。其余的内容多数都是 Emacs Customization 添加的代码。或者换句话说,现在的 .emacs 文件完全留给 Emacs用了。

其实在采用这种方式之前,我是不用什么 Customization 的。当然,不用的代价是显而易见的。问题在于在原来那种配置方式之下, .emacs 本身就已经够烦够乱了,如果 Emacs的 Customization 再往里面添乱,就更难维护和控制了。不过现在没事了。我自己使用的一共只有两行,剩下的所有地方随便它写吧。所以呢,我现在至少还用 Customization修改了一下 ansi-color,默认颜色里面的深蓝色的目录实在是太刺眼了。

1
2
3
4
5
6
7
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(ansi-color-faces-vector [default default default italic underline bold bold-italic modeline])
 '(ansi-color-names-vector ["black" "red" "PaleGreen" "yellow" "DodgerBlue1" "magenta" "cyan" "white"]))

另外,还有一个地方需要提到一下, 在 .emacs 里面我还保留了一段中文字体的设置。以前 emacser.com 里面有人发过字体设置的东西。但是由于 GNU Emacs 23以后基本都在 daemon方式下工作,如果直接使用原来那种方式设置中文字体的话,在 emacsclient中是无效的,所以要把它加到 make-frame 的hook里面。这样每次 emacsclient -c 生成的 frame就都是指定的中文字体了。 当然这下面这个函数还有一个缺陷,就是如果不是使用 daemon 方式的话…… 你懂得,鱼和熊掌,不可兼得。

1
2
3
4
5
6
7
(add-hook 'after-make-frame-functions
  (lambda(arg)
    (if  (>= (length (frame-list)) 1)
    (set-fontset-font  "fontset-startup" 'chinese-gbk (font-spec :family "文泉驿微米黑") nil 'prepend)
      )
    ) t
)

1.2 color-theme.el

那么我自己的配置信息写在哪些地方呢?让我们看看 “~/Shell/config/emacs.init“目录下的都有哪些文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2 : 2023 : 13:03:26 : ~/Shell/config/emacs.init 
dove@bash-4.1$ du -sh *.el
8.0K    calendar-setup.el
28K color-theme.el
28K dove-ext.el
4.0K    keybindings.el
8.0K    org-mode.el
8.0K    plugins.el
4.0K    settings.el
 
2 : 2024 : 13:03:35 : ~/Shell/config/emacs.init 
dove@bash-4.1$ du -sh .emacs
4.0K    .emacs
 
2 : 2025 : 13:04:07 : ~/Shell/config/emacs.init 
dove@bash-4.1$

就是这些地方了。每个文件的作用从文件名上就能清晰的看出来。只有这个”dove-ext.el“文件需要解释一下,这里存放的是我自己编写的所有扩展函数。

下面让我们逐个看一看这些文件的内容。”calendar-setup.el” 就不说了,这个文件基本上就是从网上搜来的,我自己也就是定义几个节日而已。

color-theme.el” 是主题设置文件。基本上就是 color-theme-gnome2 的翻版,我自己做了一些简单的修改。之所以把他存在一个单独的文件里面主要是因为 color-theme 实在是太长了,放在哪个文件里都会影响其他的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(eval-when-compile    (require 'color-theme))
 
(defun my-color-theme ()
  "Color theme created 2010-04-09."
;  (interactive)
  (color-theme-install
   '(my-color-theme
;     ((background-color . "#102C29")
     ((background-color . "darkslategrey")
;     (( background-color . "black")
      (background-mode . dark)
      (border-color . "black")
      (cursor-color . "LightGray")
;      ... ... ... ... theme 太长,中间省略了
     (woman-bold-face ((t (:bold t :weight bold))))
     (woman-italic-face ((t (:foreground "beige"))))
     (woman-unknown-face ((t (:foreground "LightSalmon"))))
     (zmacs-region ((t (:background "dark cyan" :foreground "cyan")))))))
 
(eval-when-compile (require 'color-theme))
(color-theme-initialize)
 
(add-hook 'after-make-frame-functions 
      (lambda (arg)
        ""
        (my-color-theme)) t)

另外我在加载 color-theme 的时候做了一个处理,把 my-color-theme 加到 after-make-frame-functions 这个 hook里面去,这样只有创建 frame的时候才会执行 my-color-theme 。 如果不是 X 环境,例如用 emacs -nw 的时候,就不要加载 my-color-theme 了。因为这个主题到了终端模式下,那个背景颜色根本没法看(汗一个)。虽然偶自己从来都是工作在 X 里面的。

这个问题在网上找到的有些解决办法是判断一下是不是 window-system ,这种办法到了 daemon模式下是会出错的。看来 Emacs 23 以后的 daemon 模式下的配置方法还是需要进一步深入研究的。什么东西都放到 after-make-frame-functions 这个地方毕竟也不是个事儿。

1.3 settings.el

下一个来看的是 settings.el。 settings 的任务其实很简单,就是设置全局变量。全局变量的设置就是 setq 嘛。这个事情简单的不能再简单了。但是无数的 setq 无论是写起来还是读起来都会让人很郁闷。还好,我们记得 setq 不但可以设置一个变量,它实际上可以处理一个 list 。嗨,既然说它可以,为什么还要让他闲着呢? 让我们动手吧,把所有的变量和值写在一个 list 里面,多余的 setq 通通都删掉吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(menu-bar-mode -1)
(tool-bar-mode -1)
(icomplete-mode 1)
(scroll-bar-mode -1)
;(ruler-mode -1)
 
(setq save-abbrevs t
      x-select-enable-clipboard               t
      ispell-dictionary                       "english"
      frame-title-format                      "%b %n %I"
      inhibit-startup-message                 t
      column-number-mode                      t
;         ... ... ... ... 内容太多,中间省略
      ido-toggle-regexp                       t
      dim:switch-window-relative              nil
      shell-file-name                         "/usr/bin/bash"
      default-major-mode                      'text-mode
)
 
;; Misc
(setq-default abbrev-mode                    t
          line-spacing                   4
)
 
(setenv "EMACSSHELL"                         shell-file-name)

1.4 keybindings.el

再接下来是 “keybindings.el” 。这个文件定义所有的按键绑定。通常我们定义 key binding 的时候都是使用 (global-set-key (kbd "C-c x) 'some-function) 问题是 global-set-key 没有像 setq 那么方便的 list 处理方式。怎么办? 那就写一个吧。还能怎么办呢? 这就是 set-key-bindings

1
2
3
4
5
6
7
(defun set-key-bindings (action bindingList)
  ""
  (mapcar (lambda(lst)
      ""
      (let ((x (car lst))
        (y (car (last lst))))
        (funcall action x y))) bindingList ))

这个 set-key-bindings 接收一个函数作为指令,告诉它需要做什么,然后再接收一个 list ,作为数据。然后通过 mapcar 遍历这个 list ,对其中的每一个元素执行接受到的指令。

这就是 Lisp语言非常精彩的地方。Lisp 不仅仅能够处理 list,更重要的是它能够像传递数据一样简单方便的传递指令(函数)。这个强大的特性使得我可以不必把 global-set-key 硬性的写在 set-key-bindings 里面。为什么要这样呢?还用说吗?如果我想要做 local-set-key 我会怎么做? 我不许要去修改 set-key-bindings ,我只需要把 local-set-key 作为指令传递给它就行了。换句话说我可以传递任何指令给它,告诉它做任何事,而不需要再做任何修改。在 Lisp的世界里,没有无聊的 case sth in something

扯远了,让我们还回到按键绑定上来。现在就可以把按键和功能写成一个简单的 list ,交给 set-key-bindings 去处理了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(set-key-bindings 'global-set-key   
 (list 
     '([f2]                            calendar)
     '([(shift f2)]                    remember)
     '([f5]                            revert-buffer)
     '([f10]                           rename-buffer)
     '([f11]                           query-replace)
     '([(shift f11)]                   query-replace-regexp)
;         ... ... ... ... 按键太多,中间省略
     ;; copy paste operations 
     (list (kbd "C-=")                 'set-mark-command)
     (list (kbd "C-c l")               'copy-line)
     (list (kbd "C-c w")               'copy-word)
     (list (kbd "C-S-k")               (lambda()  " " (interactive) (kill-visual-line -1)))
     (list (kbd "C-c s")               'thing-copy-string-to-mark)
     (list (kbd "C-c a")               'thing-copy-parenthesis-to-mark)
     (list (kbd "C-c p")               'copy-paragraph)
     (list (kbd "C-x a d")             'delete-region)
;         ... ... ... ... 按键太多,中间省略
     (list (kbd "C-c c")               '(lambda() " " (interactive) (if emaci-mode  (emaci-mode-off) (emaci-mode-on))))
     (list (kbd "M-DEL")
       (lambda(&optional arg) 
         "Act as the obsolete dove-backward-kill-word " 
         (interactive "P")
         (if arg 
         (let ((arg (- 0 arg))) (dove-forward-kill-word arg))
           (dove-forward-kill-word -1))))
 
))

1.5 plugins.el

plugins.el 的作用是引用各种网上下载的第三方扩展。简单来说就是成堆成堆的 (require 'something) 。由于 require 函数只需要一个参数,这意味着我们将只需要一个一维的 list ,这样会比 keybinding.el 的情况更简单一些。下面是 require-extensions 函数。

1
2
3
(defun require-extensions (action lst)
  ""
  (mapcar (lambda(ext) "" (funcall action ext)) lst))

有了这个函数,我们就可以进行非常简单的工作了——删掉 require ,换成 list

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(require-extensions 'require
 (list 
  'tabbar 
  'switch-window
  'thing-edit
  'second-sel
  'browse-kill-ring+
  'bbdb
  'gnuplot
  'muse-mode
  'ibuffer
  'w3m-load
  'rect-mark
  'ido
  'multi-term
  'lusty-explorer
  'oddmuse
  'emaci
  'move-text
  'uniquify
  'hide-region
))

至于每一个扩展的个别配置,就分别写在文件的后面了。

可以看到,我用的扩展并不多。因为每天工作当中基本就在 shell-modesh-modeorg-mode 这几个模式当中打转转。下班之后大概是用 emacs-lisp-mode

1.6 outline-minor-mode

在这里比较值得一提的还有一个 outline-minor-mode 的设置。这个模式实在是一个很有用的东西。甚至在 shell-mode 里面我都会打开它。但是针对每一个不同的 mode 设置各自的 outline-regexp , 对,我是想说是挺烦人的。也许你们要比我 nice,好让人羡慕啊。 好,言归正传,我选择写一个函数来搞定它。我叫它 set-outline-minor-mode-regexp 。 只是,这次,事情稍微有点复杂。

首先这个函数的环境比较特殊,所以相对来说就会比较复杂。因为他是用在 add-hook 函数当中的,这意味着我没有机会直接传递我要的数据给 set-outline-minor-mode-regexp 。我需要绕一下,用一个全局变量 outline-minor-mode-list 来存储数据,并且这次的数据会是一个二维的 list ,所以处理也会复杂一些。

1
2
3
4
5
6
(setq outline-minor-mode-list 
      (list '(emacs-lisp-mode "(defun")
        '(shell-mode ".*[bB]ash.*[#\$] ")
        '(sh-mode "function")
 
 ))

这里就是我说的这个函数,也许你们可以帮我把它写的更简单一些。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(defun set-outline-minor-mode-regexp ()
  ""
  (outline-minor-mode 1)
  (let ((regexp-list (append outline-minor-mode-list nil))
    (find-regexp
     (lambda (lst)
       ""
       (let ((innerList (car lst)))
         (if innerList
         (if (string= (car innerList) major-mode)
             (car (cdr innerList))
           (progn (pop lst)
              (funcall find-regexp lst))))
         ))))
         (make-local-variable 'outline-regexp)
         (setq outline-regexp (funcall find-regexp regexp-list)))
 
  (set-key-bindings 'local-set-key
            (list
             (list (kbd "C-c C-t") 'hide-body)
             (list (kbd "C-c C-a") 'show-all)
             (list (kbd "C-c C-e") 'show-entry)
;            (kbd "C-c C-d") 和 shell-mode 冲突,所以继续沿用 C-c @ C-d,不做自定义
             ))
)

然后针对每一个需要的模式添加 hook就行了。

1
2
3
 (add-hook 'shell-mode-hook 'set-outline-minor-mode-regexp t)
 (add-hook 'sh-mode-hook 'set-outline-minor-mode-regexp t)
 (add-hook 'emacs-lisp-mode-hook 'set-outline-minor-mode-regexp  t)

最后在 函数里面还要提到的一点是 (make-local-variable 'outline-regexp) 。我在这里显式的把 outline-regexp 作成 buffer local 了。如果不这样做的话, sh-mode 中的 outline-regexp 赋值会很诡异的覆盖掉 shell-mode 里面的值。虽然我还不太清楚为什么在别的 mode 里面就没有问题。灵异中……

1.7 org-mode.el

最后是 org-mode.el , 我不知道再提到这个文件是不是还有必要。因为这里在没有什么神奇的地方了。这里只是一些关于 org-mode 的一些设置, 还有……一些 skeleton 定义。因为基本上 org-mode 的默认设置就已经蛮好用了(我用的是 7.01h 版),所以现在这个文件内的内容基本上就是 skeleton 定义。只是因为他们还没有变得足够多,所以我还没有把它们分成一个单独的文件来管理。那么就说说 skeleton 吧。最近比较常用的 skeleton 主要是以下这些:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(define-skeleton iexp 
  "Input #+BEGIN_EXAMPLE #+END_EXAMPLE in org-mode"
""
"#+BEGIN_EXAMPLE\n"
 _ "\n" 
"#+END_EXAMPLE"
)
 
(define-skeleton isrc 
  "Input #+begin_src #+end_src in org-mode"
""
"#+begin_src lisp \n"
 _ "\n" 
"#+end_src"
)
 
(define-skeleton iprop 
  "Input :PROPERTIES: :END: in org-mode"
""
":PROPERTIES:\n"
 _ "\n" 
":END:"
)
 
(define-skeleton insert-emacser-code
  ""
  ""
  "#+BEGIN_HTML\n"
"<pre lang=\"lisp\" line=\"1\">\n"
 _"\n"
"

\n”
“#+END_HTML\n”
)

(define-abbrev org-mode-abbrev-table “iexp” “” ‘iexp)
(define-abbrev org-mode-abbrev-table “isrc” “” ‘isrc)
(define-abbrev org-mode-abbrev-table “iprop” “” ‘iprop)
(define-abbrev org-mode-abbrev-table “ihtml” “” ‘insert-emacser-code)

很容易看出来,有了这些东西以后,在写 org 文档的时候会很方便。并且,为了能够对已经存在的代码添加 #+BEGIN_EXAMPLE #+begin_src 等等定义,我还编写了几个扩展函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(defun i-babel-quote (beg end str1 str2)
  (goto-char end)
  (forward-line 1)
  (insert str2)
  (newline)
  (goto-char beg)
  (forward-line -1)
  (newline)
  (insert str1)
)
 
(defun iexp (St Ed)
  " "
  (interactive "r")
  (let ((beg St) (end Ed))
    (message "%s %s" beg end)
    (i-babel-quote beg end "#+BEGIN_EXAMPLE" "#+END_EXAMPLE")))
 
(defun isrc (St Ed)
  " "
  (interactive "r")
  (let ((beg St) (end Ed))
    (message "%s %s" beg end)
    (i-babel-quote beg end "#+begin_src " "#+end_src")))
(defun i= (St Ed)
  ""
  (interactive "r")
  (let ((beg St) (end Ed))
    (goto-char end)
    (insert "=")
    (goto-char beg)
    (insert "=")
    (goto-char (+ end 2)))
)

最后呢,我把一些 Shell当中比较常用的命令也定义成了 skeleton 。之所以不在 Shell profile 当中定义它,一方面是因为在我的工作中每天都要接触到大量的 Unix/Linux机器,放在 Emacs 里面的话呢,所有的命令都只需要定义一次,就可以在任意一个机器上使用。另外一方面呢,就是 skeleton,包括 abbrev 都是 Emacs 内部的东西,也就是说他们只会把定义的命令扩展开来,而并不会直接的去执行他,只有当我看到扩展结果并且按下回车,comint.el才会把相应的命令转交给 shell process 去执行,这在很多时候要比 shell 本身的 alias 和 function 机制安全的多的多。以下是一些示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(define-skeleton kill-multiple-proces
  "Build killing multiple process command list"
  ""
  "ps -ef | grep -i " _ " | awk '{ print \"kill -9 \" $2 }'"
)
 
(define-abbrev shell-mode-abbrev-table "killps" "" 'kill-multiple-proces)
 
(define-skeleton gunzip-tar
  "unzip .tar.gz package in where -z is not available"
  ""
  "gunzip -cd " _ " | tar -xf - "
)
 
(define-skeleton def_listener 
  "Define a listener in a WMQ QMgr"
  ""
  "DEF LISTENER(LST) TRPTYPE(TCP) PORT(" _ ") CONTROL(QMGR)\n"
)
 
(define-abbrev shell-mode-abbrev-table "deflst" "" 'def_listener)
 
(define-skeleton def_clusrcvr
  "Define a Cluster Receiver Channel in a WMQ QMgr"
  ""
  "DEF CHL(TO.QMCOD.4.FTECA) CHLTYPE(CLUSRCVR) CONNAME('" _ "') CLUSTER(FTECA)\n"
)
 
(define-abbrev shell-mode-abbrev-table "defclusrcvr" "" 'def_clusrcvr)

对于很多更简单的命令,直接就定义在 abbrev 里面了。

1.8 dove-ext.el

最后的最后,是 dove-ext.el 。这个文件的内容都是我自己编写的各种扩展函数。包括上面提到的部分和更多还没有被提到的。 你可以到 EmacsWiki 上去浏览这些函数。

分享家:Addthis中国
GD Star Rating
loading...
我的 GNU Emacs 配置"程序", 8.6 out of 10 based on 23 ratings 该日志未加标签。
分类: 初级, 配置
  1. 2016年1月18日21:18 | #1

    Attractive section of content. I just stumbled upon your site and in accession capital to assert that I acquire in fact enjoyed account your blog posts. Any way I’ll be subscribing to your feeds and even I achievement you access consistently rapidly.

    [回复]

  2. 2016年4月7日18:59 | #2

    The entire project should be complete by Friday, April 15. [url=http://www.louisvuitton-outlet.us.org]louis vuitton handbags[/url] The Illini finished 57, 26 in the Big Ten last season. n [url=http://www.coachoutlet.cc]coach outlet[/url]
    MARINERS-PADRES [url=http://www.cheapmichaelkorsbags.us.com]cheap michael kors bags[/url] Oracle Road from Roseville Tucson LLC.
    Music Director Kevin Rhodes, beginning his 15th season on the SSO podium, opened the concert with a boisterous gallop through Dvorak’s rollicking “Carnival Overture,” firing up audience and orchestra in equal measure. [url=http://www.coachhandbags.net.co]http://www.coachhandbags.net.co[/url] “In June, Disneyland California Adventure is opening Cars Land, replicating the town of Radiator Springs from the movies, including a race-course ride and two other new little-kid-friendly attractions. z [url=http://www.louisvuittonhandbagsbuy.us.com]cheap louis vuitton bags[/url]
    Whatcha drinking? Chocolate milkshake from Page and PaletteTell the world why Mobile has the greatest Mardi Gras: “It’s such a family friendly event. [url=http://www.cheapmichaelkorsbags.us.com]www.cheapmichaelkorsbags.us.com[/url] Also new this season will be Tony Award-winning actress andsinger Betty Buckley doing a night of “Broadway by Request” (March2011), and saxophonist and clarinetist Paquito D’Rivera headlining”La Gran Fiesta: A Celebration of Hispanic Heritage and Culture”(November).
    v The UConn Huskies defeated the Tulane Green Wave 7-3 in the sloppy, rain-soaked game between the University of Connecticut and Tulane University at Yulman Stadium on Saturday, November 7, 2015. [url=http://www.coachhandbags.me]http://www.coachhandbags.me[/url] That would be a wonderful use of her talents. [url=http://www.michaelkors.us.org]www.michaelkors.us.org[/url]
    Before heading back to the room, I did a bulk interview with several students from Messiah College that had made the wise investment to travel to Nashville for the experience of the Baseball Winter Meetings. [url=http://www.michaelkorshandbags.us.org]michael kors handbags[/url] OTHER LOCAL SIGNEES Maddie Pothoff, tennis, Alabama. http://www.coachstoresonline.com
    Maybe it’s all three, as is the case of a 1929 Mediterranean that’s set back from a sweet, curving piece of North Willamette Boulevard. [url=http://www.coachoutletstores.net.co]coach outlet[/url] “Over the course of 82 games, anything’s liable to happen,” Curry said. y [url=http://www.louisvuittonbagsbuy.us.com]louis vuitton bags[/url]
    The Senate dusted off and voted on a previously House-approved spending measure and sent it to Wolf. [url=http://www.cheapjordanshoes.us.org]cheap jordan shoes[/url] This will enable you to hit the ball “uphill” enough.
    In addition to sending the books to local organizations focused on children, Poole has also sent them to prestigious households such as the White House and Buckingham Palace. [url=http://www.coachoutletstoreonline.me]coach outlet[/url] eacc.
    Blood is almost currency for The Revenant,?at least considering how much of it is spilled. [url=http://o.westboroughpolice.com]cheap oakleys[/url] In 2014, the median age of all residents was 31.
    Brnovich and Rotellini battled back and forth as to whether or not the executive order would have an effect on immigration, if it offered amnesty to immigrants and if Rotellini supported the order or not. [url=http://www.coachhandbags.me]coach outlet store[/url] After Arkansas’ men’s and women’s track and field teams swept championships at the SEC Indoor meet, individual awards piled up for them on Monday.
    l “We are honored to receive this award and look forward to remaining dedicated to the people at the heart of our operations. 锘縖url=http://www.michaelkors.us.org]michael kors outlet[/url] com and ABC15 Mobile for updates.
    Another account claims it originated in 1208 at the Battle of Fellin and not the 1219 Battle of Lyndanisse. [url=http://www.coachoutletstoreonline.me]coach outlet store online[/url] There is nothing cozy about the corner of 4th and San Benito. x [url=http://www.cheapchinajerseysnfl.us.org]wholesale nfl jerseys[/url]
    “I did not send or receive any emails marked classified at the time,” says Clinton. [url=http://www.coachoutletstores.net.co]http://www.coachoutletstores.net.co[/url] Alan Brown, general manager of Hendrick Volkswagen in Frisco, Texas who is president of the National Volkswagen Dealer Advisory Council, praised Horn’s tenure at VW and said he had talked to Horn over the last three days about his departure.
    u Eric Lundberg, Caitlyn R. Lundberg and Caitlyn R. Sheehan to Jacqueline E. Mackechnie, 91 Longfellow Drive, $324,000. [url=http://www.michaelkorshandbagstrade.us.com]www.michaelkorshandbagstrade.us.com[/url] Brady, who said in November that this would be his last, ends his eightyear tenure in Jonesboro at 121129 overall and with losing records in each of his last two seasons. h
    Copyright 2016 KHOU via CBS. [url=http://www.coachstoresonline.com]coach outlet store online[/url] We need volunteers to guide authors, transport authors to event, monitor the event, and help with cleanup. [url=http://www.michaelkors.us.org]www.michaelkors.us.org[/url]
    Below are the Bruins’ lines and defensive pairs against Montreal: [url=http://www.coachoutletstoreonline.me]http://www.coachoutletstoreonline.me[/url] With no big U. f [url=http://www.louisvuitton-outlet.us.org]louis vuitton outlet[/url]
    SOURCE Assisi Animal Health [url=http://www.raybansunglassesbuy.co.uk]ray ban outlet[/url] “After she committed to us, she improved leaps and bounds,” Cal coach Lindsay Gottlieb said.
    The Boston Celtics fell to the Brooklyn Nets 111-101 on Monday. After putting together a lackadaisical first half, the Celtics playedwell in the second, but they couldn’t rally all the way back to claim an important come-from-behind win. [url=http://www.michaelkorsbags.me]http://www.michaelkorsbags.me[/url] Strong market gains in India will be driven by ongoing expansion in the country s manufacturing sector, including in the ceramics, glass, machinery, and metal casting industries. c [url=http://www.michaelkorsoutletbuy.us.com]michael kors outlet online[/url]
    Benecon, Lancaster County [url=http://www.louisvuittonhandbags.us.org]louis vuitton outlet[/url] He was bothered Sunday by defensive lapses in a 7-4 loss to the Oakland Athletics in 11 innings.

    [回复]

  3. 2016年5月23日21:02 | #3

    Sweet internet site, super pattern, very clean and utilize friendly .

    [回复]

  4. 2016年8月31日10:49 | #4
评论分页
1 2 41709
  1. 2010年11月1日15:13 | #1
  2. 2011年11月6日17:06 | #2
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: