盈盈一书屋 / Linux / 让Emacs功能强于source Insight

0 0

   

让Emacs功能强于source Insight

2012-05-31  盈盈一书屋

单独的Emacs软件的话,虽然也有着除了编辑以外的各种各样的功能,例如Mail,网页浏览等等,但是,仅对于我个人我还是觉得他就是个文本编辑器,因为别的功能我不用,也用不上。而且这个编辑器使用时还非常的费劲,觉不出他比微软的记事本强在哪里。

但是,Emacs支持配置其工作环境,当结合了一些插件后,他就发挥出强大的功能了。
这个强大的功能 = SourceInsight+专用仿真Debug软件之和。
还有就是,他是免费的,FreeDownload的,可自定义的。
微软在努力让我们告别键盘,Linux则建议大家没事别老碰鼠标。
Emacs + gtags + cedet + ecb + doxymas + session + GDB
Emacs:GNU Emacs
gtags:GNU GLOBAL source code tag system
cedet:Collection of Emacs Development Environment Tools
ecb:Emacs Code Browser
doxymacs:Doxygen + Emacs
Doxygen:Source code documentation generator tool
session:Session Management for Emacs
GDB:GNU Project debugger

个人环境:VMware7.0.0 + (Fedora7+Ubuntu9.10)
Fedora7:现在fedora的最高发行版是Fedora12,所以用7的话,如果yum在线安装,包的版本可能较低。
Ubuntu9.10:现在的最新版,apt在线安装的话,包版本较新。
较新不是最新,想最新的话,去各自官网现在src安装吧。

目标源代码:C语言
如果没有现成的代码就下个kernel或gcc或glib的源代码吧。
但是建议写个hello来试运行,因为前者的源代码都太大了,gtags建立tags或htags创建HTML模式源代码和doxygen生成文档等的时候,花费时间极长。
同时也写好hello的configure.ac和Makefile.am吧,能够编译后执行,以便体验功能。



Emacs:GNU Emacs (Ver:23.1)
Emacs:Editor MACroS(宏编辑器)
HomePage:http://www.gnu.org/software/emacs/
功能和热键的学习:

  • http://man.ddvip.com/soft/emacsuserguide/index.html
  • http://www.gnu.org/software/chinese/manual/TUTORIAL.cn
  • 《学习GNU Emacs》(68元)/《GNU Emacs Lisp 编程入门》(38元)
    网上有中文扫描版和英文版的下载,忘了在哪里下的了,搜搜吧。
    扫描版不清晰,例代码根本看不清,建议购入原书。
  • http://man.chinaunix.net/newsoft/Emac/book.html

下载安装:参考上记Homepage。
http://ftp.gnu.org/gnu/emacs/

重点:
 记住个别编辑工作中常用Hotkey。
 知道.emacs文件和<load-path>设置的作用和用法。
 知道LISP语言。(但是不一定要掌握这种语言,抄抄网络上大侠的就行,同时也希望更多的人加入到Lisp行列中)

简单说明:

  • .emacs文件:是Emacs启动时,自动读取用户自定义配置的默认的配置文件
    (手动创建该文件,自定义配置都写在该文件中,LISP语言,"/home/yourname/"路径下)
  • shell命令启动Emacs时,如果用'emacs -q'命令,则不加载任何额外的自定义设置启动Emacs.
  • <load-path>:由'.emacs'文件中编写的相应的自定义配置,调用的关联**.el文件的存放路径。
    (在.emacs中记入该路径时,建议使用绝对路径.这样通过shell命令无论用哪个帐户的ENV启动Emacs时,都能正确读取对应的**.el文件。也就是无视'~'所代替的ENV中的$HOME的值是什么,LISP语言)
    这个<load-path>的文件夹,可以手动创建(推荐),也可以用Emacs软件的默认路径(/usr/local/share/emacs/site-lisp/)。
  • 下记的.emacsLoadpath 就是手动创建的一个文件夹,其中放置一些,准备使用的el文件啦,cedet啦,ecb啦,gtags.el啦等等。


 

例:
;load-path
(add-to-list 'load-path "/home/yourname/.emacsLoadpath")


个人.emacs文件中的内容:
(仅安装emacs软件后,即可完成的动作,无需安装其他的组件,但需要个别插件,都是参考其他大侠的)

 

;load-path
(add-to-list 'load-path "/home/yourname/.emacsLoadpath")

(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.
 '(column-number-mode t);默认显示行号的同时,也显示列号
 '(display-time-mode t);显示当前时间
 '(inhibit-startup-screen t);关闭启动画面
 '(show-paren-mode t);显示与当前光标所在位置的括号匹配的另一个括号
)

(setq visible-bell t);关闭出错时的蜂鸣提示声
(mouse-avoidance-mode'animate);当鼠标箭头与光标相近时,使鼠标箭头自动移开
;(blink-cursor-mode nil);光标不闪烁
(setq-default cursor-type 'bar);光标显示为一竖线
(tool-bar-mode -1);; 不显示emcas的工具栏
(menu-bar-mode -1);; 不显示emcas的菜单栏,按ctrl+鼠标右键仍能调出该菜单
(setq x-select-enable-clipboard t);; 支持emacs和外部程序之间进行粘贴
(fset 'yes-or-no-p 'y-or-n-p);以 'y/n'字样代替原默认的'yes/no'字样
(setq frame-title-format "%b@emacs");在最上方的标题栏显示当前buffer的名字
(setq make-backup-files nil);关闭自动备份功能
(setq auto-save-mode nil);关闭自动保存模式
(setq auto-save-default nil);不生成名为#filename# 的临时文件
(setq require-final-newline t);; 自动的在当前的buffer文件的最后加一个空行
(global-set-key "\r" 'align-newline-and-indent);;自动缩进<C-j>变为<Enter>
(setq echo-keystrokes 0.1);; 尽快显示按键序列提示
(global-font-lock-mode t);; 语法高亮
;; 用来显示当前光标在哪个函数
;(require 'which-func)
(which-func-mode 1)
(setq which-func-unknown "unknown")
;; 用M-x执行某个命令的时候,在输入的同时给出可选的命令名提示
(icomplete-mode 1)
(define-key minibuffer-local-completion-map (kbd "SPC") 'minibuffer-complete-word)

(global-hl-line-mode 1);;高亮当前行

;;;;;;;;;;;;;;;;;启动时最大化;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(require 'maxframe)
(add-hook 'window-setup-hook 'maximize-frame t)
;下载maxframe.el并放置在<load-path>中
;http://emacsblog.org/2007/02/22/maximize-on-startup-part-2/
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;web方式显示行号;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(set-scroll-bar-mode 'right);滚动条在右侧
(set-scroll-bar-mode nil)   ; 不显示滚动条, even in x-window system (recommended)
(require 'wb-line-number)
(wb-line-number-toggle)
;下载wb-line-number.el并放置在<load-path>中
;http://homepage1.nifty.com/blankspace/emacs/elisp.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;cc-mode;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "/home/lb/.emacsLoadpath/cc-mode-5.31.3")
(require 'cc-mode)
(c-set-offset 'inline-open 0)
(c-set-offset 'friend '-)
(c-set-offset 'substatement-open 0)
;http://cc-mode.sourceforge.net/
;http://www.kklinux.com/html/linuxwangluojishu/linuxxitongguanliyuan/200902/28-3728.html
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(set-face-background 'default "gainsboro");背景设定
;颜色参考value:X界面菜单栏中[edit]->[text properties]->[Display colors]

;未完其他内容在本文的后续部分介绍
;session
;global(GNU GLOBAL source code tag system)
;##cedet(Collection of Emacs Development Environment Tools)
;##ecb(Emacs Code Browser)
;##doxymacs
;##compile
;##GDB








gtags:GNU GLOBAL source code tag system (Ver:5.7.7)
HP:http://www.gnu.org/software/global/
看看Tutorial(指导)中的Overview就知道,通过gtags能够建立软件工程项目。
这就说明,Emacs+gtags的组合,就可以是能够创建工程项目的编辑软件了。
(基本等于sourceinsight,如果在加上cedet和ecb就更完美了)

还有很多人不用gtags而用的是cscope,我个人没用过cscope,大家可尝试使用。

支持的基本环境

  • Shell command line
  • Bash shell
  • Vi editor (Nvi, Elvis, vim)
  • Less viewer
  • Emacs editor (Emacs, Mule, Xemacs)
  • Web browser
  • Doxygen documentation system 

基本用法:
①下载安装gtags后,在源文件的目录中,键入"gtags -v"命令,就会生成相应文件。
[xx@localhost sys]$ gtags -v

例:source code(/usr/src/sys)       123MB

GPATH 1MB `GPATH' path name database
GTAGS 26MB `GTAGS' definition database
GRTAGS 22MB `GRTAGS' reference database
GSYMS 23MB `GSYMS' symbol database
-------------------------------------
total of tag files 72MB

gtags的其他options的含义,请参考man手册。
(辅助:http://blog.chinaunix.net/u3/98822/showart_2129660.html)

②下载安装gtags后,会有名为gtags.el的文件,注意看安装时make install的list,即可找到gtags.el的安装位置(默认目录是:/usr/local/share/gtags/)。
gtags.el的路径设置为Emacs的<load-path>。
例:
`$HOME/.emacs'文件中加入下记代码例。

 

(setq load-path (cons "/home/owner/global" load-path));gtags.el load-path

(autoload 'gtags-mode "gtags" "" t);gtags-mode is true

从此启动Emacs后,及在<load-path>中load了gtags.el文件,并将gtags-mode设置为真(等同于每次启动后,都在Emacs中的M-x,手动键入gtags-mode)。

个人.emacs文件中的内容:

;##global(GNU GLOBAL source code tag system);;;;;;;;;;;;;;;;;;;;;
;to use global from Emacs, you need to load the `gtags.el' and execute gtags-mode function in it.
;you need to add it to load-path. for `gtags.el'file.
;(add-to-list 'load-path "<path to gtags.el>");已经在之前的代码中load完了
(autoload 'gtags-mode "gtags" "" t);;start Emacs and execute gtags-mode function.  
(setq c-mode-hook
      '(lambda ()
     (gtags-mode 1)));get into gtags-mode whenever you get into c-mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


③当源程序的源文件的内容变化了(导致行号变化),或追加删除了源文件等等。只要有改变,就要更新gtags生成的那4个文件。

例:source code(/usr/src/sys)

[xx@localhost sys]$ gtags -vi 
or
[xx@localhost sys]$ global -u (推荐)

详细用法:
直接参考gtags的英文的Tutorial(指导)。
有很多章节可以跳过,因为那是global在别的编辑软件中的应用方法的说明。(例如shell,vi等)
 章节还是要必看的。

看了gtags的英文的Tutorial(指导)后,发现htags也蛮有用的。
$ htags -Ff -sanohIvt 'Welcome to XXX source tour!' --table-flist=1
$

注:gtags-parser和gtags-cscope没搞明白,哪位大侠能帮帮忙解说一下,或发个说明链接什么的。
gtags会调用gtags-parser和gtags-cscope对目标代码,进些分析,目的为生成源码的tags。?

gtags完成的基本动作(具备键盘的快捷键):

  • 鼠标滚轮键(下按):根据上下文,找到"函数或常量或变量"的"定义或调用"的位置。
    或,按【enter】。
  • 鼠标右键:返回。(就是按完滚轮键后,想返回到原来刚才的位置的话,就按右键)
    鼠标右键(返回),我想应该是emacs的功能,而不是Global的功能。
    如果键盘操作的话,应该是:
    ①调用处搜索关键字→ 结果列表→ [Enter]键选择→ 被选部分的代码表示
    ②被选部分处,再次搜索相同关键字→ 结果列表→ [Enter]键选择→ 原调用处的代码再表示
  • 光标+Enter:当按滚轮键后,出现的调用位置的结果为多个时,将光标调整到相应行,按下回车即可跳转到对应位置。
    (如图,名为_exit_ts的函数在整个项目中,有多个位置调用他)




※※※※※ 先去试试上记内容吧!如果不行,往下进行也没什么意义。※※※※※




CEDET:Collection of Emacs Development Environment Tools Ver:1.0pre6


HP:http://cedet.sourceforge.net/
安装:http://cedet.sourceforge.net/setup.shtml  (切记看看下载后的INSTALL文件,需要make编译)
没有CEDET的话,后续的ecb不能安装使用。

这个组件,安装简单,使用便利。(望大家阅读文档,了解他的各种功能)

我个人常用的两个功能是,speedbar和smart code completion(自动补全)

个人.emacs文件中的内容:

 

;##cedet(Collection of Emacs Development Environment Tools);;;;;;
(load-file "/home/yourname/.emacsLoadpath/cedet/common/cedet.el")
;读取子目录中的特别的 .el 文件
(global-ede-mode 1); Enable the Project management system
(semantic-load-enable-code-helpers); Enable prototype help and smart completion 
(global-srecode-minor-mode 1); Enable template insertion menu
(global-set-key [(f4)] 'speedbar-get-focus);speedbar快捷键[F4]
(define-key c-mode-base-map [(control tab)] 'semantic-ia-complete-symbol-menu);自动补全Ctrl+tab
;(control tab)(meta ?/)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


speedbar插图




smart code completion(自动补全)插图:
就是当输入一个已有的函数名或变量常量名的时候,输到一半时按快捷键自动补全剩余的字母。
我自定义的该功能的快捷键是<Ctrl> + <Tab>,也有设成<Meta> + / 的,根据个人习惯,自行定义。



来自官网的插图:






注:当前发布的最新版的CEDET Ver:1.0pre6,在使用的时候发现了一个问题。
就是在执行自动补全功能,索引tags时,到LL/confname.h的10%时,Linux系统会down机
这个不幸的事情在我的电脑上发生了。

解决方法(转载):http://hi.baidu.com/susdisk/blog/item/dceeded0278c7d85a1ec9c01.html
----转载------

cedet索引LL/confname.h时emacs挂掉解决方案
2009年12月06日 星期日 19:11

    使用cedet1.0pre6时一直有这个问题,一旦看一个新工程时,semantic进行索引tags,到LL/confname.h的10%时就会down掉,没有响应。在mail-list里面已经有讨论(http://www.opensource-archive.org/showthread.php?t=101444),解决方案也很简单,不用1.0pre6,使用cvs版本,如果还使用了ecb,则在重新换cvs版本后还要重编译ecb,否则emacs是load error的。cedet的cvs版本获取地址:
(shell命令)

cvs -z3 -d:pserver:anonymous@cedet.cvs.sourceforge.net:/cvsroot/cedet co -P cedet

    现在好了,emacs不会在看一个新工程时就挂掉了,而且听说cvs版本的补全功能更完备一些。

------------




ECB:Emacs Code Browser Ver:ecb-2.40

HP:http://ecb.sourceforge.net/
安装:http://ecb.sourceforge.net/docs/Installation.html#Installation
其中
Requirements内容中的1和2还是必要的,3和4对于我来说用不上(我的环境非XEmacs,目标代码也不是Java)

辅助:
http://blog.csdn.net/intrepyd/archive/2009/07/09/4333893.aspx

  • 其中在上记"辅助"的blog中设置[鼠标支持]的时候,fedora使用'鼠标滚轮下按'的方式选择和设置。
  • 关闭ecb的"每日提醒"和info和upgrandoption界面,请参考下记.emacs文件中的代码。


疑问:ecb中的
Methods窗口为什么有的时候是空的,什么都没有?
有的时候能够正确表示当前源文件中定义的函数/类型/成员列表呢?
难道是当前的文件定义的数量太多?
貌视保存一下当前文件,就能正确表示了。(待反复确认)


个人.emacs文件中的内容:

 

;##ecb(Emacs Code Browser);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path
                     "/home/lb/.emacsLoadpath/ecb")
(load-file "/home/lb/.emacsLoadpath/ecb/ecb.el")
(require 'ecb)
(require 'ecb-autoloads)
;(setq ecb-auto-activate t);自动启动ecb
(setq ecb-auto-activate t;自动启动ecb
ecb-tip-of-the-day nil;不显示每日提醒
inhibit-startup-message t;不知道什么意思,望各位指导
ecb-auto-compatibility-check nil;
ecb-version-check nil;
)
(global-set-key [f8] 'ecb-activate) ;;定义F8键为激活ecb
(global-set-key [f7] 'ecb-deactivate) ;;定义F7为停止ecb
;;;; 各窗口间切换
(global-set-key [M-left] 'windmove-left)
(global-set-key [M-right] 'windmove-right)
(global-set-key [M-up] 'windmove-up)
(global-set-key [M-down] 'windmove-down)
;;;; 使某一ecb窗口最大化
(define-key global-map "\C-c1" 'ecb-maximize-window-directories)
(define-key global-map "\C-c2" 'ecb-maximize-window-sources)
(define-key global-map "\C-c3" 'ecb-maximize-window-methods)
(define-key global-map "\C-c4" 'ecb-maximize-window-history)
;;;; 恢复原始窗口布局
(define-key global-map "\C-c`" 'ecb-restore-default-window-sizes)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


ecb界面插图




ecb的Method窗口最大化





官网的各种插图
http://ecb.sourceforge.net/screenshots/index.html

※※※※※ 到这里是不是觉得已经可以基本完全=SourceInsight了呢?※※※※※
※※※※※   去试试上记内容吧!如果不行,往下进行还是没啥意思。   ※※※※※





doxymacs:Doxygen + {X}Emacs Ver:1.8.0

文档文档文档,文档是写给谁的?写给别人看的?写给领导看的?
我觉得文档是写给你自己的,为了备忘、整理思路和确认检查。(例如本贴,望大家都来留下一笔吧)
但是写文档,好像挺费劲呀。尤其是coding完成/功能实现之后,就更不愿意回过头来写已经完成的功能的设计文档了。
其实设计文档都应该在实际coding之前完成,而不是,之后补写。

那么,就用Doxygen根据代码来生成文档吧。不过生成的文档,只能当做该模块的外部规格文档。详细设计文档可以在此基础上修改做成。使得文档的做成变得简单方便了。

那Doxymacs和Doxygen是什么关系呢?

Doxygen是根据code生成文档的工具。
主要是根据code中的注释内容生成文档,这个注释是要按照Doxygen工具中约定的写法格式才能够正确的生成文档。
他可以使你养成写注释的习惯,写好注释的习惯。
同时你做成的代码,后期可维护能力也大幅提高。
如果你看到几千行的code一行注释都没有,会不会有种想吐的感觉呢?

Doxymacs则是结合在Emacs中的插件。
通过快捷键,自动完成符合Doxygen中要求的注释格式。
当然注释的具体内容是要由设计者自行添加的。

Doxymacs HP: http://doxymacs.sourceforge.net/
辅助:http://blog.chinaunix.net/u3/98822/showart_2137605.html

个人.emacs文件中的内容:

 

;##doxymacs;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-to-list 'load-path "/home/lb/share/emacs/site-lisp/");读取安装el的路径
(require 'doxymacs) ;; 启动doxymacs
;;注释高亮,针对C和C++程序
(defun my-doxymacs-font-lock-hook ()
  (if (or (eq major-mode 'c-mode) (eq major-mode 'c++-mode))
      (doxymacs-font-lock)))
(add-hook 'font-lock-mode-hook 'my-doxymacs-font-lock-hook)
(doxymacs-mode);doxymacs-mode常true
(global-set-key [(f6)] 'doxymacs-mode);doxymacs-mode快捷键[F6]
;(add-hook 'c-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode
;(add-hook 'c++-mode-common-hook 'doxymacs-mode) ;; 启动doxymacs-mode
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





Doxygen:Source code documentation generator tool Ver:1.6.2

HP:http://www.stack.nl/~dimitri/doxygen/index.html
安装方法和使用方法,看看Manual吧。

辅助:
http://myfaq.com.cn/2005September/2005-09-13/200335.html
http://blog.csdn.net/SigmaSys/
http://blog.csdn.net/nightelve/archive/2008/05/31/2498047.aspx
http://blog.chinaunix.net/u3/98822/showart_2136698.html

生成的文档的格式类型:
HTML
LaTeX
RTF
XML
Man Page

Doxygen会根据生成的configuration文件中的设定,来生成对应的文档。
Doxywizard可以更方便的设置这个configuration设定文件(GUI化)。
要么就用text模式来自行设置configuration文件,这个文件有点像Makefile文件的感觉。

看完Getting started章节后,即可生成你的第一份文档了。
不过详细的内容,还是请仔细阅读Manual。


关于Doxywizard:
使用源代码安装,没能安装上。异常的messages忘了是什么就不贴出来了。
终于装上了,http://blog.chinaunix.net/u3/98822/showart.php?id=2154045

但是,由于使用的是fedora系统,所以通过yum找到了Doxywizard 1.5.5,并安装成功。(其他Linux使用apt命令)

那么就将Doxywizard 1.5.5的贴图发出来让大家看看
(不知和doyxgen 1.6.2一起使用会有什么异常,也许是新的个别选项无法设置吧)
(建议大家源码安装和doyxgen 1.6.2匹配的Doxywizard)
哦,对了这个Doxywizard的启动是通过shell命令方式启动的,不是点击图标的形式。





插一张,doxygen生成的method图,以便大家参考,当然还生成各个函数的独立的图等等




有时通过method图,也能发现软件潜在的风险,如下图main函数的红色箭头部分






对于软件的分析,仅用上面的method类状态迁移图是不够的,尤其是对别人的代码进行分析。
再生成流程图吧。(autoflowchart or Crystal REVS)(非doxygen)
http://blog.chinaunix.net/u3/98822/showart_2145179.html






关于Fedora的yum:
yum是在线更新fedora的重要工具之一:Yellow dog Updater

yumex是yum命令的图形化前端可选组件。(yum extender)
HP:http://www.yum-extender.org/blog/

安装时,可使用shell命令:$ yum install yumex
网上相关说明很多。(yum命令的用法)

插图:





※※※※※文档已经能生成了,后面内容都是辅助内容了(但用处很大,提高效率)※※※※※




session:Session Management for Emacs Ver:session-2.2a

HP:http://emacs-session.sourceforge.net/


下记转载:

来自http://man.ddvip.com/soft/emacszh/x373.html
----------------------
5.2 session
5.2.1 session简介

session扩展包可以使Emacs保存每次编辑的一些历史记录, 这样, 在下次打开Emacs时就可以使用上下键在以前输入的信息中选取, 十分方便实用.
5.2.2 session的使用

session的使用十分简单, 只需要在~/.emacs中加入如下几句就可 以了:

(add-to-list 'load-path "<path to session>")
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
----------------------

来自http://www.smth.edu.cn/pc/pccon.php?id=6063&nid=143960
----------------------
;;记录所有操作
(require 'session)
(add-hook 'after-init-hook 'session-initialize)

;;记录和恢复屏幕
(load "desktop") 
(desktop-load-default) 
(desktop-read)
;;desktop自动存盘模式
,23需要加
(desktop-save-mode 1)
----------------------

在GNU Emacs的Manual中有详细的说明。
找找吧。google下"Emacs session"就有。



注:在使用session的时候,每次启动都有个提示信息,需要按'y'后,完成启动。
---------
Please answer y or n. Warning: desktop file appears to be in use by PID ????.
Using it may cause conflicts. Use it anyway? (y or n) "
---------
参考了下记帖子后,解决。
(即去掉(desktop-read)项,我还真说不清这项是干什么用的,没读手册和帮助呀)
https://bugs.launchpad.net/ubuntu/+source/emacs-snapshot/+bug/163342

个人.emacs文件中的内容:

 

;;;;;;;;;;;session;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;??????
;(add-to-list 'load-path "<path to session>")
(require 'session)
(add-hook 'after-init-hook 'session-initialize);启动时初始化session

;;记录和恢复屏幕
(load "desktop") 
(desktop-load-default) 
;(desktop-read)
;;desktop自动存盘模式,23需要加
(desktop-save-mode 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;







GDB:The GNU Project Debugger  Ver:7.0.1

HP:http://www.gnu.org/software/gdb/

GDB的使用方法就不多说了,网上找找吧。

这里仅介绍他的功能之一:gdb-many-windows

个人.emacs文件中的内容:

;##GDB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(global-set-key [(f5)] 'gdb-many-windows);gdb-many-windows快捷键[F5]
(setq gdb-use-separate-io-buffer t) ; 不需要"IO buffer"时,则设为nil
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


--------------
注:装完GDB 7.0.1 后,GDB不能启动。
错误提示是:
gdb: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory

解决方法是(网摘):
在/etc/bashrc 或 ~/.bashrc 或 ~/.bash_profile 等等,位置加入下记:

export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"
--------------
(是不是GDB安装的路径错了呢!?)


GDB模式启动后,下面的6个buffer将被显示:

+----------------------------------------------------------------------+
| GDB Toolbar |
+-----------------------------------+----------------------------------+
| GUD buffer (I/O of GDB) | Locals buffer |
| | |
| | |
| | |
+-----------------------------------+----------------------------------+
| Source buffer | I/O buffer (of debugged program) |
| | (comint-mode) |
| | |
| | |
| | |
| | |
| | |
| | |
+-----------------------------------+----------------------------------+
| Stack buffer | Breakpoints buffer |
| RET gdb-frames-select | SPC gdb-toggle-breakpoint |
| | RET gdb-goto-breakpoint |
| | D gdb-delete-breakpoint |
+-----------------------------------+----------------------------------+


各buffer的含义如下:

  • GDB Toolbar        - GDB 操作Toolbar
  • GUD buffer         - 执行操作的buffer
  • Locals buffer      - 本地变量名和值的表示buffer
  • Source buffer      - 表示sourcecode的buffer
  • IO/ buffer         - 表示程序的输入输出的buffer
  • Stack buffer       - 运行停止的时候,调用关系的表示buffer
  • Breakpoints buffer - breakpoints断点的表示buffer

buffer崩溃的时候、通过'M-x gdb-restore-windows'返回原状态。


gdb-many-windows插图







其他内容:

1.compile
GNU Emacs中有个功能叫compile。
当编辑完源代码后,<M-x>中输入compile,会跳转执行make -k。
我记得 -k 的意思是,在遇见错误的时候,不停止,继续编译。之后,会有发现错误的个数的表示。
通过快捷键可直接跳转到每个错误的源代码,方便修正错误。

看了《学习GNU Emacs》一书之后,就知道了。

个人.emacs文件中的内容:

 

;##compile;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-key c-mode-base-map [(f9)] 'compile);emacs的compile命令快捷键F9
(setq compile-command "make");默认的make -k命令,变为make命令
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



2.buffer切换
当打开多个buffer的时候,相互之间切换,不要用'M-x o'了。
这种有序的切换方式,太慢了,影响工作效率。

请使用'shift + 光标':就是shift + (↑ ↓ ← →)
.emacs文件中追加

;; move window (Shift + cursor)
(windmove-default-keybindings)
(setq windmove-wrap-around t)

;;;;;;;;





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多