LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: nico65

FVWM Beginner Guide [翻译]

[复制链接]
 楼主| 发表于 2007-5-22 17:32:21 | 显示全部楼层
FvwmPager 用来显示虚拟桌面的布局,它会显示所有你建立的桌面和页,以及每个页中打开的窗口。

与 FvwmTaskBar 一样,要做的第一件事就是设定你的 pager 所需的样式和色彩模板。我只用了和 TaskBar 一样的色彩模板。
  1. #####
  2. # FvwmPager
  3. ###########
  4. Style "FvwmPager" NoTitle, !Handles, !Borders, Sticky, WindowListSkip, \
  5.   CirculateSkip, StaysOnBottom, FixedPosition, FixedSize, !Iconifiable
  6. DestroyModuleConfig FvwmPager: *
  7. *FvwmPager: Geometry 150x150-0+0
  8. *FvwmPager: Colorset * 9
  9. *FvwmPager: HilightColorset * 10
  10. *FvwmPager: BalloonColorset * 9
  11. *FvwmPager: WindowColorsets 9 10
  12. *FvwmPager: Font "xft:Sans:Bold:pixelsize=12:minspace=True:antialias=True"
  13. *FvwmPager: Balloons All
  14. *FvwmPager: BalloonFont "xft:Sans:Bold:pixelsize=12:minspace=True:antialias=True"
  15. *FvwmPager: BallonYOffset +2
  16. *FvwmPager: Window3dBorders
  17. *FvwmPager: MiniIcons
  18. *FvwmPager: UseSkipList
  19. *FvwmPager: Rows 3
复制代码
看手册页可以得到所有选项的详细解释。用 'Module FvwmPager [start desk] [fin ish desk]' 启动 FvwmPager。在 StarFunction 中我已设定,在一个 Pager 中显示三个桌面,用 'Module FvwmPager 0 2' 设定。如果不给选项的话,FvwmPager 只会显示当前桌面。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 17:34:08 | 显示全部楼层
如 taviso 所说:FvwmButtons 可能是 FVWM 中最多才多艺的一个模块了。

#####
# FvwmButtons is an incredible piece of software.
#
# It can create freeform panels of any size, shape (including Non-Rectangular windows),
# Colour and function. It can swallow other applications, even applications not designed
# for docking, have "panels" that slide out consisting of other panels, has a "startup-notification"
# like feature, hundreds of possible bindings, uses the powerful fvwm Colorsets feature, and
# can even change dynamically and respond to window manager events.
#
# The widgets can be transparent, use Xft fonts, and using fvwm's font definitions can render drop shadows
# at any direction, offset, size and colour. Buttons can all use different Colorsets, and can have different
# reliefs, shapes, anything!
#
# FvwmButtons is even tolerant to errors in configuration, and can workaround bad or impossible
# definitions!
#
# As it's an fvwm module, it has 100% integration with the window manager and can use
# internal fvwm commands, functions, etc.
#
# as you can tell, i am a big FvwmButtons fan
#
# I've written a quick introduction into making panels with FvwmButtons, you can read it here
# http://forums.gentoo.org/viewtopic.php?t=162177
#
###########

taken from taviso's fvwm2rc file.

但在这篇简介中只涉及如何设置 FvwmButtons 的最基础的部分。像上面提到的那样,你想要多少个 FvwmButtons 就能创建多少个,在桌面上做任何你想做的事。我将建立一组简单的按钮 MyButtons 让你熟悉一下语法。在高级主题 一章中,我会给一个更复杂的例子,让你对如何配置它有个更好的认识。

FvwmButtons 的基本布局是矩形,但如 taviso 所说,你可以将它配置成任意形状。用宽x高的形式定义 FvwmButtons 的大小,然后再用行列数分割成一个个小格子。这很重要,因为每个 FvwmButtons 面板中的按钮都可以占用任意数目的行列,允许做任意大小的按钮。而在每个按钮中又能建立标题、图标、动作,甚至让它包含其它应用程序(更多内容在附录中的高级主题中)。按钮从左上角填充到右下角,如下图所示

我为这份指南做的例子非常基础,只是让你了解基本语法。这是一个只有一栏的按钮,有个标题,还有一些快速启动按钮用来启动某些程序。
  1. #####
  2. # MyButtons
  3. ###########
  4. Style "MyButtons" NoTitle, !Handles, !Borders, Sticky, WindowListSkip, \
  5.   CirculateSkip, StaysOnBottom, FixedPosition, FixedSize, !Iconifiable
  6. DestroyModuleConfig MyButtons: *
  7. *MyButtons: Geometry 60x420+0+0
  8. *MyButtons: Colorset 9
  9. *MyButtons: Rows 38
  10. *MyButtons: Columns 1
  11. *MyButtons: Frame 0
  12. *MyButtons: Font "Shadow=3:xft:Sans:Bold:pixelsize=14:minspace=True:antialias=True"
  13. *MyButtons: (1x2, Frame 0, Title(Center) "FVWM")
  14. *MyButtons: (1x5, Frame 0, Icon 48x48/terminal.png, \
  15.   Action(Mouse 1) "FvwmATerm", \
  16.   Action(Mouse 3) "FvwmXTerm")
  17. *MyButtons: (1x5, Frame 0, Icon 48x48/xmms.png, \
  18.   Action(Mouse 1) "FvwmXmms")
  19. *MyButtons: (1x5, Frame 0, Icon 48x48/vim.png, \
  20.   Action(Mouse 1) "FvwmGvim")
  21. *MyButtons: (1x5, Frame 0, Icon 48x48/gimp.png, \
  22.   Action(Mouse 1) "FvwmGimp")
  23. *MyButtons: (1x5, Frame 0, Icon 48x48/firefox.png, \
  24.   Action(Mosue 1) "FvwmFireFox")
  25. *MyButtons: (1x5, Frame 0, Icon 48x48/irc.png, \
  26.   Action(Mouse 1) "FvwmIrssi")
  27. *MyButtons: (1x5, Frame 0, Icon 48x48/tux.png, \
  28.   Action(Mouse 1) "FvwmXLock")
  29. *MyButtons: (1x1, Frame 0)
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 17:36:58 | 显示全部楼层
恭喜,你已经完成了自己的第一个 fvwm2rc。我希望你已经了解如何配置 FVWM 的基本要素了,也许还已经多少知道了你有多大的自由度来配置 FVWM。到目前为止,所有提及的东西都是我认为对任何一个 FVWM 桌面来说最基本的要素。现在让我们一起回顾一下,如何进行全局设置,如用 'Style' 控制 FVWM 的行为,然后再想想如何建立函数,设置按键绑定,完成装饰和创建菜单,最后想想能用在 FVWM 上的几个模块。

这份指南创建的 fvwm2rc 文件能在这里找到,这样你就可以一次性的看完所有内容。如果你还在 fvwm2rc 中用了我提供的图片,那么你的桌面将看起来像是这样:

接下来的指南部分与我看过和用过的其它资源和参考,会令你的配置文件增色不少。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-22 17:37:44 | 显示全部楼层
现在你已经搞定了第一份 fvwm2rc 配置文件,而且充分领略了配置语法,下面就让我们更加深入地了解一些专题,从而给你的桌面带来更多的特性。在接下来的几页里,我会给出些在我的桌面上使用的小点缀,如果喜欢的话,你可以将它们整合至自己的桌面。我用到的一些东西需要你装有 ImageMagick 工具。如果还没装过这套工具,我建议你现在就去装上,因为它们实在是太棒了!

真正有用的用于创建更复杂函数的工具,就是利用 shell,可以用 'ExecUseShell / bin/bash' 命令设置 FVWM 所用的 shell,通过 PipeRead 实现。PipeRead 所做的就是从 shell 标准输出获取内容,并将它用于配置 FVWM。这将允许你使用 shell 脚本(甚至是其它能在 shell 中运行的脚本或程序)的输出进一步自定义 FVWM。以下面的例子来说明这是如何工作的,如你写了个简单的脚本,它会输出一些你想包含在 fvwm2rc 文件中的语法,然后你可以在配置文件中写上 'PipeRead "simple_script"' 来使用它。

比如我们想做些事情。首先建个函数,它能从所有位于 wallpaper 目录中的 .png 文件中生成一个 WallPaperMenu,wallpaper 目录由环境变量 $[fvwm_wallpaper] 指定。注意,我用 fvwm-root 设定 X 的墙纸,fvwm-root 既能用 .xpm 文件也能用 .png 文件。由于我更倾向于使用 .png 文件,因此所有的文件都被转换为 .png 格式。如果你还想愿意用 .jpg 格式的文件,你需要修改这个脚本。接下来给出我所用的三个函数,它们要用于 wallpaper 菜单和背景设置。
  1. DestroyFunc BuildWallPaperMenu
  2. AddToFunc   BuildWallPaperMenu
  3. + I Exec rm $[fvwm_icon]/wallpaper/*.png
  4. + I PipeRead 'for i in $[fvwm_img]/wallpaper/*.png; \
  5.   do convert -scale 64 $i \
  6.   "$[fvwm_icon]/wallpaper/`basename $i`"; done && echo Nop'
  7. + I Exec rm $[fvwm_home]/WallpaperMenu
  8. + I Exec echo "DestroyMenu FvwmWallpaperMenu" > \
  9.   $[fvwm_home]/WallpaperMenu
  10. + I Exec echo "AddToMenu FvwmWallpaperMenu "Wallpapers" Title" >> \
  11.   $[fvwm_home]/WallpaperMenu
  12. + I PipeRead 'for i in $[fvwm_img]/wallpaper/*.png; \
  13.   do echo "AddToMenu FvwmWallpaperMenu \
  14.   "`basename $i`%wallpaper/`basename $i`%" \
  15.   FvwmChangeBackground "`basename $i`"" \
  16.   >> $[fvwm_home]/WallpaperMenu; done && echo Nop'
  17. + I Read $[fvwm_home]/WallpaperMenu
  18. DestroyFunc FvwmChangeBackground
  19. AddToFunc   FvwmChangeBackground
  20. + I Exec fvwm-root --retain-pixmap $[fvwm_img]/wallpaper/$0
  21. + I Exec echo "fvwm-root --retain-pixmap \
  22.   $[fvwm_img]/wallpaper/$0" > $[fvwm_home]/cfg/background.cfg
  23. DestroyFunc InitWallpaper
  24. AddToFunc   InitWallpaper
  25. + I Exec source $[fvwm_home]/cfg/background.cfg
复制代码
当调用 BuildWallPaperMenu 函数时,它所做的第一件事就是删除所有自上次运行以来的旧图标。然后,它从每个 $[fvwm_wallpaper] 目录中的 .png 文件中,用 ImageMa gick 中的 convert 命令创建一个图标。接下来,用 FVWM 语法创建菜单并将它写入 $[ fvwm_home]/WallpaperMenu 文件。最后,读入这个新建的文件,这会新建一个可被 FVW M 使用的叫 FvwmWallpaperMenu 的菜单。我喜欢把所有东西都写入一个 WallpaperMenu ,这样我就只要在启动时,把 'Read $[fvwm_home]/WallpaperMenu' 加入 StartFuncti on 中就能创建所需菜单了。或者在 fvwm2rc 配置的 menu 部分中直接写上那条命令。如果我在 $[fvwm_wallpaper] 目录中加了新的墙纸,我所要做的只是再次运行这条命令,它会生成新的 FvwmWallpaperMenu。同时请注意,我还设置了 FvwmChangeBackground 函数,如果你在所选墙纸上点击的话就会变更墙纸;然后,我将所变更的墙纸写入一个配置文件。这么做的原因是当我从 InitFunction 函数中运行 InitWallpaper 时,它就会用我上一次选中的墙纸。

在我用 FVWM 的日子里,我收藏并修改了许多脚本来帮助自定义 FVWM 设置,使之合乎我的要求。自始至终,我将在高级主题部分展示其中的很大一部分(绝大多数是函数和脚本),它们被我碰巧获得并按我的喜好进行过修改。我不能保证在其它机器上也有效,但希望它们能给你些启示,让你能为自己的 FVWM 功能。我已经将这一主题分解为三个部分,祝你愉快!
高级主题

   1. 函数进阶
   2. 菜单进阶
   3. FvwmButtons 进阶

结果预览         索引         函数进阶
回复 支持 反对

使用道具 举报

发表于 2007-5-22 19:35:56 | 显示全部楼层
不加精真是可惜了。
找个显眼的地方放放。
回复 支持 反对

使用道具 举报

发表于 2007-5-22 21:43:48 | 显示全部楼层
真是做了一件大好事
回复 支持 反对

使用道具 举报

发表于 2007-5-23 02:22:38 | 显示全部楼层
有多大?如果邮件附件可以发的话,给我发一份,我会放到我的服务器上。

dionydonny at gmail.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 13:43:15 | 显示全部楼层
函数是我最喜欢用的东西,正如你所看见的那样,我甚至为一件简单的事情而写个函数。而且还真是如此,几乎你想要程序拥有的任何功能,关键都在于是否能写出漂亮的函数。几乎所有的高级主题部分都包含函数,因此这部分充斥着各种不同的函数。

这头两个函数来自 taviso 的 fvwm2rc 配置文件。 它们用 ImageMagick 中的工具来为打开的窗口抓图,然后以它作为图标。第一个函数 Thumbnail 会用当前窗口的抓图来做这个窗口的图标。
  1. DestroyFunc Thumbnail
  2. AddToFunc Thumbnail
  3. + I Raise
  4. + I SetEnv Icon-$[w.id] $[w.iconfile]
  5. + I ThisWindow (!Shaded Iconifiable !Iconic) PipeRead \
  6.     "xwd -silent -id $[w.id] | convert -scale $$(($[w.width]/5)) -frame 1x1 \
  7.     -mattecolor black -quality 0 xwd:- png:$[fvwm_tmp]/icon.tmp.$[w.id].png \
  8.     && echo Nop"
  9. + I TestRc (Match) Test (f $[fvwm_icon]/$[w.iconfile], f $[fvwm_tmp]/icon.tmp.$[w.id].png) \
  10.     PipeRead "composite -geometry +2+4 \
  11.     $[fvwm_icon]/$[w.iconfile] $[fvwm_tmp]/icon.tmp.$[w.id].png \
  12.     $[fvwm_tmp]/icon.tmp.$[w.id].png && \
  13.     echo WindowStyle IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png || echo Nop"
  14. + I TestRc (NoMatch) WindowStyle IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png
  15. + I Iconify
  16. DestroyFunc DeThumbnail
  17. AddToFunc DeThumbnail
  18. + I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
  19. + I UnsetEnv Icon-$[w.id]
  20. + I Exec rm -f $[fvwm_tmp]/icon.tmp.$[w.id].png
复制代码
这些函数可用于代替 'Iconify'。Thumbnail 函数首先抓取当前窗口的图像,把它写入一个临时文件,这个文件放在 $[fvwm_tmp] 下,因此你必须设置过这个环境变量。然后 'Test (f $[fvwm_home]/icons/$[w.iconfile])' 会试着看看你是不是已经为窗口设定了图标文件。仅当你用 style 命令设置时 $[w.iconfile] 才会有内容,如 'Style "Firefox-bin" Icon 48x48/firefox.png' 会把 $[w.iconfile] 的内容设为 48x48/firefox.png,注意我将所有的图标都放在了 $[fvwm_icon] 目录内。如果存在这个文件,一方面函数会将两张图叠加为一张;另一方面,它会将程序图标设置为我们刚刚创建的图标,然后图标化这个窗口。DeThumbnail 函数清除所有东西,它会将图标变回原来的那个样子,然后删除刚才的临时图标,这样下一次再用 Thumbnail 时就会跟第一次运行时完全一样。当窗口非图标化时,有两种方法可以确保函数运行成功。其中之一是将 '+ I Iconify' 添加至这个函数并绑定,这样当你非图标化一个窗口时它就会运行了。或者,我更欣赏这样,在非图标化窗时让 FvwmEvent 模块来完成这个任务。这非常完美,因为无所谓如何实现非图标化,这个函数总会运行一下。想这么做的话,就要像下面这样设置 FvwmEvent,然后在 StarFunction 函数中调用这个模块。
  1. #####
  2. # FvwmEvent
  3. ###########
  4. DestroyModuleConfig FvwmEvent: *
  5. *FvwmEvent: deiconify DeThumbnail
复制代码
最后要提请注意的是,当你重启 FVWM 时所有图标都会回到原来的样子,而你将不得不先来一个 deiconify 再来一次 iconify,重新让它们再变成你想要的样子。有个方法可以避免出现这种情况,把 '+I All (Iconic) ReThumbnail' 加到 Resta rtFunction 函数中去,ReThumbnail 函数如下所示
  1. DestroyFunc ReThumbnail
  2. AddToFunc   ReThumbnail
  3. + I Iconify
  4. + I Thumbnail
复制代码
如果每样东西都设置正确,那么你的图标化窗口应该看起来像下面这两幅图那样样图为 firefox 和 gvim


taviso 写的另一个函数是 FvwmExpose,这个函数很像 WindowList 函数。它的作用是,用 ImageMagick 截取所有当前打开窗口的图像,然后将它们放入一个菜单,以截取的图像作为图标。这里是份拷贝
  1. #####
  2. # FvwmExpose
  3. ###########
  4. DestroyFunc FvwmExpose
  5. AddToFunc FvwmExpose
  6. + I AddToMenu FvwmExposeMenu "e x p o s e" Title
  7. + I + DynamicPopDownAction DestroyMenu FvwmExposeMenu
  8. + I All (!Iconic !Shaded AcceptsFocus)\
  9.     PipeRead "echo Raise; \
  10.         xwd -silent -id $[w.id] | convert -scale $$(($[w.width]/10)) -quality 0 xwd:- \
  11.         png:$[fvwm_home]/tmp/icon.exp.$[w.id].png \
  12.     && echo AddToMenu FvwmExposeMenu \
  13.     %$[fvwm_home]/tmp/icon.exp.$[w.id].png%\\\'"$[w.name]"\\\' WindowID $[w.id] WarpToWindow 50 50 \
  14.         && echo AddToMenu FvwmExposeMenu \\"\\" Nop \
  15.     || Nop"
  16. + I Popup FvwmExposeMenu
  17. + I Exec exec rm -f $[fvwm_home]/tmp/icon.exp.*
复制代码
我用 alt+鼠标中键 来调用这个函数,它会弹出 FvwmExposeMenu。这里有张样图能让你看到菜单看起来会是什么样子
高级主题         索引         菜单进阶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 13:44:51 | 显示全部楼层
在 FVWM 中菜单是个有用的工具,可以动态生成。上一页中的 FvwmExpose 函数就是个榜样。能从脚本中生成 FVWM 菜单是件很美妙的事情,之所以这么说是因为你能基于目录中的墙纸创建一个菜单,如上面演示过的。或者你可以创建一个菜单列出目录及其子目录中的所有内容。想看更多有关这一内容的信息可以找随 FVWM 一起发行的 fvwm-m enu-directory 和 fvwm-menu-headlines 脚本的手册页来看。也可以在 FVWM 手册页中查找 MissingSubmenuFunction, DynamicPopupAction 和 DynamicPopdownAction。

我选择的发行版是 Debian。随 debian 一同发行的有个好东西 'menu' 包,这个包用于生成菜单。FVWM 的 debian 包附带了一个脚本,它能利用这个工具生成你在 debian 上已安装的程序的菜单。我搞到这个脚本并进行了修改,使之符合我的喜好,用它在我的桌面上生成一个 DebainMenu 菜单。如果你有 debian 且对此也有兴趣,你需要抓得以下三个文件: fvwm_menu,fvwm_menu.h 以及 fvwm_menu_data.h。然后,你必须将这些文件放入 $[fvwm_scrpt] 目录。接下来,你还要把以下函数添加至 fvwm2rc 文件
  1. #####
  2. # DebianMenu
  3. ###########
  4. DestroyFunc BuildDebianMenu
  5. AddToFunc   BuildDebianMenu
  6. + I Exec if [ -f "$[fvwm_home]/DebianMenu" ] then rm $[fvwm_home]/DebianMenu fi
  7. + I PipeRead 'update-menus --menumethod $[fvwm_scrpt]/fvwm_menu; \
  8.   cat $[fvwm_home]/DebianMenu'
复制代码
利用 menu 包这个函数创建了一个文件叫 $HOME/.fvwm/DebianMenu,但如果你用了其它路径作为 $[fvwm_home],你必须对 fvwm_menu 脚本做些小改动。然后函数 cat 文件并用这个文件创建 DebianMenu。我就做了这些,而当菜单需要更新时,你得随时运行 BuildDebianMenu。但更好的方法是,你只要在启动时用 'Read $[fvwm_home]/DebianMenu' 包含这个菜单就行了。要显示菜单的话,只要用它加入 FvwmRootMenu 并加上 'Popup DebianMenu' 就可以了。

下一个例子,我修改了 fvwm-menu-directory 用于创建我自己的 MediaMenu 菜单显示我的音乐列表。我建议你先看看 fvwm-menu-directory 和 fvwm-menu-headl ines 的手册页。下面是一个改动过的 fvw m-menu-directory 版本。我给脚本加入了两条重要特性。第一条,它会为任意目录找一个叫 [directory_name].png 的文件,如果找到了就会把它作为目录在菜单中的图标,以及目录生成的子菜单的标题。伴随这一特性,我还设置了这个东西,你可以忽略所有 .png 文件并不在菜单中列出它们。我添加的第二条特性是,仅列出目录的部分内容,这样菜单不会变得太大。在我详细解释它的实现方法前,先看下 FuncFvwmMenuDirectory,它被用于生成这些函数以及用于保存它们的 'MediaMenu'
  1. DestroyFunc FuncFvwmMenuDirectory
  2. AddToFunc   FuncFvwmMenuDirectory
  3. + I PipeRead '$[fvwm_scrpt]/fvwm-menu-directory --title "%d" --dir "$0" \
  4.   --links --command-file "exec xmms \"%f\"" \
  5.   --command-title "exec xmms \"%d\"" \
  6.   --icon-title "$0.png" --icon-file "menu/notes.png" \
  7.   --exclude ".png"'
  8. #####
  9. # MediaMenu
  10. ###########
  11. DestroyMenu MusicMenu
  12. AddToMenu   MusicMenu "Music" Title
  13. AddToMenu   MusicMenu MissingSubmenuFunction FuncFvwmMenuDirectory
  14. + "Artists A-B%menu/music.xpm%" Popup /home/music/albums/artists|[14AB]
  15. + "Artists C-G%menu/music.xpm%" Popup /home/music/albums/artists|[CDEFG]
  16. + "Artists H-K%menu/music.xpm%" Popup /home/music/albums/artists|[HIJK]
  17. + "Artists L-O%menu/music.xpm%" Popup /home/music/albums/artists|[LMNO]
  18. + "Artists P-S%menu/music.xpm%" Popup /home/music/albums/artists|[PQRS]
  19. + "Artists T-Z%menu/music.xpm%" Popup /home/music/albums/artists|[TUVWXYZ]
  20. + "Unsorted%menu/music.xpm%" Popup /home/music/albums/unsorted
  21. + "Assorted Music%menu/music.xpm%" Popup /home/music/assorted
  22. + "Collections%menu/music.xpm%" Popup /home/music/albums/collections
  23. + "Soundtracks%menu/music.xpm%" Popup /home/music/albums/soundtracks
复制代码
MediaMenu 的实现方法是,先把 FuncFvwmMenuDirectory 设为 MissingSubmenu Function。这样做了以后,当你想弹出一个不存在的子菜单时,它会发送子菜单名到 FuncFvwmMenuDirectory。然后函数会生成那个子菜单使之弹出。FuncFvwmMenuD irectory 的实现方法是,它会显示带有项目首字母的目录名。如,'Popup /home/music/albums/artists|[CDEFG]' 只会列出在 /home/music/albums/artists 中以 C, D, E, F 或者 G 打头的文件或目录。这里 有张样图
函数进阶         索引         FvwmButtons 进阶
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-23 13:48:04 | 显示全部楼层
TO diony
东西我已经发给你了, 压缩包里有我外加的 Readme-first 和 dict.txt,其实我已经把这份东西放在了我的博客上 http://cobalt65.cublog.cn,但那上面好像下载不了,也不支持直接上传 html 文件等东西。所以才想到用这种方式发在这里。不过这样做很浪费版面的,看着也不舒服。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表