zoukankan      html  css  js  c++  java
  • 我的Emacs配置文件 - DEA

    DEA是Dot Emacs of Ahei的简写。由于我的emacs配置文件比较大,我把它放到google code上去了,详情请见:DEA。我会不定期发布release版本,不过你大可放心使用trunk版本,我更新的很及时,遇到bug正好告诉我,:)。其他文章中的配置均来之与此。

    1 兼容性

    DEA兼容:

    • 部分兼容Emacs 21(以前兼容,我现在不使用Emacs 21了,所以可能有不兼容的情况)
    • Emacs 22, 23.1, 23.2
    • Emacs linux版本(我在Ubuntu下使用Emacs)
    • Emacs windows版本
    • Emacs GUI版本
    • Emacs字符模式版本

    2 安装

    • linux
      ?View Code BASH
       
      1
      2
      3
      4
      
      apt-get install gnuserv # (emacs 21及其以下版本需要安装)
      svn checkout http://dea.googlecode.com/svn/trunk/ dea-read-only # (或者下载Downloads页面的release,不过不是最新的)
      cd dea-read-only
      ./install

      安装的时候, 会先根据.emacs文件生成一个.emacs.changed文件,因为.emacs文件中会用到一些与.emacs文件所在文件夹相关的变量,然后在HOME目录建立一个.emacs.changed的软链接(ln -sf CURDIR/.emacs.changed ~/.emacs), 如果HOME目录下已经存在.emacs文件, install.sh会把它备份到~/.emacs.CURRENTDATETIME. 所以, 如果你更新的时候是用svn up更新的话,还要执行一下 $ install.emacs.sh, 重新生成HOME下的.emacs.另外install.sh还会解压lisps目录下的压缩包.

    • windows
      windows用户请使用cygwin执行上述安装命令, 或者设置好了HOME目录后,把DEA放到HOME后下,并且重命名为emacs,把lisps目录下的tar包都解压,然后新建一个emacs.bat,输入以下内容:
      fullpath-of-runemacs.exe -q -l ~/emacs/.emacs
      

      以后启动Emacs执行emacs.bat即可。

    3 更新

    ?View Code BASH
     
    1
    2
    
    cd dea-read-only
    ./update.sh

    windows下直接用svn客户端更新即可。

    4 修改

    当~/my.emacs文件存在时, DEA会加载它. 所以如果想增加自己的配置, 直接编辑~/my.emacs即可. 万一需要修改.emacs的话, 修改完.emacs后需要运行 $ ./install.emacs.sh, 或者退出emacs的时候,会自动运行$ ./install.emacs.sh

    5 目录结构

    • lisps 主要存放一些非Emacs内置的Elisp包
    • my-lisps 我自己写的Elisp包和其他Elisp包的配置(下面只列出一些重要的配置)
      • coding-settings 编码设置
      • dev-settings 所有关于开发方面的配置, 程序员必备
        • c-settings c/c++开发的配置, c程序员注意啦
        • ruby-settings
        • cedet-settings
        • ecb-settings
        • all-auto-complete-settings 所有关于补全方面的配置, 补全控注意啦
        • svn-settings svn配置

    6 DEA体积

    ?View Code BASH
     
    1
    2
    3
    4
    5
    6
    7
    8
    
    ahei@ahei-ubuntu:~/DEA$ du -sh
    53M .
    ahei@ahei-ubuntu:~/DEA$ du -sh my-lisps/
    1016K   my-lisps/
    ahei@ahei-ubuntu:~/DEA/my-lisps$ find -type f | wc -l
    185
    ahei@ahei-ubuntu:~/DEA/my-lisps$ find -type f | xargs wc -l | tail -1
     13951 total

    7 注意

    • 不建议初学者直接使用DEA,初学者请看这里, DEA的主要目的是提供给Emacser们一个非常全的配置例子, 每个人可以从中获取一些东西. 直接拿DEA作为自己的配置是不太适合的, 因为里面毕竟有很多我个人的配置, 也许不适合你.
    • 不要用apt-get安装cedet, DEA里面已自带cedet的cvs版.
    • 其他问题请看DEA的FAQs

    8 Emacs默认快捷键修改

    由于一些Emacs默认的快捷键个人觉得不是很方便,做了一些修改,主要是:

    • C-h 

      Emacs中默认的C-h是帮助快捷键的prefix,我把它绑定到了删除前面一个字符,这样删除字符就非常方便了。
    • DEA中查看文档的快捷键如下:
      • 查看变量和函数的文档

        C-x C-/
      • 查看某个快捷键对应的命令

        C-x C-k
      • 查看某个命令对应的快捷键

        C-x / w
      • 查看当前buffer中以某个快捷键序列开头的快捷键列表

        <待查看的快捷键序列> C-x /,比如你想查看当前buffer中所有以C-c开头的快捷键列表,按C-c C-x /就可以了。
      • 查看函数和变量的代码

        C-x C-d
    • C-k

      Emacs默认的是删除光标当行尾,我改成了删除整行
    • C-w

      Emacs默认的是剪切region,即使mark没有激活, 我改了后,mark没有激活的话,就向后删除一个单词,激活则剪切region
    • M-w

      Emacs默认的是拷贝region,即使mark没有激活, 我改了后,mark没有激活的话,就复制本行,激活的话则拷贝region
    • C-x C-s绑定到了save-buffer-sb

    9 非常方便的编辑功能

    • M-w smart-copy region状态下,拷贝region,否则拷贝当前行, 还可以拷贝矩阵region
    • C-k 删除一行 

      M-K 删除当前光标到行尾
    • C-w 在region状态下, 剪切当前region, 否则向后删除一个单词, 非常之方便
    • C-x M-w 复制一行并粘贴到下一行 

      M-W 复制region并粘贴到下面 

      C-x M-W 复制一个sexp并粘贴到下面 

      相信很多程序员都有拷贝现成代码并复制下来,然后经过小的修改(当然这种方法不是一个好的方法), 这时候这个命令就显的非常有用了
    • C-x w 复制一个sexp 

      C-x W 删除一个sexp 

      M-D 删除当前光标所处的单词 

      C-x S 选择一个sexp

    我配置后的emacs截图在这里(有些截图是别的作者和网友的,请读者自行分辨, :) )。

    下面是我的.emacs文件, .emacs文件用到的其他文件在这里

    ?View Code LISP
     
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    
    ;; -*- Emacs-Lisp -*-
     
    ;; Time-stamp: <2010-10-18 10:04:12 Monday by taoshanwen>
     
    (defconst my-emacs-path           "~/emacs/" "我的emacs相关配置文件的路径")
    (defconst my-emacs-my-lisps-path  (concat my-emacs-path "my-lisps/") "我自己写的emacs lisp包的路径")
    (defconst my-emacs-lisps-path     (concat my-emacs-path "lisps/") "我下载的emacs lisp包的路径")
    (defconst my-emacs-templates-path (concat my-emacs-path "templates/") "Path for templates")
     
    ;; 把`my-emacs-lisps-path'的所有子目录都加到`load-path'里面
    (load (concat my-emacs-my-lisps-path "my-subdirs"))
    (my-add-subdirs-to-load-path my-emacs-lisps-path)
    (my-add-subdirs-to-load-path my-emacs-my-lisps-path)
     
    ;; 一些基本的小函数
    (require 'ahei-misc)
     
    ;; 利用`eval-after-load'加快启动速度的库
    ;; 用eval-after-load避免不必要的elisp包的加载
    ;; http://emacser.com/eval-after-load.htm
    (require 'eval-after-load)
     
    (require 'util)
     
    ;; 一些Emacs的小设置
    (require 'misc-settings)
     
    ;; 编码设置
    (require 'coding-settings)
     
    ;; CUA的矩阵区域操作特别方便
    (require 'cua-settings)
     
    ;; 矩形区域操作
    (require 'rect-mark-settings)
     
    ;; 鼠标配置
    (require 'mouse-settings)
     
    ;; 关于mark的一些设置,使你非常方便的选择region
    (require 'mark-settings)
     
    ;; `mode-line'显示格式
    (require 'mode-line-settings)
     
    ;; ffap,打开当前point的文件
    (require 'ffap-settings)
     
    ;; 各种语言开发方面的设置
    (require 'dev-settings)
     
    ;; 不要menu-bar和tool-bar
    ;; (unless window-system
    ;;   (menu-bar-mode -1))
    (menu-bar-mode -1)
    ;; GUI下显示toolbar的话select-buffer会出问题
    (if (fboundp 'tool-bar-mode)
        (tool-bar-mode -1))
     
    ;; 打开压缩文件时自动解压缩
    ;; 必须放在session前面
    (auto-compression-mode 1)
     
    ;; 所有关于buffer方面的配置
    (require 'all-buffer-settings)
     
    ;; frame-cmds.el必须放在multi-term前面,否则ediff退出时会出现错误
    ;; 而icicles soft-requires frame-cmds.el, 所以icicles也必须放在multi-term前面
    ;; emacs22下也必须放在kde-emacs前面, 否则会说shell-command是void-function
    ;; http://emacser.com/icicles-doremi-palette.htm
    (require 'icicles-settings)
    (require 'doremi-settings)
    (require 'palette-settings)
     
    ;; edit-settings中对M-w重新定义,但是kde-emacs中也对其定义了
    ;; 所以必须要放在kde-emacs后面
    (require 'edit-settings)
     
    ;; 用M-x执行某个命令的时候,在输入的同时给出可选的命令名提示
    (require 'icomplete-settings)
     
    ;; minibuffer中输入部分命令就可以使用补全
    (unless is-after-emacs-23
      (partial-completion-mode 1))
     
    ;; 图片mode
    (require 'image-mode-settings)
     
    ;; 用一个很大的kill ring. 这样防止我不小心删掉重要的东西
    (setq kill-ring-max 200)
     
    ;; 方便的在kill-ring里寻找需要的东西
    (require 'browse-kill-ring-settings)
     
    ;; 显示行号
    (require 'linum-settings)
     
    ;; color theme Emacs主题
    (require 'color-theme-settings)
     
    (require 'ahei-face)
    (require 'color-theme-ahei)
    (require 'face-settings)
     
    ;; 高亮当前行
    (require 'hl-line-settings)
     
    ;; 字体配置
    (require 'font-settings)
     
    ;; diff
    (require 'diff-settings)
     
    ;; Emacs的diff: ediff
    (require 'ediff-settings)
     
    ;; 最近打开的文件
    (require 'recentf-settings)
     
    ;; 在buffer中方便的查找字符串: color-moccur
    (require 'moccur-settings)
     
    ;; Emacs超强的增量搜索Isearch配置
    (require 'isearch-settings)
     
    ;; 非常酷的一个扩展。可以“所见即所得”的编辑一个文本模式的表格
    (if is-before-emacs-21 (require 'table "table-for-21"))
     
    ;; 把文件或buffer彩色输出成html
    (require 'htmlize)
     
    ;; time-stamp, 在文件头记录修改时间, 并动态更新
    (require 'time-stamp-settings)
     
    ;; Emacs可以做为一个server, 然后用emacsclient连接这个server,
    ;; 无需再打开两个Emacs
    (require 'emacs-server-settings)
     
    (require 'apropos-settings)
    (require 'completion-list-mode-settings)
     
    ;; 显示ascii表
    (require 'ascii)
     
    ;; 所有关于查看帮助方面的配置
    (require 'all-help-settings)
     
    ;; 定义一些emacs 21没有的函数
    (if is-before-emacs-21 (require 'for-emacs-21))
     
    ;; 简写模式
    (setq-default abbrev-mode t)
    (setq save-abbrevs nil)
     
    ;; 可以为重名的buffer在前面加上其父目录的名字来让buffer的名字区分开来,而不是单纯的加一个没有太多意义的序号
    (require 'uniquify)
    (setq uniquify-buffer-name-style 'forward)
     
    ;; 以目录形式显示linkd文档
    (require 'linkd-settings)
     
    ;; Emacs的超强文件管理器
    (require 'dired-settings)
     
    ;; 方便的切换major mode
    (defvar switch-major-mode-last-mode nil)
     
    (defun major-mode-heuristic (symbol)
      (and (fboundp symbol)
           (string-match ".*-mode$" (symbol-name symbol))))
     
    (defun switch-major-mode (mode)
      "切换major mode"
      (interactive
       (let ((fn switch-major-mode-last-mode) val)
         (setq val
               (completing-read
                (if fn (format "切换major-mode为(缺省为%s): " fn) "切换major mode为: ")
                obarray 'major-mode-heuristic t nil nil (symbol-name fn)))
         (list (intern val))))
      (let ((last-mode major-mode))
        (funcall mode)
        (setq switch-major-mode-last-mode last-mode)))
    (global-set-key (kbd "C-x q") 'switch-major-mode)
     
    (defun get-mode-name ()
      "显示`major-mode'及`mode-name'"
      (interactive)
      (message "major-mode为%s, mode-name为%s" major-mode mode-name))
    (global-set-key (kbd "C-x m") 'get-mode-name)
     
    ;; 查看Emacs内进程
    (autoload 'list-processes+ "list-processes+" "增强的`list-processes'命令" t)
     
    (require 'view-mode-settings)
     
    (defun revert-buffer-no-confirm ()
      "执行`revert-buffer'时不需要确认"
      (interactive)
      (when (buffer-file-name)
        (let ((emaci emaci-mode))
          (revert-buffer buffer-file-name t)
          (emaci-mode (if emaci 1 -1)))))
    (eal-define-keys-commonly
     global-map
     `(("C-x u"   revert-buffer-no-confirm)
       ("C-x M-K" revert-buffer-with-gbk)
       ("C-x U"   revert-buffer-with-coding-system-no-confirm-sb)))
     
    (defun count-brf-lines (&optional is-fun)
      "显示当前buffer或region或函数的行数和字符数"
      (interactive "P")
      (let (min max)
        (if is-fun
            (save-excursion
              (beginning-of-defun) (setq min (point))
              (end-of-defun) (setq max (point))
              (message "当前函数%s内共有%d行, %d个字符" (which-function) (count-lines min max) (- max min)))
          (if mark-active
              (progn
                (setq min (min (point) (mark)))
                (setq max (max (point) (mark))))
            (setq min (point-min))
            (setq max (point-max)))
          (if (or (= 1 (point-min)) mark-active)
              (if mark-active
                  (message "当前region内共有%d行, %d个字符" (count-lines min max) (- max min))
                (message "当前buffer内共有%d行, %d个字符" (count-lines min max) (- max min)))
            (let ((nmin min) (nmax max))
              (save-excursion
                (save-restriction
                  (widen)
                  (setq min (point-min))
                  (setq max (point-max))))
              (message "narrow下buffer内共有%d行, %d个字符, 非narrow下buffer内共有%d行, %d个字符"
                       (count-lines nmin nmax) (- nmax nmin) (count-lines min max) (- max min)))))))
    (eal-define-keys-commonly
     global-map
     `(("C-x l" count-brf-lines)
       ("C-x L" (lambda () (interactive) (count-brf-lines t)))))
     
    ;; 增加更丰富的高亮
    (require 'generic-x)
     
    (defun switch-to-scratch ()
      "切换到*scratch*"
      (interactive)
      (let ((buffer (get-buffer-create "*scratch*")))
        (switch-to-buffer buffer)
        (unless (equal major-mode 'lisp-interaction-mode)
          (lisp-interaction-mode))))
    (global-set-key (kbd "C-x s") 'switch-to-scratch)
     
    (defun visit-.emacs ()
      "访问.emacs文件"
      (interactive)
      (find-file (concat my-emacs-path ".emacs")))
    (global-set-key (kbd "C-x E") 'visit-.emacs)
     
    ;; grep
    (require 'grep-settings)
     
    ;; ack-grep, grep纯perl的代替品
    (require 'full-ack-settings)
     
    (eal-define-keys-commonly
     global-map
     `(("M-r"     query-replace-sb)
       ("M-%"     query-replace-sb)
       ("ESC M-%" query-replace-regexp-sb)
       ("ESC M-r" query-replace-regexp-sb)
       ("C-x M-r" query-replace-regexp-sb)
       ("M-z"     zap-to-char-sb)
       ("C-j"     goto-line)
       ("C-x C-s" save-buffer-sb)))
     
    (am-add-hooks
     `(find-file-hook)
     (lambda ()
       (local-set-key (kbd "C-M-j") 'goto-line)))
     
    ;; 返回到最近去过的地方
    (require 'recent-jump-settings)
     
    ;; 统计命令使用频率
    (require 'command-frequence)
     
    ;; Emacs中的文本浏览器w3m
    ;; http://emacser.com/w3m.htm
    (require 'w3m-settings)
     
    ;; 以另一用户编辑文件, 或者编辑远程主机文件
    (require 'tramp-settings)
     
    ;; erc: Emacs中的IRC
    ;; ERC使用简介 emacser.com/erc.htm
    (require 'erc-settings)
     
    ;; spell check
    (setq-default ispell-program-name "aspell")
     
    (define-key global-map (kbd "C-q") 'quoted-insert-sb)
     
    ;; Emacs中的包管理器
    (require 'package)
    (package-initialize)
     
    (require 'auto-install)
    (setq auto-install-directory (concat my-emacs-lisps-path "auto-install"))
     
    (unless mswin
      (defun install-.emacs ()
        (interactive)
        (shell-command (concat my-emacs-path "install.emacs.sh")))
     
      (add-hook 'kill-emacs-hook 'install-.emacs))
     
    ;; 把pdf,ps,dvi文件转换为png格式, 在Emacs里面浏览
    (if is-after-emacs-23
      (require 'doc-view)
      (setq doc-view-conversion-refresh-interval 3))
     
    ;; 在Emacs里面使用shell
    (require 'term-settings)
    (require 'multi-term-settings)
     
    ;; (require 'anything-settings)
     
    (require 'ioccur)
     
    ;; 查询天气预报
    (require 'weather-settings)
     
    ;; 可以把光标由方块变成一个小长条
    (require 'bar-cursor)
     
    (defun goto-my-emacs-lisps-dir ()
      "Goto `my-emacs-lisps-path'."
      (interactive)
      (dired my-emacs-lisps-path))
    (defun goto-my-emacs-my-lisps-dir ()
      "Goto `my-emacs-my-lisps-path'."
      (interactive)
      (dired my-emacs-my-lisps-path))
    (defun goto-my-emacs-dir ()
      "Goto `my-emacs-path'."
      (interactive)
      (dired my-emacs-path))
    (defun goto-my-home-dir ()
      "Goto my home directory."
      (interactive)
      (dired "~"))
    (define-key-list
     global-map
     `(("C-x G l" goto-my-emacs-lisps-dir)
       ("C-x G m" goto-my-emacs-my-lisps-dir)
       ("C-x G e" goto-my-emacs-dir)
       ("C-x M-H" goto-my-home-dir)))
     
    (define-key global-map (kbd "C-x M-c") 'describe-char)
     
    ;; 启动Emacs的时候最大化Emacs
    (require 'maxframe-settings)
     
    (defun dos2unix ()
      "dos2unix on current buffer."
      (interactive)
      (set-buffer-file-coding-system 'unix))
     
    (defun unix2dos ()
      "unix2dos on current buffer."
      (interactive)
      (set-buffer-file-coding-system 'dos))
     
    (define-key global-map (kbd "C-x M-D") 'dos2unix)
     
    (define-key-list
     global-map
     `(("C-x M-k" Info-goto-emacs-key-command-node)
       ("C-x ESC ESC" repeat-complex-command-sb)))
     
    ;; Emacs才是世界上最强大的IDE - 智能的改变光标形状
    ;; http://emacser.com/cursor-change.htm
    (require 'cursor-change)
    (cursor-change-mode 1)
     
    (defun copy-file-name (&optional full)
      "Copy file name of current-buffer.
    If FULL is t, copy full file name."
      (interactive "P")
      (let ((file (buffer-name)))
        (if full
            (setq file (expand-file-name file)))
        (kill-new file)
        (message "File `%s' copied." file)))
    (eal-define-keys
     `(emacs-lisp-mode-map lisp-interaction-mode-map java-mode-map sh-mode-map
                           c-mode-base-map text-mode-map ruby-mode-map html-mode-map
                           java-mode-map conf-javaprop-mode-map conf-space-mode-map
                           python-mode-map)
     `(("C-c M-C" copy-file-name)))
     
    ;; notification tool
    (require 'todochiku-settings)
     
    ;; twitter client
    (require 'eagle-settings)
    (require 'twit-settings)
     
    ;; 模拟vi的点(.)命令
    (require 'dot-mode)
     
    ;; 用渐变颜色显示你最近的修改
    ;; http://emacser.com/highlight-tail.htm
    ;; 与semantic冲突,启动了它后,打开大文件的时候,会发现buffer大范围的刷屏
    ;; (require 'highlight-tail-settings)
     
    ;; Emacs才是世界上最强大的IDE - 用Emaci阅读文件
    ;; http://emacser.com/emaci.htm
    (require 'emaci-settings)
     
    ;;;###autoload
    (defun update-current-file-autoloads (file &optional save-after)
      "`update-file-autoloads' for current file."
      (interactive "fUpdate autoloads for file: \np")
      (let* ((load-file (expand-file-name "loaddefs.el"))
             (generated-autoload-file load-file))
        (unless (file-exists-p load-file)
          (shell-command (concat "touch " load-file)))
        (update-file-autoloads file save-after)))
     
    ;; 大纲mode
    (require 'outline-settings)
     
    ;; org是一个非常强大的GTD工具
    (require 'org-settings)
     
    ;; 强大的发布工具
    (require 'muse-settings)
     
    ;; 用weblogger写WordPress博客
    ;; http://emacser.com/weblogger.htm
    (require 'weblogger-settings)
     
    ;; 非常强大的文本画图的工具
    (require 'artist-settings)
     
    ;; google-maps-el – Emacs中的谷歌地图
    ;; http://emacser.com/emacs-google-map.htm
    (require 'google-maps-settings)
     
    ;; session,可以保存很多东西,例如输入历史(像搜索、打开文件等的输入)、
    ;; register的内容、buffer的local variables以及kill-ring和最近修改的文件列表等。非常有用。
    (require 'session-settings)
     
    ;; 王纯业的desktop, 比desktop快多了
    (require 'wcy-desktop-settings)
     
    ;; HACK: 要放在最后,免得会出现比较奇怪的现象
    ;; 保存和恢复工作环境
    ;; desktop,用来保存Emacs的桌面环境 — buffers、以及buffer的文件名、major modes和位置等等
    ;; (require 'desktop-settings)
     
    (sb-update)
  • 相关阅读:
    Android深度探索读书笔记 第四章
    Android深度探索读书笔记 第三章
    Android深度探索读书笔记 第二章
    Android深度探索第九章
    Android深度探索第十章
    Android深度探索第八章
    第六章
    第七章
    第五章
    第四章
  • 原文地址:https://www.cnblogs.com/babe/p/2441593.html
Copyright © 2011-2022 走看看