自然,方便的开发管理环境 Leo's Home --主页下载安装

<< <  2015 / 9 >  >>
Mon Tue Wed Thu Fri Sat Sun
  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        

-- ZoomQuiet [2005-01-05 12:32:39]

学习日志

文学编程

Leo

开发体验

通常的界面

  • 可以发现,Leo 仅仅使用了Tk 来实现GUI ,可以说是Python 中最轻巧,通用的GUI组织方式!
  • File encoding: UTF-8 所有的文件是以 UTF-8 编码管理的!

  • Leo 文件本身却是标准的XML文件!

:leo0-snap.jpg

我喜欢的形式:
通过菜单命令:"Window/Toggle Split Direction" 设置

:leo1-snap.jpg

  • Leo 4.0 以后,由于文章化编程的发展,已经实现了很多方便的功能!
  • 不过在下仅仅学会了其中几种就感觉有些离不开了!
  • 这种有强烈快感的杀手级工具,近日来就发现了 Scrapbook! FireFox 的资料管理插件!

  • Leo 知道已经有两年了,可是一直没有使用起来....后悔!
    • 仅仅用作分类记事本:

:leo-regbook.gif

@file

@ignore

@others

自动导入

@language python }}}

@root

<<section>>

Tangle & Untangle

@silent



什么东西?研究之

@thin

大多数情况中 @thin 如同 @file 一样的工作. 实际上,你可以简单的将 @file 替换为 @thin 进行正常的 outline 操作.

这里是主要几点 @file 与 @thin 不同之处:

对于类似 LeoPy.leo 中的 @thin leoProjects.txt 文件,@all 指示符 是必须的. leoProjects.txt 文件包含所谓"工程节点" . 即,非程序文件:仅仅是些无关数据的简单收集.这时,@others 决不会工作: Leo 会抱怨有太多的 孤节点

比如说, 代替直接使用 LeoPyRef.leo , 我利用叫 LeoPy.leo 的复制品. 通过 @thin 节点指引所有本地工作文件.

@root vs. @file 树

@file 树比 @root 树使用起来方便很多:

  1. @file 树需要的指示符支持比 @root 树要少; 所有 @root 树中的章节都需要声明(而且不能重名,在同一文件中!), 而 @file 树常常包含很多非命名的章节节点. 在 @file 树中, @others 指示符 行为就象关联起所有非常命名的章节.
  2. 工作在 @root 树中,用户必须明确调用 Tangle 和 Untangle 命令. 而 Leo 会自动混入/出 @file 树 , 保存时混出所有变动到 outline, 重新打开 .loe 文件时自动混入所有修改从 outline.

但是, @root 树比 @file 树要 柔韧很多:

  1. 在 @file 树中, 章节必须是包含在子节点中的,而且引用点也是固定的.
  2. 在 @root 树中一个被声明的章节, 并不限制其可以在哪里被引用. 此外,@unit 指示符命令甚至于扩展了章节的引用, 可以不限制在一个 @root 树中! 即,你可以在一个 @root 中命名一个章节, 而在另一个 @root 树中引用(可以看作 节点的 clone 操作,只是在引用处看不到全部内容,除非混出为文件)
  3. 在 @root 中的章节声明,也不限制声明的地点.

@root 树与 @file 树不同之处在于:

  1. 只有 @root 树可以包含章节定义行(不过 @file 中可以使用 "<< class declarations >>"类声明的专用章节)

  2. 只有 @file 树可以包含 @others 指示符.
  3. @c 指示符 需要章节名出现在 @root 的节点标题树中.
  4. @c 指示符仅仅可以工作在 @file 树的体文本起始处.所谓 体文本是在 @root 中没有标记会被忽略,而在 @file 树是作为无命名的代码章节内容处理的节点正文文本.

更多节点控制

还是我找资料贴出来吧。是和@file相关的,不是和@root相关的。 by tomz

Users Guide-->Chapter 4: Writing Programs in Leo-->Appendix 1 to Chapter 4: Using @asis, @noref and @nosent trees

节点树类型

生成文件是否含结构标记注释?
Derived files contain sentinels?

章节或是@others 支持?
Sections and @others expanded?

@file

yes

yes

@nosent

no

yes

@noref

yes

no

@asis

no

no

反馈

Leo 安装

  • leo是运行在py2.4还是py2.3.4?我机器2个版本py都有,可是在安装leo的时候提示我没有安装py,不晓得怎么回事 --Dreamingk
  • 哈哈哈!!是个奇怪的问题!Leo 在 4.0 以后版本的安装程序好象有问题,不论Python 环境是少,都说是找不到,也可能是M$升级了什么东西后注册表结构变了,才这样的,我是都下载跨平台版本,解压就可以使用的,自个儿创建一个快捷方式!绝对的“绿色!”--ZoomQuiet

  • 下了他的src版,就可以用了。exe版就不行。 --Dreamingk
  • 它的exe版可能是dephi编的,比较过时,可能早不能用了。by tomz
  • 它现在已经没有exe版了,sf上的exe是安装包,安装后还是py文件。很好用,装了就能用。 --by flyaflya
  • 在Debian(3.1.testing)下安装Leo,默认安装python为2.3.5版,后来我安装了python2.4.2.并且安装了python2.4-tk.下载Leo..无法运行..提示:

    Traceback (most recent call last):
      File "/usr/local/lib/leo/src/leo.py", line 312, in ?
        run(fileName)
      File "/usr/local/lib/leo/src/leo.py", line 75, in run
        g.app.setLeoID(verbose=verbose) # Force the user to set g.app.leoID.
      File "/usr/local/leo-4-3-3/src/leoApp.py", line 448, in setLeoID
        g.app.createTkGui("startup")
      File "/usr/local/leo-4-3-3/src/leoApp.py", line 227, in createTkGui
        import leoTkinterGui # Do this import after app module is fully imported.
      File "/usr/local/leo-4-3-3/src/leoTkinterGui.py", line 16, in ?
        import leoTkinterComparePanel
      File "/usr/local/leo-4-3-3/src/leoTkinterComparePanel.py", line 11, in ?
        import leoTkinterDialog
      File "/usr/local/leo-4-3-3/src/leoTkinterDialog.py", line 9, in ?
        import Tkinter as Tk
    ImportError: No module named Tkinter

    ... ... 什么东东?我没安tk??不对呀!!明明安了呀!!看看..

    gawain:/usr/local/leo-4-3-3/src# python  #这个时候我按下tab键... ...好像还有东东
    python     python2.3  python2.4
    
    gawain:~# python -V 
    Python 2.3.5 #哎呀!!!居然是2.3.5...那我安的python2.4-tk岂不是成了驴唇.非也非也~~~
    
    gawain:~# python2.4 /usr/local/leo-4-3-3/src/leo.py
    Traceback (most recent call last):
      File "/usr/local/leo-4-3-3/src/leo.py", line 314, in ?
        run()
      File "/usr/local/leo-4-3-3/src/leo.py", line 75, in run
        g.app.setLeoID(verbose=verbose) # Force the user to set g.app.leoID.
      File "/usr/local/leo-4-3-3/src/leoApp.py", line 448, in setLeoID
        g.app.createTkGui("startup")
      File "/usr/local/leo-4-3-3/src/leoApp.py", line 230, in createTkGui
        g.app.root = g.app.gui.createRootWindow()
      File "/usr/local/leo-4-3-3/src/leoTkinterGui.py", line 78, in createRootWindow
        self.root = root = Tk.Tk()
      File "/usr/lib/python2.4/lib-tk/Tkinter.py", line 1569, in __init__
        self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
    _tkinter.TclError: no display name and no $DISPLAY environment variable
    
    #terminal, 还是到X下运行的好.
    #cd /path/to/leo
    #chmod +x install
    #./install
    #apt-get install python-tk
    #leo #这条是要到X下执行哦~~~否则是会产生原子的... ... 多了可就会生成原子弹了.

缺陷

  • 以@file方式导入文件,缩进可能出现问题,它把一些地方的Tab换成4个空格,有些地方没换,可能出现问题,在使用其它编辑器(我用editplus)时,可以选中“Tab用空格代替”。-- by flyaflya
  • 在Unix/Linux系统里,tck/tk的中文输入始终是个问题。所以,连带Leo在我的Debian里也没法输入中文,实在是可惜。-- xyb

技巧

  • outline中重要的选项“go back”和“go forward”没有快捷键,可以自己设置。我设为“Ctrl+DnArrow”和“Ctrl+UpArrow”,可以方便的在多个文件(类)间切换。 -- by flyaflya

  • 呀呀呀??我都没有发现这个好处!只是在 新版本中发现有 holk 聚焦! 可以在包含了很多文件的工程中关注当前的一部分! 我习惯是使用 F8 和 F9 定义快捷键... -- ZoomQuiet

  • 使用emacs的folding-mode,能够简单的体验文学编程。这种方式相对于leo的方式,各有优缺点。--tomz

体验

解决Ubuntu 下面Tk中文字体问题

Bind Tk8.5 在Ubuntu中给Py

缘起
  • ZoomQuiet 的介绍接触了 Leo,但由于该软件基于 Tkinter ,而 Ubuntu 上的 Tkinter

又和 Tk8.4 绑在一起,所以在 Leo 中只能使用部分字体(主要不能使用支持边缘平滑的字体) 经过在 leo-editor 讨论组中搜索,发现了一篇相关讨论提到可以通过重新编译 Python 来实现 Tkinter 和 Tk8.5 的讨论,试验了一下果然可以,现把体验记载如下,以供喜欢Leo的朋友参考

处置
  • 1.安装 tk8.5

sudo apt-get install tk8.5 tk8.5-dev
  • 2.安装完成之后,如果在idle中:

   1 import Tkinter
   2 print Tkinter.TclVersion

将会看到的依然是8.4

因为 ubuntu 的 Tkinter 模块和 tk8.4 进行了捆绑,必须对 python 进行重新编译才可

  • 3. 编译 Python

从 Python 官方网站下载 python 源代码

依次进行:

./configure --prefix=/usr --enable-unicode=ucs4
make
sudo make install

然后是

cd /usr/bin
sudo rm python
sudo ln -s python2.5 python
  • 4.之后就可以启动 LEO, 应该立刻可以看到字体变化了,如果设置使用系统默认字体的话

还可以从菜单 Cmds -> Picklers -> Show-Fonts 的对话框中看到所有支持边缘平滑的字体了

当然如果再print Tkinter.TclVersion看到的就是8.5了

有什么疑问到 CPyUG(邮件列表 http://groups-beta.google.com/group/python-cn) 交流吧

反馈
  • 确认!

snap-ubuntu-leo.png

  • 遗留问题 常常有这样的问题:

    Error: 4
    TypeError Exception in Tk callback
      Function: <function masterMenuCallback at 0x90be0d4> (type: <type 'function'>)
      Args: ()
    Traceback (innermost last):
      File "/opt/bin/leo-4.4.3a2/extensions/Pmw/Pmw_1_2/lib/PmwBase.py", line 1752, in __call__
        return apply(self.func, args)
      File "/opt/bin/leo-4.4.3a2/src/leoMenu.py", line 1303, in masterMenuCallback
        return k.masterMenuHandler(stroke,command,commandName)
      File "/opt/bin/leo-4.4.3a2/src/leoKeys.py", line 3171, in masterMenuHandler
        return k.masterCommand(event,func,stroke,commandName)
      File "/opt/bin/leo-4.4.3a2/src/leoKeys.py", line 2262, in masterCommand
        c.frame.updateStatusLine()
      File "/opt/bin/leo-4.4.3a2/src/leoFrame.py", line 1326, in updateStatusLine
        self.statusLine and self.statusLine.update()
      File "/opt/bin/leo-4.4.3a2/src/leoTkinterFrame.py", line 738, in update
        s2 = s[index-col:index]
    TypeError: unsupported operand type(s) for -: '_tkinter.Tcl_Obj' and 'int'
  • 升级!一切就好了!

zq-style-leo-snap.png

分享!

进一步

瞒天过海:

  • Jiahua Huang <[email protected]>
    reply-to        [email protected]
    to      "Python.cn@google" <[email protected]>
    date    Thu, Oct 30, 2008 at 22:14
    subject [CPyUG:69942] 简单让 python-tk(如 IDLE)使用 
    • Tk8.5 和 Tk8.4 的 API 改动并不大,所以其实可以瞒天过海用 Tk8.5 直接代替 Tk8.4 而不需要重新编译任何东西。
    • 可以在终端窗口粘贴执行下边命令

      # 安装 Tk8.5
      sudo apt-get install tk8.5 tcl8.5
      
      # 先备份吧
      sudo cp /usr/lib/libtcl8.4.so.0 /usr/lib/libtcl8.4.so.0.old
      sudo cp /usr/lib/libtk8.4.so.0  /usr/lib/libtk8.4.so.0.old
      sudo cp /usr/lib/python2.5/lib-dynload/_tkinter.so
      /usr/lib/python2.5/lib-dynload/_tkinter.so.old
      
      # 再用 Tk8.5 覆盖 Tk8.4
      sudo cp /usr/bin/tclsh8.5 /usr/bin/tclsh8.4
      sudo cp /usr/bin/wish8.5  /usr/bin/wish8.4
      sudo cp /usr/lib/libtcl8.5.so.0 /usr/lib/libtcl8.4.so.0
      sudo cp /usr/lib/libtk8.5.so.0  /usr/lib/libtk8.4.so.0
      
      # 篡改 "Tk8.4" 的版本号
      sudo sed -i 's/8\.5/8.4/g' /usr/lib/libtk8.4.so.0
      sudo sed -i 's/8\.5/8.4/g' /usr/lib/libtcl8.4.so.0

得了您咹!齐活儿!

LeoEnvironment (last edited 2013-10-22 01:25:18 by ZoomQuiet)