Python与Elisp

ChongQingJin28 2013-01-07 10:11:55
看pdf版的elisp reference大概有两个星期了,知道了一点东西。

比如elisp中的read,一次能够读入一个S表达式。S表达式可以是一个变量的定义,还可以是一个函数的定义,还可以是一个执行语句。

python中应该没有这样的函数吧(可能只是我不知道,我知道有AST语法树),但要实现相应的函数应该是很容易的。

因为python的缩进,可以通过缩进判定一个表达式是否已经结束。这样我们就可以读入一个函数,一个类,一个变量,一个import了。

他有什么用吗?

比如说我想要知道一个类里面哪一个是基本的函数(没有调用其他类函数的函数)。

我就可以读入一个类,再读入这个类的各个函数,通过搜索self.xxx(.*)进而知道一个函数是否被其他的函数调用。

这一点我认为是比较有用的,他把一个类用分层的方式表现了出来。对于阅读源码应该有帮助吧。
...全文
337 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChongQingJin28 2013-01-14
  • 打赏
  • 举报
回复
谢谢帮顶。即使删除了不是照样可以看的到嘛!

学emacs的lisp一个月了吧!
reference没有看完一半。

有了一点小想法(大部分对于python也适用):

1.如何看reference及doc
(说明:reference就像python的官方文档,doc就是help(object)所看到的东西)

1)reference中对函数的解释要比doc中的详细,太详细了并不适合学习。若要想知其细节,完全可以看源码。
所以我想应该将reference中的详细解释单独的保存在一个文件内,并建一个函数查看他们。

2)因为这些doc都是英文,也没有使用的例子,加上我看英文的速度没有中文快。
所以,我可以附加中文文档到原文档的右侧(doc每一行长度<=78),并加示例,新建两个函数,一个用来读取中文文档,另一个读取文档中的例子。

3)有些函数本来是有联系的,所以还应该有一个可以表示函数联系的文件。这样,可以把函数组织起来。


2.如何看代码

1)因为lisp的read可以读入一个表达式,写一个自己的read函数,应该能够连注释什么的一起读进来。就可以用一个特殊的符号代替这个表达式,这样就实现了一般编辑器的收缩代码的功能。
而这种代码收缩的粒度是一般编辑器无法做到的。

2)还是函数之间的联系,可以在另一个buffer中,将当前文件中的代码移过去,这样视野或许会宽一点。
(以前我总想在同一个buffer中实现这个功能,发现有点困难。)


以上这些就是接下来的方向。

如果无人跟帖,后天结帖。
zjs100901 2013-01-14
  • 打赏
  • 举报
回复
引用 2 楼 zjs100901 的回复:
不懂 Elisp,帮顶。专业挽尊 24 小时。
引用 4 楼 zhouchongzxc 的回复:
首先感谢 zjs100901 的帮助!! 再次感谢!! ……
我的回复被管理员删除了啊。
ChongQingJin28 2013-01-13
  • 打赏
  • 举报
回复
说一下语法高亮吧。

我不知道eclipse的语法高亮是怎么回事,只知道PyQt中编辑器的语法高亮是用搜索实现的。
好像任何的一个编辑器都有语法高亮的功能,应该是不值得说的。
但好像emacs的语法高亮并不仅仅是语法高亮而已。

emacs是通过正则表达式来实现语法高亮的,但事情并没有结束,而只是刚刚的开始。
搜索之后,可以设置匹配文字的属性,但好像不只是前景色那么简单,你还可以设置任何你想要的其他的属性。
这应该归功于symbol的属性。一个symbol其实就是一个object,同样,在emacs中的一个字都可以成为一个object。
一个字符都可以是一个object,这是多么有意思的事情啊!!不是吗??

好像对emacs的无限扩展有了一点了解,他不仅仅是对编辑器emacs进行的扩展,还包含了这个编辑器所处理的对象:代码本身的扩展。
prog-mode好像只用了这种扩展的一点点。
ChongQingJin28 2013-01-12
  • 打赏
  • 举报
回复
说一下英文单词吧!

福昕的pdf阅读器有一个功能,可以阅读页面上的英文。
好像windows也有文字转语音的库,可以通过它发音。

我没有用windows的库,用了一个词典:startdict(好像是linux里面的,windows也可用)
他可以监测剪切板,算是给了我们一个接口(不知道金山词霸有没有这样的接口,若有知道的朋友,还望赐教)

下面是elisp的代码(好像是太简单了)
如果有人能把他转换成python或java的代码,我非常欢迎
(若转换成java的,可以建一个eclipse插件。)
(若转换成python的,则可以与任何的可以用python扩展的编辑器集成)
(当然,如果你的英文太好的话:return “Passed”)

(把“~”换成空格。“;”之后是elisp的注释。注释之前的空格是Alt+;自动添加的。我楼上的帖子提到过的!)
;;;###autoload
(defun~sound-region~(step-num)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;原理其实很简单,就是过一段时间就往剪切板里放一个单词就够了
"用英语朗读一段选择区域"
~(interactive~"P")
(let((words~(eng-sounds~(buffer-substring-no-properties~~~~~~~~~~~~~~~;eng-sounds其实就是一个python的re.split而已
~~~~(region-beginning)~(region-end))))~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;他会split你所选定的区域,并返回一个list。可以过滤掉你已经很熟悉的单词
~~~~~(count~0)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
~~~~~(step~(if~step-num~(/~step-num~5.0)~sound-region-step~)))~~~~~~~~;设置间隔的时间
(progn~(mapcar~(lambda~(ret-word)~
~~~~~~~~(interactive)~(print~ret-word)
~~~~~~~~~(run-with-timer~(setq~count~(+~count~step))~nil~~~~~~~~~~~~~~;run-with-timer会在一定的时间后执行一个函数
~~~~~~~~~~(quote~w32-set-clipboard-data)~ret-word))~words))))~~~~~~~~~;关键的是给剪切板设置text,用set-clipboard

ChongQingJin28 2013-01-12
  • 打赏
  • 举报
回复
回复楼上 panghuhu250

第一个问题:underscorejs。
实在抱歉,我还不懂js。所以看不懂代码的意思。


第二个问题:针对接口而不是针对实现
把一个文件分成左右两个部分的实际作用,我还不知道。

我又想了想,是不是可以这样:
就拿刚才的underscorejs来说,有变量的定义,有函数的定义。
如果我在变量的定义上面按一个快捷键,右边部分会出现所有使用它的函数。
如果我在函数的定义上面按一个快捷键,右边部分会出现所有被它调用的函数。
这样会有用吗???


我还想到了一个用左右两部分的方法:
把yasppinet放到右部分。
就拿shell编程来说吧(我并不会用shell编程,只是知道他会调用各种可执行文件)
你写一个命令,按一个快捷键,右边则出现常用的参数,也可以有一个小例子
这样只是把放在别的地方的东西(比如说auto complete弹出的菜单)放在了同一个buffer之中
好像也没有多大的改变。真的没有吗??
ChongQingJin28 2013-01-11
  • 打赏
  • 举报
回复
首先感谢 zjs100901 的帮助!!

再次感谢!!


既然标题的名字是python与elisp,就不得不说一下pymacs。
他是一个python进程,由emacs启动。并通过一定的协议,与emacs交互,让emacs可以调用python的函数。
当然,python也可以调用emacs中的函数(但好像在emacs环境中没有太大的意义,除非你想用python的语法)

用这种方式,好像可以用任意的语言来扩展elisp。真的很不错。(任意语言,好像静态没有动态的好)
这样emacs就不仅仅是elisp的emacs了,还可以是python的emacs。(当然你得知道点buffer什么的)
emacs的扩展性加上python丰富的库。绝配!!
ChongQingJin28 2013-01-11
  • 打赏
  • 举报
回复
对于python来说,因为代码都是源码,“黑客”的恶意操作应该很容易的被发现吧。
对于python来说,因为代码都是源码,“黑客”的恶意操作应该很容易的被发现吧。
panghuhu250 2013-01-11
  • 打赏
  • 举报
回复
引用 5 楼 zhouchongzxc 的回复:
可以把程序与注释并列来写,左边是代码,右边是注释,这样或许会更好一点。(只是或许而已)
http://underscorejs.org/docs/underscore.html,只不过这是后来用工具生成的.
引用 5 楼 zhouchongzxc 的回复:
再想的远一点,可以把两个相关的文件合并在一起,同时编辑(比如说协议的两端,不知道有没有用呢?)!!
这个大概不是好主意,两边的开发都应该针对确定的API,而不依赖于另一端的具体实现.如果你想看另一端的实现细节了,说明是API制定的不够好,需要改善.
ChongQingJin28 2013-01-11
  • 打赏
  • 举报
回复
pdf版的reference看了一半,发现居然info格式的book更好用。

曾经看到过一本讲perl编码规范的书(书名已经忘了),上面说到一行不要超过78个字。
不明白为什么要这样。
在emacs里面看txt版的info的时候,发现原来另外的78个字是留给别人的(包括你自己。我的屏幕可以有150多个字)
这样可以在剩余的70多列里面加上你自己的东西,算脚注也好,算注释也行。

由此想到了另外的一件事:如何给代码写注释及文档!!

如果把注释和代码混合起来,觉得很不好(脑子比较笨,分析不了那么多)
可以把程序与注释并列来写,左边是代码,右边是注释,这样或许会更好一点。(只是或许而已)


再想的远一点,可以把两个相关的文件合并在一起,同时编辑(比如说协议的两端,不知道有没有用呢?)!!
bugs2k 2013-01-07
  • 打赏
  • 举报
回复
你这样read代码进来执行,不怕黑客篡改代码实施恶意操作么?

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧