Ted's Blog

Happy coding

今天编译了内核

先看下 $lspci

00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 10)
00:02.0 VGA compatible controller: Intel Corporation 82G33/G31 Express Integrated Graphics Controller (rev 10)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

记下几个需注意的地方:

Power management options  --->

        [*] ACPI (Advanced Configuration and Power Interface) Support  --->

                [*]   Deprecated /proc/acpi/event support      #加上这个,避免开机时acpi抱怨

CPU类型:$cat /proc/cpuinfo

Intel(R) Pentium(R) Dual  CPU  E2180  @ 2.00GHz

   Processor type and features  --->  

         [*] Symmetric multi-processing support         #多CPU支持

            Processor family (Pentium-Pro)  --->

                (X) Pentium-Pro                                    #看半天觉得这个最像

            (2) Maximum number of CPUs (2-512)            #CPU数量

总线

    Bus options (PCI etc.)  --->  

        [*] PCI support

        [*] PCI Express support

设备驱动,这里面选项挺重要

   Device Drivers  --->

        [*] Block devices  --->

                <M>   Loopback device support           #支持挂载iso文件

        <*> ATA/ATAPI/MFM/RLL support  --->          #IDE硬盘

                <*>     Include IDE/ATA-2 DISK support

                 <*>     Intel PIIX/ICH chipsets support     #通过lspci中的信息Intel Corporation 82801G (ICH7 Family) IDE Controller , 找到对应的芯片组类型

            SCSI device support  --->              # SCSI硬盘,(SATA IDE Controller)

                <*> SCSI disk support

                <M> SCSI CDROM support

                [*] SCSI low-level drivers  --->

        <*> Serial ATA (prod) and Parallel ATA (experimental) drivers  --->

                [*]   ATA SFF support

                        <*>     Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support       

网卡

    Device Drivers  --->

        [*] Network device support  --->

                [*]   Ethernet (1000 Mbit)  --->

                        <*>   Realtek 8169 gigabit ethernet support    #根据lspci中的 RTL8111/8168B, 选择对应的芯片

显卡

            Device Drivers  --->

                <*> /dev/agpgart (AGP Support)  --->      #有Accelerated Graphics Port要选上,不然不能调高分辨率

                        <*>   Intel 440LX/BX/GX, I8xx and E7x05 chipset support         #只有这个有点像

                <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->

                        <*>   Intel 830M, 845G, 852GM, 855GM, 865G (i830 driver)  --->        #看起来像

                                (X) i830 driver                  

                                              

声卡

        Device Drivers  --->

                <*> Sound card support  --->

                        <*>   Advanced Linux Sound Architecture  --->

                                [*]   PCI sound devices  --->

                                        <*>   Intel HD Audio      #根据lspci输出的High Definition Audio与此选项的帮助中的Intel "High Definition Audio" (Azalia) 相同,所以选择

                                                [*]     Enable generic HD-audio codec parser       #别的选项的芯片名字在lspci中找不到

鼠标键盘等USB设备

Device Drivers  --->

        Input device support  --->

                -*-   Keyboards  --->

                        <M>   Newton keyboard        #键盘,别的都不像

                [*]   Mice  --->

                        <M>   PS/2 mouse                #PS/2鼠标

Device Drivers  --->

        [*] HID Devices  --->

                {*}   Generic HID support

                         <M>   USB Human Interface Device (full HID) support

                [*] USB support  --->

                        <*>   Support for Host-side USB

                        [*]     USB device filesystem

                        [*]     USB Monitor

                        <*>     EHCI HCD (USB 2.0) support        #根据lspci中有EHCI的字眼

                        <*>     UHCI HCD (most Intel and VIA) support    #根据lspci中有UHCI的字眼

                        <M>   USB Mass Storage support        #移动硬盘等

读取硬件时间

Device Drivers  --->

        <*> Real Time Clock  --->

                [*]   /dev/rtcN (character devices)        #防止出现时钟错乱

                <*>   PC-style 'CMOS'

文件系统,相对简单些

File systems  --->

        <*> Second extended fs support

        <*> Ext3 journalling file system support

        [*] Dnotify support

        [*] Inotify file change notification support

        [*] Quota support

        CD-ROM/DVD Filesystems  --->

                <*> ISO 9660 CDROM file system support

                [*]   Microsoft Joliet CDROM extensions

                [*]   Transparent decompression extension

        DOS/FAT/NT Filesystems  --->

                <M> VFAT (Windows-95) fs support

                <*> NTFS file system support

                        [*]   NTFS write support

        [*] Network File Systems  --->

                <M>   SMB file system support (OBSOLETE, please use CIFS)        #支持与windows共享的连接

                <*>   CIFS support (advanced network filesystem, SMBFS successor)

        -*- Native language support  --->

                (UTF-8) Default NLS Option

                <M>   Codepage 437 (United States, Canada)

                <*>   Simplified Chinese charset (CP936, GB2312)

                 <*>   Traditional Chinese charset (Big5)                

                <M>   ASCII (United States)

                <M>   NLS ISO 8859-1  (Latin 1; Western European Languages)

                <*>   NLS UTF-8

geek's joke

C语言中插入汇编语言

网上的搜集,不一定可用

#include   "stdio.h"  
   
  void   main()  
  {  
      int   a,b,c;  
      a=3;  
      b=4;  
      __asm  
      {  
              mov   eax,a  
              mov   ebx,b  
              add   eax,ebx  
              mov   c,eax  
      }  
      printf("c   is   %d\n", c);  
}

GCC中插入汇编语言
int   main(int   argc,char   **argv)  
  {  
      int   a=10,b=20;  
      int   c=0;  
          asm("movl   %1,%%eax;\  
                    addl   %2,%%eax;\  
                    movl   %%eax,%0;"  
                  :"=m"(c)  
                  :"r"(a),"r"(b)  
                  :"%eax");  
      printf("a+b=%d",c);  
  return   1;  
  }  
 
  complier   this   one   :  
    gcc     add.c   -o   add
   
   
这两个都正确,前者是vc里的嵌入汇编,功能较弱  
的汇编。  
后者是gcc的嵌入汇编,可以实现32位汇编,功能很强大。  
后一个程序是求c=a+b   的值。  
那段嵌入代码会扩展成与以下代码等价的东西:  
movl   $a,%eax  
addl   $b,%eax  
movl   %eax,$c  
你可以使用下面的编译指令生成汇编文件add.s  
gcc   -S   add.cTop


 开dos控制台部分汇编实现。  
#include   <windows.h>  
  #include   <winbase.h>  
  void   main()  
  {  
  LoadLibrary("msvcrt.dll");  
  __asm   {  
  mov   esp,ebp   ;把ebp的内容赋值给esp  
  push   ebp   ;保存ebp,esp-4  
  mov   ebp,esp   ;给ebp赋新值,将作为局部变量的基指针  
  xor   edi,edi   ;  
  push   edi   ;压入0,esp-4,;作用是构造字符串的结尾\0字符。    
  sub   esp,08h   ;加上上面,一共有12个字节,;用来放"command.com"。    
  mov   byte   ptr   [ebp-0ch],63h   ;  
  mov   byte   ptr   [ebp-0bh],6fh   ;  
  mov   byte   ptr   [ebp-0ah],6dh   ;  
  mov   byte   ptr   [ebp-09h],6Dh   ;  
  mov   byte   ptr   [ebp-08h],61h   ;  
  mov   byte   ptr   [ebp-07h],6eh   ;  
  mov   byte   ptr   [ebp-06h],64h   ;  
  mov   byte   ptr   [ebp-05h],2Eh   ;  
  mov   byte   ptr   [ebp-04h],63h   ;  
  mov   byte   ptr   [ebp-03h],6fh   ;  
  mov   byte   ptr   [ebp-02h],6dh   ;生成串"command.com".  
  lea   eax,[ebp-0ch]   ;  
  push   eax   ;串地址作为参数入栈  
  mov   eax,   0x7801AFC3   ;  
  call   eax   ;调用system  
  }  
  }  
  直接编译看看吧。给你一个上来就可以玩转的源码PP嘻嘻,注释加的多好啊

我用到的firefox扩展

clipmarks
cookie Button
Delicious Bookmarks
DownThemAll!
Easy DragToGo
Flash Video Resources Downloader
Gmail Notifier
HttpFox
Magic's Video - Downloader
Personal Menu
ShowIP
Tree Style Tab
Firesizer
FEBE

Gentoo Linux on T43 (7) 中文字体

Linux 下字体的配置可以很简单,也可以很复杂,这取决于个人需求的复杂程度,以及对相关知识的了解和技术掌控程度,其差别会导致悬殊的时间成本。在我本人开始这项工作之前,对相关内容了解很少,因此不得不花费时间来了解一些基础性内容。

在这个过程中,一本在线书籍Free/Open Source Software Localization 为我提供了有益的帮助,其整个第七章都是有关字体的内容,介绍了基本的字体概念字体的分类,以及Linux 如何处理字体 等。

对于中文字体的详细配置,参考了quanliking 的2 篇文章: Linux 字体微调 - windows 效果版Linux 字体微调- Vista 效果版 以及kemean 的字体配置local.conf详解[带Win效果和AA效果]

下面先描述一下字体的安装方法,然后给出我的字体配置,更多的内容可以参考以上的链接。

安装字体

Gentoo Linux有2种主要的字体系统并存:Core X11 font systemxft font system,分别有不同的安装方法。

Core X11 font system

对于Core X11,系统与应用程序的字体一般放在/usr/share/fonts 下面的子目录内,建议把用户自己安装的字体放在/usr/local/share/fonts 下的子目录,并且需要将这些路径加入到Xwindow的配置文件 /etc/X11/xorg.conf。举例:

将新的truetype 类型字体放在/usr/local/share/fonts/TTF 目录,然后执行以下命令(注意顺序):

# mkfontscale  /usr/local/share/fonts/TTF
# mkfontdir /usr/local/share/fonts/TTF

接着编辑/etc/X11/xorg.conf 来让使用Core X11 font system 的X 应用程序知道有新的字体可以利用,添加以下行到文件的Files 与Module Section(其实这个目录默认已经存在,无须添加)。

Section "Files"
    FontPath   "/usr/local/share/fonts/TTF"
    ...
EndSection

重启Xwindow 即可,新的字体将会被识别。 

xft font system

有些X 应用程序使用xft font system ,Gentoo Linux 默认设置了以下环境变量,使gtk+ 2.0 应用程序的字体使用xft,而不是Core X11 font system。

$ cat /etc/env.d/50gtk2
GDK_USE_XFT=1

xft font system 会自动搜索标准的字体路径并发现新字体,无须多余的步骤。如果希望新字体可以立即使用,那么执行命令fc-chache -fv 来即可刷新字体缓存。

对字体的配置可以存放在2个文件当中,其一是系统级别的/etc/fonts/local.conf (没有此文件可以自己建立),其二是用户Home目录下的.fonts.conf,仅影响当前用户。

字体配置

目前Linux 下的中文字体配置主要分为以下几种。

Windows 或Mac 效果 

使用Windows 平台的宋体(SimSun)、新宋体(NSimSun)与黑体(SimHei) ,或者最新vista 系统中的微软雅黑字体(Microsoft YaHei)。另外还有Mac 平台采用的华文黑体(STHeiti),其效果与SimHei 类似,但小字体的效果更出色。这几种字体包含的字符集非常齐全,覆盖了汉字简繁以及日韩字体,因此对繁体以及日韩字体显示效果要求不很高的用户,就没必要再去配置细明体(PMingLiU) 等其它字体。

使用这些字体的方法很简单,将其从Windows 目录复制到Linux 下简单配置即可,但严格来讲,这里面有版权问题,因此,在大多数Linux 发布之中,我们找不到以上字体。

使用免费的开源字体 

在这方面做得比较出色的是文泉驿 字体,目前通过网络协作的方式,已经开发出了点阵宋体、黑体以及等宽三大类字体,并不断升级改善中。

可以直接在Gentoo 中安装其中的点阵宋体和正黑字体:

# emerge -av  media-fonts/wqy-bitmapfont media-fonts/wqy-zenhei
配置文件 

为了对比,我尝试了以上的各种字体配置方案,经过调整后,在T43 高分屏1400x1050分辨率下,效果都不错,其差别仅在个人喜好罢了。因此,我将配置文件整理,如果你安装了以上几种字体,那么简单修改几行,重启Xwindow ,即可更换一种字体。

下面是我的.fonts.conf (整理自quanliking 与kemean 的文章),放在我的HOME 目录,会被/etc/fonts/fonts.conf 自动读取,其优先级低于/etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- ~/.font.conf file for user customizations -->
<fontconfig>
<!--
    Breaf:
    Search keyword "editable" for configuation.
    Section:
    1. Fonts family configuration

    2. Fonts substitution
    3. Global configuration
    4. English fonts configuration
    5. CJK fonts configuration
    Installed fonts list:
    STHeiti
    微软雅黑,Microsoft YaHei
    黑体,SimHei
    宋体-18030,SimSun-18030

    宋体,SimSun
    新宋体-18030,SimSun-18030,NSimSun-18030
    新宋体,NSimSun
    WenQuanYi Bitmap Song
    文泉驿正黑,文泉罅正黑,WenQuanYi Zen Hei
    Arial
    Arial Black
    Verdana
    Comic Sans MS

    Georgia
    Times New Roman
    Courier New
    Andale Mono
    Fixed
    Impact
    Trebuchet MS
    Webdings
-->

<!--
*******************************************************************************
    1. Fonts family configuration [Begin]
*******************************************************************************
-->
    <alias>
        <family>serif</family>
        <prefer>
            <!-- @@@ editable -->

            <family>SimSun</family>
        </prefer>
    </alias>
    <alias>
        <family>sans-serif</family>

        <prefer>
            <!-- @@@ editable -->
            <family>Microsoft YaHei</family>
        </prefer>
    </alias>

    <alias>
        <family>monospace</family>
        <prefer>
            <!-- @@@ editable -->
            <family>NSimSun</family>

        </prefer>
    </alias>
<!--
*******************************************************************************
    1. Fonts family configuration [End]
*******************************************************************************
-->
<!--
*******************************************************************************
    2. Fonts substitution [Begin]
*******************************************************************************
-->
<!--
    fonts alias substitution
-->

    <match target="pattern">
        <test name="family">
            <string>宋体</string>
        </test>
        <edit name="family" mode="assign">

            <string>SimSun</string>
        </edit>
    </match>
    <match target="pattern">
        <test name="family">

            <string>新宋体</string>
        </test>
        <edit name="family" mode="assign">
            <string>NSimSun</string>
        </edit>

    </match>
    <match target="pattern">
        <test name="family">
            <string>宋体-18030</string>
        </test>

        <edit name="family" mode="assign">
            <string>SimSun-18030</string>
        </edit>
    </match>
    <match target="pattern">

        <test name="family">
            <string>新宋体-18030</string>
        </test>
        <edit name="family" mode="assign">
            <string>NSimSun-18030</string>

        </edit>
    </match>
    <match target="pattern">
        <test name="family">
            <string>黑体</string>

        </test>
        <edit name="family" mode="assign">
            <string>SimHei</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="family">
            <string>微软雅黑</string>
        </test>
        <edit name="family" mode="assign">

            <string>Microsoft YaHei</string>
        </edit>
    </match>
    <match target="pattern">
        <test name="family">

            <string>文泉驿正黑</string>
        </test>
        <edit name="family" mode="assign">
            <string>WenQuanYi Zen Hei</string>
        </edit>

    </match>
<!--
    not installed fonts substitution
-->
    <match target="pattern">
        <test name="family">
            <string>Times</string>

        </test>
        <edit name="family" mode="assign">
            <string>Times New Roman</string>
        </edit>
    </match>

    <match target="pattern">
        <test name="family">
            <string>Helvetica</string>
        </test>
        <edit name="family" mode="assign">

            <string>Verdana</string>
        </edit>
    </match>
    <match target="pattern">
        <test name="family">

            <string>Courier</string>
        </test>
        <edit name="family" mode="assign">
            <string>Courier New</string>
        </edit>

    </match>
    <match target="pattern" >
        <test name="family" >
            <string>PMingLiU</string>
            <string>MingLiU</string>

            <string>FangSong_GB2312</string>
            <string>KaiTi_GB2312</string>
            <string>AR PL KaitiM GB</string>
            <string>AR PL KaitiM Bit5</string>

            <string>AR PL SungtiL GB</string>
            <string>AR PL Mingti2L Bit5</string>
            <string>AR PL ShanHeiSun Uni</string>
            <string>AR PL ZenKai Uni</string>

            <string>Bitstream Vera Serif</string>
            <string>Bitstream Vera Sans</string>
            <string>Bitstream Vera Sans Mono</string>
            <string>DejaVu Sans</string>

            <string>DejaVu Sans Mono</string>
            <string>DejaVu Serif</string>
            <string>MS 明朝</string>
            <string>MS ゴシック</string>

            <string>Kochi Mincho</string>
            <string>Kochi Gothic</string>
            <string>Baekmuk Batang</string>
            <string>Baekmuk Dotum</string>

            <string>Baekmuk Gulim</string>
            <string>Baekmuk Headline</string>
        </test>
        <edit name="family" mode="assign" >
            <string>san-serif</string>

        </edit>
    </match>
<!--
    english portion substitution
-->
    <match target="pattern" >
        <test name="family" >
            <string>serif</string>

        </test>
        <edit name="family" mode="prepend" binding="strong" >
            <!-- @@@ editable -->
            <string>Georgia</string>
        </edit>

    </match>
    <match target="pattern" >
        <test name="family" >
            <string>sans-serif</string>
        </test>

        <edit name="family" mode="prepend" binding="strong" >
            <!-- @@@ editable -->
            <string>Verdana</string>
        </edit>
    </match>

    <match target="pattern" >
        <test name="family" >
            <string>monospace</string>
        </test>
        <edit name="family" mode="prepend" binding="strong" >

            <!-- @@@ editable -->
            <string>Courier New</string>
        </edit>
    </match>
<!--
*******************************************************************************
    2. Fonts substitution [End]
*******************************************************************************
-->

<!--
*******************************************************************************
    3. Global configuration [Begin]
*******************************************************************************
-->
<!--
    target dots per inch, change dpi to 96
-->
    <match target="pattern" >
        <edit name="dpi" mode="assign" >
            <double>96</double>

        </edit>
    </match>
<!--
    enable sub-pixel rendering.
    if you are using CRT, set rgb -> none
-->
    <match target="font">

        <edit name="rgba" mode="assign">
            <const>none</const>
        </edit>
    </match>
<!--
    default Fonts setting

    here autohint = ture / hinting = false is for free fonts in your system
    we will use autohint = false / hinting = true for MS core fonts
-->
    <match target="font" >
        <edit name="antialias" mode="assign" >
            <bool>true</bool>
        </edit>

        <edit name="autohint" mode="assign" >
            <bool>true</bool>
        </edit>
        <edit name="hinting" mode="assign" >
            <bool>false</bool>

        </edit>
        <edit name="hintstyle" mode="assign" >
            <const>hintfull</const>
        </edit>
    </match>

<!--
    font size settings:
    set the apposite font size,so it is easy to be read
-->
    <match target="pattern" >
        <test name="pixelsize" compare="more_eq" >
            <double>8</double>

        </test>
        <test name="pixelsize" compare="less_eq" >
            <double>12</double>
        </test>
        <edit name="pixelsize" mode="assign" >

            <double>12</double>
        </edit>
    </match>
<!--
    synthetic emboldening for fonts that do not have bold face available
-->
    <match target="font">

        <!-- check to see if the font is just regular -->
        <test name="weight" compare="less_eq">
            <int>100</int>
        </test>
        <!-- check to see if the pattern requests bold -->

        <test target="pattern" name="weight" compare="more_eq">
            <int>180</int>
        </test>
        <!-- set the embolden flag -->
        <edit name="embolden" mode="assign">

            <bool>true</bool>
        </edit>
    </match>
<!--
*******************************************************************************
    3. Global configuration [End]
*******************************************************************************
-->
<!--
*******************************************************************************
    4. English fonts configuration [Begin]
*******************************************************************************
-->

<!--
    default : smoothed and hinted
-->
    <match target="font" >
        <test name="foundry" qual="any" >
            <string>monotype</string>
            <string>microsoft</string>

        </test>
        <edit name="antialias" mode="assign" >
            <bool>true</bool>
        </edit>
        <edit name="autohint" mode="assign" >

            <bool>false</bool>
        </edit>
        <edit name="hinting" mode="assign" >
            <bool>true</bool>
        </edit>

        <edit name="hintstyle" mode="assign" >
            <const>hintfull</const>
        </edit>
    </match>
<!--
    for point size less equal than 6 : only smoothed
-->

    <match target="font" >
        <test name="foundry" qual="any" >
            <string>monotype</string>
            <string>microsoft</string>
        </test>

        <test name="size" compare="less_eq" >
            <double>6</double>
        </test>
        <edit name="antialias" mode="assign" >
            <bool>true</bool>

        </edit>
        <edit name="autohint" mode="assign" >
            <bool>false</bool>
        </edit>
        <edit name="hinting" mode="assign" >

            <bool>false</bool>
        </edit>
    </match>
<!--
    Arial Regular
-->
    <match target="font" >

        <test name="family" >
            <string>Arial</string>
        </test>
        <test name="weight" compare="eq">
            <const>regular</const>

        </test>
        <test name="slant" compare="eq" >
            <const>roman</const>
        </test>
        <test name="size" compare="more_eq" >

            <double>7</double>
        </test>
        <test name="size" compare="less_eq" >
            <double>13</double>
        </test>

        <edit name="antialias" mode="assign" >
            <bool>false</bool>
        </edit>
        <edit name="autohint" mode="assign" >
            <bool>false</bool>

        </edit>
        <edit name="hinting" mode="assign" >
            <bool>true</bool>
        </edit>
        <edit name="hintstyle" mode="assign" >

            <const>hintfull</const>
        </edit>
    </match>
<!--
    Times New Roman Bold Italic
-->
    <match target="font" >

        <test name="family" >
            <string>Times New Roman</string>
        </test>
        <test name="weight" compare="eq">
            <const>bold</const>

        </test>
        <test name="slant" compare="eq" >
            <const>italic</const>
        </test>
        <test name="size" compare="more_eq" >

            <double>7</double>
        </test>
        <test name="size" compare="less_eq" >
            <double>13</double>
        </test>

        <edit name="antialias" mode="assign" >
            <bool>false</bool>
        </edit>
        <edit name="autohint" mode="assign" >
            <bool>false</bool>

        </edit>
        <edit name="hinting" mode="assign" >
            <bool>true</bool>
        </edit>
        <edit name="hintstyle" mode="assign" >

            <const>hintfull</const>
        </edit>
    </match>
<!--
    Courier New:
    both enable autohint and hinting looks very well.
-->

   <match target="font" >
      <test name="family" >
         <string>Courier New</string>
      </test>
      <edit name="antialias" mode="assign" >

         <bool>true</bool>
      </edit>
      <edit name="autohint" mode="assign" >
         <bool>true</bool>
      </edit>

      <edit name="hinting" mode="assign" >
         <bool>true</bool>
      </edit>
      <edit name="hintstyle" mode="assign" >
         <const>hintfull</const>

      </edit>
   </match>
<!--
    Courier New font size
-->
   <match target="font" >
      <test name="family" >
         <string>Courier New</string>

      </test>
      <test name="pixelsize" compare="less_eq" >
         <double>14.7</double>
      </test>
      <edit name="pixelsize" mode="assign" >

         <double>14.7</double>
      </edit>
   </match>
<!--
*******************************************************************************
    4. English fonts configuration [End]
*******************************************************************************
-->
<!--
*******************************************************************************
    5. CJK fonts configuration [Begin]
*******************************************************************************
-->

<!--
    the dual-width Asian fonts (spacing=dual) are not rendered correctly,
    apparently FreeType forces all widths to match. Trying to disable the
    width forcing code by setting globaladvance=false alone doesnot  help.
    as a brute force workaround, also set spacing=proportional, i.e. handle
    them as proportional fonts:
-->
    <match target="font" >

        <test target="pattern" name="lang" compare="contains" >
            <string>zh</string>
            <string>ja</string>
            <string>ko</string>

        </test>
        <test name="spacing" compare="eq">
            <const>dual</const>
        </test>
        <edit name="spacing" mode="assign" >

            <const>proportional</const>
        </edit>
        <edit name="globaladvance" mode="assign" >
            <bool>false</bool>
        </edit>

    </match>
<!--
    adjusting
-->
    <match target="font" >
        <test qual="any" name="family" compare="eq" >
            <!-- installed fonts -->
            <!--

            <string>STHeiti</string>
            -->
            <string>Microsoft YaHei</string>
            <string>SimHei</string>

            <string>SimSun</string>
            <string>NSimSun</string>
            <string>SimSun-18030</string>
            <string>NSimSun-18030</string>

            <string>WenQuanYi Bitmap Song</string>
            <string>WenQuanYi Zen Hei</string>
        </test>
        <edit name="rgba" mode="assign">
            <const>none</const>

        </edit>
        <edit name="antialias" mode="assign" >
            <bool>true</bool>
        </edit>
        <edit name="autohint" mode="assign" >

            <bool>false</bool>
        </edit>
        <edit name="hinting" mode="assign" >
            <bool>true</bool>
        </edit>

        <edit name="hintstyle" mode="assign" >
            <const>hintfull</const>
        </edit>
        <edit name="embeddedbitmap" mode="assign" >
            <bool>true</bool>

        </edit>
    </match>
<!--
    enable embedded bitmap fonts
    non-bitmap:
       STHeiti: sthei.ttf 13563000 bytes
       Microsoft YaHei: msyh.ttf 15043584 bytes
       SimHei: simhei.ttf 10044356 bytes

    with bitmap:
       SimSun/NSimSun: simsun.ttf 10500792 bytes
       SimSun-18030/NSimSun-18030: simsun-18030.ttf 12642204
       WenQuanYi Zen Hei: wqy-zenhei.ttf 12844372 bytes
    checked by Linux tool: fontforge
-->
    <match target="font" >
        <test qual="any" name="family" compare="eq" >

            <string>SimSun</string>
            <string>NSimSun</string>
            <string>SimSun-18030</string>
            <string>NSimSun-18030</string>

        </test>
        <test name="pixelsize" compare="eq" >
            <double>12</double>
            <double>13</double>
            <double>14</double>

            <double>15</double>
            <double>16</double>
            <double>18</double>
        </test>

        <edit name="antialias" mode="assign" >
            <bool>false</bool>
        </edit>
    </match>
    <match target="font" >

        <test qual="any" name="family" compare="eq" >
            <string>WenQuanYi Bitmap Song</string>
        </test>
        <test name="pixelsize" compare="more_eq" >
            <double>9</double>

        </test>
        <test name="pixelsize" compare="less_eq" >
            <double>12</double>
        </test>
        <edit name="antialias" mode="assign" >

            <bool>false</bool>
        </edit>
    </match>
    <match target="font" >
        <test qual="any" name="family" compare="eq" >

            <string>WenQuanYi Zen Hei</string>
        </test>
        <test name="pixelsize" compare="eq" >
            <double>12</double>
            <double>13</double>

            <double>15</double>
            <double>16</double>
        </test>
        <edit name="antialias" mode="assign" >
            <bool>false</bool>

        </edit>
    </match>
<!--
*******************************************************************************
    5. CJK fonts configuration [End]
*******************************************************************************
-->
</fontconfig>

上面的字体配置使用3种虚拟字体:

  • 衬线字体:Serif
  • 非衬线字体:Sans-serif/Sans serif/Sans
  • 等宽字体:Monospace/Mono

虚拟字体已经被定义在/etc/fonts/conf.d/ 下面的配置文件中,并拥有了一个字体列表,以上字体配置中的字体会被加在顶部,具有更高的优先级。并且,/etc/fonts/fonts.conf 中也为虚拟字体添加了可能采用的别名,比如mono。有关衬线字体与非衬线字体,请参看:细说字体 Sans Serif 与 Serif

在上面,我定义了:对于衬线字体,中文使用宋体,英文使用Georgia;非衬线的字体,中文使用微软雅黑,英文使用Verdana;等宽字体,中文使用新宋体,英文使用Courier New,共6种字体。其中,除了中文字体需要自己额外安装以外,其它英文字体默认已经存在于/usr/share/fonts/corefonts 目录,它们属于media-fonts/corefonts ,如果你找不到这些字体,可以emerge 这个包。

如果想换不同的口味,只需要把上述6处字体名称替换为系统中已经安装的字体即可,为了方便配置,我在每一处增加了<!-- @@@ editable --> 这样的注释。

另外,有人觉得/etc/fonts/conf.d 下面的配置文件没什么用处,还可能干扰自己的配置,可以删除了事。我仔细看过,不提倡删除,如果删除的话,以下2个文件一定要保留,否则fontconfig 就不会读取~/.fonts.conf 与/etc/fonts/local.conf ,它们是这2个配置文件的装载入口。

  • 50-user.conf
  • 51-local.conf

下面是雅黑的效果截图:

screenshot-msyh.jpg

字体有关的命令 

下面介绍几个字体有关的命令,在配置过程中可能会用来进行配置的确认、除错等。

fc-list

列出系统中所有可用的字体名称(包含中英文别名),以及支持的style。

命令后面可加字体名称,但必须是全称,不支持通配符,否则无法匹配。如果是中文字体,要求环境为UTF-8,否则匹配不成功,输出也是乱码。字体名称如果包含空格,使用引号引起。

虚拟字体不会被列出。

fc-match  

列出字体文件名称、英文名称,不支持中文字体名匹配。同样不支持通配符,但支持虚拟字体,可以列出虚拟字体中优先级最高的字体。可以使用-v 参数输出字体详细信息。 

对于配置文件中进行过字体替换的字体,fc-match 会输出替换后的字体名称

$ fc-match courier
cour.ttf: "Courier New" "Normal"
fc-cat

从cache 文件中读取字体信息,很少用到。

以上三个命令来自media-libs/fontconfig,属于xft 的命令。

xlsfonts

xlsfonts 也用于列出字体,但格式不同,此外,它也可以列出一些未被xft 系统识别并cache 的字体。同时这个命令也支持通配符。

$ xlsfonts -fn "*sim*"
-misc-simhei-medium-r-normal--0-0-0-0-p-0-iso10646-1
-misc-simsun 18030-medium-r-normal--0-0-0-0-m-0-iso10646-1
-misc-simsun 18030-medium-r-normal--0-0-0-0-m-0-iso8859-1
-misc-simsun 18030-medium-r-normal--0-0-0-0-m-0-koi8-r
-misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1
-misc-simsun-medium-r-normal--0-0-0-0-p-0-iso8859-1
-misc-simsun-medium-r-normal--0-0-0-0-p-0-koi8-r

如果系统中找不到这个命令,需要emerge x11-apps/xlsfonts

fontforge

这是一个GUI 程序,可用于编辑字体文件,同时也可以获得大量的字体信息,比如一个TrueType 字体是否内嵌了点阵字体,size是多少。对于MS的宋体,fontforge 只能识别出部分size 的点阵字体:12、14、16,13、15、18 则识别不出来,开时我认为是字体文件的版本问题,后来看了quanliking 的回帖才知道是fontforge 的问题。

如果系统中找不到这个命令,需要emerge  media-gfx/fontforge

Tips

如果字体没有变化,仅仅修改了字体配置文件,如果使用fc-match 这样的命令,不需要重启Xwindow。对于其它应用程序,比如gedit,仅仅重新运行这个程序即可应用新的配置,但有些应用程序则需要重启动Xwindow 才可以应用新的配置,比如gnome-terminal 。了解这些可以在测试字体配置的时候节省一些时间。

下载

  • fontconfig 配置文件:.fonts.conf(如果直接使用这个文件,请重命名为 .fonts.conf,下载的文件名中没有点)
  • 因为版权问题,不提供一些字体的下载,在Windows 系统以及本文链接的文章中可以找到。

延展阅读

(未完)

gentoo 的中文 man 文档乱码的解决办法

有2种方法解决,2选一

1,用 groff-1.18.1 就可以直接支持UTF-8
所以可以不用这个groff-utf8,那么只要将 groff-1.19 mask了,降级到1.18.

echo ">=sys-apps/groff-1.19.2" >/etc/portage/package.mask
emerge groff

2,如果不想降级 groff,那么1.19在处理utf8上有bug这时就可以安装这个groff-utf8了

# emerge groff-utf8

按照安装完的提示修改/etc/man.conf的NROFF 变量

 * Messages for package app-text/groff-utf8-0:

 * Sample usage:
 * $ groff-utf8 -Tutf8 -mandoc find.vi.1 | less
 * $ groff-utf8 -Thtml -mandoc find.vi.1 > find.html; mozilla find.html
 *
 * You can also modify the TROFF/NROFF settings in your /etc/man.conf
 * to make it use groff-utf8 instead of groff.
 * For example:
 * NROFF       /usr/bin/groff-utf8 -Tutf8 -c -mandoc

make.conf 例子

  1. # These settings were set by the catalyst build script that automatically built this stage
  2. # Please consult /etc/make.conf.example for a more detailed example
  3. #---------------------------------------------------------------------------
  4. CFLAGS="-O2 -march=k8 -pipe"
  5. CHOST="x86_64-pc-linux-gnu"
  6. CXXFLAGS="${CFLAGS}"
  7. #--------------------------------------------------------------
  8. #CFLAGS="-march=athlon64 -O2 -pipe -fomit-frame-pointer -msse3"
  9. #--------------------------------------------------------------
  10. #--------------------------------------------------------------
  11. #LDFLAGS="-Wl,-O2"
  12. #LDFLAGS="-Wl,-O1 -Wl,--as-needed"
  13. #LDFLAGS="-Wl,-O1"
  14. #LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
  15. #LDFLAGS="-Wl,-O1 -Wl,--as-needed -Wl,--sort-common -Wl,--hash-style=both -s"
  16. LDFLAGS="-Wl,-O2,--as-needed"
  17. #--------------------------------------------------------------
  18. LINGUAS="zh_CN zh"
  19. #---------------------------------------------------------------------------
  20. #---------------------------------------------------------------------------
  21. ACCEPT_KEYWORDS="~amd64"
  22. #---------------------------------------------------------------------------
  23. #---------------------------------------------------------------------------
  24. USE="a52 aac amd64 automount bash-completion boost bzip2 chm chroot cjk \
  25. colordiff command-args compress cscope curl dbase dbm directfb \
  26. disk-partition dts fat ffmpeg fontconfig glib gtalk gtkhtml gtkmm gzip \
  27. hddtemp ithreads jpeg2k jpgraph latin1 mmap mp4 mplayer mplayer-bin \
  28. network ntfs nvidia openssh openssl opensslcrypt p2p pdfkit posix qq \
  29. rar real realmedia rpm samba sandbox scim sdl-image sdl-sound serial \
  30. sftp sql sqlite sqlite3 subversion svgz symlink tftp threads unzip usb v4l \
  31. v4l2 vim vim-pager vim-syntax vim-with-x wav wma wxwindows xchattext \
  32. xface xine xinetd xvid zip tk -cups -ipv6 -kde -truetype-fonts \
  33. -type1-fonts gssapi"
  34. #---------------------------------------------------------------------------
  35. #USE="immqt "
  36. FEATURES="ccache sandbox parallel-fetch" #getbinpkg keepwork
  37. INPUT_DEVICES="keyboard mouse"
  38. VIDEO_CARDS="nvidia vesa vga"
  39. #ALSA_CARDS="es1371"
  40. #---------------------------------------------------------------------------
  41. CCACHE_DIR="/var/tmp/ccache"
  42. CCACHE_SIZE="2G"
  43. #---------------------------------------------------------------------------
  44. MAKEOPTS="-j3"
  45. PORTAGE_BINHOST="https://e.ututo.org.ar/k8/ http://gentoo.modulix.net/gentoo/grp/x86_64-pc-linux-gnu/athlon64/gnome/"
  46. PKGDIR=/usr/portage/packages
  47. PORT_LOGDIR=/var/log/portage
  48. AUTOCLEAN="yes"
  49. PORTAGE_NICENESS=3
  50. #---------------------------------------------------------------------------
  51. GENTOO_MIRRORS="ftp://gentoo.anheng.com.cn/gentoo http://linux.ntcu.net/ftp/dists/gentoo ftp://gentoo.imj.fr/pub/gentoo/ http://gentoo.mirrors.easynews.com/linux/gentoo/ ftp://ftp.public.fix.fi/gentoo ftp://194.117.143.70/sites/gentoo"
  52. SYNC="rsync://linux.ntcu.net/gentoo-portage"
  53. #GENTOO_MIRRORS="http://gentoo.gg3.net/ ftp://gg3.net/pub/linux/gentoo/"
  54. FETCHCOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE} \${URI}"
  55. RESUMECOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE} \${URI}"
  56. #FETCHCOMMAND="axel -a -n 3 -N -o \${DISTDIR}/\${FILE} \${URI}"
  57. #RESUMECOMMAND="axel -a -n 3 -N -o \${DISTDIR}/\${FILE} \${URI}"
  58. #source /usr/portage/local/layman/make.conf
  59. #FETCHCOMMAND="/usr/bin/axel -a -o \${DISTDIR}/\${FILE}/\${URI}"
  60. #RESUMECOMMAND=${FETCHCOMMAND}
  61. #---------------------------------------------------------------------------
  62. PORTAGE_ELOG_SYSTEM="save"
  63. PORTAGE_ELOG_CLASSES="warn error info"
  64. #---------------------------------------------------------------------------
  65. #---------------------------------------------------------------------------
  66. PORTDIR_OVERLAY="/usr/local/myportage"
  67. PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/portage/local/layman/gentoo-china"
  68. PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
  69. #---------------------------------------------------------------------------
  70. ##一. 网通
  71. GENTOO_MIRRORS="http://61.135.158.199"
  72. SYNC="rsync://61.135.158.199/gentoo-portage"
  73. #点评:版主fei所架设。dell 2650 4G内存。双P4 xeon 2.8G 超线程,只做了portage和distfiles和snapshots镜象。
  74. #每天同步两次。北京网通机房。千兆带宽。
  75. ##二. 电信
  76. #GENTOO_MIRRORS="ftp://gentoo.anheng.com.cn/gentoo"
  77. #点评:sanfanling帮忙联系建立的,速度很快
  78. GENTOO_MIRRORS="http://linux.ntcu.net/ftp/dists/gentoo"
  79. SYNC="rsync://linux.ntcu.net/gentoo-portage"
  80. #点评:从上海连,可达200KB/S
  81. GENTOO_MIRRORS="ftp://ftp.linuxforum.net/gentoo http://mirror.gentoo.gr.jp"
  82. #点评:据反映linuxforum的镜像更新可能不够勤,所以以gentoo.gr.jp为后备
  83. GENTOO_MIRRORS="http://mirrors.acm.cs.rpi.edu/gentoo"
  84. SYNC="rsync://acm.cs.rpi.edu/gentoo-portage"
  85. #点评:这是fakeid和assemble推荐的
  86. ##三. 教育网
  87. GENTOO_MIRRORS="ftp://ftp3.tsinghua.edu.cn/mirror/gentoo"
  88. SYNC="rsync://ftp3.tsinghua.edu.cn/gentoo/gentoo-portage"
  89. ##点评:清华的,教育网访问速度超快,可以sync,教育网首选。
  90. GENTOO_MIRRORS="ftp://ftp.sjtu.edu.cn/gentoo"
  91. #点评:上海交大
  92. ##四. 内地以外
  93. GENTOO_MIRRORS="http://ftp.ncnu.edu.tw/Linux/Gentoo"
  94. SYNC="rsync://rsync.gentoo.org/gentoo-portage"
  95. #点评:这是zhllg用的,从香港连,很快
  96. #---------------------------------------------------------------------------

配置gentoo

emerge axel
然后在/etc/make.conf 里加上:
FETCHCOMMAND="/usr/bin/axel -a -S10 \${URI} -o \${DISTDIR}"
RESUMECOMMAND="/usr/bin/axel -a -S10 \${URI} -o \${DISTDIR}"
这样axel会搜索较快的10个(当然可以改成其他数字如S6等)伺服器来下载。和prozilla不同的是axel是从不同的伺服器下载,这样对gentoo的mirrors的负担会分散开来。

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

安装~x86软件方法:
echo 'yyy/xxx ~x86'>>/etc/portage/package.keywords
emerge xxx
--------------------------
安装mask软件的方法:
echo 'yyy/xxx' >>/etc/portage/package.unmask
emerge xxx
------------------------
升级系统:
emerge sync
emerge -uDpv world
emerge -uDv world
emerge -pv depclean
emerge -v depclean
revdep-rebuild -pv
revdep-rebuild -v
dispatch-conf
______________

emacs的定制&LISP包的加载

一、emacs的启动配置文件

    emacs配置文件的文件名为“.emacs.el“或“.emacs“。它们通常位于计算机的 $HOME 目录,如果是MS Windows (Windows 2000, Windows XP以上),默认是 c:\Documents and Settings\username\Application Data\,这个适用于 Emacs22 以上的版本。Emacs21 默认的 $HOME 目录在 C:\ 。当然也可以通过环境变量 $HOME 重新设置,总之在比较大众化的操作系统中,你都可以通过C-x C-f ~/.emacs 来编辑您的个性化配置文件。
    “.emacs”文件其实是一个LISP程序脚本。emacs编辑器通过运行该文件中的脚本来对自身进行初始化。因此,“.emacs”文件的语法与就是LISP程序语言相同

补充:

1. 只有当插件被 emacs 成功加载了,我们才能使用该插件提供的函数

2. (require 'ecb):该函数首先会判断插件是否已经被加载,如果没有,则使用 load 函数来从 lisp目录中加载插件


二、快捷键的定制

  1. 键位映射图:多个按键绑定构成的一个集合。Emacs中有两类映射图:(1).全局影射图:对所有模式的编辑缓冲区都起作用的按键映射图 (2).局部映射图:对具体的编辑模式起作用的映射图。例如:c模式、文本模式等。当按下某个按键时,Emacs会首先查看当前编辑缓冲区的局部映射图里有没有对它进行定义。如果没有,就会查找全局映射图。如果找到了与按键对应的定义项,那么按键关联的命令就会被执行。
  2. 如果自定义的快捷键与系统中默认的快捷键冲突,则系统中默认的快捷键将会被替换

定制方法:

(1).(define-key keymap "keystroke" 'command-name):将快捷键定义保存到指定的keymap中
(2).(global-set-key "keystroke" 'command):只能将快捷键定义保存到全局keymap射图中
(3).(local-set-key "keystroke" 'command-name):只能将按键绑定到局部映射图中。每种编辑模式都对应了一张局部映射图。
(4).keystroke字符串中,必须使用\C来代表字符Ctrl,\M来代表字符Alt

三、设置emacs内部变量

setq函数用来设置emacs内部变量,其使用方法如下:

(setq auto-save-interval 800)

四、LISP初识

a. 数据类型

  1. t:true
  2. nil:false
  3. 字符串:使用""括起来
  4. 字符:以?开头。例如:?x代表字符x
  5. 标志符:以'开头。例如:表示函数名时使用‘command-name

补:LISP语言中的语句以“(”来表示语句的开始,以“)”来表示语句的结束

b. 函数的定义

defun关键字:用来定义LISP函数。

(defun my-cpp-mode()

(define-key c++-mode-map [return] 'newline-and-indent)

(define-key c++-mode-map [(control c) (c)] 'compile)

(interactive)

(c-set-style "K&R")

(c-toggle-auto-state)

(c-toggle-hungry-state)

(setq c-basic-offset 4)

(imenu-add-menubar-index)

(which-function-mode)

)

c. 常用函数

  1. add-hook:该函数用来将某个函数与指定的模式绑定,当emacs进入相应的模式时,将自动调用与该模式绑定的函数。例如:(add-hook 'c++-mode-hook 'my-cpp-mode)
  2. require:该函数检测在当前emacs会话中是否加载了指定的插件,如果没有,则使用load函数来从系统的LISP目录中加载指定的插件。例如:(require 'session):从lisp-path中加载session.el文件

五、加载LISP包

  1. emacs编辑器的主要功能是使用LISP编程语言来写的,因此我们可以往emacs中加载LISP包来为emacs添加更多的功能。LISP语言是一种解释型语言,其程序文件的扩展名为*.el。
  2. c-h p:查看当前emacs会话所加载的LISP包
  3. 在".emacs“文件中使用require函数来加载指定的LISP包。例如:(require 'session):加载session包
  4. *scratch*缓冲区可以用来进行LISP代码的测试。首先,将LISP语句复制到该缓冲区中,然后将光标移动LISP语句的末尾,最后,使用C-x C-e来执行该LISP语句
  5. 系统默认的LISP包的目录为:“/usr/share/emacs/site-lisp”。安装LISP包时只需要将其复制到该目录下即可。

emacs的使用

一、emacs编辑器简介

     emacs编辑器是由C语言和LISP语言编写的。LISP(链表处理语言)是由约翰·麦卡锡在1960年左右创造的一种基于λ演算的函数式编程语言。 我们可以使用LISP来扩展emacs,从而为emacs添加更多的命令。(补:emacs -nw:以命令行的方式来运行emacs,而不启动GUI界面)



* 自动保存功能

      如果你已经修改了一个文件,但是还没来得及存盘你的计算机就罢工了,那么你所做的修改就很可能会丢失。为了避免这样的不幸发生,Emacs 会定期将正在编辑的文件写入一个“自动保存”文件中。自动保存文件的文件名的头尾各有一个“#”字符,比如你正在编辑的文件叫“hello.c”,那么它 的自动保存文件就叫“#hello.c#”。这个文件会在正常存盘之后被 Emacs 删除。
      所以,假如不幸真的发生了,你大可以从容地打开原来的文件(注意不是自动保存文件)然后输入 M-x recover file<Return> 来恢复你的自动保存文件。在提示确认的时候,输入 yes<Return>。


* 其他

  1. 当emacs失去响应时,C-g命令可用来结束纸条命令的执行。其功能相当于Shell中的Ctrl+C
  2. 有一些 Emacs 命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误用而造成麻烦。如果你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令


二、emacs编辑器的界面

1. 编辑区
    用来进行文本编辑的区域。


2. 回显区

      如果 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为“回显区”的地方给你提示。回显区位于屏幕的最下面一行。



3. 状态栏

  1. 位于回显区正上方的一行被称为“状态栏”。状态栏最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动过,所以状态栏上显示的不是星号而是短线(-)。
  2. 状态栏中的小括号用来指明当前使用的编辑模式,默认是fundamental(主模式),emacs的主模式包括了文本模式以及编辑程序源码的Lisp模式等。


三、emacs所能提供的工作环境

  1. emacs可以执行Shell命令
  2. emacs可以作为Directory Editor(Dired)
  3. emacs可以编辑、编译以及调试程序
  4. emacs可以编辑其它主机上的文档
  5. emacs可以打印文件
  6. emacs具有年历(Calendar)以及日记功能
  7. emacs可以用来阅读man page和info文档
  8. emacs可以收发电子邮件
  9. emacs可以阅读网络上的电子布告栏(GNUS)
  10. emacs具有版本控制的功能(CVS)
  11. emacs可以提供娱乐环境(游戏功能)

    emacs所提供的这些功能,都是先唤起代表此功能的模式(mode)。emacs的模式,分成主要模式(major mode)与次要模式(minor mode)。每一次只能使用一个主模式,而且主模式是必须要的。在一个主模式下,俄可以搭配一个以上的次要模式。使用次要模式相当于启用了该次要模式所对应的插件。



四、emacs命令

  1. emacs中的每一个命令都有一个命令名,命令名就是该命令所对应的LISP函数的函数名。在emacs中,我们可以为这些命令配置快捷键,从而达到快速调用命令的目的。
  2. .使用emacs来执行命令的方法有两种:(1).使用Ctrl键 (2).使用Meta键。所有emacs命令都可以用Meta键表示出来,键盘上如果没有Meta键,则可以用Alt键或ESC键来代替。常用的emacs命令通常会有一个快捷键与之相连。快捷键通常是以Ctrl来开头(C-x C-c)。如果要使用Meta键来表达与“Ctrl-x Ctrl-c”相同的效果,则使用“M-x save-buffers-kill-emacs”。使用Meta键,可以利用emacs的completion功能。使用emacs的completion功能的方法是将部分字符串键入后,再按下TAB、SPACE或?键即可。
       (1).TAB键:尽可能将其的字填满。
       (2).SPACE键:将分隔符(-)之前的字填满。
       (3).?:将所有可能的completion选择都列出来。
  3. 由于emacs中所有的命令都有一个命令名(LISP函数的函数名),因此,我们可以使用“M-x 命令名”来调用emacs中的所有的命令。


* 基本光标控制

  1. C-v:向下翻屏,与PageDown效果相同(v-> vertical)
  2. M-v:向上翻屏,与PageUp效果相同
  3. C-l:重绘屏幕,并将光标所在行置于屏幕的中央
  4. C-b:光标向前移动一格(b->backward)
  5. C-f:光标向后移动一格(f->forward)
  6. C-p:光标向前移动一行(p->previous)
  7. C-n:光标向后移动一行(n->next)
  8. M-b:光标向前移动一个单词
  9. M-f:光标向后移动一个单词
  10. C-a:光标移动到行首
  11. C-e:光标移动到行尾
  12. M-<:光标移动到文章的开头(注意:“<”的输入要shift键,实际为Alt+Shift+<)
  13. M->:光标移动到文章的结尾
  14. C-u:给命令传递参数。例如:“C-u 2 C-d”表示删除两个字符
  15. M-x goto-line n RET:调到第n行


* 编辑命令

  1. C-d:删除光标后的一个字符
  2. C-k:删除从光标到行尾的字符(k->killl)
  3. C-x u:Undo(想要redo,随便输入一个字符,在Undo)
  4. C-SPC、C-@、M-x set-mark-command:设置mark
  5. C-x h:将整个缓冲区设置为区域
  6. C-w:将区域的文本删除,并放入yanking ring中。区域指的是从mark到point(光标所处的位置称为point)之间的文本
  7. M-w:复制区域到yanking ring中
  8. C-y:将yanking ring中最后一个区域插入当前缓冲区
  9. M-j:回车并且到下一行产生适当的缩进
  10. M-m:将光标移动到当前行的第一个非空白字符上
  11. M-;:产生通用注释
  12. M-x comment-region:把块注释掉
  13. M-x kill-comment:消除注释


* 查找与替换

  1. C-s:向后搜索,光标将停在第一个匹配的字符串处。再按一次C-s将继续搜索下一个匹配的字符串。如果要停止搜索,则使用C-g,此时光标将会回到搜索开始的位置
  2. C-r:向前搜索
  3. M-x replace-string:替换


* 文件操作

  1. C-x c-f:打开文件,如果文件不存在则创建
  2. C-x C-s:保存文件。第一次存盘时,emacs会将文件重命名来备份。重命令的规则通常是在原文件名后加上一个“~”字符。如果要关闭emacs的自动备份功能,使用 M-x customize-variable <Return> make-backup-files <Return>
  3. C-x C-w:将文件“另存为”
  4. C-x C-v:打开一个新文件,并关闭当前缓冲区
  5. C-x C-r:以只读的方式打开文件
  6. C-x i:将文件插入光标当前位置


* 缓冲区

  1. Emacs 把每个编辑中的文件都放在一个称为“缓冲区(buffer)”的地方。每打开一个文件,Emacs 就在其内部开辟一个缓冲区用来保存打开的文件的数据。ESC ESC ESC命令可以用来退出打开的小缓冲区,比如:命令提示窗格等
  2. C-x C-b   列出当前所有的缓冲区(b->buffer)
  3. C-x b 缓冲区名:切换到指定的缓冲区(例如:C-x b M<tab>:切换到以M开头的缓冲区)
  4. C-x s:保存emacs中所有的缓冲区(s->save)
  5. C-x right:切换到下一个缓冲区
  6. C-x left:切换到前一个缓冲区
  7. C-x C-c:退出emacs,并询问用户是否保存
  8. C-x k:关闭缓冲区
  9. C-z:将emacs挂起,然后回到Shell中,并不退出emacs。之后,我们可以使用%emacs或fg命令来回到emacs



* 窗口

Emacs 可以有多个窗格,每个窗格显示不同的文字。

  1. C-x 0:关闭光标所在的窗口
  2. C-x 1:保留光标所在的窗格,并将其扩大到整个屏幕,同时关掉所有其它的窗格
  3. C-x 2:水平分割当前窗口
  4. C-x 3:垂直分割当前窗口
  5. C-x o:在emacs的窗格中进行切换(o->other)
  6. C-M-v:滚动下方的窗格。一般在我们使用下方的窗格进行参考,而又不想将光标切换到下一个窗格时使用



* 使用帮助

  1. C-h c 快捷键:显示快捷键的简要说明
  2. C-h k 快捷键:显示快捷键所对应的命令名及其详细说明
  3. C-h a 关键字:显示包含有指定关键字的命令
  4. C-h i:查看Info文档



* 在emacs中运行shell命令

  1. M-! cmd RET:打开一个名为“*Shell Command Output*“的窗口,并把该命令的执行结果显示在其中。按下”C-x 1“组合键可以关闭这个窗口。由于Shell命令的输出是在一个编辑缓冲区里,因此我们可以对它进行编辑、保存等操作。
  2. M-| cmd RET:运行Shell命令,并使用编辑窗口中选定的区域作为该Shell命令的输入,然后可以选择是否用该Shell命令的输出来替换编辑窗口中选中的区域。
  3. C-u M-! cmd RET:执行一条Shell命令,并将其输出放到编辑区中光标所在的位置处,而不将其输出到”Shell Command Output“窗口。
  4. M-x shell:运行一个子Shell,该子Shell对应于emacs中的一个名为”*Shell*"的缓冲区,此后,我们就可以交互式的运行Shell命令了。
  5. M-x term:运行一个子Shell,该子Shell对应于emacs中的一个名为“*Terminal*”的缓冲区。使用该命令获得的子Shell是一个完整的Shell的模拟,与我们直接在Shell中操作没有什么差别。
  6. M-x eshell:运行emacs shell。该Shell为emacs自己实现的一个shell,而前面运行的shell都为系统中的shell程序(例如:/bin/csh等)。我们可以通过设置变量shell-file-name来设置emacs所使用的默认shell


* Dired功能

  1. emacs的Dired(Directory Editor)功能使emacs缓冲区能够用来显示目录列表,并可以用来进入目录的子目录。Dired缓冲区是只读的,不能够被修改。
  2. C-x d:进入Dired



* emacs配置文件

    emacs配置文件通常位于计算机的 $HOME 目录,如果是 MS Windows (Windows 2000, Windows XP以上),默认是 c:\Documents and Settings\username\Application Data\,这个适用于 Emacs22 以上的版本。Emacs21 默认的 $HOME 目录在 C:\ 。当然也可以通过环境变量 $HOME 重新设置,总之在比较大众化的操作系统中,你都可以通过C-x C-f ~/.emacs 来编辑您的个性化配置文件。

;;显示时间

(display-time)

;;显示行号

(column-number-mode t)

(show-paren-mode t)

;;设置TAB宽度为4

(setq default-tab-width 4)

;;以下设置缩进

(setq c-indent-level 4)

(setq c-continued-statement-offset 4)

(setq c-brace-offset -4)

(setq c-argdecl-indent 4)

(setq c-label-offset -4)

(setq c-basic-offset 4)

(global-set-key "\C-m" 'reindent-then-newline-and-indent)

(setq indent-tabs-mode nil)

(setq standard-indent 4)

;;开启语法高亮。

(global-font-lock-mode 1)

;;设置默认工作目录

(setq default-directory "/home/test/source/")

;; 去掉滚动条

(set-scroll-bar-mode nil)

;;关闭开启画面

(setq inhibit-startup-message t)

(setq indent-tabs-mode t)

;;不产生备份文件

(setq make-backup-files nil)

;;设置自定义变量

(custom-set-variables

'(column-number-mode t)

'(current-language-environment "UTF-8")

'(display-time-mode t)

'(ecb-options-version "2.32")

'(mouse-1-click-in-non-selected-windows t)

'(mouse-drag-copy-region t)

'(mouse-yank-at-point t)

'(save-place t nil (saveplace))

'(show-paren-mode t)

'(transient-mark-mode t))

(custom-set-faces

;;选择小工具栏图标

(tool-bar-mode -1)


*