emacs 缩进提示线

Vim、Emacs配置和使用
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#16

帖子 kardinal » 2012-01-18 1:30

Fermat618 写了:
kardinal 写了:lisp 的缩进并不是固定步长,比如多数语言每级缩进4个或者8个空格之类……
这也是 lisp 难于阅读的一个原因吧(其实固定缩进的话,括号多点顶多呕吐,还不至于头晕)
如果按照普通的标准,固定每几列显示一条缩进线,对于 lisp 来说意义不大,因此……
看图
问题:
1、每个空格都要处理,因此速度可能慢一点
2、修改后会造成混乱,因为缩进线不是固定位置的,依赖上级缩进。
indent-column-list 只保存当前行操作所需要的位置,而全部保存的话又有点夸张……这个还得好好研究下
……所以,其实这部分还不能正常工作
这个大赞,要整就整好看点的。

另外,那个lambda都显示成λ了啊。
这个弄的差不多了 https://github.com/ran9er/init.emacs/bl ... ux-line.el
lisp 版本的改进了划线的方式,现在应该比固定缩进的版本还要快
但是在缩进处进行修改后,刷新要慢点,这个和 font-lock 的机制有关吧?? 好像挺复杂,反正我还没有整明白

在图形界面和字符界面下画不同的线
图形界面下是生成 xpm 图片
字符界面下直接用 “|” 划线

改进了提示线的位置,原来的位置是 tab-width * x ,但是这样效果不是太好
现在的位置和 scite 里面一样,是 tab-width * x + 1
无标题1.png
无标题1.png (10.43 KiB) 查看 5976 次
lambda显示成 λ 是很简单的,我还把 ";; " 显示成了“参考标记”(这个符号我不会打,从 emacs 往外复制粘贴的时候还是";; ",只是显示为“参考标记”)
任意字符都可以显示,甚至可以把几个字符重叠显示……
风间星魂
帖子: 490
注册时间: 2009-06-20 23:53

Re: emacs 缩进提示线

#17

帖子 风间星魂 » 2012-01-18 16:48

这个真是太酷了。。emacs的显示前端确实不错。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#18

帖子 kardinal » 2012-01-23 19:50

无标题3.png
改进了下,可以使用正则表达式匹配位置,画不同的线
头像
renws
帖子: 64
注册时间: 2008-08-30 12:29
联系:

Re: emacs 缩进提示线

#19

帖子 renws » 2012-04-03 10:26

我直接复制源码,建了一个 indent-vline.el, 拷贝进去, 然后把 adjust-color 放在indent-vline.el的开始,然后在文件的最后 (provide 'indent-vline)
在.emacs中(require 'indent-vline)

运行没有问题,可是M-x indent-vline 没有任何效果
柔的法则
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#20

帖子 kardinal » 2012-04-03 23:31

这部分比较混乱,也没怎么整理……
https://github.com/ran9er/init.emacs/bl ... ux-line.el 这个文件的话
lisp模式用 (indent-vline-lisp)

indent-vline 是固定缩进用的,我试了下,似乎确实不大好用 :em06
貌似不用这个了

对于固定缩进,可以这样
[lisp]
(defun indent-vline-fixed(&optional img)
(interactive)
(indent-vline-s "^[ \t]*\\([^ \t]\\)"
'(save-excursion
(goto-char (match-beginning 1))
(current-column))
img))
[/lisp]
用 indent-vline-fixed 调用
这种方式的缺点是 ,划竖线的时候,遇到下方不是空格就会停止
优点是,不用指定缩进的宽度,每行遇到第一个非空格字符就开始在下面划线……直到下方没有空格为止

还可以根据关键词来划线,例如在 def class if 下面划线
[lisp]
(defun indent-vline-test (&optional regexp)
(interactive)
(indent-vline-s (or regexp "\\(def\\|class\\|if\\)")
'(save-excursion
(goto-char (match-beginning 1))
(current-column))))
[/lisp]
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#21

帖子 kardinal » 2012-04-03 23:36

adjust-color 其实不用复制,前面两行是关于 hl-line.el 的配置,如果不用 hl-line 的话直接删除
头像
renws
帖子: 64
注册时间: 2008-08-30 12:29
联系:

Re: emacs 缩进提示线

#22

帖子 renws » 2012-04-04 7:19

kardinal 写了:adjust-color 其实不用复制,前面两行是关于 hl-line.el 的配置,如果不用 hl-line 的话直接删除
现在还是什么效果都没有,完全不能画出线...无论是elisp还是python
我只想达到你screenshot里的效果
柔的法则
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#23

帖子 kardinal » 2012-04-04 17:32

看看能显示图片不?打开个图片试试
有时可能编译有问题显示不出图片,( display-images-p )也检测不出来

是用空格缩进的么?用tab来缩进目前还不能处理

(draw-indent-vline 1) 看看有效果没

还有就是由于 font lock 的机制,要等渲染高亮时才开始划线(目前算是寄生在font lock上的,没有独立实现一套机制)……可以试试在一段代码前按下回车再撤销试试
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#24

帖子 kardinal » 2012-04-07 23:31

刚学了个函数 font-lock-fontify-buffer,直接 indent-vline-lisp 或者 indent-vline-fixed 就可以了
如果不行,那就不是我的问题了(显示问题或者缩进字符的问题)
a.png
a.png (7.58 KiB) 查看 5748 次
Highlight Indentation 页面的讨论里提到的

现在最大的问题是修改后的更新问题,因为划的线不归 font-lock 管,这个比较麻烦
所以,我觉得得出点狠招……回头试试把划的线纪录下来 :em11 当然这个是很容易的 :em05
但是纪录下来怎么处理得好好研究下 :em20

但是最让我不爽的是,TMD 这格格的高度怎么得出来,我的线要比行高高那么一点 :em06
cjacker
帖子: 19
注册时间: 2007-09-04 20:45

Re: emacs 缩进提示线

#25

帖子 cjacker » 2012-04-08 2:58

kardinal 写了:刚学了个函数 font-lock-fontify-buffer,直接 indent-vline-lisp 或者 indent-vline-fixed 就可以了
如果不行,那就不是我的问题了(显示问题或者缩进字符的问题)
附件 a.png 已经无效
Highlight Indentation 页面的讨论里提到的

现在最大的问题是修改后的更新问题,因为划的线不归 font-lock 管,这个比较麻烦
所以,我觉得得出点狠招……回头试试把划的线纪录下来 :em11 当然这个是很容易的 :em05
但是纪录下来怎么处理得好好研究下 :em20

但是最让我不爽的是,TMD 这格格的高度怎么得出来,我的线要比行高高那么一点 :em06
2012-04-08-025717_677x406_scrot.png
头像
halradeon
帖子: 30
注册时间: 2011-07-12 19:51
来自: Berkeley,CA

Re: emacs 缩进提示线

#26

帖子 halradeon » 2012-04-16 9:42

好东西啊,楼主有精力也分享到emacswiki上造福国际友人吧~ :em02
唉,白色字真的看不到呢……但说不定真的有人会看到呢,所以还是不写什么东西了。
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#27

帖子 kardinal » 2012-04-17 22:46

还不太完善,更新的问题不好解决
抽空研究下 font-lock.el ,解决或者确认不能解决后再说
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#28

帖子 kardinal » 2012-07-09 23:12

改成用 overlay 实现,终于不那么难看了 :em09

https://github.com/ran9er/init.emacs/bl ... ux-line.el

当然,问题还是必需的:
1) 要在缩进线上修改才能正确刷新,因为依靠 overlay 的 hook 来监视改动……这个临时还没有什么好办法
在缩进的地方用一个大 overlay 填上,然后监视改动应该可行……好像挺麻烦的,改日再说
(基本解决,调整调整就行了)
2) 给每个线都编号,多出了很多变量名……试试改成本地变量会不会好一点(已解决)
3) 缩进线只弄了图形界面下的,字符界面下的还没研究……overlay 不太懂
4) 图形界面下,缩进线使用的图片怎么样让它刚好占一个字符的位置……这个一直比较头疼
kardinal
帖子: 750
注册时间: 2006-03-19 11:39

Re: emacs 缩进提示线

#29

帖子 kardinal » 2012-07-13 21:57

采用强制划线的方式,刷新的问题终于解决了……不过效率上就差了一点
特别是 overlay 不知道怎么样完全删除,所以就循环利用了起来……偶尔会有点小问题(同时编辑多行)
上面 3 4 点懂的指教一下
总得来说,终于可以用了 :em05
头像
sevk
帖子: 2060
注册时间: 2007-05-08 16:26
系统: arch
来自: 火星内核某分子内某原子核内
联系:

Re: emacs 缩进提示线

#30

帖子 sevk » 2013-01-28 13:40

page 404 未找到.
然后下载了这个:
https://github.com/ran9er/init.emacs/bl ... nt-hint.el

放在了 ~/.emacs.d/
然后怎么加载?
笔记本 :
F208S : gentoo
A460P i3G D6 : UBUNTU + WIN7
UN43D1 : UBUNTU + WIN7
1000人超级QQ群 LINUX + WIN : 31465544 或 18210387
回复