<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY mdash "&#38;#x2014;">
<!ENTITY hellip "&#x2026;">
<!ENTITY introduction SYSTEM "introduction.xml">
<!ENTITY interface SYSTEM "interface.xml">
<!ENTITY fileoperations SYSTEM "fileoperations.xml">
<!ENTITY projects SYSTEM "projects.xml">
<!ENTITY build SYSTEM "build.xml">
<!ENTITY debugger SYSTEM "debugger.xml">
<!ENTITY glade SYSTEM "glade.xml">
<!ENTITY preferences SYSTEM "preferences.xml">
<!ENTITY tools SYSTEM "tools.xml">
<!ENTITY authors SYSTEM "authors.xml">
<!ENTITY license SYSTEM "license.xml">
<!ENTITY appversion "2.0.2">
<!ENTITY manrevision "2.7">
<!ENTITY date "April 2006">
<!ENTITY app "anjuta">
]>
<!-- =============Document Header ============================= -->
<book id="index" lang="th">
 <bookinfo>
  <title>คู่มือ IDE แอนจูตา</title>
  <edition>v1.0.0</edition>
  <abstract role="description">
  	<para>คู่มือสำหรับ IDE แอนจูตา</para>
  </abstract>
  
	<author role="maintainer">
		<firstname>Naba</firstname>
		<surname>Kumar</surname>
	</author>
	<author>
		<firstname>Andy</firstname>
		<surname>Piper</surname>
	</author>
	<author>
		<firstname>Biswapesh</firstname>
		<surname>Chattopadhyayr</surname>
	</author>
	<author>
		<firstname>Johannes</firstname>
		<surname>Schmid</surname>
	</author>

  <copyright>
   <year>2001-2002</year>
   <year>2006-2008</year>
   <holder>Naba Kumar, Andy Piper, Biswapesh Chattopadhyay</holder>
   <holder>Johannes Schmid</holder>
  </copyright><copyright><year>2008, 2009</year><holder>Akom Chotiphantawanon (knight2000@gmail.com)</holder></copyright><copyright><year>2009</year><holder>Theppitak Karoonboonyanan (thep@linux.thai.net)</holder></copyright>
  
  <legalnotice>
   <para>อนุญาตให้ทำซ้ำ เผยแพร่ และ/หรือ ดัดแปลงเอกสารนี้ได้ ภายใต้เงื่อนไขของ <citetitle>GNU Free Documentation License</citetitle> รุ่น 1.1 หรือรุ่นถัดมารุ่นใด ๆ ที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี (Free Software Foundation) โดยไม่มี "หัวข้อห้ามเปลี่ยน" (Invariant Sections), ไม่มี "ข้อความปกหน้า" (Front-Cover Texts) และไม่มี "ข้อความปกหลัง" (Back-Cover Texts) คุณอาจรับสำเนาของ <citetitle>GNU Free Documentation License</citetitle> จากมูลนิธิซอฟต์แวร์เสรีได้ที่ <ulink type="http" url="http://www.fsf.org">เว็บไซต์ของมูลนิธิ</ulink> หรือโดยเขียนไปที่: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.</para>
   <para>มีชื่อหลายชื่อที่บริษัทต่าง ๆ ใช้แยกความแตกต่างของผลิตภัณฑ์และบริการของตนจากบริษัทอื่น และอ้างเป็นเครื่องหมายการค้า ที่ใดก็ตามที่ชื่อเหล่านั้นปรากฏในเอกสารของ GNOME และสมาชิกโครงการเอกสาร GNOME ได้รับทราบเกี่ยวกับเครื่องหมายการค้าเหล่านั้น ชื่อเหล่านั้นจะเขียนด้วยตัวพิมพ์ใหญ่ หรือขึ้นต้นด้วยตัวพิมพ์ใหญ่</para>
  </legalnotice>

	<revhistory>
		<revision>
		  <revnumber>คู่มือแอนจูตา 2.1.0</revnumber>
		  <date>2007</date>
		  <revdescription>
			 <para role="author">Johannes Schmid<email>jhs@gnome.org</email></para>
			 <para role="publisher">ทีมแอนจูตา</para>
		  </revdescription>
		</revision>
	</revhistory>
		
 </bookinfo>
 <!-- Document Body -->
 <!-- Introduction -->
  <!-- ============= Introduction ============================== -->
 <chapter id="introduction">
  <title>เกริ่นนำ</title>
  <para><application>แอนจูตา</application> เป็นชุดเครื่องมือพัฒนาเบ็ดเสร็จ (IDE) ที่มีความสามารถครบครันสำหรับเดสก์ท็อป GNOME มีเครื่องมือระดับสูงมากมายสำหรับการเขียนโปรแกรม ไม่ว่าจะเป็นการบริหารจัดการโครงการ เครื่องมือวิเศษสร้างโปรแกรม เครื่องมือดีบั๊กแบบโต้ตอบ การเชื่อมรวมกับเครื่องมือออกแบบส่วนติดต่อผู้ใช้สำหรับ Glade เชื่อมรวมกับคู่มือ API Devhelp เชื่อมรวมกับเครื่องมือตรวจสอบการใช้หน่วยความจำ Valgrind เชื่อมรวมกับเครื่องมือวัดประสิทธิภาพ gprof มีเครื่องมือสร้างคลาส เครื่องมือแก้ไขซอร์สที่เก่งกาจ เครื่องมือช่วยไล่ดูซอร์ส และอื่น ๆ</para>

  <para>Anjuta DevStudio ออกแบบมาเพื่อให้ง่ายต่อการใช้งาน แต่ยังทรงพลังมากพอที่จะตอบสนองทุกความต้องการของคุณในการเขียนโปรแกรม เราได้เพิ่มความสามารถใหม่ ๆ มากมายในแอนจูตาตลอดการพัฒนา เราให้ความสำคัญกับการเพิ่มขีดความสามารถและความสะดวกใช้ในเวลาเดียวกัน รวมทั้งการทำให้การพัฒนาซอฟต์แวร์ของคุณสนุกสนานโดยไม่เพิ่มภาระต่อการเรียนรู้จนเกินไป เราจะมุ่งปรับปรุงและสร้างเสถียรภาพให้กับแอนจูตาต่อไป เพื่อให้คุณได้รับความรู้สึกที่ดีกับ IDE เท่าที่จะทำได้ เราหวังว่าคุณจะมีความสุขกับการใช้แอนจูตา หากพบปัญหา กรุณาช่วยเราปรับปรุง ด้วยการรายงานบั๊กและให้คำแนะนำ</para>
  <para>ภาพหน้าจอต่อไปนี้แสดงบางส่วนของสิ่งที่คุณจะพบในแอนจูตา</para>

  <para>
  <figure id="anjuta-scrshot">
   <title>แอนจูตาขณะใช้งาน</title>
   <screenshot>
   <screeninfo>แอนจูตาขณะใช้งาน</screeninfo>
   <graphic format="PNG" fileref="figures/anjuta-in-action.png" srccredit="jhs"/>
   </screenshot>
   </figure>
  </para>

  <para>แอนจูตามีระบบ dock ที่ยืดหยุ่นและมากความสามารถ ที่ช่วยให้คุณสามารถจัดวางสิ่งต่าง ๆ ในหน้าต่างได้ในแบบที่คุณต้องการ คุณสามารถลากวางช่องแสดงต่าง ๆ ได้โดยใช้แถบลากเพื่อจัดเรียงใหม่ การจัดเรียงจะคงอยู่สำหรับแต่ละโครงการ ทำให้คุณสามารถใช้การจัดเรียงแบบต่าง ๆ ไปตามแต่ละโครงการได้ ช่องแสดงที่ dock ไว้ทั้งหมดสามารถย่อเก็บได้ เพื่อลดความเบียดเสียดในหน้าต่างหลัก ช่องแสดงที่ถูกย่อเก็บจะปรากฏเป็นไอคอนที่ด้านซ้ายของหน้าต่างหลัก คุณสามารถตั้งค่าปุ่มลัดของเมนูทั้งหมดได้ ด้วยการพิมพ์ขณะที่เคอร์เซอร์เลือกที่เมนูอยู่ (ตามวิธีปกติของ GNOME) หรือจะทำผ่านส่วนตั้งค่าปุ่มลัดโดยเฉพาะก็ได้</para>

  <para>กรุณารายงานปัญหาใด ๆ ก็ตามที่คุณพบใน <application>แอนจูตา</application> - การรายงานนี้เป็นการช่วยปรับปรุงตัวซอฟต์แวร์เอง และเป็นการช่วยชุมชนโอเพนซอร์สด้วย</para>
 </chapter>

 <!-- Getting Familiar with Anjuta -->
 <chapter id="familiar">
  <title>ทำความรู้จักกับแอนจูตา</title>
 <!-- ============= Getting Familiar: Menus  ============-->
  <sect1 id="menu-and-shortcuts">
   <title>เมนูและปุ่มลัด</title>
   <para>ที่ด้านบนสุดของหน้าต่างหลัก <application>แอนจูตา</application> จะเป็นแถบเมนู คุณสามารถสั่งงานแอนจูตาได้เกือบทั้งหมดที่รายการเมนูนี้ คำสั่งต่าง ๆ จะจัดเป็นกลุ่มตามประเภท ตัวอย่างเช่น คำสั่งเกี่ยวกับแฟ้มจะจัดรวมอยู่ในเมนู <guisubmenu>แฟ้ม</guisubmenu></para>
	
    <figure id="menubar">
      <title>แถบเมนู</title>
	  <screenshot>
      <screeninfo>แถบเมนูของแอนจูตา</screeninfo>
       <graphic fileref="figures/menubar.png" format="PNG" srccredit="jhs"/>
      </screenshot>
    </figure>
    
    <figure id="file-menu">
      <title>เมนูแฟ้ม</title>
      <screenshot>
      <screeninfo>เมนูแฟ้ม</screeninfo>
       <graphic fileref="figures/file_menu.png" format="PNG" srccredit="jhs"/>
      </screenshot>
    </figure>
	
   <para>รายการเมนูหลายรายการจะมีปุ่มลัด โดยปุ่มลัดจะแสดงอยู่ข้าง ๆ กับรายการเมนูนั้น ๆ ปุ่มลัดอื่น ๆ ที่เป็นประโยชน์ เช่น</para>
	
   <para>
    <itemizedlist>
     <listitem>
      <para><emphasis>สลับหน้าเครื่องมือแก้ไข:</emphasis> <keycombo><keycap>Ctrl</keycap><keycap>Alt</keycap><keycap>Page Up</keycap></keycombo> (ไปข้างหน้า) และ <keycombo><keycap>Ctrl</keycap><keycap>Alt</keycap><keycap>Page Down</keycap></keycombo> (ถอยหลัง) นอกจากนี้ คุณยังสามารถสลับหน้าได้โดยคลิกขวาที่แท็บสมุด แล้วเลือกชื่อแฟ้มจากเมนูแบบผุดขึ้น (เป็นประโยชน์ในกรณีที่ไม่สามารถมองเห็นแท็บในเครื่องมือแก้ไขได้พร้อมกันทั้งหมด) เดสก์ท็อปบางชุดอาจมีการกำหนดหน้าที่ปุ่มลัดเหล่านี้ไว้ ในกรณีเช่นนั้น คุณจะต้องตั้งค่าใหม่ (ไม่ใช่ที่แอนจูตา เพราะปุ่มลัดถูกกำหนดไว้ตายตัว) ถ้าคุณต้องการใช้ปุ่มลัดเหล่านี้</para>
     </listitem>
     <listitem>
      <para><emphasis>วิธีใช้ตามบริบท:</emphasis><keycombo><keycap>Shift</keycap><keycap>F1</keycap></keycombo> วางเคอร์เซอร์ที่คำ (เช่น ที่ชื่อฟังก์ชัน) ที่คุณต้องการขอดูวิธีใช้ API แล้วกดปุ่มลัดนี้ วิธีใช้ตามบริบทนี้จะทำงานได้ก็ต่อเมื่อคุณติดตั้ง <application>DevHelp</application> ไว้แล้วเท่านั้น มิฉะนั้น เมนูและปุ่มแถบเครื่องมือวิธีใช้ตามบริบทจะไม่ทำงาน คุณสามารถหา Devhelp ได้จากเว็บไซต์ของ <application>DevHelp</application> และคุณจะต้องติดตั้งข้อมูลหนังสือ <application>DevHelp</application> ที่เกี่ยวข้องด้วย</para>
     </listitem>
     <listitem>
      <para><emphasis>เติมเต็มคำอัตโนมัติ:</emphasis><keycombo><keycap>Ctrl</keycap><keycap>Enter</keycap></keycombo> กดปุ่มลัดนี้ขณะที่เคอร์เซอร์อยู่ที่ท้ายคำที่ไม่สมบูรณ์ จะปรากฏรายการของคำที่ตรงพร้อมส่วนที่เหลือให้ จากนั้นก็เลื่อนและเลือกคำที่เหมาะสมจากรายการคำได้</para>
     </listitem>
     <listitem>
      <para><emphasis>ปุ่มลัดเพิ่มเติม:</emphasis> มองหาปุ่มลัดที่แสดงที่ด้านขวาของป้ายชื่อรายการเมนู ปุ่มลัดเหล่านี้ยังสามารถเปลี่ยนแปลงได้ ดังคำอธิบายในเกร็ดด้านล่าง</para>
     </listitem>
    </itemizedlist>
   <tip>
   <title>กำหนดปุ่มลัดเอง</title>
   <para>คุณสามารถเปลี่ยนปุ่มลัดปริยายได้ โดยเลือก <menuchoice><guisubmenu>แก้ไข</guisubmenu><guimenuitem>ปรับแต่ง</guimenuitem></menuchoice> แล้วเลือกแท็บ <interface>ปุ่มลัด</interface></para>
   </tip>
   </para>
  </sect1>

<!-- ============= Getting Familiar: Main window  ============-->
  <sect1 id="main-win">
   <title>หน้าต่างหลัก</title>
   <para>ในหน้าต่างหลักจะมีหน้าต่างแสดงหลายช่อง ซึ่งสามารถจัดวางใหม่ได้ด้วยการลากที่แถบชื่อ หน้าต่างแสดงเหล่านี้สามารถย่อเก็บได้โดยการคลิกที่ปุ่มย่อเก็บที่ด้านซ้ายของแถบชื่อ</para>

   <para>
    <orderedlist>
     <listitem>
      <para><interface>หน้าต่างเอกสาร</interface> จะมีเอกสารที่ทำงานอยู่เพียงคราวละเอกสาร (ถ้ามีแฟ้มเปิดอยู่) ทุกคำสั่งที่เกี่ยวกับแฟ้มจะกระทำกับเอกสารที่ทำงานอยู่นี้ คุณสามารถสลับไปยังเอกสารใด ๆ ได้โดยคลิกที่แท็บของเอกสารนั้น หรือจะใช้วิธีคลิกขวาบนแท็บแบ่งหน้า แล้วเลือกเอกสารจากเมนูแบบผุดขึ้นจะแสดงให้เห็นก็ได้ วิธีนี้จะเป็นประโยชน์ในกรณีที่คุณมีแฟ้มเปิดอยู่เป็นจำนวนมาก แต่ไม่สามารถเห็นได้ทั้งหมดในพื้นที่แท็บ</para>
	 </listitem>
     <listitem>
      <para><interface>หน้าต่างโครงการ</interface> จะแสดงแผนภาพต้นไม้ของแฟ้มต่าง ๆ ในโครงการถ้าคุณเปิดโครงการอยู่ ถ้าไม่มีโครงการเปิดอยู่ <interface>หน้าต่างโครงการ</interface> ก็มักจะถูกซ่อนไว้ การดับเบิลคลิกที่รายการใด ๆ ใน <interface>หน้าต่างโครงการ</interface> จะเป็นการเปิดแฟ้มนั้น ๆ</para>
     </listitem>
      <listitem>
      <para><interface>หน้าต่างแฟ้ม</interface> แสดงแผนภาพต้นไม้ของแฟ้ม ถ้าไม่มีโครงการเปิดอยู่ แผนภาพต้นไม้ของแฟ้มโดยปกติก็จะชี้ไปที่รากของระบบแฟ้ม แต่คุณก็สามารถเปลี่ยนพฤติกรรมนี้ได้ในค่าปรับแต่ง ถ้ามีโครงการเปิดอยู่ หน้าต่างนี้ก็จะแสดงแฟ้มทั้งหมดที่อยู่ในโครงการ การดับเบิลคลิกจะเปิดแฟ้มด้วยโปรแกรมตามที่กำหนดไว้ในค่าปรับแต่ง MIME ของ GNOME การคลิกขวาจะผุดเมนูให้คุณเลือกวิธีเปิดแฟ้ม</para>
     </listitem>
      <listitem>
      <para><interface>หน้าต่างสัญลักษณ์</interface> จะแสดงแผนภาพต้นไม้ของสัญลักษณ์ที่มีอยู่ในโครงการตามที่สร้างจากตัวแจง <application>ctags</application> การดับเบิลคลิกจะเปิดแฟ้มที่บรรทัดที่มีสัญลักษณ์นั้น ๆ ในหน้าต่างเครื่องมือแก้ไข</para>
      <para>และยังมี <interface>แท็บค้นหา</interface> ในหน้าต่างสัญลักษณ์ ซึ่งคุณสามารถใช้ค้นหาสัญลักษณ์ต่าง ๆ ได้</para>
     </listitem>
     <listitem>
      <para><interface>หน้าต่างข้อความ</interface> จะแสดงข้อความทั้งหมด (ทั้งจาก <filename>stdout</filename> และ <filename>stderr</filename>) เมื่อมีการเรียกคำสั่งภายนอก โดยปกติแล้ว <interface>หน้าต่างข้อความ</interface> จะถูกซ่อนไว้ แต่จะปรากฏทันทีที่มีการเรียกคำสั่งภายนอก เช่น ขณะคอมไพล์แฟ้มหรือโครงการ ขณะดีบั๊ก ค้นหา และการกระทำอื่น ๆ อีกหลายอย่าง นอกจากนี้ <application>แอนจูตา</application> ยังเพิ่มข้อความเองที่นี่ด้วยเมื่อจำเป็น</para>
      <para>สีที่ใช้แสดงข้อความมีความสำคัญ ข้อความที่แสดงด้วยสีข้อความมาตรฐาน (โดยปกติเป็นสีดำ) เป็นข้อความปกติ ข้อความที่แสดงด้วยสีส้มเป็นคำเตือน และที่เป็นสีแดงคือข้อผิดพลาด คำเตือนและข้อผิดพลาดจะเป็น <emphasis>ลิงก์</emphasis> เมื่อดับเบิลคลิกที่ข้อความดังกล่าว จะนำคุณไปยังแฟ้มและบรรทัดที่ระบุในข้อความ</para>
      <para>ตัวอย่างเช่น เมื่อคุณคอมไพล์แฟ้มที่มีข้อผิดพลาด จะมีข้อความสีแดงแจ้งปัญหาพร้อมระบุตำแหน่งที่เกิด การดับเบิลคลิกที่ข้อความดังกล่าวจะเปิดแฟ้มนั้นพร้อมทั้งเน้นบรรทัดที่มีข้อผิดพลาด</para>
     </listitem>
     <listitem>
      <para><interface>หน้าต่างเทอร์มินัล</interface> เป็นเทอร์มินัลจำลอง ซึ่งคุณสามารถพิมพ์คำสั่งได้เหมือนกับในโปรแกรมเทอร์มินัล GNOME</para>
     </listitem>
    </orderedlist>
   </para>
   <note>
   <title>การจัดการวาระ</title>
   <para>การตั้งค่าทั้งหมด รวมทั้งขนาดและตำแหน่งของหน้าต่าง จะถูกบันทึกไว้เมื่อคุณออกจาก <application>แอนจูตา</application> แต่การจัดการวาระยังอยู่ระหว่างการพัฒนา ดังนั้น คุณจึงไม่ควรออกจาก <application>แอนจูตา</application> โดยมีเอกสารที่ยังไม่บันทึกตกค้าง <application>แอนจูตา</application> จะแสดงคำเตือนถ้าคุณพยายามออกโดยมีเอกสารที่ยังไม่บันทึกเปิดอยู่</para>
   </note>
  </sect1>
 </chapter>

 <!-- File operations -->
  <chapter id="file-operations">
  <title>การกระทำกับแฟ้ม</title>
  
  <!-- ============= File operations: Creating a new file === -->
  <sect1 id="creating-files">
   <title>การสร้างแฟ้มใหม่และการแทรกข้อความ</title>
    <sect2 id="new-file">
    <title>การสร้างแฟ้มใหม่</title>
     <para>การสร้างแฟ้มใหม่ ทำได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>ใหม่</guimenuitem></menuchoice> จากแถบเมนู หรือคลิกที่ปุ่ม <guibutton>แฟ้มใหม่</guibutton> บนแถบเครื่องมือหลัก จะปรากฏหน้าใหม่ในเครื่องมือแก้ไข (หรือเปิดหน้าต่างใหม่ ถ้าเอกสารแม่อยู่ในหน้าต่าง) เอกสารใหม่จะมีชื่อเป็น <filename>newfile#1</filename>, <filename>newfile#2</filename>, <filename>newfile#3</filename> ไปเรื่อย ๆ</para>
	   <important>
	   <title>บันทึกแฟ้ม</title>
	   <para>คุณควรบันทึกเอกสารใหม่ทันทีที่เป็นไปได้ เพื่อหลีกเลี่ยงการสูญหายของข้อมูลในกรณีที่โปรแกรมพัง</para>
	   </important>
    </sect2>
    <sect2 id="file-wizard">
    <title>เครื่องมือช่วยสร้างแฟ้ม</title>
     <para>เครื่องมือช่วยสามารถใช้สร้างแฟ้มใหม่ได้ การสร้างแฟ้มใหม่ ทำได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guisubmenu>ใหม่</guisubmenu><guimenuitem>แฟ้ม</guimenuitem></menuchoice> จากแถบเมนู จะเป็นการเปิดกล่องโต้ตอบ "แฟ้มใหม่" จากนั้น เลือกชนิดของแฟ้ม และป้อนชื่อแฟ้ม นามสกุลของแฟ้มจะถูกเพิ่มให้โดยอัตโนมัติ คุณสามารถเพิ่มข้อมูลสัญญาอนุญาต (ตามสัญญาอนุญาตที่คุณเลือก) และแฟ้มส่วนหัว ในกรณีที่เป็นแฟ้มส่วนหัวของ C/C++  คุณสามารถเพิ่มแม่แบบสำหรับแฟ้มส่วนหัวได้ด้วย เสร็จแล้วคลิก <guibutton>ตกลง</guibutton> เพื่อตรวจสอบการสร้าง <figure id="new-file-wizard">
       <title>เครื่องมือช่วยสร้างแฟ้มใหม่</title>
       <screenshot>
        <screeninfo>กล่องโต้ตอบเปิดแฟ้ม</screeninfo>
        <graphic fileref="figures/new_file_wizard.png" format="PNG" srccredit="jnoel"/>
       </screenshot>
      </figure></para>
     <para>ในบางโอกาส <application>แอนจูตา</application> ยังมีการเปิดหน้าต่างแฟ้มใหม่ในระหว่างปฏิบัติการบางอย่าง ตัวอย่างเช่น ปฏิบัติการบางอย่างของ Subversion เช่น <command>Diff</command> และ <command>ดูปูม</command> จะเปิดหน้าต่างแฟ้มใหม่และเขียนผลลัพธ์ลงที่นั่น คุณสามารถบันทึกเนื้อหาของหน้าต่างเหล่านี้ลงในแฟ้มจริงได้ถ้าต้องการ</para>
     </sect2>
     <sect2 id="inserting-macros">
      <title>การแทรกแมโคร</title>
       <para>คุณสามารถใช้ <emphasis>แมโคร</emphasis> ในการแก้ไขข้อความชุดซ้ำ ๆ ได้อย่างรวดเร็ว</para>
       <important>
       <para>ปลั๊กอินแมโครจะต้องทำงานก่อน</para>
       </important>
      <sect3 id="inserting">
       <title>การแทรก</title>
       <para>แมโครมี 2 ชนิด: แมโครของแอนจูตาและแมโครของผู้ใช้ (แสดงเป็น "แมโครของฉัน") แมโครของแอนจูตาไม่สามารถแก้ไขได้ แต่คุณสามารถกำหนดและปรับเปลี่ยนแมโครผู้ใช้ของคุณเองได้</para>
       <para>การแทรกแมโคร ทำได้โดยเลื่อนเคอร์เซอร์ไปยังตำแหน่งที่ต้องการ เลือก <menuchoice><guisubmenu>แก้ไข</guisubmenu><guisubmenu>แมโคร</guisubmenu><guimenuitem>แมโคร...</guimenuitem></menuchoice> จะปรากฏกล่องโต้ตอบ เลือกแมโครที่ต้องการในรายชื่อ ผลของการแทนที่แมโครที่เลือกจะแสดงในหน้าต่าง พร้อมกับข้อมูลสรุปเกี่ยวกับแมโคร จากนั้นคลิก <guibutton>แทรก</guibutton> ข้อความแทนที่ของแมโครจะถูกแทรกลงที่ตำแหน่งของเคอร์เซอร์</para>
       <para>อีกวิธีหนึ่งที่จะแทรกแมโครคือเลือก <menuchoice><guisubmenu>แก้ไข</guisubmenu><guisubmenu>แมโคร</guisubmenu><guimenuitem>แทรกแมโคร...</guimenuitem></menuchoice> แล้วกดปุ่มลัดของแมโครที่ต้องการ <figure id="display-macro">
         <title>แมโคร</title>
          <screenshot>
           <screeninfo>กล่องโต้ตอบแมโคร</screeninfo>
           <graphic fileref="figures/display_macro.png" format="PNG" srccredit="jnoel"/>
          </screenshot>
        </figure></para>
       </sect3>
       <sect3 id="defining-macro">
        <title>การนิยามแมโคร</title>
        <para>คลิก <guibutton>เพิ่ม</guibutton> จากหน้าต่างแทรกแมโคร หรือเลือกเมนู <menuchoice><guisubmenu>แก้ไข</guisubmenu><guisubmenu>แมโคร</guisubmenu><guimenuitem>เพิ่มแมโคร...</guimenuitem></menuchoice> จะปรากฏหน้าต่าง เพิ่ม/แก้ไข จากนั้นก็ป้อนชื่อแมโคร เลือกหรือกำหนดประเภท แล้วป้อนปุ่มลัด จากนั้น แก้ไขข้อความสำหรับแมโครของคุณ โดยอักขระ ' | ' จะแสดงตำแหน่งเคอร์เซอร์หลังจากการแทรกแมโคร เสร็จแล้ว คลิก <guibutton>ตกลง</guibutton> แมโครจะถูกเพิ่มเข้าไปในรายชื่อ</para>
        <para>คุณสามารถลบแมโครได้ โดยเลือกแมโครในรายชื่อ แล้วคลิก <guibutton>เอาออก</guibutton> แน่นอนว่าการลบนี้ใช้ได้เฉพาะกับแมโครผู้ใช้ (แมโครของฉัน) เท่านั้น</para>
        <para>ในทำนองเดียวกัน คุณสามารถแก้ไขและปรับเปลี่ยนแมโครได้ โดยเลือกในรายชื่อ แล้วคลิก <guibutton>แก้ไข</guibutton> <figure id="add-edit-macro">
          <title>เพิ่ม/แก้ไขแมโคร</title>
          <screenshot>
           <screeninfo>กล่องโต้ตอบ เพิ่ม/แก้ไข</screeninfo>
           <graphic fileref="figures/add_edit_macro.png" format="PNG" srccredit="jnoel"/>
          </screenshot>
         </figure></para>
       </sect3>
       <sect3 id="macro-keyword">
        <title>คำหลักสำหรับแมโคร</title>
        <para>มีคำหลักจำนวนหนึ่งสำหรับแมโคร ซึ่งสามารถใช้ในนิยามแมโครได้ คำหลักสำหรับแมโครเหล่านี้ จะเริ่มต้นและลงท้ายด้วยอักขระ '@'</para>
        <para>คำหลักสำหรับแมโครที่มีให้คือ : @DATE_TIME@, @DATE_YMD@, @DATE_Y@, @USER_NAME@, @FILE_NAME@, @FILE_NAME_UP@, @FILE_NAME_UP_PREFIX@, @EMAIL@, @TABSIZE@, @INDENTSIZE@, @USETABS@ <figure id="keyword-macro">
         <title>แมโครที่ใช้คำหลัก</title>
          <screenshot>
           <screeninfo>แมโครที่ใช้คำหลัก</screeninfo>
           <graphic fileref="figures/keyword_macro.png" format="PNG" srccredit="jnoel"/>
          </screenshot>
         </figure></para>
      </sect3>
     </sect2>
  </sect1>

 <!-- ============= File operations: Opening and saving files === -->
  <sect1 id="open-save-files">
   <title>การเปิดและบันทึกแฟ้ม</title>
   <para>
    <orderedlist>
     <listitem>
      <para><emphasis>การเปิดแฟ้ม:</emphasis> การเปิดแฟ้มที่มีอยู่ก่อนแล้ว ทำได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>เปิด</guimenuitem></menuchoice> จากแถบเมนู หรือคลิกที่ปุ่ม <guibutton>เปิด</guibutton> บนแถบเครื่องมือ หรือกด <keycombo><keycap>Ctrl</keycap><keycap>O</keycap></keycombo> ก็ได้ จะปรากฏกล่องโต้ตอบ <interface>เปิดแฟ้ม</interface>  <figure id="open-file">
        <title>กล่องโต้ตอบเปิดแฟ้ม</title>
        <screenshot>
		<screeninfo>กล่องโต้ตอบเปิดแฟ้ม</screeninfo>
         <graphic fileref="figures/open_file.png" format="PNG" srccredit="jnoel"/>
        </screenshot>
       </figure> จากนั้น เลือกหรือป้อนชื่อแฟ้มที่คุณต้องการเปิด แล้วคลิก <guibutton>เปิด</guibutton> การเปิดแฟ้มมากกว่าหนึ่งแฟ้มพร้อมกัน ก็ทำได้โดยเลือกแฟ้มต่าง ๆ ที่จะเปิดโดยกด <keycap>Ctrl</keycap> ค้างไว้ แล้วคลิกแฟ้มเพิ่มทีละแฟ้ม เสร็จแล้วกดปุ่ม <guibutton>เปิด</guibutton> ถ้าคุณเปลี่ยนใจ ก็คลิก <guibutton>ยกเลิก</guibutton> เพื่อปิดกล่องโต้ตอบโดยไม่มีการเปิดแฟ้ม</para>
	  <para>
	   <figure id="open-file-multiple">
        <title>กล่องโต้ตอบเปิดหลายแฟ้ม</title>
        <screenshot>
		<screeninfo>กล่องโต้ตอบแฟ้มในโหมดเลือกหลายรายการ</screeninfo>
         <graphic fileref="figures/open_file_multiple.png" format="PNG" srccredit="jnoel"/>
        </screenshot>
       </figure>
	  </para>
	  <para>คุณสามารถเปิดใช้งานตัวเลือก <emphasis>แสดงแฟ้มซ่อน</emphasis> ผ่านเมนูแบบผุดขึ้นที่ปรากฏเมื่อคุณคลิกขวาในกล่องโต้ตอบเปิดแฟ้ม ตัวเลือกนี้จะทำให้แฟ้มที่ซ่อนอยู่ (แฟ้มที่ขึ้นต้นด้วย ".") ปรากฏในรายชื่อแฟ้ม หากต้องการซ่อนแฟ้มซ่อนก็เลิกกาตัวเลือกนี้ นอกจากนี้ กล่องโต้ตอบเปิดแฟ้มยังมีตัวกรองชนิดของแฟ้มในตัว เมื่อคุณเลือกตัวกรองชนิดแฟ้มที่เหมาะสมในกล่องโต้ตอบ รายชื่อแฟ้มจะแสดงเฉพาะแฟ้มชนิดที่เลือกเท่านั้น</para>
     </listitem>
     
     <listitem>
      <para><emphasis>การบันทึกแฟ้ม:</emphasis> วิธีบันทึกแฟ้ม ทำได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>บันทึก</guimenuitem></menuchoice> จากแถบเมนู หรือคลิกปุ่ม <guibutton>บันทึก</guibutton> บนแถบเครื่องมือ หรือกด <keycombo><keycap>Ctrl</keycap><keycap>S</keycap></keycombo> ก็ได้ จะเป็นการบันทึกแฟ้ม ถ้าเป็นแฟ้มใหม่ จะปรากฏกล่องโต้ตอบ <interface>บันทึกแฟ้มเป็น</interface> ให้คุณป้อนชื่อแฟ้มแล้วคลิก <guibutton>บันทึก</guibutton> เพื่อบันทึกแฟ้มใหม่ด้วยชื่อที่กำหนด <screenshot>
	    <screeninfo>การบันทึกเป็นแฟ้ม</screeninfo>
            <graphic fileref="figures/save_as_file.png" format="PNG" srccredit="jnoel"/>
           </screenshot></para>
	   <note>
	   <title>การบันทึกแฟ้มอัตโนมัติ</title>
		<para>ถ้าคุณเปิดใช้งานการบันทึกอัตโนมัติ แอนจูตาจะยังไม่บันทึกแฟ้มใหม่ใด ๆ โดยอัตโนมัติ คุณต้องสั่งบันทึกเองก่อน กับตัวเลือก <guimenuitem>บันทึกทั้งหมด</guimenuitem> ก็เช่นกัน: แอนจูตาจะไม่บันทึกแฟ้มที่สร้างใหม่ ถ้าคุณยังไม่ได้สั่งบันทึกแฟ้มเหล่านั้นเองก่อน <emphasis>คุณจะต้องสั่งบันทึกแฟ้มเองก่อน การบันทึกอัตโนมัติหรือ <guimenuitem>บันทึกทั้งหมด</guimenuitem> จึงจะเริ่มทำงานกับแฟ้มเหล่านั้น</emphasis></para>
	   </note>
     </listitem>

     <listitem>
      <para><emphasis>การบันทึกแฟ้มด้วยชื่อใหม่:</emphasis> คุณสามารถเจาะจงบันทึกแฟ้มโดยกำหนดชื่อใหม่ได้ โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>บันทึกเป็น</guimenuitem></menuchoice> จากแถบเมนู จะปรากฏกล่องโต้ตอบ <interface>บันทึกแฟ้มเป็น</interface> ขึ้นมาให้คุณป้อนชื่อแฟ้มใหม่ คุณก็ป้อนชื่อแฟ้มแล้วคลิก <guibutton>บันทึก</guibutton></para>
      <note>
       <title>การบันทึกแฟ้มโดยเขียนทับ</title>
       <para>เมื่อคุณใช้ <guimenuitem>บันทึกเป็น</guimenuitem> กับแฟ้มที่มีอยู่แล้ว แฟ้มต้นฉบับจะไม่ถูกลบ โดยจะไม่มีการเปลี่ยนแปลงจากที่บันทึกครั้งสุดท้าย สำหรับแฟ้มที่ตั้งชื่อใหม่นั้น ถ้ามีแฟ้มที่ชื่อซ้ำกันอยู่ก่อนแล้ว จะมีกล่องโต้ตอบยืนยันปรากฏขึ้นมา เพื่อถามให้แน่ใจว่าคุณต้องการเขียนทับแฟ้มดังกล่าว ถ้าคลิก <guibutton>ใช่</guibutton> ก็จะเขียนทับแฟ้มนั้นด้วยแฟ้มที่คุณกำลังบันทึก</para>
      </note>
     </listitem>
     
     <listitem>
      <para><emphasis>การปิดแฟ้ม:</emphasis> วิธีปิดแฟ้ม ทำได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>ปิด</guimenuitem></menuchoice> จากแถบเมนู หรือคลิกปุ่ม <guibutton>ปิด</guibutton> บนแถบเครื่องมือ (และคุณยังสามารถปิดแฟ้มโดยการคลิก X ในแท็บชื่อแฟ้มได้ด้วย) การปิดนี้เป็นการปิดแฟ้มปัจจุบัน ถ้าแฟ้มนั้นยังไม่ถูกบันทึก หรือเป็นแฟ้มใหม่ <application>แอนจูตา</application> จะถามคุณเพื่อบันทึกแฟ้มนั้นก่อนปิด</para>
     </listitem> 
    </orderedlist>
   </para>
  </sect1>
 
 <!-- ============= File operations: Editing files === -->
  <sect1 id="editing-files">
   <title>การแก้ไขแฟ้ม</title>
   <para><application>แอนจูตา</application> มีความสามารถหลายอย่างที่ช่วยคุณแก้ไขและทำงานกับแฟ้มซอร์ส หัวข้อต่อไปนี้ จะอธิบายวิธีใช้ความสามารถบางอย่างที่น่าสนใจ</para>
   <sect2 id="editor-margins-sec">
   <title>ขอบของเครื่องมือแก้ไข</title>
      <para><emphasis>ขอบของเครื่องมือแก้ไข:</emphasis> ขอบของเครื่องมือแก้ไขจะอยู่ทางด้านซ้ายของเครื่องมือแก้ไข และใช้เพื่อวัตถุประสงค์พิเศษบางอย่าง ขอบเครื่องมือแก้ไขมีสามขอบ คือ <emphasis>ขอบเลขบรรทัด</emphasis>, <emphasis>ขอบเครื่องหมาย</emphasis> และ <emphasis>ขอบพับโค้ด</emphasis> โดยค่าปริยายนั้น (กล่าวคือ เมื่อคุณเรียกทำงาน <application>แอนจูตา</application> ครั้งแรก) จะเห็นเพียงขอบพับโค้ดเท่านั้น ส่วนที่เหลือสามารถสั่งให้แสดงได้ทางเมนู <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu></menuchoice> <figure id="editor-margins">
        <title>ขอบของเครื่องมือแก้ไข</title>
        <screenshot>
         <screeninfo>แถบเครื่องมือแท็ก</screeninfo>
         <graphic fileref="figures/editor_margins.png" format="PNG" srccredit="naba"/>
        </screenshot>
       </figure></para>
       <para><emphasis>ขอบแสดงเลขบรรทัด</emphasis> จะมีขนาดใหญ่ที่สุดในบรรดาขอบทั้งสาม (และเข้มกว่าขอบอื่น ๆ เล็กน้อย) เป็นขอบสำหรับแสดงเลขบรรทัดของเอกสาร <emphasis>ขอบแสดงเลขบรรทัด</emphasis> สามารถสั่งให้แสดงหรือซ่อนได้ด้วยการสลับค่า <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu><guimenuitem>ขอบแสดงเลขบรรทัด</guimenuitem></menuchoice> การคลิกซ้ายที่ขอบนี้จะเลือกบรรทัดทั้งบรรทัด (รวมถึงอักขระขึ้นบรรทัดใหม่ด้วยถ้ามี) คุณสามารถกำหนดคุณสมบัติแบบอักษรสำหรับขอบแสดงเลขบรรทัดนี้ได้ในกล่องโต้ตอบปรับแต่ง</para>
	  <para><emphasis>ขอบเครื่องหมาย</emphasis> สามารถสั่งให้แสดงหรือซ่อนได้ทางเมนู <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu><guimenuitem>ขอบเครื่องหมาย</guimenuitem></menuchoice> ขอบนี้จะแสดงไอคอนกราฟิกเพื่อทำเครื่องหมายให้กับบรรทัดที่กำหนด เครื่องหมายซึ่งจะแสดงในขอบนี้อาจเป็นเครื่องหมายที่คั่นหน้า (สี่เหลี่ยมสีฟ้า) เครื่องหมายจุดพัก (วงกลมสีแดง) และเครื่องหมายกำกับบรรทัด (หัวลูกศรสีเหลือง) เครื่องหมายที่คั่นหน้าใช้สำหรับระบุบรรทัดที่คั่นหน้าไว้ ซึ่งสามารถสลับได้จากเมนู <menuchoice><guimenu>ไปยัง</guimenu><guisubmenu>ที่คั่นหน้า</guisubmenu><guimenuitem>สลับที่คั่นหน้า</guimenuitem></menuchoice> ในขณะที่เคอร์เซอร์วางอยู่ที่บรรทัดนั้น ส่วนเครื่องหมายจุดพักใช้ในเครื่องมือดีบั๊ก เพื่อทำเครื่องหมายจุดพักของการดีบั๊ก (ดูรายละเอียดเพิ่มเติมได้ที่หัวข้อการดีบั๊ก) และเครื่องหมายกำกับบรรทัดใช้ระบุตำแหน่งปัจจุบันของโปรแกรมในเครื่องมือดีบั๊ก</para>
       <para><emphasis>ขอบพับโค้ด</emphasis> คือที่ที่จะแสดงแผนภาพต้นไม้ของการพับโค้ด การคลิกที่โหนดของแผนภาพต้นไม้ของการพับนี้ จะเป็นการพับหรือคลี่บล็อคของโค้ด โดยจะขีดเส้นใต้บรรทัดที่พับ เพื่อให้เห็นชัดเจนมากขึ้นว่าบล็อคของโค้ดถูกพับไว้ใต้บรรทัดนั้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการพับโค้ดได้ที่หัวข้อ <emphasis>การพับโค้ด</emphasis> ที่ด้านล่าง</para>
       <note>
       <title>เครื่องหมายเมื่อไม่ใช้ขอบ</title>
        <para>ถ้าไม่ได้เปิดใช้ขอบเครื่องหมายอยู่ แอนจูตาจะแสดงเครื่องหมายด้วยการเปลี่ยนสีพื้นหลังของบรรทัด ตัวอย่างเช่น ถ้ามีเครื่องหมายจุดพักอยู่ในบรรทัดโดยที่ไม่ได้เปิดใช้ขอบเครื่องหมายอยู่ บรรทัดนั้นก็จะแสดงด้วยพื้นหลังสีแดง ในทำนองเดียวกัน สำหรับเครื่องหมายที่คั่นหน้าและเครื่องหมายกำกับบรรทัด สีพื้นหลังของบรรทัดจะสีฟ้าและสีเหลืองตามลำดับ ถ้าคุณไม่ชอบการแสดงแบบนี้ (อาจเนื่องมาจากชุดตกแต่งที่สีตัดกันเกินไป) คุณก็สามารถเปิดใช้ขอบเครื่องหมายได้จากเมนู <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu><guimenuitem>ขอบเครื่องหมาย</guimenuitem></menuchoice> <figure id="editor-markers">
          <title>เครื่องหมายที่เครื่องมือแก้ไขใช้เมื่อไม่ได้แสดงขอบเครื่องหมาย</title>
          <screenshot>
           <screeninfo>แถบเครื่องมือแท็ก</screeninfo>
           <graphic fileref="figures/editor_markers.png" format="PNG" srccredit="naba"/>
          </screenshot>
         </figure></para>
       </note>
      </sect2>
      <sect2 id="editor-guides-sec">
      <title>เส้นแนวในเครื่องมือแก้ไข</title>
      <para>เครื่องมือแก้ไขสามารถกำหนดให้แสดงข้อมูลบางอย่างของเอกสารที่โดยปกติจะมองไม่เห็นได้ เช่น <emphasis>แนวการร่นย่อหน้า</emphasis>, <emphasis>ช่องว่าง<emphasis> และ <emphasis/>อักขระปิดบรรทัด</emphasis> ข้อมูลเหล่านี้สามารถสั่งให้แสดงหรือไม่แสดงได้ ด้วยการสลับค่ารายการในเมนู <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu></menuchoice> เส้นแนวการร่นย่อหน้าเป็นเส้นไข่ปลาเล็ก ๆ ที่วาดเชื่อมวงเล็บปีกกาที่เข้าคู่กันในซอร์สโค้ด และเมื่อเคอร์เซอร์วางอยู่ที่วงเล็บปีกกาที่เข้าคู่กัน เส้นแนวการร่นย่อหน้าของวงเล็บคู่นั้นก็จะถูกเน้นเพื่อให้เห็นระดับของการร่นอย่างชัดเจน</emphasis></para>
       <figure id="editor-guides">
        <title>เครื่องมือแก้ไขพร้อมเส้นแนว</title>
        <screenshot>
         <screeninfo>เครื่องมือแก้ไขพร้อมเส้นแนว</screeninfo>
         <graphic fileref="figures/editor_guides.png" format="PNG" srccredit="naba"/>
        </screenshot>
      </figure>
    </sect2>
   <sect2 id="highlighting">
   <title>การเน้นไวยากรณ์</title>
   <para><application>แอนจูตา</application> สามารถเน้นไวยากรณ์ได้หลายภาษา การเน้นนี้มักเป็นไปโดยอัตโนมัติ โดยพิจารณาชนิดของแฟ้มจากนามสกุล ถ้า <application>แอนจูตา</application> ไม่สามารถระบุชนิดของแฟ้มได้ ก็จะไม่มีการเน้นไวยากรณ์ คุณสามารถบังคับเจาะจงรูปแบบการเน้นได้ โดยเลือกรูปแบบจากเมนู <menuchoice><guimenu>มุมมอง</guimenu><guisubmenu>เครื่องมือแก้ไข</guisubmenu><guisubmenu>โหมดเน้น</guisubmenu></menuchoice></para>
    <note>
     <para>แอนจูตาใช้แฟ้มคุณสมบัติชื่อ <filename>$prefix/share/anjuta/properties/anjuta.properties</filename> ซึ่งมีรูปแบบข้อมูลเหมือนกับแฟ้มคุณสมบัติของ SciTE แต่ไม่ได้ใช้คุณสมบัติทั้งหมด รูปแบบของการแสดงแต่ละองค์ประกอบของทุกภาษาจะกำหนดไว้ในแฟ้มชื่อ <filename>$prefix/share/anjuta/properties/styles.properties</filename> ซึ่งจะใช้คุณสมบัติบางอย่างตามที่กำหนดโดยแอนจูตาร่วมกันในแฟ้ม <filename>$home/.config/anjuta/scintilla/editor-style.properties</filename></para>
   </note>
   </sect2>
   <sect2 id="codefolding">
    <title>การพับโค้ด</title>
    <para>แอนจูตาสามารถแสดง <emphasis>การพับโค้ด</emphasis> สำหรับแฟ้มซอร์สที่เขียนด้วยภาษาที่มีโครงสร้างเป็นแบบบล็อค (เช่น C, C++, Pascal, Java) ได้ ทุกบล็อคของโค้ดในซอร์สสามารถพับหรือคลี่ออกได้ โดยการคลิกที่จุดพับในขอบพับโค้ดของหน้าต่าง <interface>เครื่องมือแก้ไข</interface> (โดยปกติจะเป็นสัญลักษณ์ +/- หรือลูกศรขึ้น/ลง) จุดพับเหล่านี้จะปรากฏโดยอัตโนมัติสำหรับแฟ้มซอร์สที่มีบล็อคของโค้ด</para>
    <para>การพับโค้ดมีประโยชน์สำหรับการแก้ไขแฟ้มซอร์สขนาดใหญ่ที่มีหลายพันบรรทัดโดยเฉพาะ เพื่อพับบล็อคเก็บแล้ว เอกสารก็จะดูเล็กลง ช่วยให้ไล่ดูและแก้ไขแฟ้มได้ง่าย</para>
    <note>
     <para>โปรดทราบว่าการพับโค้ดและเส้นแนวในเครื่องมือแก้ไขมีเฉพาะในเครื่องมือแก้ไขที่ใช้ Scintilla เท่านั้น</para>
	</note>
   </sect2>
   <sect2 id="autoformat">
    <title>การจัดรูปแบบซอร์สโค้ดโดยอัตโนมัติ</title>
    <para>แอนจูตาสามารถร่นย่อหน้าอัตโนมัติ (จัดรูปแบบอัตโนมัติ) ให้กับซอร์สหรือแฟ้มส่วนหัวในภาษา C หรือ C++ ได้ การร่นย่อหน้าอัตโนมัตินี้ ทำให้ซอร์สโค้ดดูสะอาด อ่านง่าย ลดโอกาสของความผิดพลาดทางไวยากรณ์ และเหนือสิ่งอื่นใด ช่วยประหยัดเวลา การร่นย่อหน้าแฟ้มซอร์สปัจจุบันโดยอัตโนมัติ ทำได้โดยเลือก <menuchoice><guimenu>แก้ไข</guimenu><guimenuitem>ร่นย่อหน้าอัตโนมัติ</guimenuitem></menuchoice> ในแถบเมนู คุณสามารถเปลี่ยนแนวทางการจัดรูปแบบได้ โดยกำหนดตัวเลือกต่าง ๆ ในการปรับแต่งค่า</para>
   </sect2>
  </sect1>

 <!-- ============= File operations: Browsing with the tags browser ===   -->
  <sect1 id="browsing-files">
   <title>เบราว์เซอร์สัญลักษณ์</title>
   <para>คุณสามารถไล่ดูซอร์สและแฟ้มส่วนหัวภาษา C และ C++ ได้โดยใช้ <emphasis>แท็ก</emphasis> ที่อยู่ในแฟ้ม แท็ก (หรือ <emphasis>สัญลักษณ์</emphasis>) หนึ่ง ๆ จะอ้างถึงสิ่งที่มีชื่ออยู่ในซอร์ส เช่น ตัวฟังก์ชัน ข้อมูลโครงสร้าง หรือแมโคร แอนจูตาจะสำรวจแฟ้มซอร์สและส่วนหัว C และ C++ ที่เปิดอยู่เพื่อหาแท็กที่มี</para>
   <para><application>แอนจูตา</application> จะสำรวจหาแท็กในซอร์สและแฟ้มส่วนหัวทุกแฟ้มของโครงการที่เปิด คุณสามารถกระโดดไปยังตัวฟังก์ชัน การกำหนดข้อมูลโครงสร้าง การกำหนดคลาส หรือแท็กอื่น ๆ ได้ โดยไม่ต้องเปิดแฟ้มด้วยตัวเอง คุณไม่จำเป็นต้องรู้แม้แต่ว่าแฟ้มใดที่มีแท็กนั้นอยู่ เบราว์เซอร์สัญลักษณ์จะแสดงสัญลักษณ์ทั้งหมดที่มีอยู่ในโครงการให้ <figure id="symbol-browser">
     <title>เบราว์เซอร์สัญลักษณ์</title>
     <screenshot>
      <screeninfo>เบราว์เซอร์สัญลักษณ์</screeninfo>
      <graphic fileref="figures/symbol_browser.png" format="PNG" srccredit="jhs"/>
     </screenshot>
    </figure></para>
   <tip>
    <title>การปรับแท็กให้ตรงกัน</title>
    <para>คุณไม่ต้องกังวลเกี่ยวกับการปรับข้อมูลของฐานข้อมูลแท็ก <application>แอนจูตา</application> จะดูแลทุกอย่างให้ สิ่งที่คุณต้องทำมีเพียงตัดสินใจว่าแท็กไหนที่คุณต้องการกระโดดไป!</para>
   </tip>
   
  </sect1>

  <!-- ============= File operations: Searching and replacing in files === -->
  <sect1 id="search-replace-files">
   <title>การค้นหาและแทนที่ข้อความในแฟ้ม</title>
    <sect2 id="searching">
    <title>การค้นหา</title>
      <para>การค้นหา <emphasis>ข้อความ</emphasis> หรือ <emphasis>นิพจน์เรกิวลาร์</emphasis> ในแฟ้มปัจจุบัน ทำได้โดยเลือก <menuchoice><guimenu>แก้ไข</guimenu><guisubmenu>ค้นหา</guisubmenu><guimenuitem>หา</guimenuitem></menuchoice> หรือกด <keycombo><keycap>Ctrl</keycap><keycap>Alt</keycap><keycap>F</keycap></keycombo> จะเป็นการเปิดกล่องโต้ตอบ <interface>หา</interface></para>
      <para>ใช้กล่องข้อความระบุข้อความที่จะค้นหา และเลือกเพื่อระบุว่าเป็นข้อความปกติหรือนิพจน์เรกิวลาร์ คุณสามารถระบุทิศทางของการค้นหา ระบุว่าจะค้นหาแบบตัวพิมพ์ใหญ่-เล็กตรงกันหรือไม่ รวมทั้งขอบเขตของการค้นหาได้ คลิก <guibutton>ค้นหา</guibutton> เพื่อเริ่มต้นการค้นหา</para>
      <para>ถ้าการค้นหานั้นประสบความสำเร็จ แอนจูตาจะกระโดดไปยังข้อความที่พบ หรือกระทำอย่างอื่น (ตาม <guilabel>การกระทำขณะค้นหา</guilabel> ที่คุณเลือกในแท็บ <guilabel>เป้าหมายการค้นหา</guilabel>) หากการค้นหาไม่ประสบความสำเร็จ แอนจูตาจะแสดงข้อความบอกว่าไม่พบข้อความที่ค้นหา</para>
      <para>ถ้าคุณต้องการค้นหาอีกครั้ง ก็คลิกที่ปุ่ม <guibutton>ค้นหา</guibutton> ซ้ำอีก หรือกด <keycombo><keycap>Ctrl</keycap><keycap>G</keycap></keycombo> จะเป็นการหาจุดถัดไปที่ตรงกัน (ใช้ <keycombo><keycap>Shift</keycap><keycap>Ctrl</keycap><keycap>G</keycap></keycombo> ถ้าจะหาจุดก่อนหน้าที่ตรงกัน) คุณยังสามารถเปลี่ยนคำค้นได้ด้วยในระหว่างนี้ โดยป้อนข้อความใหม่ในช่อง <guilabel>นิพจน์ค้นหา</guilabel> ในกล่องโต้ตอบค้นหา</para>
      <figure id="search-expr">
      <title>กล่องโต้ตอบค้นหาข้อความ</title>
        <screenshot>
        <graphic fileref="figures/search_expr.png" format="PNG" srccredit="jhs"/>
        </screenshot>
      </figure>
	  <para>หากต้องการหยุดการค้นหาที่ยาวนาน ก็กดปุ่ม <guibutton>หยุด</guibutton></para>
    </sect2>
    <sect2 id="search-range">
    <title>การระบุช่วงค้นหา</title>
      <para>ในแท็บ <interface>เป้าหมายการค้นหา</interface> กำหนดตำแหน่งที่จะค้นหา และการกระทำที่จะทำถ้าหาพบ</para>
      <para>คุณสามารถกำหนดจำนวนการกระทำสูงสุดที่จะทำได้</para>
      <figure id="search-target">
      <title>กล่องโต้ตอบเป้าหมายการค้นหา</title>
        <screenshot>
        <graphic fileref="figures/search_target.png" format="PNG" srccredit="jhs"/>
        </screenshot>
      </figure>
      <para>ผู้ใช้สามารถเลือกแหล่งข้อความที่จะเข้าไปค้นหาได้</para>
      <figure id="search-target-in">
      <title>เป้าหมายการค้นหาขณะแสดงตัวเลือก</title>
       <screenshot>
       <graphic fileref="figures/search_target_in.png" format="PNG" srccredit="jhs"/>
       </screenshot>
      </figure>
      <sect3 id="search-file">
      <title>การค้นหาในแฟ้มต่าง ๆ</title>
       <para>การค้นหาข้อความในโครงการของคุณทั้งโครงการ ทำได้โดยเลือกข้อมูล <guilabel>ค้นหาใน:</guilabel> เป็น "แฟ้มโครงการทั้งหมด"</para>
       <para>ในแท็บ <guilabel>นิพจน์ค้นหา</guilabel> ป้อนข้อความที่คุณต้องการค้นหา และระบุตัวเลือกการค้นหา เช่น <guilabel>ตัวพิมพ์ใหญ่-เล็กตรงกัน</guilabel> หรือ <guilabel>จับคู่ทั้งคำ</guilabel> แล้วคลิก <guibutton>ค้นหา</guibutton> เพื่อเริ่มต้นการค้นหา</para>
       <para>การค้นหาข้อความในกลุ่มแฟ้ม ทำได้โดยเลือกข้อมูล <guilabel>ค้นหาใน:</guilabel> เป็น "ระบุแพตเทิร์นของแฟ้ม" จากนั้น กำหนดตัวแปรการค้นหา แล้วคลิก <guibutton>ค้นหา</guibutton> เพื่อเริ่มต้นการค้นหา</para>	 
         <figure id="search-file-pattern">
         <title>แพตเทิร์นระบุแฟ้มที่จะค้นหา</title>
          <screenshot>
          <graphic fileref="figures/search_file_pattern.png" format="PNG" srccredit="jhs"/>
          </screenshot>
       </figure>

      </sect3>		 

	</sect2>
    <sect2 id="search-action">
    <title>การระบุการกระทำขณะค้นหา</title>
      <para>คุณสามารถเลือกการกระทำที่จะทำเมื่อค้นหาสำเร็จได้</para>
      <para>การกระทำบางอย่างอาจจะไม่สามารถใช้งานได้ ขึ้นอยู่กับการเลือกก่อนหน้านี้ (<guilabel>ค้นหาใน</guilabel>, <guilabel>ทิศทางค้นหา<guilabel> เป็นต้น) </guilabel></guilabel></para>
      <figure id="search-target-action">
      <title>ตัวเลือกการกระทำในแท็บเป้าหมายการค้นหา</title>
       <screenshot>
       <graphic fileref="figures/search_target_action.png" format="PNG" srccredit="jhs"/>
       </screenshot>
      </figure>
  
    </sect2>
    <sect2 id="replacing">
    <title>การแทนที่</title>
      <para>การค้นหาและแทนที่ ก็คล้ายกับการหาข้อความธรรมดา ยกเว้นว่าคุณต้องระบุข้อความแทนที่ในกล่องข้อความ <guilabel>แทนที่ด้วย</guilabel> รวมทั้งระบุว่าคุณต้องการให้ถามก่อนที่จะแทนที่แต่ละจุดหรือไม่ ("แทนที่ข้อความถัดไปที่ตรงกัน" หรือ "แทนที่ข้อความที่ตรงทั้งหมด")</para>
      <figure id="replace">
      <title>การแทนที่</title>
        <screenshot>
        <graphic fileref="figures/search_replace.png" format="PNG" srccredit="jhs"/>
        </screenshot>
      </figure>
	  <para>เลือก <guibutton>แทนที่</guibutton> เพื่อแทนที่ข้อความที่ตรงกัน หรือ <guibutton>ค้นหา</guibutton> เพื่อกระโดดไปยังข้อความถัดไปที่ตรงกัน</para>

	</sect2>
    <sect2 id="search-setting">
    <title>การตั้งค่าการค้นหา</title>
      <para>คุณสามารถบันทึกตัวเลือกการค้นหาได้ด้วย</para>
      <para>รายการที่เน้นสีแดงเป็นรายการที่ใช้งานอยู่ รายการปริยายจะระบุค่าตั้งของการค้นหาที่จะโหลดเมื่อเริ่มใช้งานแอนจูตา</para>
      <figure id="search-setting-fig">
      <title>กล่องโต้ตอบตั้งค่าการค้นหา</title>
        <screenshot>
        <graphic fileref="figures/search_setting.png" format="PNG" srccredit="jhs"/>
        </screenshot>
       </figure>
    </sect2>

  </sect1>

 <!-- ============= File operations: Printing Files === -->
   <sect1 id="printing">
    <title>การพิมพ์แฟ้ม</title>
    <para>คุณสามารถดูตัวอย่างก่อนพิมพ์ได้โดยเลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>ตัวอย่างก่อนพิมพ์</guimenuitem></menuchoice> จะเป็นการวาดแฟ้มปัจจุบันและนำเสนอเป็นตัวอย่างของการพิมพ์ ซอร์สโค้ดที่เน้นในเครื่องมือแก้ไขก็จะเน้นเหมือนกันในตัวอย่างก่อนพิมพ์ (และในการพิมพ์ต่อไป) แท็บ <guilabel>การพิมพ์</guilabel> ในการปรับแต่งปลั๊กอินเครื่องมือแก้ไขของคุณ จะมีตัวเลือกเพิ่มเติมให้คุณสามารถพิมพ์โดยมีหมายเลขบรรทัด ตัดบรรทัด และ/หรือ มีส่วนหัวของหน้ากระดาษได้ <placeholder-1/></para> 
    <para>
	 <figure>
       <title>การปรับแต่งการพิมพ์</title>
       <screenshot>
	   <screeninfo>การปรับแต่งการพิมพ์</screeninfo>
        <graphic fileref="figures/prefs_print.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure>
	</para>
	<para>เมื่อคุณพร้อมที่จะพิมพ์และพอใจกับตัวอย่างแล้ว ก็ให้เลือก <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>พิมพ์</guimenuitem></menuchoice> หรือกดปุ่ม <guibutton>พิมพ์</guibutton> จากหน้าต่างตัวอย่างก่อนพิมพ์ จะเป็นการเปิดกล่องโต้ตอบสั่งพิมพ์จริงดังที่แสดงด้านล่าง เลือกพารามิเตอร์การพิมพ์ที่เหมาะสม แล้วกด <guibutton>พิมพ์</guibutton> เพื่อพิมพ์แฟ้มนั้น</para>
	<para>คุณสามารถกำหนดแนววางกระดาษเป็นแนวนอนหรือแนวตั้ง กำหนดขนาดกระดาษ แนววางของหน้า และชนิดกระดาษได้ด้วย อย่าลืมกำหนดค่าเหล่านี้ให้ถูกต้องตามเครื่องพิมพ์ของคุณ มิฉะนั้นงานพิมพ์อาจออกมาไม่ถูกต้อง</para>
	<para>
	 <figure>
       <title>กล่องโต้ตอบสั่งพิมพ์</title>
       <screenshot>
	   <screeninfo>กล่องโต้ตอบสั่งพิมพ์</screeninfo>
        <graphic fileref="figures/print_dlg.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure>
	</para>
   </sect1>
 </chapter>


 <!-- Project Management -->
 <!-- ============= Project management ====================== -->
 <chapter id="project-management">
  <title>การจัดการโครงการ</title>
  
  <para>แอนจูตามีปลั๊กอินเครื่องมือจัดการโครงการที่ทรงพลัง ซึ่งสามารถเปิดโครงการที่ใช้ <ulink type="info" url="info:automake">automake/autoconf</ulink> ได้เกือบทั้งหมด อาจมีบ้างบางโครงการที่เปิดไม่สำเร็จเพราะมีการตั้งค่าบางอย่างที่แปลกประหลาด แต่ตราบใดที่โครงการที่เปิดใช้ automake/autoconf แบบปกติ ก็ควรจะเปิดได้</para>

  <para>สิ่งที่เนี้ยบก็คือ แอนจูตาไม่เก็บข้อมูลใดของโครงการนอกเหนือไปจากที่มีอยู่แล้วในโครงสร้างโครงการ กล่าวคือ ไม่มีข้อมูลโครงการที่แยกดูแลต่างหากโดยแอนจูตา และการประมวลผลโครงการทั้งหมดจะดำเนินการโดยตรงภายในโครงสร้างโครงการ ช่วยให้โครงการสามารถนำไปดูแลหรือพัฒนานอกแอนจูตาได้ โดยไม่จำเป็นต้องแปลงรูปแบบข้อมูลไปมากับรูปแบบเฉพาะของแอนจูตาเลย และเนื่องจากในทางเทคนิค โครงการของแอนจูตาก็คือโครงการ automake การพัฒนาแบบผสม (ระหว่างผู้ใช้แอนจูตา กับผู้ที่ไม่ได้ใช้แอนจูตา) หรือการสลับไปมาระหว่างแอนจูตากับเครื่องมืออื่น ๆ จึงค่อนข้างทำได้โดยปราศจากอุปสรรคใด ๆ</para>

  <sect1 id="new-project">
   <title>การสร้างโครงการใหม่</title>
   <sect2 id="new-project-from-template">
   <title>การสร้างโครงการใหม่จากแม่แบบ</title>
   <para>ปลั๊กอินเครื่องมือวิเศษสร้างโครงการ ใช้กลไกประมวลผลแม่แบบที่ชื่อ <application>autogen</application> โครงการใหม่ทั้งหมดจะถูกสร้างจากแม่แบบซึ่งเขียนด้วยไวยากรณ์ของ <application>autogen</application> เครื่องมือวิเศษสร้างโครงการจะช่วยให้คุณสร้างโครงการใหม่ได้จากชุดแม่แบบของโครงการที่คัดสรรไว้ ซึ่งมีทั้งโครงการทั่วไปอย่างง่าย, โครงการแบบแบนราบ (ไม่มีไดเรกทอรีย่อย), โครงการ GTK+, GNOME, Java, Python และอื่น ๆ คุณสามารถดาวน์โหลดแม่แบบใหม่มาติดตั้งได้อย่างง่าย ๆ เนื่องจากแม่แบบเหล่านั้นเป็นเพียงชุดของแฟ้มข้อความธรรมดา</para>

   <para>การสร้างโครงการ ทำได้โดยเลือกรายการเมนู <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guisubmenu>ใหม่</guisubmenu><guimenuitem>โครงการ …</guimenuitem></menuchoice> เพื่อเปิดเครื่องมือวิเศษสร้างโปรแกรม กรุณาอ่านหน้าแรกด้วยความระมัดระวัง แล้วคลิก <guibutton>ถัดไป</guibutton> เพื่อทำต่อไป</para>
   <para>เลือกชนิดของโปรแกรมที่คุณต้องการสร้างในหน้าที่สอง แล้วคลิก <guibutton>ถัดไป</guibutton> เพื่อทำต่อไป</para>

   <para>ในหน้าถัด ๆ ไป ให้คุณป้อนรายละเอียดที่จำเป็นสำหรับโครงการของคุณ คุณสามารถเปลี่ยนค่าต่าง ๆ เหล่านี้ได้ในภายหลัง แต่ขอแนะนำให้กำหนดค่าให้ถูกต้องตั้งแต่แรก เพื่อข้อมูลที่ครบสมบูรณ์ของโครงการ ช่องว่าง หรืออักขระที่ไม่ใช่ตัวหนังสือหรือตัวเลข ยกเว้นขีดเส้นใต้(_) และเครื่องหมายขีด (-) ไม่สามารถใช้ได้ในช่องป้อนข้อความเหล่านี้ (ยกเว้นช่อง <guilabel>ผู้เขียน</guilabel>)</para>

   <para>คุณยังสามารถระบุว่าโครงการของคุณจะมี <emphasis>การรองรับนานาภาษา</emphasis> โดยใช้ <application>gettext</application> ด้วยหรือไม่ (อ่านรายละเอียดเพิ่มเติมได้จาก <ulink type="info" url="info:gettext">หน้า info ของ gettext</ulink>) การรองรับนานาภาษาจะช่วยให้โครงการของคุณใช้ข้อความได้หลายภาษาตามท้องถิ่น เช่น อังกฤษ ฝรั่งเศส และดัตช์ ตัวเลือกที่เหลือจะเป็นการตั้งค่าว่าควรใส่ข้อความลิขสิทธิ์ของ GNU ไว้ในหมายเหตุที่ด้านบนของแต่ละแฟ้มหรือไม่ รวมทั้งการเปิดใช้เมนูเดสก์ท็อป GNOME หากจำเป็น การรองรับไลบรารีใช้ร่วมจะทำให้คุณเพิ่มมอดูลที่เป็นไลบรารีใช้ร่วมได้ในภายหลัง ถ้าคุณวางแผนที่จะมีไลบรารีในโครงการ ก็ควรจะเปิดใช้งาน นอกจากนี้ แอนจูตายังอาจขอข้อมูลอื่นเพิ่มเติมอีก ขึ้นอยู่กับชนิดของโครงการที่กำลังสร้าง</para>

   <para>ขั้นตอนสุดท้ายเป็นการตรวจสอบยืนยันข้อมูลที่คุณป้อนมาทั้งหมด คลิก <guibutton>เสร็จสิ้น</guibutton> เพื่อเริ่มสร้างโครงการ</para>

   <para>เมื่อสร้างโครงการเสร็จแล้ว คุณสามารถทดลองได้ โดยลองประกอบสร้างโครงการและเรียกทำงาน</para>
  </sect2>
   <sect2 id="importing-project">
    <title>การนำเข้าโครงการ</title>
    <para>การนำเข้าโครงการ ใช้สำหรับนำเข้าโครงการที่มีอยู่แล้วและแปลงให้เป็นโครงการของ <application>แอนจูตา</application> คุณสามารถเรียกเครื่องมือวิเศษนำเข้าโครงการได้ทางเมนู <menuchoice><guimenu>แฟ้ม</guimenu><guimenu>ใหม่</guimenu><guimenuitem>โครงการจากซอร์สที่มีอยู่แล้ว</guimenuitem></menuchoice> และทำตามคำแนะนำที่เครื่องมือวิเศษบอก เมื่อนำเข้าโครงการแล้ว ก็จะสามารถเปิดโครงการใน <application>แอนจูตา</application> ได้เหมือนโครงการอื่น ๆ ทั่วไปของ <application>แอนจูตา</application></para>
	<note>
	<para>การนำเข้าโครงการจะใช้ได้ต่อเมื่อโครงการที่มีอยู่ของคุณใช้ <ulink type="info" url="info:automake">autoconf/automake</ulink> หรือใช้ Makefile ธรรมดาแบบจำกัดมากเท่านั้น</para>
	</note>
   </sect2>
  </sect1>
  
  <sect1 id="load-save-projects">
   <title>การโหลดและบันทึกโครงการ</title>
   <sect2 id="loading-project">
    <title>การโหลดโครงการ</title>
    <para>การเปิดโครงการ ทำได้โดยเลือกรายการเมนู <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guimenuitem>เปิด …</guimenuitem></menuchoice> เลือกแฟ้มโครงการ (<filename>*.anjuta</filename>) ในกล่องโต้ตอบ แล้วคลิก <guibutton>ตกลง</guibutton></para> 

    <para>ถ้าโครงการเคยถูกเปิดไปแล้วเมื่อเร็ว ๆ นี้ คุณก็จะพบชื่อโครงการอยู่ในเมนู <menuchoice><guisubmenu>แฟ้ม</guisubmenu><guisubmenu>ล่าสุด</guisubmenu></menuchoice> เลือกชื่อแฟ้มโครงการจากรายชื่อ ก็จะเป็นการเปิดโครงการนั้น</para>
    <para>ทันทีที่โครงการถูกเปิดขึ้น <application>แอนจูตา</application> จะเข้าสู่ <emphasis>โหมดโครงการ</emphasis> โดยจะมีช่อง 3 ช่องในหน้าต่างโครงการ ช่องแรกคือช่องโครงการ แสดงรายชื่อแฟ้มต่าง ๆ ในโครงการแยกตามชนิด ช่องที่สองคือเบราว์เซอร์สัญลักษณ์ ซึ่งได้อธิบายไปแล้วในหมวด <emphasis>เบราว์เซอร์สัญลักษณ์</emphasis> ช่องที่สามคือช่องแสดงแฟ้มของโครงการในรูปที่คล้ายกับเครื่องมือจัดการแฟ้มขนาดเล็ก ในช่องแสดงแฟ้มนี้ จะแสดงแฟ้มทั้งหมดที่อยู่ในไดเรกทอรีโครงการ เมื่อคลิกขวาที่แฟ้มเหล่านี้ จะผุดเมนูบริบทให้เลือกการกระทำเกี่ยวกับแฟ้ม</para>
    <para>ถ้าโครงการเป็น CVS tree ด้วย ก็จะแสดงหมายเลขฉบับแก้ไขของแฟ้มไว้ที่ด้านขวาของชื่อแฟ้มในช่องแสดงแฟ้มด้วย</para>
   </sect2>
   <sect2 id="saving-project">
    <title>การบันทึกโครงการ</title>
    <para>โครงการจะถูกบันทึกโดยอัตโนมัติเมื่อคุณปิดโครงการ เพราะการเปลี่ยนแปลงทั้งหมด จะกระทำโดยตรงกับไดเรกทอรีของโครงการอยู่แล้ว</para>
   </sect2>
  </sect1>

  <sect1 id="projects-structure">
  <title>โครงสร้างโครงการ</title>
  <para>นี่คือ <interface>หน้าต่างโครงการ</interface> พร้อมเมนูบริบท (สามารถเปิดได้โดยคลิกที่เมาส์ปุ่มขวา) <figure id="project-window">
    <title>หน้าต่างโครงการ</title>
    <screenshot>
     <screeninfo>หน้าต่างโครงการ</screeninfo>
     <graphic fileref="figures/project-window.png" format="PNG" srccredit="jhs"/>
    </screenshot>
   </figure></para>
  <para><interface>หน้าต่างโครงการ</interface> แสดงโครงสร้างลำดับชั้นของ <ulink type="info" url="info:automake"><application>automake</application></ulink> ในโครงการ โดยแบ่งเป็น <emphasis>กลุ่ม</emphasis> ของ <emphasis>เป้าหมาย</emphasis> กลุ่มในที่นี้ก็คือไดเรกทอรีในโครงการ และเป้าหมายก็คือเป้าหมายของ <application>automake</application> ตามปกติ (อย่าสับสนกับเป้าหมายของ make) อันที่จริง <interface>หน้าต่างโครงการ</interface> จะมีสองส่วน ส่วนล่างแสดงลำดับชั้นทั้งหมดของโครงการ และส่วนบนแสดงรายชื่อเป้าหมายที่สำคัญโดยตรง เป้าหมายที่สำคัญได้แก่เป้าหมายที่เป็นแฟ้มโปรแกรมและไลบรารีเป็นต้น การแสดงเช่นนี้ทำให้เข้าถึงเป้าหมายดังกล่าวได้ง่าย ซึ่งมีประโยชน์อย่างยิ่งในโครงการขนาดใหญ่ ที่อาจมีลำดับชั้นที่ลึกและยากที่จะท่องหาจากแผนภาพต้นไม้เพียงอย่างเดียว เป้าหมายต่าง ๆ จะประกอบด้วยแฟ้มซอร์สอีกทีหนึ่ง</para>

  <para>
  <itemizedlist>
   <listitem>
    <para><emphasis>กลุ่ม</emphasis> จะใช้ในการจำแนกเป้าหมายตามตรรกะ โครงการหนึ่ง ๆ สามารถมีกลุ่มจำนวนเท่าใดก็ได้ แต่ละกลุ่มสามารถมีกลุ่มย่อยและเป้าหมายต่าง ๆ ได้ ในโครงการ automake กลุ่มก็คือไดเรกทอรีย่อยในโครงการนั่นเอง กลุ่มระดับบนสุดจะมีชื่อเป็น "/" เสมอ</para>
   </listitem>
   <listitem>
    <para><emphasis>เป้าหมาย</emphasis> คือเป้าหมายของการประกอบสร้างในโครงการ เช่น โปรแกรม (แฟ้มโปรแกรมไบนารี), สคริปต์, ไลบรารี และข้อมูลเบ็ดเตล็ด ไม่ใช่เป้าหมายทุกชนิดที่จะประกอบสร้างจากซอร์ส บางอย่างมีอยู่เพียงเพื่อจัดซอร์สและอาจไม่มีตัวตนทางกายภาพ (เช่น เป้าหมายที่เป็นข้อมูลเบ็ดเตล็ด) เป้าหมายต่าง ๆ จะอยู่ภายใต้กลุ่ม ดูรายชื่อชนิดของเป้าหมายทั้งหมดได้ที่หัวข้อ <link linkend="adding-target">"การเพิ่มเป้าหมาย"</link></para>
   </listitem>
   <listitem>
    <para><emphasis>แฟ้มซอร์ส</emphasis> อาจใช้ในการประกอบสร้างเป้าหมาย แม้ว่าบางแฟ้มจะเพียงแค่เป็นของเป้าหมายก็ตาม แฟ้มซอร์สจะต้องอยู่ภายใต้เป้าหมายเท่านั้น เป้าหมายหลายชนิดเจาะจงชนิดของแฟ้มซอร์ส (เช่น เป้าหมายชนิดโปรแกรมและไลบรารี) แต่บางเป้าหมายสามารถใช้กับแฟ้มชนิดใดก็ได้ (เช่น เป้าหมายที่เป็นข้อมูลเบ็ดเตล็ด)</para>
   </listitem>
  </itemizedlist>
  </para>

  <para>แต่ละกลุ่มและเป้าหมายของโครงการ สามารถตั้งค่าได้ตามวิธีมาตรฐานของ <application>automake</application> คุณสามารถกำหนดแฟล็กของคอมไพเลอร์และลิงเกอร์ให้กับแต่ละเป้าหมายได้โดยตรง หรือจะตั้งค่าตัวแปร <application>configure</application> ก็ได้ คุณสามารถกำหนดจุดติดตั้งของเป้าหมายต่าง ๆ ภายในกลุ่มได้ด้วย</para>

  <para>เช่นเดียวกับเครื่องมือจัดการแฟ้ม มุมมองเครื่องมือจัดการโครงการยังมีคำสั่งสะดวกใช้ (สามารถเข้าถึงได้จากเมนูบริบท) สำหรับแฟ้มซอร์สและเป้าหมายด้วย</para>

  <para>มีเครื่องมือบรรทัดคำสั่งมากมายที่สามารถใช้ดูแลและจัดการโครงการได้ และแต่ละเครื่องมือก็จะมีกฎและความสามารถเฉพาะของตนเอง <application>แอนจูตา</application> พยายามทำให้การกระทำต่าง ๆ ที่ใช้บ่อยทำงานเป็นอัตโนมัติโดยใช้ปลั๊กอิน แต่บางครั้งคุณก็อาจยังจำเป็นต้องสั่งการด้วยตนเอง</para>
  
  <para>คุณอาจปรับเปลี่ยนโครงสร้างของโครงการโดยใช้เครื่องมือภายนอก หรือแก้ไขแฟ้มโครงการด้วยมือได้ ไม่สำคัญว่าโครงการจะโหลดใน <application>แอนจูตา</application> หรือไม่ <application>แอนจูตา</application> จะปรับข้อมูลตัวเองตามการเปลี่ยนแปลงภายนอกที่เกิดขึ้นกับโครงการเอง</para>
  </sect1>
 
  <sect1 id="groups-and-targets">
   <title>กลุ่มและเป้าหมาย</title>

   <sect2 id="adding-groups">
    <title>การเพิ่มกลุ่ม</title>
    <para>วิธีเพิ่มกลุ่มใหม่ (ซึ่งก็คือไดเรกทอรีในโครงการที่ใช้ automake): <itemizedlist>
         <listitem>
           <para>เลือก <menuchoice><guisubmenu>โครงการ</guisubmenu><guimenuitem>เพิ่มกลุ่ม</guimenuitem></menuchoice> แล้วกล่องโต้ตอบสำหรับเพิ่มกลุ่มใหม่จะผุดขึ้นมา</para>
         </listitem>
         <listitem>
           <para>เลือกกลุ่มที่จะเพิ่มกลุ่มใหม่</para>
         </listitem>
         <listitem>
            <para>ป้อนชื่อของกลุ่มใหม่นั้น แล้วคลิก <guibutton>เพิ่ม</guibutton></para>
         </listitem>
        </itemizedlist></para>
     <para>สำหรับโครงการ automake ไดเรกทอรีใหม่ที่มีชื่อตามที่กำหนดจะถูกสร้างขึ้นภายใต้ไดเรกทอรีของกลุ่มแม่</para>
    <para>คุณยังสามารถเพิ่มกลุ่มใหม่จากหน้าต่าง <interface>โครงการ</interface> ได้โดยตรง โดยคลิกขวาที่กลุ่มที่จะเพิ่มกลุ่มใหม่ แล้วเลือก <guimenuitem>เพิ่มกลุ่ม</guimenuitem> จากเมนูบริบท</para>
   </sect2>

   <sect2 id="removing-group">
    <title>การลบกลุ่ม</title>
    <para>วิธีลบกลุ่ม: <itemizedlist>
     <listitem>
       <para>คลิกขวาที่กลุ่มในมุมมอง <interface>เครื่องมือจัดการโครงการ</interface></para>
     </listitem>
     <listitem>
       <para>เลือก <guimenuitem>เอาออก</guimenuitem> จากเมนูบริบท</para>
     </listitem>
    </itemizedlist></para>
    <para>เป้าหมายและซอร์สที่เกี่ยวข้องกับกลุ่มจะถูกลบออกจากโครงการ (แต่ไม่ได้ถูกลบออกจากระบบแฟ้ม คุณสามารถเพิ่มกลับเข้ามาในโครงการได้อีกในภายหลังถ้าต้องการ)</para>
   </sect2>

   <sect2 id="adding-target">
    <title>การเพิ่มเป้าหมาย</title>
    <para>วิธีเพิ่มเป้าหมายใหม่: <itemizedlist>
      <listitem>
       <para>เลือก <menuchoice><guisubmenu>โครงการ</guisubmenu><guimenuitem>เพิ่มเป้าหมาย</guimenuitem></menuchoice> แล้วกล่องโต้ตอบสำหรับเพิ่มเป้าหมายใหม่จะผุดขึ้น</para>
     </listitem>
     <listitem>
      <para>เลือกกลุ่มที่จะเพิ่มเป้าหมาย</para>
     </listitem>
     <listitem>
      <para>เลือกชนิดของเป้าหมาย</para>
     </listitem>
     <listitem>
      <para>ป้อนชื่อเป้าหมายใหม่ แล้วคลิก <guibutton>เพิ่ม</guibutton></para>
     </listitem>
    </itemizedlist></para>
    <para>คุณยังสามารถเพิ่มเป้าหมายใหม่จากหน้าต่าง <interface>โครงการinterface&gt;  </interface></para>
    <para>ชื่อเป้าหมาย โดยปกติจะต้องขึ้นต้นและลงท้ายด้วยคำมาตรฐานที่กำหนดไว้ ขึ้นอยู่กับชนิดของเป้าหมาย แอนจูตาจะเตือนถ้าชื่อนั้นไม่ถูกต้อง และอาจให้ตัวอย่างชื่อที่ถูกต้องด้วย</para>
    <para>มีเป้าหมายหลายชนิดสำหรับโครงการ automake คือ: <itemizedlist>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>โปรแกรม</emphasis> ใช้สำหรับแฟ้มโปรแกรมไบนารี ใช้เมื่อคุณต้องการเพิ่มแฟ้มโปรแกรมไบนารีในโครงการ โดยปกติแล้ว เป้าหมายชนิดโปรแกรมทั้งหมดจะถูกติดตั้งในไดเรกทอรีมาตรฐานสำหรับแฟ้มโปรแกรม เช่น /usr/bin หรือ /usr/local/bin คุณสามารถเปลี่ยนที่ได้ โดยระบุไดเรกทอรีติดตั้งอื่นในคุณสมบัติของกลุ่มที่บรรจุเป้าหมายนั้น</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>ไลบรารีใช้ร่วม</emphasis> ใช้สำหรับไลบรารีใช้ร่วมหรือไลบรารีแบบไดนามิก ใช้เมื่อคุณจะเพิ่มไลบรารีใช้ร่วมในโครงการ โดยปกติแล้ว ไลบรารีใช้ร่วมทั้งหมดจะถูกติดตั้งในไดเรกทอรีมาตรฐานสำหรับไลบรารี เช่น /usr/lib หรือ /usr/local/lib คุณสามารถเปลี่ยนที่ได้ โดยระบุไดเรกทอรีติดตั้งอื่นในคุณสมบัติของกลุ่มที่บรรจุเป้าหมายนั้น</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>ไลบรารีสแตติก</emphasis> ใช้สำหรับไลบรารีแบบสแตติก ใช้เมื่อคุณจะเพิ่มไลบรารีแบบสแตติกในโครงการ โดยปกติแล้ว ไลบรารีแบบสแตติกทั้งหมดจะถูกติดตั้งในไดเรกทอรีมาตรฐานสำหรับไลบรารี เช่น /usr/lib หรือ /usr/local/lib คุณสามารถเปลี่ยนที่ได้ โดยระบุไดเรกทอรีติดตั้งอื่นในคุณสมบัติของกลุ่มที่บรรจุเป้าหมายนั้น</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>มอดูลจาวา</emphasis> ใช้สำหรับมอดูลของจาวา ใช้เมื่อคุณจะจัดกลุ่มซอร์สจาวาเข้าด้วยกันเป็นมอดูล คุณต้องระบุไดเรกทอรีติดตั้งสำหรับเป้าหมายนี้ เพื่อติดตั้งแฟ้ม .class ด้วย ค่านี้สามารถกำหนดได้ในคุณสมบัติของกลุ่มนี้ที่บรรจุเป้าหมายนั้น</para>
      <note>
       <para>ในกลุ่มหนึ่ง ๆ สามารถมีมอดูลจาวาได้เพียงหนึ่งมอดูลเท่านั้น นี่เป็นข้อจำกัดที่กำหนดโดย automake กรุณาอ่านข้อมูลเพิ่มเติมได้จากหน้า info ของ automake</para>
      </note>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>มอดูลไพธอน</emphasis> ใช้สำหรับมอดูลของไพธอน ใช้เมื่อคุณจะจัดกลุ่มซอร์สไพธอนเข้าด้วยกันเป็นมอดูล คุณต้องระบุไดเรกทอรีติดตั้งสำหรับเป้าหมายนี้ เพื่อติดตั้งซอร์สด้วย ค่านี้สามารถกำหนดได้ในคุณสมบัติของกลุ่มนี้ที่บรรจุเป้าหมายนั้น</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>สคริปต์</emphasis> ใช้สำหรับจัดกลุ่มสคริปต์ สคริปต์ทั้งหมดจะถูกติดตั้งในไดเรกทอรีมาตรฐานสำหรับแฟ้มโปรแกรม</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>ข้อมูลเบ็ดเตล็ด</emphasis> ใช้สำหรับจัดกลุ่มแฟ้มทั่วไปในโครงการ คุณต้องระบุไดเรกทอรีติดตั้งในคุณสมบัติของกลุ่มด้วย</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>แฟ้มส่วนหัว</emphasis> ใช้สำหรับจัดกลุ่มแฟ้มส่วนหัวของ C/C++ ที่ต้องติดตั้งลงในระบบ (ตัวอย่างเช่น เพื่อเป็นส่วนหนึ่งของ API ของไลบรารี) (สำหรับแฟ้มส่วนหัวไม่ต้องติดตั้ง ก็ทำให้เป็นส่วนหนึ่งของเป้าหมายชนิดโปรแกรมร่วมกับซอร์สอื่น ๆ เสีย) แฟ้มส่วนหัวจะถูกติดตั้งในไดเรกทอรีมาตรฐานสำหรับแฟ้มส่วนหัว เว้นแต่จะมีการระบุพาธติดตั้งในคุณสมบัติของกลุ่ม</para>
     </listitem>
     <listitem>
      <para>เป้าหมายชนิด <emphasis>เอกสารแบบ Man</emphasis> และ <emphasis>เอกสารแบบ Info</emphasis> ใช้สำหรับจัดกลุ่มเอกสารแบบ man และ info ตามลำดับ โดยปกติแล้ว แฟ้มเอกสารเหล่านี้จะถูกติดตั้งในไดเรกทอรีติดตั้งมาตรฐาน</para>
     </listitem>
    </itemizedlist></para>
   </sect2>
   <sect2 id="removing-target">
    <title>การลบเป้าหมาย</title>
    <para>วิธีลบเป้าหมาย: <itemizedlist>
       <listitem>
        <para>คลิกขวาที่เป้าหมายในมุมมอง <interface>เครื่องมือจัดการโครงการ</interface></para>
       </listitem>
       <listitem>
        <para>เลือก <guimenuitem>เอาออก</guimenuitem> จากเมนูบริบท</para>
       </listitem>
      </itemizedlist></para>
    <para>ซอร์สที่เกี่ยวข้องกับเป้าหมายจะถูกลบออกจากโครงการด้วย (แต่จะไม่ถูกลบออกจากระบบแฟ้ม)</para>
   </sect2>
  </sect1>

  <sect1 id="adding-removing-sources">
   <title>การเพิ่มและลบแฟ้ม</title>
   <sect2 id="adding-sources">
    <title>การเพิ่มแฟ้มซอร์ส</title>
    <para>เลือกรายการเมนู <menuchoice><guisubmenu>โครงการ</guisubmenu><guimenuitem>เพิ่มแฟ้มซอร์ส</guimenuitem></menuchoice> จากนั้น จากกล่องโต้ตอบ เลือกเป้าหมายที่จะเพิ่มแฟ้มเข้าและตัวแฟ้มที่จะเพิ่ม คุณสามารถเพิ่มแฟ้มได้ทีละหลายแฟ้ม โดยเลือกหลายแฟ้มจากกล่องโต้ตอบเลือกแฟ้มด้วยปุ่ม <keycap>Shift</keycap> หรือ <keycap>Ctrl</keycap> แล้วคลิกปุ่ม <guibutton>เพิ่ม</guibutton> เพื่อเพิ่มแฟ้มเข้าในโครงการ</para>
    <para>โดยปกติแล้ว แฟ้มที่เปิดอยู่ในเครื่องมือแก้ไขจะถูกเลือกไว้ในกล่องโต้ตอบสำหรับเพิ่มเลย อีกวิธีที่สะดวกในการเพิ่มแฟ้มคือ คลิกขวาใน <interface>เครื่องมือจัดการแฟ้ม</interface> แล้วเลือก <guimenuitem>เพิ่มเข้าในโครงการ</guimenuitem> จากเมนูบริบท</para>
    <para>ถ้าแฟ้มที่คุณเลือกถูกเพิ่มเข้าไปในโครงการอยู่ก่อนแล้ว <application>แอนจูตา</application> ก็จะไม่เพิ่มอีก และจะเตือนคุณว่าแฟ้มนั้นถูกเพิ่มไปแล้ว</para>
    <para>ถ้าแฟ้มที่คุณเลือกไม่ได้อยู่ในไดเรกทอรีโครงการ คุณจะถูกถามยืนยันว่าคุณต้องการจะคัดลอกแฟ้มเข้าไปในไดเรกทอรีของเป้าหมายหรือไม่ <application>แอนจูตา</application> ไม่สามารถเพิ่มแฟ้มที่อยู่นอกไดเรกทอรีของเป้าหมายเข้าไปโดยตรงได้ โดยไม่คัดลอกเข้าไปก่อน</para>
   </sect2>
   <sect2 id="removing-sources">
    <title>การเอาแฟ้มซอร์สออก</title>
    <para>การเอาแฟ้มออกจากโครงการ ทำได้โดยคลิกขวาที่แฟ้มที่คุณต้องการเอาออกใน <interface>หน้าต่างโครงการ</interface> แล้วเลือก <guimenuitem>เอาออก</guimenuitem> จากเมนูบริบท</para>
    <para>จะปรากฏกล่องโต้ตอบยืนยัน แล้วแฟ้มนั้นจะถูกเอาออกจากโครงการ</para>
    <important>
     <title>แฟ้มนั้นไม่ได้ถูกลบ!</title>
     <para>แฟ้มที่เอาออกนั้น ไม่ได้ถูกลบออกจากระบบแฟ้ม แฟ้มจะยังคงอยู่เหมือนเดิม และคุณสามารถเพิ่มกลับเข้ามาใหม่ได้ถ้าต้องการ แฟ้มนั้นเพียงแค่ถูกลบออกจากรายชื่อของโครงการเท่านั้น และจะไม่มีส่วนในการทำงานใด ๆ ของโครงการอีก ไม่ว่าจะเป็นการคอมไพล์ การประกอบสร้าง การแจกจ่าย เป็นต้น</para>
     </important>
   </sect2>
  </sect1>
  
  <sect1 id="project-config">
   <title>การตั้งค่าโครงการ</title>
   <para>การตั้งค่าโครงการเป็นการตั้งค่าแฟล็กของการประกอบสร้างที่ถูกต้องสำหรับเป้าหมายต่าง ๆ กลุ่มต่าง ๆ และตัวโครงการเอง คุณสามารถตั้งค่าแฟล็กเหล่านี้ได้ในกล่องโต้ตอบคุณสมบัติของแต่ละส่วนดังกล่าว</para>

   <para>คุณสามารถใช้ตัวแปรของ autoconf และ automake ซึ่งถูกกำหนดค่าโดยอัตโนมัติสำหรับโครงการในระหว่างการตั้งค่าได้อย่างอิสระ นอกเหนือจากตัวแปรที่ถูกกำหนดค่าโดยอัตโนมัติเหล่านี้ คุณยังสามารถกำหนดตัวแปรของคุณเองใน <link linkend="project-properties">คุณสมบัติโครงการ</link> และใช้ตัวแปรเหล่านั้นในคุณสมบัติต่าง ๆ ได้ ซึ่งจะทำให้ง่ายต่อการปรับค่าแฟล็กในภายหลัง โดยเฉพาะเมื่อมีการใช้ตัวแปรในหลายเป้าหมาย</para>

   <para>ตัวแปรที่ใช้บ่อยบางส่วนได้ลงรายชื่อไว้ที่นี่ สำหรับรายชื่อทั้งหมด ดูได้ที่ <ulink url="info:automake">เอกสาร info ของ automake</ulink> <itemizedlist>
      <listitem>
       <para><emphasis>$(prefix)</emphasis>: prefix ของการติดตั้ง โครงการจะถูกติดตั้งภายใต้ไดเรกทอรีย่อยหลายไดเรกทอรีภายใต้ prefix นี้ ค่าปริยายคือ /usr/local</para>
      </listitem>
      <listitem>
       <para><emphasis>$(bindir)</emphasis>: ไดเรกทอรีสำหรับติดตั้งแฟ้มโปรแกรมไบนารี เป้าหมายทั้งหมดที่เป็นแฟ้มโปรแกรมและสคริปต์จะถูกติดตั้งในไดเรกทอรีนี้ ค่าปริยายคือ $(prefix)/bin</para>
      </listitem>
      <listitem>
       <para><emphasis>$(libdir)</emphasis>: ไดเรกทอรีสำหรับติดตั้งไลบรารี เป้าหมายที่เป็นไลบรารีทั้งหมด (ทั้งแบบใช้ร่วมและแบบสแตติก) จะถูกติดตั้งในไดเรกทอรีนี้หรือไดเรกทอรีย่อยที่ต่ำลงไป ค่าปริยายคือ $(prefix)/lib</para>
      </listitem>
      <listitem>
       <para><emphasis>$(module_CFLAGS)</emphasis> และ $(module_LIBS): แฟล็กเหล่านี้ถูกกำหนดค่าโดยสคริปต์ <application>configure</application> เพื่อใช้แพกเกจอื่นซึ่งโครงการของคุณต้องใช้ แพกเกจต่าง ๆ ที่โครงการใช้จะกำหนดใน <link linkend="project-properties">คุณสมบัติโครงการ</link> 'module' ในที่นี้คือกลุ่มแพกเกจซึ่งคุณระบุในคุณสมบัติโครงการ ดังจะอธิบายด้านล่าง</para>
      </listitem>
     </itemizedlist></para>


   <sect2 id="project-properties">
    <title>คุณสมบัติโครงการ</title>
    <para>กล่องโต้ตอบคุณสมบัติโครงการสามารถเปิดได้โดยเลือก <menuchoice><guisubmenu>โครงการ</guisubmenu><guimenuitem>คุณสมบัติ</guimenuitem></menuchoice> จากแถบเมนูบนสุด คุณสามารถ: <itemizedlist>
     <listitem>
      <para>กำหนดชื่อ รุ่น และ URL ของโครงการในหน้า <guibutton>ทั่วไป</guibutton> สามารถใช้ตัวแปร <application>configure</application> ในช่องข้อมูลเหล่านี้ได้ ในที่นี้ URL หมายถึง URL สำหรับรายงานบั๊กของโครงการ</para>
     </listitem>
     <listitem>
      <para>เพิ่มและลบสิ่งที่ต้องใช้สำหรับโครงการของคุณในหน้า <guibutton>แพกเกจ</guibutton> ดูรายละเอียดได้ที่ด้านล่าง</para>
     </listitem>
     <listitem>
      <para>สร้างตัวแปร configure เพิ่มเติมในหน้า <guibutton>ตัวแปร</guibutton> เพื่อใช้ในคุณสมบัติของกลุ่มและเป้าหมาย</para>
     </listitem>
    </itemizedlist></para>
    <para>สิ่งที่ต้องใช้ เป็นแพกเกจภายนอกที่โครงการเรียกใช้ จึงเป็นสิ่งที่ต้องการเพื่อประกอบสร้างโครงการ ส่วนติดต่อนี้สามารถเพิ่มได้เฉพาะแพกเกจที่ติดตั้งโดยใช้ <ulink url="info:pkg-config">pkg-config</ulink> เท่านั้น สำหรับแพกเกจอื่น ๆ คุณสามารถแก้ไขแฟ้ม configure.ac เองได้ <figure>
       <title>กล่องโต้ตอบคุณสมบัติโครงการ</title>
       <screenshot>
	   <screeninfo>กล่องโต้ตอบคุณสมบัติโครงการ</screeninfo>
        <graphic fileref="figures/project_info.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure></para>
   <para>แพกเกจภายนอกที่ต้องใข้ จะจัดกลุ่มเป็น <emphasis>มอดูล</emphasis> เพื่อที่จะสามารถรวมแฟล็กสำหรับประกอบสร้างของแพกเกจในกลุ่มสำหรับเพิ่มเข้าในเป้าหมายต่าง ๆ เป็นกลุ่มก้อนได้อย่างสะดวก <emphasis>มอดูล</emphasis> ในที่นี้เป็นเพียงการจัดกลุ่มแพกเกจตามความต้องการโดยไม่มีข้อจำกัด และสามารถตั้งชื่ออะไรก็ได้ (ชื่อมอดูลใช้ได้เพียงตัวอักษร ตัวเลข และ _ เท่านั้น) โดยปกติก็จะใช้ชื่อตามเป้าหมายที่กลุ่มแพกเกจจะใช้ด้วย ดังนั้น สำหรับโครงการขนาดเล็กที่มีเป้าหมายเดียว ใช้เพียงมอดูลเดียวแทนสิ่งที่ต้องใช้ทั้งหมดก็เพียงพอ</para>
   <para>แพกเกจแต่ละแพกเกจจะส่งออก <emphasis>แฟล็กของคอมไพเลอร์</emphasis> และ <emphasis>ไลบรารี</emphasis> มาชุดหนึ่ง ค่าเหล่านี้จากแพกเกจทั้งหมดในมอดูลจะรวมเข้าด้วยกัน และกำหนดเป็นตัวแปร <application>configure</application> ชื่อ <emphasis>$(module_CFLAGS)</emphasis> และ <emphasis>$(module_LIBS)</emphasis> ตัวแปรเหล่านี้สามารถใช้ใน <link linkend="group-properties">คุณสมบัติกลุ่ม</link> และ <link linkend="target-properties">คุณสมบัติเป้าหมาย</link> ได้</para>
   <para>วิธีเพิ่มแพกเกจที่ต้องใช้: <itemizedlist>
     <listitem>
      <para>เลือก <menuchoice><guisubmenu>โครงการ</guisubmenu><guimenuitem>คุณสมบัติ</guimenuitem></menuchoice> เพื่อเปิดกล่องโต้ตอบคุณสมบัติโครงการ</para>
     </listitem>
     <listitem>
      <para>เลือกแท็บ <guibutton>แพกเกจ</guibutton> เพื่อเข้าสู่หน้าแพกเกจ</para>
     </listitem>
     <listitem>
      <para>เลือก <emphasis>มอดูล</emphasis> ที่จะเพิ่มแพกเกจ ถ้ายังไม่มีมอดูลที่สร้างไว้ หรือไม่มีมอดูลที่เหมาะสม ก็สร้างได้โดยคลิก <guibutton>เพิ่มมอดูล</guibutton> ตั้งชื่อที่สมเหตุสมผลให้กับมอดูล โดยควรใช้ตัวพิมพ์ใหญ่ทั้งหมด เพื่อให้เหมือนกับตัวแปร <application>configure</application> อื่น ๆ (ใช้เฉพาะตัวอักษร ตัวเลข และ '_' เท่านั้น) แล้วกด <keycap>Enter</keycap> เพื่อสร้างมอดูล</para>
     </listitem>
     <listitem>
      <para>คลิก <guibutton>เพิ่มแพกเกจ</guibutton> เพื่อเปิดกล่องโต้ตอบเลือกแพกเกจ</para>
     </listitem>
     <listitem>
      <para>เลือกแพกเกจที่จะเพิ่ม แล้วคลิก <guibutton>เพิ่ม</guibutton></para>
     </listitem>
     <listitem>
      <para>คลิก <guibutton>ปิด</guibutton> เพื่อปิดกล่องโต้ตอบคุณสมบัติ</para>
     </listitem>
    </itemizedlist></para>
   </sect2>

   <sect2 id="group-properties">
    <title>คุณสมบัติกลุ่ม</title>
    <para>การแก้ไขคุณสมบัติของกลุ่ม ทำได้โดยดับเบิลคลิกที่กลุ่มในหน้าต่าง <interface>โครงการ</interface> เพื่อเปิดกล่องโต้ตอบ <interface>คุณสมบัติกลุ่ม</interface> (หรืออีกทางหนึ่ง คุณสามารถคลิกขวาที่กลุ่มและเลือก <guimenuitem>คุณสมบัติ</guimenuitem> จากเมนูบริบท) <figure>
       <title>กล่องโต้ตอบคุณสมบัติกลุ่ม</title>
       <screenshot>
	   <screeninfo>กล่องโต้ตอบคุณสมบัติกลุ่ม</screeninfo>
        <graphic fileref="figures/project_group.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure></para>

    <para>คุณสมบัติที่กำหนดให้กับกลุ่มจะมีผลกับทุกเป้าหมายที่อยู่ในกลุ่ม ดังนั้น แฟล็กของคอมไพเลอร์หรือลิงเกอร์ใด ๆ ที่กำหนดให้กับกลุ่ม จะกลายเป็นส่วนหนึ่งของแฟล็กสำหรับเป้าหมายทั้งหมดในกลุ่มนั้น ๆ โดยอัตโนมัติ (เพิ่มเติมจากคุณสมบัติแต่ละรายการของแต่ละเป้าหมาย) กล่องโต้ตอบคุณสมบัติกลุ่มจะมีช่องข้อมูลต่อไปนี้ <itemizedlist>
		    <listitem>
		     <para><emphasis>พาธแฟ้มส่วนหัว</emphasis>: กำหนดไดเรกทอรีแฟ้มส่วนหัวสำหรับเป้าหมาย C และ C++ ของคุณที่นี่ คุณต้องป้อนตัวเลือกพาธแฟ้มส่วนหัวเต็ม ๆ ของคอมไพเลอร์ เช่น -I/usr/include/blah พาธแฟ้มส่วนหัวจะใช้ในหาแฟ้มส่วนหัวต่าง ๆ ที่ใช้ในแฟ้มซอร์สของคุณ (คุณยังสามารถเพิ่มแฟล็กคอมไพเลอร์อื่น ๆ ที่นี่ได้เช่นกัน แต่ทางที่ดี ควรกำหนดในช่องข้อมูล <emphasis>แฟล็กของคอมไพเลอร์</emphasis> โดยเฉพาะจะดีกว่า ดังจะอธิบายด้านล่าง)</para>
           </listitem>
		    <listitem>
		     <para><emphasis>แฟล็กของคอมไพเลอร์</emphasis>: ตั้งค่าแฟล็กเฉพาะสำหรับคอมไพเลอร์ที่นี่ จะมีช่องข้อมูลแยกกันสำหรับคอมไพเลอร์ชนิดต่าง ๆ แฟล็กที่สามารถตั้งค่าในช่องเหล่านี้ จะขึ้นอยู่กับคอมไพเลอร์จริงที่ใช้ คอมไพเลอร์ปริยายสำหรับ C/C++ คือ gcc/g++ (GNU C Compiler) ตรวจสอบรายละเอียดเพิ่มเติมได้จาก <ulink url="info:gcc">เอกสาร info ของ gcc</ulink></para>
           </listitem>
		    <listitem>
		     <para><emphasis>ไดเรกทอรีติดตั้ง</emphasis>: กล่องโต้ตอบจะแสดงช่องข้อมูลสำหรับเป้าหมายแต่ละอันในกลุ่มที่ต้องระบุไดเรกทอรีติดตั้ง คุณควรกำหนดไดเรกทอรีติดตั้งแต่ละตัวโดยสัมพัทธ์กับตัวแปรไดเรกทอรีของ <application>automake</application> เช่น $(prefix), $(bindir), $(libdir) หรือ $(datadir)</para>
           </listitem>
          </itemizedlist></para>
   </sect2>

   <sect2 id="target-properties">
    <title>คุณสมบัติเป้าหมาย</title>
    <para>คุณสมบัติที่กำหนดให้กับเป้าหมายใด จะมีผลกับเป้าหมายนั้นเท่านั้น และเป้าหมายยังสืบทอดคุณสมบัติมาจากกลุ่มที่มันเป็นสมาชิกอีกด้วย</para>
	  <para>การตั้งค่าคุณสมบัติของเป้าหมาย ทำได้โดยดับเบิลคลิกที่เป้าหมายในหน้าต่าง <interface>โครงการ</interface> เพื่อเปิดกล่องโต้ตอบคุณสมบัติเป้าหมาย (หรืออีกทางหนึ่ง คุณสามารถคลิกขวาที่เป้าหมายและเลือก <guimenuitem>คุณสมบัติ</guimenuitem> จากเมนูบริบท) <figure>
       <title>กล่องโต้ตอบคุณสมบัติเป้าหมาย</title>
       <screenshot>
	   <screeninfo>กล่องโต้ตอบคุณสมบัติเป้าหมาย</screeninfo>
        <graphic fileref="figures/project_target.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure></para>
    <para>คุณสามารถเพิ่มมอดูลที่คุณได้เพิ่มไว้ใน <link linkend="project-properties">คุณสมบัติโครงการ</link> เข้าในเป้าหมายเป็นรายตัวได้ที่นี่ การเปิดใช้มอดูล ก็เพียงแต่กากล่องกาข้างชื่อมอดูล จะเป็นการเพิ่มแฟล็กพาธแฟ้มส่วนหัวและแฟล็กลิงเกอร์ให้กับเป้าหมาย และเปิดให้คุณใช้งานมอดูลดังกล่าวภายในเป้าหมายนี้โดยอัตโนมัติ</para>
    <sect3 id="target-advanced">
    <title>ตัวเลือกระดับสูงของเป้าหมาย</title>
    <para>ช่องข้อมูลต่อไปนี้จะมีในการตั้งค่าเป้าหมายขั้นสูงที่คุณจะพบเมื่อคลิกปุ่ม <guibutton>ระดับสูง...</guibutton> ในกล่องโต้ตอบคุณสมบัติเป้าหมาย</para>
    <para>
    <figure>
       <title>กล่องโต้ตอบคุณสมบัติเป้าหมาย</title>
       <screenshot>
	   <screeninfo>กล่องโต้ตอบคุณสมบัติเป้าหมาย</screeninfo>
        <graphic fileref="figures/project_target_details.png" format="PNG" srccredit="jhs"/>
       </screenshot>
     </figure>
		   <itemizedlist>
		    <listitem>
		     <para><emphasis>การตั้งค่าคอมไพเลอร์</emphasis>: ตั้งค่าแฟล็กเฉพาะสำหรับคอมไพเลอร์ที่นี่ จะมีช่องข้อมูลแยกกันสำหรับคอมไพเลอร์ชนิดต่าง ๆ แฟล็กที่สามารถตั้งค่าในช่องเหล่านี้ จะขึ้นอยู่กับคอมไพเลอร์จริงที่ใช้ คอมไพเลอร์ปริยายสำหรับ C/C++ คือ gcc/g++ (GNU C Compiler) ตรวจสอบรายละเอียดเพิ่มเติมได้จาก <ulink url="info:gcc">เอกสาร info ของ gcc</ulink></para>
            </listitem>
		    <listitem>
		     <para><emphasis>แฟล็กของลิงเกอร์</emphasis>: ตั้งค่าแฟล็กของลิงเกอร์ที่จะใช้เมื่อลิงก์เป้าหมาย แฟล็กนี้จะมีผลกับเป้าหมายที่เป็นโปรแกรมและไลบรารีเท่านั้น ดูตัวเลือกลิงเกอร์ทั้งหมดได้จาก <ulink url="info:ld">เอกสาร info ของ ld</ulink></para>
            </listitem>
		    <listitem>
		     <para><emphasis>ไลบรารี</emphasis>: กำหนดไลบรารีที่เป้าหมายต้องใช้</para>
           </listitem>
          </itemizedlist>

    </para>
    </sect3>
   </sect2>
  </sect1>
  
 </chapter>

 <!-- Build -->
 <!-- ============= Build ====================== -->
 <chapter id="building">
  <title>การประกอบสร้าง</title>
  <para>แอนจูตาจะจัดการโครงการ <application>autotools</application> เป็นหลัก แม้จะสามารถจัดการกับโครงการชนิดอื่น ๆ เช่น โครงการที่ผู้ใช้เขียน Makefile เองได้ แต่ส่วนติดต่อสำหรับประกอบสร้างโครงการในปัจจุบันจะมุ่งไปที่โครงการ autotools ความรู้บางอย่างเกี่ยวกับ autotools จึงมีประโยชน์ในการทำความเข้าใจวิธีการที่โครงการถูกประกอบสร้าง</para>
  <para>โครงการ autotools จะแบ่งการประกอบสร้างเป็น 3 ขั้นตอน:</para>
  <para>
     <orderedlist>
      <listitem><para>สร้าง</para></listitem>
      <listitem><para>ตั้งค่า</para></listitem>
      <listitem><para>ประกอบสร้าง</para></listitem>
     </orderedlist>
  </para>
  <para><emphasis>ประกอบสร้าง</emphasis> เป็นขั้นตอนหลักที่ทุกแฟ้มเป้าหมายจะถูกสร้างจากแฟ้มซอร์ส ขั้นตอนนี้สามารถแบ่งออกเป็นสองขั้นตอนย่อย คือ <emphasis>คอมไพล์</emphasis> และ <emphasis>ลิงก์</emphasis> ในขั้น <emphasis>คอมไพล์</emphasis> นั้น แฟ้มอ็อบเจกต์แต่ละแฟ้มจะถูกสร้างจากซอร์ส เช่น แฟ้มซอร์ส <filename>hello.c</filename> จะสร้าง <filename>hello.o</filename> หลังจากคอมไพล์เสร็จ โดยปกติแล้ว คุณไม่จำเป็นต้องกังวลเกี่ยวกับแฟ้มอ็อบเจกต์เหล่านี้ — เพียงแค่คิดว่าเป็นแฟ้มระหว่างทางก็พอ ส่วนในขั้น <emphasis>ลิงก์</emphasis> แฟ้มอ็อบเจกต์และไลบรารีทั้งหมดจะถูกลิงก์เข้าด้วยกันเพื่อสร้างเป็นแฟ้มโปรแกรมสุดท้าย ภาษาโปรแกรมบางภาษาไม่จำเป็นต้องมีขั้นตอน <emphasis>คอมไพล์</emphasis> และ <emphasis>ลิงก์</emphasis> นอกจากนี้ ขั้นตอน <emphasis>ประกอบสร้าง</emphasis> อาจถูกใช้สร้างแฟ้มอื่น ๆ เช่น แฟ้มเอกสาร ซึ่งไม่จำเป็นต้องใช้ขั้นตอนดังกล่าว</para>
  <para><emphasis>ตั้งค่า</emphasis> เป็นขั้นตอนที่ไดเรกทอรีของซอร์สถูกปรับให้เข้ากับระบบของคุณ โครงการ <application>autotools</application> สามารถประกอบสร้างในระบบต่าง ๆ ได้หลากหลาย โดยใช้คอมไพเลอร์ที่แตกต่างกันและมีฟังก์ชันในไลบรารีต่างกัน ขั้นตอนนี้จะเรียกสคริปต์ชื่อ <filename>configure</filename> ซึ่งจะตรวจสอบคุณลักษณะต่าง ๆ ของระบบของคุณ และสร้างแฟ้มบางแฟ้มที่จำเป็นในการประกอบสร้าง (เช่น <filename>Makefile</filename> และ <filename>config h.</filename>) ขั้นตอนนี้จะใช้ในการเลือกตัวเลือกของการประกอบสร้างด้วย เช่น อาจมีตัวเลือกของการประกอบสร้างที่ปิดการปรับประสิทธิภาพของโค้ด เพื่อให้ดีบั๊กได้ง่ายขึ้น หรืออาจมีตัวเลือกที่ปิดส่วนของโปรแกรมที่ยังอยู่ในระหว่างการทดลอง</para>
  <para><emphasis>สร้าง</emphasis> เป็นขั้นตอนที่สคริปต์ <filename>configure</filename> และแฟ้มอื่น ๆ ที่เกี่ยวข้องจะถูกสร้าง สคริปต์ <filename>configure</filename> ที่ใช้ข้างต้นนั้น จำเป็นต้องทำงานในระบบต่าง ๆ ที่หลากหลาย และมีการตรวจสอบจำนวนมาก จึงค่อนข้างยากที่จะเขียนขึ้นด้วยมือ นอกจากนี้ <application>autotools</application> ยังบังคับโครงสร้างองค์ประกอบบางอย่างของโครงการ เช่น ต้องมีแฟ้มบังคับบางแฟ้ม คือ <filename>NEWS</filename> และ <filename>COPYING</filename> เป็นต้น จึงมีเครื่องมือต่าง ๆ สำหรับสร้างแฟ้มที่จำเป็นจากแฟ้มที่ง่ายกว่าที่เขียนขึ้นโดยนักพัฒนา เช่น <filename>configure.in</filename> (หรือ <filename>configure.ac</filename>) และ <filename>Makefile.am</filename> เครื่องมือเหล่านี้มักจะถูกเรียกจากสคริปต์ชื่อ <filename>autogen.sh</filename> ในไดเรกทอรีโครงการ ขั้นตอนนี้จะมีประโยชน์สำหรับนักพัฒนา (คนที่แก้ไขแฟ้มซอร์สดังกล่าว) เท่านั้น เพราะสคริปต์ <filename>configure</filename> จะอาศัยแฟ้มซอร์สเท่านั้นในการสร้าง และจะแจกจ่ายมาในแพกเกจโครงการอยู่แล้ว และสังเกตว่า Makefile ต่าง ๆ ที่สร้างโดย <application>configure</application> จะมีกฎบางอย่างสำหรับสร้างโครงการซ้ำใหม่โดยอัตโนมัติเมื่อต้องการอยู่แล้ว จึงมักจะไม่จำเป็นต้องไปเรียกซ้ำเองโดยตรง</para>
 <para>อ่านรายละเอียดเพิ่มเติมเกี่ยวกับการทำงานของเครื่องมือเหล่านี้ได้จากหน้า info ของ <ulink type="info" url="info:automake"><application>automake</application></ulink> และ <ulink type="info" url="info:autoconf"><application>autoconf</application></ulink></para>


 <!-- Build: Generate and Configure -->

 <sect1 id="build-configure">
  <title>สร้างและตั้งค่า</title>
  <sect2 id="configure">
   <title>ตั้งค่าโครงการ</title>
   <para>คุณต้องทำขั้นตอนนี้ก่อน จึงจะสามารถประกอบสร้างโครงการของคุณได้ ขั้นตอนนี้มักจะทำเพียงครั้งเดียวในช่วงเริ่มต้นของการประกอบสร้างครั้งแรก — เช่น หลังจากที่คุณได้แตกซอร์สจากแฟ้มทาร์ที่แจกจ่ายของโครงการ หลังจากนั้น การตั้งค่าจะถูกจัดการโดยอัตโนมัติในการประกอบสร้างครั้งถัด ๆ ไป และถ้าคุณได้ใช้ <emphasis>เครื่องมือวิเศษสร้างโปรแกรม</emphasis> เพื่อสร้างโปรแกรมแล้ว คุณจะไม่ต้องแยกทำขั้นนี้เลย เครื่องมือวิเศษจะทำให้ โดยเป็นส่วนหนึ่งของกระบวนการสร้างโครงการ</para>
   <para>ไม่จำเป็นว่าจะต้องเรียกคำสั่งนี้เพียงครั้งเดียว คุณสามารถเรียกได้ทุกเวลา ซึ่งโดยปกติมักเรียกเมื่อต้องเปลี่ยนตัวเลือกของการตั้งค่า สิ่งหนึ่งที่ควรทราบก็คือ ถ้าแฟ้ม <filename>config.h</filename> ในไดเรกทอรีระดับบนมีการเปลี่ยนแปลง การเรียก <filename>configure</filename> ซ้ำจะไม่เขียนทับแฟ้มดังกล่าว</para>
   <para>ทั้งขั้นตอนสร้างและตั้งค่าโครงการ จะเรียกด้วยเมนูเดียวกัน คือ <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ตั้งค่าโครงการ...</guimenuitem></menuchoice> ซึ่งจะเปิดกล่องโต้ตอบที่คุณสามารถเลือกสิ่งต่อไปนี้ได้: <itemizedlist>
     <listitem><para>เลือกว่าคุณต้องการทำขั้นตอนสร้างโครงการหรือไม่</para>
      <para>ขั้นตอนสร้างโครงการต้องทำหนึ่งครั้งเมื่อเริ่มต้นโครงการ จากนั้นจะถูกจัดการโดยอัตโนมัติโดยกระบวนการประกอบสร้าง คุณสามารถบังคับให้ทำขั้นตอนนี้ซ้ำได้ โดยกากล่องกา <interface>สร้างโครงการซ้ำ</interface> คุณอาจทำเช่นนี้หากคุณพบปัญหายุ่งยากในขณะประกอบสร้างโครงการ (เช่น ได้รับรายงานข้อผิดพลาดเกี่ยวกับการประกอบสร้าง หลังจากที่ได้ปรับเปลี่ยนแฟ้มที่เกี่ยวกับการประกอบสร้างไปมากมาย)</para>
     </listitem>
     <listitem><para>ชื่อของค่าตั้ง</para>
      <para>ชื่อนี้จะใช้เพื่ออ้างถึงการตั้งค่าแต่ละแบบ ค่าตั้งบางแบบ (ปริยาย, ดีบั๊ก, ปรับประสิทธิภาพ) จะมีการกำหนดไว้แล้วโดยปริยาย ค่าตั้งแบบหนึ่ง ๆ จะประกอบด้วยไดเรกทอรีสำหรับประกอบสร้าง และตัวเลือกบางตัวสำหรับการตั้งค่าโครงการ</para>
     </listitem>
     <listitem><para>ไดเรกทอรีสำหรับประกอบสร้าง</para>
      <para>เป็นชื่อไดเรกทอรีสำหรับใช้ประกอบสร้าง ในการตั้งค่าแบบปริยาย จะเป็นไดเรกทอรีเดียวกับไดเรกทอรีซอร์ส แต่ autotools รองรับการประกอบสร้างในไดเรกทอรีอื่นด้วย</para> 
      <note><para>ค่าตั้งแต่ละแบบต้องมีไดเรกทอรีสำหรับประกอบสร้างที่ต่างกัน และถ้ามีค่าตั้งแบบใดแบบหนึ่งใช้ไดเรกทอรีซอร์สแล้ว คุณจะไม่สามารถตั้งค่าแบบอื่น ๆ ได้ในเวลาเดียวกัน คุณจะต้องเรียก <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ลบค่าตั้ง</guimenuitem></menuchoice> กับค่าตั้งแบบที่ใช้ไดเรกทอรีซอร์ส ก่อนที่จะเพิ่มค่าตั้งแบบใหม่</para></note>
     </listitem>
     <listitem><para>ตัวเลือกสำหรับตั้งค่า</para>
      <para>ตัวเลือกเหล่านี้จะถูกส่งผ่านไปให้สคริปต์ <filename>configure</filename> ตัวเลือกบางตัวเป็นตัวเลือกมาตรฐานเช่น --prefix และ CFLAGS ตัวเลือกอื่น ๆ จะขึ้นอยู่กับโครงการ คุณสามารถขอดูรายชื่อตัวเลือกสำหรับการตั้งค่าทั้งหมดที่มีได้ โดยเรียกสคริปต์ <filename>configure</filename> ด้วยอาร์กิวเมนต์ <option>-help</option></para>
     </listitem>
    </itemizedlist></para>
  </sect2>
  <sect2 id="select-configure">
   <title>เลือกค่าตั้ง</title>
   <para>ถ้าคุณได้สร้างค่าตั้งแบบต่าง ๆ ไว้ คุณสามารถเลือกแบบที่จะใช้งานได้ในเมนู <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>เลือกค่าตั้ง</guimenuitem></menuchoice></para>
  </sect2>
  <sect2 id="clean-configure">
   <title>ล้างค่าตั้ง</title>
   <para>การเก็บกวาดโครงการให้กลับสู่สถานะที่ต้องทำขั้นตอนตั้งค่าใหม่ ทำได้โดยเลือก <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ลบค่าตั้ง</guimenuitem></menuchoice> จะเป็นการเรียก <command>make distclean</command> ซึ่งจะลบแฟ้มเกลี้ยงกว่า <guimenuitem>เก็บกวาดโครงการ</guimenuitem> พูดง่าย ๆ ก็คือ ทำให้โครงการเสมือนกับเพิ่งแตกจากแฟ้มทาร์มาใหม่ ๆ สังเกตว่านี่ยังไม่ได้ลบไดเรกทอรีที่ตั้งค่าไว้ คุณสามารถลบเองได้ถ้าต้องการ</para>
  </sect2>
 </sect1>


 <!-- Build: Compile and Build -->

 <sect1 id="build-compile-and-build">
  <title>คอมไพล์และประกอบสร้าง</title>
  <sect2 id="build-compile">
   <title>การคอมไพล์แฟ้ม</title>
   <para>ในโครงการหนึ่ง ๆ แฟ้มซอร์สแต่ละแฟ้มสามารถแยกคอมไพล์เป็นแฟ้มอ็อบเจกต์  (<filename>*.o</filename>) ได้ แม้ว่าคุณไม่จำเป็นต้องกังวลเกี่ยวกับแฟ้มอ็อบเจกต์เหล่านี้ แต่บางครั้งการคอมไพล์แฟ้มเดียวก่อนก็สะดวกกว่า  (เช่น เพื่อให้แน่ใจว่าไม่มีข้อผิดพลาดทางไวยากรณ์) การประกอบสร้างโครงการทั้งโครงการอาจกินเวลานาน โดยเฉพาะในกรณีของโปรแกรมที่มีขนาดใหญ่และซับซ้อนมาก ๆ ดังนั้น คุณจึงอาจใช้วิธีวนแก้ไขและคอมไพล์ไปเรื่อย ๆ ในระหว่างพัฒนาโครงการ</para>
   <para>การคอมไพล์แฟ้ม ทำได้โดยเลือกรายการเมนู <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>คอมไพล์</guimenuitem></menuchoice> หรือกด <keycap>F11</keycap> ซึ่งจะคอมไพล์แฟ้มที่ทำงานอยู่</para>
  </sect2>

  <sect2 id="build-build">
   <title>การประกอบสร้างแฟ้มโปรแกรม</title>
   <para><application>แอนจูตา</application> ไม่มีคำสั่งลิงก์แยกต่างหาก ด้วยเหตุผลง่าย ๆ คือ มันไม่จำเป็น กระบวนการประกอบสร้างจะคอมไพล์แฟ้มซอร์สทั้งหมด แล้วลิงก์เข้าด้วยกันพร้อมกับไลบรารีที่จำเป็น โดยคำสั่งประกอบสร้างจะไม่คอมไพล์แฟ้มที่อ็อบเจกต์ทันแฟ้มซอร์สอยู่แล้วซ้ำอีก (เรียกว่า <emphasis>การตรวจสอบความขึ้นต่อกัน</emphasis>) ถ้าคุณได้แยกคอมไพล์แฟ้มทั้งหมดเรียบร้อยแล้ว สิ่งที่ขั้นตอนประกอบสร้างจะทำก็คือการลิงก์เท่านั้น และถ้าคุณได้ประกอบสร้างโครงการไปเรียบร้อยแล้ว โดยไม่ได้มีการเปลี่ยนแปลงแฟ้มซอร์สใด ๆ แม้แต่ขั้นตอนการลิงก์ก็จะถูกข้ามไป</para>
   <para>แล้วการตรวจสอบความขึ้นต่อกันดังกล่าวมีผลจริง ๆ อย่างไรกับการพัฒนาโครงการ? ถ้าคุณเปลี่ยนแปลงแฟ้มใดแฟ้มหนึ่ง แฟ้มซอร์สทั้งหมดที่ขึ้นอยู่กับแฟ้มที่แก้ไขนั้นก็จะถูกคอมไพล์ใหม่ แฟ้มทั้งหมดในโครงการ (ไม่ใช่เฉพาะแฟ้มอ็อบเจกต์และแฟ้มโปรแกรม) จะถูกตรวจสอบความขึ้นต่อกันเหล่านี้ในระหว่างกระบวนการประกอบสร้าง ถ้าพบว่าแฟ้มใดขึ้นอยู่กับแฟ้มอื่นที่มีการเปลี่ยนแปลง แฟ้มนั้นก็จะถูกสร้างใหม่</para>
   <para>คุณพอจะนึกภาพออกไหม ว่าชีวิตของคุณ (ในฐานะโปรแกรมเมอร์) จะเป็นอย่างไร ถ้าไม่มีการตรวจสอบความขึ้นต่อกันนี้? ถ้าคุณยังไม่สามารถตอบได้ในตอนนี้ คุณจะพบเองเมื่อคุณเริ่มพัฒนาโครงการขนาดใหญ่!</para>
   <para><menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ประกอบสร้าง</guimenuitem></menuchoice> จะประกอบสร้างทุกแฟ้มในไดเรกทอรีของแฟ้มปัจจุบันที่ทำงานอยู่</para>
   <para><menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ประกอบสร้างโครงการ</guimenuitem></menuchoice> จะประกอบสร้างทั้งโครงการ — ทุกไดเรกทอรีย่อยจะถูกประกอบสร้างแบบ recursive</para>
  </sect2>
 </sect1>


 <!-- Build: Other operations -->

 <sect1 id="build-other">
  <title>การกระทำอื่น ๆ</title>
  <sect2 id="build-dist">
   <title>การสร้างแพกเกจสำหรับการแจกจ่าย</title>
   <para>การประกอบสร้างแฟ้มทาร์สำหรับแจกจ่ายของโครงการ ทำได้โดยเลือก <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ประกอบสร้างแฟ้มทาร์</guimenuitem></menuchoice> จะเป็นการสร้างแฟ้มทาร์ (<filename>*.tar.gz</filename>) ไว้ในไดเรกทอรีระดับบนสุดของโครงการ จากนั้นก็คัดลอกแฟ้มไปยังที่ที่ปลอดภัยสำหรับการแจกจ่าย</para>
  </sect2>
  <sect2 id="build-install">
   <title>การติดตั้งโครงการ</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>ติดตั้ง</guimenuitem></menuchoice> จะติดตั้งโปรแกรมที่สร้างขึ้นลงในระบบของคุณ</para>
   <note>
    <title>การติดตั้งเพื่อใช้ทั้งระบบ</title>
    <para>คุณต้องเข้าสู่ระบบเป็น root เพื่อจะติดตั้งแบบใช้ทั้งระบบ สังเกตด้วยว่าการที่โปรแกรม GNOME จะใช้ pixmap ในโครงการได้ จะต้องติดตั้งเป็นโปรแกรมแบบใช้ทั้งระบบ มิฉะนั้น เมื่อโปรแกรมทำงานในโครงการของคุณ จะมีข้อผิดพลาด "ไม่พบ pixmap" จำนวนมาก คุณสามารถตั้งค่าแอนจูตาให้ใช้ <command>sudo</command> หรือ <command>su</command> ก่อนติดตั้งโครงการได้ในการปรับแต่งค่าการประกอบสร้าง</para>
   </note>
  </sect2>
  <sect2 id="build-clean">
   <title>การเก็บกวาด</title>
   <para>นี่เป็นการลบแฟ้มทั้งหมดที่สร้างขึ้นจากกระบวนการประกอบสร้าง รวมถึงแฟ้มอ็อบเจกต์ทั้งหมด (<filename>*.o</filename>) และแฟ้มโปรแกรม สามารถเก็บกวาดเพียงไดเรกทอรีเดียวหรือทั้งโครงการก็ได้</para>
   <para>เลือกเมนู <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>เก็บกวาดโครงการ</guimenuitem></menuchoice> ถ้าต้องการเก็บกวาดแฟ้มทั้งหมดในโครงการ</para>
   <para>เลือกเมนู <menuchoice><guisubmenu>ประกอบสร้าง</guisubmenu><guimenuitem>เก็บกวาด</guimenuitem></menuchoice> ถ้าต้องการเก็บกวาดเฉพาะไดเรกทอรีของแฟ้มปัจจุบันที่ทำงานอยู่เท่านั้น</para>
  </sect2>

 </sect1>

</chapter>

 <!-- Debugging -->
 <!-- ============= Debugging ====================== -->
 <chapter id="debugging">
  <title>การดีบั๊ก</title>
  <para>
   <emphasis>ดีบั๊กเป็นมนุษย์ แก้บั๊กเป็นเทพเจ้า...</emphasis>
  </para>
  <para>ส่วนของ <emphasis>มนุษย์</emphasis> คือสิ่งที่หัวข้อนี้พูดถึง แต่ส่วนของ <emphasis>เทพเจ้า</emphasis> นั้นขึ้นอยู่กับคุณ!</para>
  <para>เมื่อโปรแกรมไม่ประพฤติตามที่ควรจะเป็น เราเรียกว่าโปรแกรมนั้นมี <emphasis>บั๊ก</emphasis> บั๊กไม่ใช่ข้อผิดพลาดของการคอมไพล์ — ข้อผิดพลาดของการคอมไพล์นั้นแก้ง่าย เพราะคอมไพเลอร์จะบอกจุดที่เป็นปัญหาให้ แต่สำหรับบั๊กแล้ว เป็นข้อผิดพลาดที่เกิดขึ้นระหว่างการทำงานของโปรแกรม และตรวจพบได้ยาก (บางครั้งยากมาก!)</para>
  <para>โปรแกรมใดก็ตามที่คุณคิดว่าปลอดบั๊กจะไม่เคยปลอดบั๊กอย่างแท้จริง สิ่งที่เราทำได้คือลดจำนวนบั๊กที่มีอยู่ในโปรแกรม กระบวนการเอาบั๊กออกเรียกกันว่า <emphasis>การดีบั๊ก</emphasis> และเครื่องมือที่ใช้สำหรับการดีบั๊กก็เรียกว่า <emphasis>โปรแกรมดีบั๊ก</emphasis> <application>แอนจูตา</application> มีสภาพแวดล้อมสำหรับการดีบั๊กที่เป็นมิตรกับผู้ใช้และมีประสิทธิภาพ (ที่จริงแล้ว ก็เป็น GUI ครอบบน <application>gdb</application> ซึ่งเป็นเครื่องมือดีบั๊กแบบบรรทัดคำสั่งที่ทรงพลัง และเป็นมาตรฐานในลินุกซ์)</para>
  <para>โปรแกรมดีบั๊กจะติดตามและแกะรอยการทำงานของโปรแกรม และให้มุมมองต่าง ๆ ของข้อมูลที่จำเป็นในการศึกษาการทำงานของโปรแกรม</para>

 <!-- Debugger: Start and stop -->

 <sect1 id="debugger-session">
  <title>การเริ่มต้นและหยุด</title>

  <para>โปรแกรมดีบั๊กจะเริ่มทำงานโดยมีโปรแกรมโหลดอยู่ด้วยเสมอ ซึ่งทำได้สองวิธี: <itemizedlist>
    <listitem><para><emphasis>การเรียกทำงานแฟ้มโปรแกรม</emphasis></para></listitem>
    <listitem><para><emphasis>การแนบกับโพรเซส</emphasis></para></listitem>
   </itemizedlist><note>
    <para>ความสามารถเกือบทุกอย่างของแอนจูตาจะมาในรูปของปลั๊กอิน ถ้าคุณไม่เห็นเมนูที่อธิบายที่นี่ ก็อาจเป็นเพราะยังไม่ได้โหลดปลั๊กอินโปรแกรมดีบั๊ก ไปที่เมนู <menuchoice><guisubmenu>แก้ไข</guisubmenu><guimenuitem>ปรับแต่ง</guimenuitem><guimenuitem>ทั่วไป</guimenuitem><guimenuitem>ปลั๊กอินที่ติดตั้งไว้</guimenuitem></menuchoice> แล้วตรวจสอบว่าปลั๊กอินของโปรแกรมดีบั๊กถูกโหลดอยู่หรือไม่ ปลั๊กอินนี้เป็นปลั๊กอินที่ให้ผู้ใช้เลือกเปิดใช้ได้ จึงโหลดหรือถอนได้ตามสั่ง</para>
   </note></para>

  <sect2 id="debug-run">
   <title>การเรียกทำงานแฟ้มโปรแกรม</title>
   <para>การเรียกโปรแกรมทำงานโดยมีหรือไม่มีโปรแกรมดีบั๊กก็ใช้เมนูเดียวกัน คือ เลือกเมนู <menuchoice><guisubmenu>เรียกทำงาน</guisubmenu><guimenuitem>เรียกทำงาน</guimenuitem></menuchoice> เพื่อเรียกโปรแกรมโดยไม่มีโปรแกรมดีบั๊ก และ <menuchoice><guisubmenu>เรียกทำงาน</guisubmenu><guimenuitem>ดีบั๊กโปรแกรม</guimenuitem></menuchoice> เพื่อเรียกโปรแกรมพร้อมโปรแกรมดีบั๊ก</para>
   <note>
    <para>เพื่อการใช้โปรแกรมดีบั๊กที่ดีกว่า ขอแนะนำให้คุณประกอบสร้างโปรแกรมของคุณแบบมีข้อมูลดีบั๊ก (-g สำหรับ gcc) และไม่ต้องปรับประสิทธิภาพ (-O0 สำหรับ gcc) ซึ่งสามารถทำได้โดยเลือกค่าตั้งแบบดีบั๊กก่อนประกอบสร้างโปรแกรมครั้งแรก</para>
   </note>
   <para>คุณสามารถเลือกโปรแกรมที่จะเรียกทำงาน พร้อมกับกำหนดตัวแปรสภาพแวดล้อมได้ โดยใช้เมนู <menuchoice><guisubmenu>เรียกทำงาน</guisubmenu><guimenuitem>พารามิเตอร์ของโปรแกรม…</guimenuitem></menuchoice> คุณสามารถเลือกสิ่งต่อไปนี้ได้: <itemizedlist>
     <listitem><para>โปรแกรมที่คุณต้องการดีบั๊ก</para>
      <para>เมนูดึงลงของกล่องคอมโบกำหนดโปรแกรมเป้าหมาย จะถูกเติมล่วงหน้าด้วยแฟ้มโปรแกรมทั้งหมดของโครงการปัจจุบัน แต่คุณสามารถเลือกแฟ้มโปรแกรมอื่นที่ไม่ได้อยู่ในโครงการได้ โปรแกรมดีบั๊กยังรับแฟ้มโปรแกรมของ libtool ซึ่งเป็นสคริปต์ที่สร้างโดย libtool เพื่อครอบแฟ้มโปรแกรมจริงอีกด้วย</para>
     </listitem>
     <listitem><para>พารามิเตอร์บรรทัดคำสั่ง</para></listitem>
     <listitem><para>ไดเรกทอรีทำงาน</para></listitem>
     <listitem><para>ตัวแปรสภาพแวดล้อม</para>
      <para>ตัวแปรสภาพแวดล้อมที่แสดงเป็นสีเทาอ่อนคือตัวแปรสภาพแวดล้อมปัจจุบัน คุณสามารถเพิ่ม แก้ไข หรือลบตัวแปรสภาพแวดล้อมต่าง ๆ ได้ที่นี่</para>
      <tip><para>ถ้าต้องการดีบั๊กแอนจูตาด้วยแอนจูตา คุณสามารถใช้ชุดตกแต่งอื่นเพื่อเปลี่ยนหน้าตาของโปรแกรมตัวที่จะดีบั๊กได้ ตัวอย่างเช่น คุณสามารถเพิ่ม "GTK2_RC_FILES=usr/share/themes/Crux/gtk-2.0/gtkrc" ได้</para></tip>
     </listitem>
     <listitem><para>เลือกว่าโปรแกรมจะทำงานในเทอร์มินัลหรือไม่ ถ้าใช่ ก็จะใช้ปลั๊กอินเทอร์มินัลของแอนจูตา</para></listitem>
    </itemizedlist></para>
  </sect2>
	
  <sect2 id="debug-attach">
  <title>การแนบกับโพรเซส</title>
   <para>เป็นไปได้ที่คุณจะแนบเข้ากับโพรเซสที่กำลังทำงานอยู่และดีบั๊กตัวโพรเซสนั้น โดยเลือกเมนู <menuchoice><guisubmenu>เรียกทำงาน</guisubmenu><guimenuitem>ดีบั๊กโพรเซส…</guimenuitem></menuchoice> จะปรากฏรายชื่อทุกโพรเซสที่กำลังทำงานอยู่ในระบบ</para>
   <figure id="attach">
    <title>กล่องโต้ตอบ "แนบกับโพรเซส"</title>
    <screenshot>
	<screeninfo>กล่องโต้ตอบ "แนบกับโพรเซส"</screeninfo>
     <graphic fileref="figures/attach.png" format="PNG" srccredit="andyp"/>
    </screenshot>
   </figure>
   <para>เลือกโพรเซสที่จะแนบแล้วคลิก <guibutton>แนบ</guibutton> เพื่อเริ่มโปรแกรมดีบั๊ก แนบกับโพรเซสที่เลือก และหยุดโพรเซส</para>
   <note>
    <para>ขณะนี้ ยังไม่สามารถโหลดข้อมูลสัญลักษณ์สำหรับโพรเซสที่แนบได้ โพรเซสควรจะมีข้อมูลสัญลักษณ์มาด้วยในตัว</para>
   </note>
  </sect2>
  
  <sect2 id="debug-stop">
   <title>การหยุดโปรแกรมดีบั๊ก</title>
    <para>เลือกเมนู <menuchoice><guisubmenu>เรียกทำงาน</guisubmenu><guimenuitem>หยุดโปรแกรมดีบั๊ก</guimenuitem></menuchoice> ถ้าต้องการหยุดโปรแกรมดีบั๊ก จะเป็นการฆ่าโปรแกรมที่กำลังดีบั๊กอยู่ แต่ถ้าโปรแกรมดีบั๊กกำลังแนบกับโพรเซสที่ทำงานอยู่ ก็จะแค่แยกตัวออกจากโพรเซสโดยไม่ฆ่าโพรเซส คุณจะพบกล่องโต้ตอบยืนยันถ้ามีโปรแกรมกำลังแนบอยู่หรือกำลังทำงานอยู่</para>
  </sect2>

  <sect2 id="debug-add-sources">
   <title>การเพิ่มไดเรกทอรีซอร์ส</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>เพิ่มพาธของซอร์ส…</guimenuitem>menuchoice&gt; </menuchoice></para>
   <para>แฟ้มโปรแกรมส่วนใหญ่จะเก็บข้อมูลพาธเต็มของแฟ้มซอร์สอยู่แล้ว การกำหนดไดเรกทอรีที่เก็บแฟ้มซอร์สจึงมักไม่มีประโยชน์ แต่แฟ้มโปรแกรมบางแฟ้มก็เก็บเฉพาะชื่อแฟ้มโดยไม่มีพาธ ในกรณีนี้ โปรแกรมดีบั๊กจะค้นหาแฟ้มซอร์สในไดเรกทอรีเหล่านี้ ลำดับของไดเรกทอรีจะมีความสำคัญถ้ามีหลายแฟ้มที่ชื่อซ้ำกัน ดังนั้นคุณสามารถเปลี่ยนลำดับได้ โดยใช้ปุ่ม <guibutton>ขึ้น</guibutton> และ <guibutton>ลง</guibutton> รายชื่อไดเรกทอรีจะถูกส่งไปยังโปรแกรมดีบั๊กเมื่อเริ่มทำงาน หลังจากเปลี่ยนค่าแล้ว คุณจึงต้องเริ่มโปรแกรมดีบั๊กใหม่ เพื่อให้โปรแกรมเริ่มใช้รายชื่อใหม่</para>
  </sect2>

 </sect1>
 
 <!-- Debugger: Execution -->
 
 <sect1 id="debugger-exec">
  <title>การเรียกโปรแกรมทำงาน</title>
  <para>คุณสามารถควบคุมการทำงานของโปรแกรมในโปรแกรมดีบั๊กได้อย่างละเอียด คุณสามารถสั่งให้โปรแกรมทำงานทีละขั้น หรือให้ทำงานต่อไปจนกว่าจะถึงจุดพัก การสั่งทำงานแบบนี้เป็นสิ่งจำเป็นสำหรับการติดตามการทำงานของโปรแกรม ซึ่งก็คล้ายกับการแก้ไขวีดิทัศน์ โปรแกรมสามารถทำงานแบบ <emphasis>ภาพช้า</emphasis> พร้อมกับสามารถเดินหน้า พัก หยุด และอื่น ๆ ได้ เพียงแต่คุณยังไม่สามารถเดินย้อนกลับได้เท่านั้น</para>
  <para>วิธีการที่สามารถใช้สั่งโปรแกรมทำงานในโปรแกรมดีบั๊ก จะได้อธิบายต่อไปในหัวข้อต่อไปนี้ คำสั่งเหล่านี้จะใช้ได้เฉพาะเมื่อโปรแกรมได้เริ่มต้นทำงานไปแล้วเท่านั้น</para>
  
  <sect2 id="dbg-step-in">
   <title>ทำหนึ่งขั้น (ก้าวเข้า)</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ก้าวเข้า</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>ก้าวเข้า</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> ถ้าต้องการก้าวหนึ่งขั้นเข้าไปในโปรแกรม</para>
   <para>การทำงานทีละขั้นจะทำงานเพียงถ้อยแถลงเดียวของโปรแกรมเท่านั้น (นับจากที่ที่มันถูกหยุด) แล้วคืนการควบคุมกลับมา ถ้าถ้อยแถลงที่ทำงานนั้นมีฟังก์ชันตั้งแต่หนึ่งฟังก์ชันขึ้นไป โปรแกรมดีบั๊กจะพยายามก้าวเข้าไปในฟังก์ชันเหล่านั้นตามลำดับ และเมื่อทำงานถ้อยแถลงเสร็จและการควบคุมถูกคืนกลับมา คุณก็สามารถตรวจสอบสถานะของโปรแกรมของคุณได้</para>
   <para>ถ้า <interface>หน้าต่างถอดแยกภาษาแอสเซมบลี</interface> ได้โฟกัสอยู่ขณะที่สั่งคำสั่งนี้ โปรแกรมดีบั๊กก็จะทำงานเพียงคำสั่งแอสเซมบลีคำสั่งเดียว</para>
  </sect2>

  <sect2 id="dbg-step-over">
   <title>ทำหนึ่งขั้น (ก้าวข้าม)</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ก้าวข้าม</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>ก้าวข้าม</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> ถ้าต้องการทำข้ามถ้อยแถลงในโปรแกรมไปหนึ่งขั้น</para>
   <para>การ <emphasis>ก้าวข้าม</emphasis> ก็คล้ายกับการ <emphasis>ก้าวเข้า</emphasis> ยกเว้นว่าจะไม่มีการก้าวเข้าไปในในฟังก์ชันใด ๆ ในถ้อยแถลงที่ทำงาน ถ้อยแถลงทั้งหมดจะถูกเรียกทำงานในคราวเดียว</para>
   <para>ถ้า <interface>หน้าต่างถอดแยกภาษาแอสเซมบลี</interface> ได้โฟกัสอยู่ขณะที่สั่งคำสั่งนี้ โปรแกรมดีบั๊กก็จะทำงานคำสั่งแอสเซมบลีคำสั่งเดียว แต่จะไม่มีการหยุดอยู่ข้างในถ้าคำสั่งนั้นเป็นการเรียกรูทีนย่อย</para>
   <note>
    <para>ถ้ามีการโหลดไลบรารีแบบไดนามิกในระหว่างการก้าว โปรแกรมจะไม่หยุดเมื่อจบก้าว แต่จะทำงานต่อไปจนกว่าจะพบจุดพักหรือเมื่อคุณสั่งหยุด</para>
   </note>
  </sect2>
  
  <sect2 id="dbg-step-out">
   <title>ทำหนึ่งขั้น (ก้าวออก)</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ก้าวออก</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>ก้าวออก</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> ถ้าต้องการก้าวออกหนึ่งขั้นในโปรแกรม</para>
   <para>การ <emphasis>ก้าวออก</emphasis> จะทำงานฟังก์ชันปัจจุบันจนกว่าจะกลับออกมา และโปรแกรมจะหยุดเมื่อออกจากฟังก์ชัน การก้าวออกไม่ได้เป็นการทำขั้นเดียวจริง ๆ เพราะไม่ได้ทำงานเพียงถ้อยแถลงเดียว — แต่จะทำทั้งฟังก์ชันจนกว่าฟังก์ชันจะกลับคืนไปสู่ฟังก์ชันที่เรียกมา</para>
  </sect2>
  
  <sect2 id="dbg-run">
   <title>เรียกทำงาน/ทำต่อไป</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>เรียกทำงาน/ทำต่อไป</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>เรียกทำงาน/ทำต่อไป</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> ถ้าต้องการให้โปรแกรมทำงานต่อไป</para>
   <para>ตัวเลือกนี้จะดำเนินการทำงานของโปรแกรมต่อไป จนกว่าจะพบจุดพักหรือจบโปรแกรม</para>
  </sect2>

  <sect2 id="dbg-runto">
   <title>ทำถึงเคอร์เซอร์</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ทำถึงเคอร์เซอร์</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>ทำถึงเคอร์เซอร์</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> ถ้าต้องการให้โปรแกรมทำงานจนถึงบรรทัดที่เคอร์เซอร์วางอยู่</para>
   <para>ตัวเลือกนี้จะดำเนินการทำงานของโปรแกรมต่อไป จนกว่าจะถึงบรรทัดหรือแอดเดรส (ถ้า <interface>หน้าต่างถอดแยกภาษาแอสเซมบลี</interface> ได้โฟกัสอยู่) ที่เคอร์เซอร์วางอยู่</para>
  </sect2>
  
  <sect2 id="dbg-stop">
   <title>หยุดโปรแกรม</title>
   <para>ในระหว่างที่โปรแกรมกำลังทำงานและได้การควบคุมอยู่ จะไม่สามารถทำกิจกรรมดีบั๊กใด ๆ ได้ หากต้องการขอการควบคุมในขณะที่โปรแกรมทำงานอยู่ ก็ทำได้โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>พักโปรแกรม</guimenuitem></menuchoice> หรือคลิกที่ไอคอน <guibutton>พักโปรแกรม</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface> จะเป็นการขัดจังหวะโปรแกรมและคืนการควบคุมให้กับโปรแกรมดีบั๊ก</para>
  </sect2>
  
 </sect1>
 
<!-- ============= Debugging: Breakpoints ====================== -->
 
 <sect1 id="debugging-breaks">
  <title>จุดพัก</title>
  <para>เมื่อดีบั๊กโปรแกรม จะเป็นประโยชน์ถ้าสามารถหยุดการทำงานของโปรแกรมที่จุดใด ๆ ที่ต้องการ เพื่อที่จะสามารถตรวจสอบสถานะของโปรแกรมได้ที่ตำแหน่งนั้นได้ จุดพักจะช่วยให้ทำเช่นนั้นได้ คุณสามารถกำหนดจุดพักที่ตำแหน่งต่าง ๆ ในแฟ้มซอร์ส แล้วก็สั่งโปรแกรมทำงานได้ เมื่อโปรแกรมพบจุดพัก การทำงานของโปรแกรมจะถูกหยุดไว้ ทำให้สามารถคำนวณค่านิพจน์ต่าง ๆ ตรวจดูตัวแปรต่าง ๆ ตรวจสอบร่องรอยสแต็ก และอื่น ๆ ได้</para>

  <sect2 id="breaks-list">
   <title>การแสดงรายชื่อจุดพัก</title>
   <para><interface>หน้าต่างรายชื่อจุดพัก</interface> สามารถเปิดได้ไดยเลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>จุดพัก</guimenuitem></menuchoice></para>
   <para>
    <figure>
      <title>มุมมองจุดพัก</title>
      <screenshot>
       <screeninfo>มุมมองจุดพัก</screeninfo>
       <graphic fileref="figures/brk_dlg.png" format="PNG" srccredit="andyp"/>
      </screenshot>
    </figure>
   </para>
   <para>มุมมองนี้มีคอลัมน์ต่อไปนี้: <variablelist>
     <varlistentry>
      <term>ตำแหน่ง</term>
      <listitem>
       <para>เป็นตำแหน่งของจุดพักในแฟ้มซอร์ส เมื่อจุดพักถูกกำหนดโดยโปรแกรมดีบั๊ก คุณสามารถขอดูข้อมูลเพิ่มเติมได้ เช่น ฟังก์ชันที่เป็นที่อยู่ของจุดพัก</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>แอดเดรส</term>
      <listitem>
       <para>เขตข้อมูลนี้จะถูกเติมด้วยแอดเดรสของจุดพักเมื่อมีการกำหนดโดยโปรแกรมดีบั๊ก</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>ชนิด</term>
      <listitem>
       <para>จะแสดงเป็น "จุดพัก" เสมอ เขตข้อมูลนี้จะใช้ในรุ่นที่จะออกมาในอนาคต ที่รองรับการใช้จุดพักประเภทต่าง ๆ</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>เงื่อนไข</term>
      <listitem>
       <para>เป็นเงื่อนไขของจุดพัก จะว่างเปล่าถ้าไม่มีการกำหนดเงื่อนไข</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>จำนวนครั้งที่ผ่าน</term>
      <listitem>
       <para>เมื่อโปรแกรมดีบั๊กไม่ได้ทำงาน คอลัมน์นี้จะแสดงจำนวนครั้งที่ผ่านจุดพัก หรือแสดงค่าศูนย์ถ้าไม่ได้กำหนด</para>
       <para>เมื่อโปรแกรมดีบั๊กทำงาน ถ้าจำนวนครั้งที่ผ่านเป็นศูนย์ คอลัมน์นี้จะแสดงจำนวนครั้งที่จุดพักนี้ถูกกระตุ้น ถ้าจำนวนครั้งที่ผ่านไม่เป็นศูนย์ จะแสดงตัวเลขทั้งสองค่า จำนวนครั้งที่ผ่านจะเป็นค่าที่สอง</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>สถานะ</term>
      <listitem>
       <para>คือสถานะของจุดพัก ค่าที่เป็นไปได้คือ <itemizedlist>
         <listitem><para>Pending: จุดพักไม่ได้กำหนดในโปรแกรมของคุณ</para></listitem>
         <listitem><para>Permanent: จุดพักถูกกำหนดแล้ว (โดยระบุเลข id ในวงเล็บ)</para></listitem>
         <listitem><para>Temporary: จุดพักถูกกำหนดไว้ แต่จะถูกลบถ้ามาถึง</para></listitem>
        </itemizedlist></para>
      </listitem>
     </varlistentry>
    </variablelist></para>
   <note>
    <para>จุดพักทั้งหมดจะถูกเก็บข้ามวาระการใช้งานของแอนจูตา แม้ว่าจะตรงกับที่ตำแหน่งไม่มีอยู่ก็ตาม ในกรณีนี้ สถานะของจุดพักจะถูกกำหนดเป็น pending (ค้าง) ส่วนติดต่อผู้ใช้จะพยายามกำหนดค่าให้ทุกครั้งที่มีการเรียกโปรแกรมทำงาน หรือมีการโหลดไลบรารีแบบไดนามิกตัวใหม่</para>
   </note>
  </sect2>  

  <sect2 id="breaks-set">
   <title>การเพิ่มหรือตั้งค่าจุดพัก</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>เพิ่มจุดพัก…</guimenuitem></menuchoice> หรือรายการ <menuchoice><guimenuitem>เพิ่มจุดพัก…</guimenuitem></menuchoice> ในเมนูรายชื่อจุดพักที่ผุดขึ้นเมื่อคลิกขวา เพื่อเปิดกล่องโต้ตอบ <interface>เพิ่มจุดพัก</interface></para>
   <para>
    <figure>
      <title>กล่องโต้ตอบพิ่มจุดพัก</title>
      <screenshot>
	   <screeninfo>กล่องโต้ตอบพิ่มจุดพัก</screeninfo>
       <graphic fileref="figures/brk_add.png" format="PNG" srccredit="mkv"/>
      </screenshot>
    </figure>
   </para>
   <para>ป้อนตำแหน่ง และอาจป้อนเงื่อนไขการพักและจำนวนครั้งที่ผ่านด้วย แล้วคลิก <guibutton>ตกลง</guibutton> เพื่อกำหนดจุดพัก <variablelist>
     <varlistentry>
      <term>ตำแหน่ง</term>
      <listitem>
       <para>ป้อนตำแหน่งที่จะกำหนดจุดพัก คุณสามารถระบุได้ในรูปแบบใด ๆ ต่อไปนี้:</para>
       <para>
        <orderedlist>
         <listitem><para>ชื่อแฟ้ม:เลขบรรทัด</para></listitem>
         <listitem><para>ชื่อฟังก์ชัน</para></listitem>
         <listitem><para>แฟ้ม:ชื่อฟังก์ชัน</para></listitem>
        </orderedlist>
       </para>
       <para>รูปแบบแรกนั้นชัดเจน คือเป็นตำแหน่งที่อ้างถึงเลขบรรทัด <emphasis>เลขบรรทัด</emphasis> ในแฟ้มซอร์ส <emphasis>แฟ้ม</emphasis> รูปแบบที่สองอ้างถึงบรรทัดแรกของฟังก์ชัน <emphasis>ชื่อฟังก์ชัน</emphasis> รูปแบบที่สามคล้ายกับรูปแบบที่สอง เว้นแต่ว่ารูปแบบนี้ใช้เมื่อมีฟังก์ชันในโปรแกรมมากกว่าหนึ่งฟังก์ชันที่มีชื่อเป็น <emphasis>ชื่อฟังก์ชัน</emphasis> โดยสามารถแยกความแตกต่างระหว่างฟังก์ชันดังกล่าวได้โดยระบุ <emphasis>แฟ้ม</emphasis> เพิ่ม เพื่อให้รูปแบบนี้อ้างถึงฟังก์ชัน <emphasis>ชื่อฟังก์ชัน</emphasis> ในแฟ้ม <emphasis>แฟ้ม</emphasis></para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>เงื่อนไข</term>
      <listitem>
       <para>พารามิเตอร์ <emphasis>เงื่อนไข</emphasis> เป็นนิพจน์ที่กำกับจุดพัก ซึ่งควรจะคำนวณแล้วได้ค่าเป็นบูลีน — กล่าวคือ ผลการคำนวณนิพจน์ควรจะได้ผลลัพธ์เป็น TRUE(1) หรือ FALSE(0) ถ้าผลลัพธ์การคำนวณสุดท้ายไม่ใช่ค่าบูลีน ก็จะมีการคาสต์ให้เป็นบูลีนตามความเหมาะสม</para>
       <para>ทุกครั้งที่พบจุดพักในระหว่างการทำงานของโปรแกรม เงื่อนไขการพักจะถูกคำนวณ โปรแกรมดีบั๊กจะพักการทำงานก็ต่อเมื่อผลการคำนวณค่าเป็น TRUE มิฉะนั้นก็จะทำงานต่อไปเสมือนหนึ่งไม่มีจุดพัก</para>
       <para>ถ้าคุณเว้นข้อมูลนี้ว่างไว้ ค่าปริยายของ <emphasis>เงื่อนไข</emphasis> จะเป็น TRUE โปรแกรมดีบั๊กจะพักการทำงานที่ตำแหน่งจุดพักเสมอ</para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term>จำนวนครั้งที่ผ่าน</term>
      <listitem>
       <para><emphasis>จำนวนครั้งที่ผ่าน</emphasis> เป็นจำนวนเต็ม (ไม่มีเครื่องหมาย) ที่บอกโปรแกรมดีบั๊กให้ข้ามจุดพักเป็นจำนวนครั้งเท่านี้ก่อนที่จะพิจารณาจุดพัก <emphasis>จำนวนครั้งที่ผ่าน</emphasis> มีความสำคัญสูงกว่า <emphasis>เงื่อนไขการพัก</emphasis> โปรแกรมดีบั๊กจะประเมิน <emphasis>เงื่อนไขการพัก</emphasis> (ถ้ามี) เฉพาะเมื่อ <emphasis>จำนวนครั้งที่ผ่าน</emphasis> ถูกลดลงเป็นศูนย์เท่านั้น และถ้าไม่มีเงื่อนไข โปรแกรมดีบั๊กจะพักการทำงานทันทีที่ <emphasis>จำนวนครั้งที่ผ่าน</emphasis> เป็นศูนย์</para>
       <para>ถ้าคุณเว้นข้อมูลนี้ว่างไว้ ค่าปริยายของ <emphasis>จำนวนครั้งที่ผ่าน</emphasis> จะเป็นศูนย์ จุดพักจะได้รับการพิจารณาตั้งแต่ถูกพบครั้งแรก</para>
      </listitem>
     </varlistentry>
    </variablelist></para>
   <para>คุณยังอาจกำหนดจุดพักได้โดยเลือกบรรทัดในเครื่องมือแก้ไขแล้วเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>สลับจุดพัก</guimenuitem></menuchoice> หรือเลือกรายการ <menuchoice><guimenuitem>สลับจุดพัก</guimenuitem></menuchoice> ในเมนูบริบทของเครื่องมือแก้ไข หรือคลิกที่ไอคอน <guibutton>สลับจุดพัก</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface></para>
   <tip>
    <para>คุณสามารถเพิ่มจุดพักได้แม้โปรแกรมดีบั๊กจะยังไม่ได้เริ่มทำงาน หรือแม้แต่ในไลบรารีแบบไดนามิกที่ยังไม่ได้โหลด แต่คุณไม่สามารถเพิ่มจุดพักในขณะที่โปรแกรมกำลังทำงานภายใต้การควบคุมของโปรแกรมดีบั๊กได้</para>
   </tip>
  </sect2>
  
  <sect2 id="breaks-edit">
   <title>การแก้ไขจุดพัก</title>
   <para>คุณสามารถเปลี่ยนเงื่อนไขและจำนวนครั้งที่ผ่านของจุดพักได้ โดยเลือกจุดพักในรายชื่อจุดพัก แล้วคลิก <menuchoice><guimenuitem>แก้ไขจุดพัก</guimenuitem></menuchoice> ในเมนูที่ผุดขึ้น</para>
   <para>แก้ไขรายการตามต้องการ แล้วคลิก <guibutton>ตกลง</guibutton> เพื่อกระทำการเปลี่ยนแปลง</para>
  </sect2>

  <sect2 id="breaks-del">
   <title>การลบจุดพัก</title>
   <para>เลือกจุดพักในช่องรายชื่อจุดพัก แล้วเลือก <menuchoice><guimenuitem>ลบจุดพัก</guimenuitem></menuchoice> จากเมนูคลิกขวา เพื่อลบจุดพัก</para>
   <para>คุณยังอาจลบจุดพักที่มีอยู่ได้โดยเลือกบรรทัดของจุดพักในเครื่องมือแก้ไขแล้วเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>สลับจุดพัก</guimenuitem></menuchoice> หรือเลือก </para>
   <para>คุณสามารถลบจุดพักทั้งหมดได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ลบจุดพักทั้งหมด</guimenuitem></menuchoice> หรือเลือก <menuchoice><guimenuitem>ลบจุดพักทั้งหมด</guimenuitem></menuchoice> ในเมนูคลิกขวาในช่องรายชื่อจุดพัก</para>
  </sect2>

  <sect2 id="breaks-enbdis">
   <title>การเปิดหรือปิดใช้งานจุดพัก</title>
   <para>คลิกที่คอลัมน์ "เปิดใช้งาน" ของ <interface>หน้าต่างรายชื่อจุดพัก</interface> หรือเลือกเมนูบริบท <menuchoice><guimenuitem>เปิดใช้งานจุดพัก</guimenuitem></menuchoice> เพื่อเปิดหรือปิดใช้งานจุดพักที่เลือก จุดพักจะถูกเปิดหรือปิดใช้งาน ขึ้นอยู่กับสถานะปัจจุบันของจุดพัก</para>
   <para>การปิดการใช้งานจุดพักทั้งหมด ทำได้โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ปิดการใช้งานจุดพักทั้งหมด</guimenuitem></menuchoice> หรือเลือก <menuchoice><guimenuitem>ปิดการใช้งานจุดพักทั้งหมด</guimenuitem></menuchoice> ในเมนูคลิกขวาของจุดพัก</para>
  </sect2>
 </sect1>

<!-- ============= Debugging: Expressions ====================== -->
 <sect1 id="debugging-expr">
  <title>นิพจน์</title>

  <sect2 id="var-local">
   <title>การแสดงรายชื่อตัวแปรเฉพาะที่</title>
   <para>เมื่อโปรแกรมทำงานภายใต้การควบคุมของโปรแกรมดีบั๊ก คุณสามารถเปิด <interface>หน้าต่างรายชื่อตัวแปรเฉพาะที่</interface> ได้โดยเลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>ตัวแปรเฉพาะที่</guimenuitem></menuchoice></para>
   <para>ตัวแปรเฉพาะที่ของเฟรมปัจจุบัน (ฟังก์ชันปัจจุบันที่โปรแกรมทำงานอยู่) จะถูกแสดงใน <interface>หน้าต่างตัวแปรเฉพาะที่</interface> และในระหว่างที่โปรแกรมทำงาน (เช่น ระหว่างการทำทีละขั้น) ตัวแปรเฉพาะที่จะมีการปรับข้อมูลตามด้วย ถ้ามีค่าตัวแปรใดเปลี่ยนแปลงในขั้นตอนที่ดีบั๊กล่าสุด ตัวแปรนั้นก็จะถูกเน้นค่าเป็นสีแดง การแสดงตัวแปรต่าง ๆ จะอยู่ในรูปแผนภาพต้นไม้ เพื่อให้ดูได้ง่าย <figure>
      <title>ตัวแปรเฉพาะที่</title>
      <screenshot>
	  <screeninfo>ตัวแปรเฉพาะที่</screeninfo>
       <graphic fileref="figures/local_variables.png" format="PNG" srccredit="naba"/>
      </screenshot>
    </figure></para>
   <para>ค่าของตัวแปรเฉพาะที่สามารถปรับเปลี่ยนได้ โดยเลือกตัวแปรแล้วคลิกที่คอลัมน์ <guilabel>ค่า</guilabel></para>
   <note>
    <para><application>gdb</application> เริ่มถูกใช้เป็นแบ็กเอนด์สำหรับฟรอนต์เอนด์แบบกราฟิกมากขึ้นเรื่อย ๆ และได้รับการปรับปรุงการทำงานส่วนนี้ในรุ่นหลัง ๆ จึงขอแนะนำให้คุณใช้ gdb รุ่นล่าสุด (6.6) เนื่องจากในรุ่นเก่ากว่านั้น gdb อาจพังเมื่อฟรอนต์เอนด์ถามค่าตัวชี้ที่มีค่าไม่ถูกต้อง (แต่ไม่ได้ใช้)</para>
   </note>
  </sect2>

  <sect2 id="var-watch">
   <title>การแสดงรายชื่อนิพจน์ที่เฝ้าดู</title>
   <para>การตรวจสอบหรือประมวลผลนิพจน์จะให้ผลลัพธ์เพียงครั้งเดียวเท่านั้น หากต้องการเฝ้าสังเกตตัวแปรหรือนิพจน์อย่างต่อเนื่อง ก็ทำได้โดยใช้ <emphasis>การเฝ้าดูนิพจน์</emphasis></para>
   <para>เลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>เฝ้าดู</guimenuitem></menuchoice> เพื่อแสดง <interface>หน้าต่างเฝ้าดู</interface></para>
  </sect2>

  <sect2 id="watch-add">
   <title>การเพิ่มนิพจน์ที่จะเฝ้าดู</title>
   <para>คลิกขวาใน <interface>หน้าต่างเฝ้าดู</interface> เพื่อเปิดเมนูบริบท แล้วเลือกรายการเมนู <guimenuitem>เพิ่มการเฝ้าดู…</guimenuitem> หรืออีกวิธีหนึ่ง คุณสามารถใช้เมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>เพิ่มการเฝ้าดู…</guimenuitem></menuchoice> ก็ได้ จะปรากฏกล่องโต้ตอบถามนิพจน์ คุณก็ป้อนนิพจน์แล้วคลิก <guibutton>ตกลง</guibutton></para>
   <para>โดยปกติ นิพจน์เฝ้าดูจะถูกปรับข้อมูลโดยอัตโนมัติทุกครั้งที่โปรแกรมถูกหยุด แต่พฤติกรรมนี้สามารถเปลี่ยนได้ในกล่องโต้ตอบเพิ่มการเฝ้าดู หรือเปลี่ยนในภายหลังได้โดยใช้รายการเมนู <guimenuitem>ปรับข้อมูลอัตโนมัติ</guimenuitem> ในเมนูบริบทของ <interface>หน้าต่างเฝ้าดู</interface> คุณสามารถสั่งปรับข้อมูลนิพจน์ที่เฝ้าดูด้วยมือได้ โดยเลือก <guimenuitem>ปรับข้อมูลการเฝ้าดู</guimenuitem> หรือ <guimenuitem>ปรับข้อมูลทั้งหมด</guimenuitem> ในเมนูบริบท</para>
   <para>ไม่จำเป็นว่าจะต้องให้โปรแกรมดีบั๊กทำงาน จึงจะเพิ่มนิพจน์เฝ้าดูใหม่ได้ ถ้าโปรแกรมดีบั๊กไม่ได้ทำงานอยู่ หรือไม่สามารถหาค่านิพจน์ได้ ตัวฟรอนต์เอนด์จะพยายามสร้างนิพจน์เฝ้าดูให้ทุกครั้งที่โปรแกรมถูกหยุด</para>
  </sect2>

  <sect2 id="watch-remove">
   <title>การลบนิพจน์ที่เฝ้าดู</title>
   <para>คลิกขวาที่นิพจน์เฝ้าดูที่คุณต้องการลบใน <interface>หน้าต่างเฝ้าดู</interface> แล้วเลือกรายเมนู <guimenuitem>ลบการเฝ้าดู</guimenuitem> ในเมนูบริบทเพื่อลบออก</para>
   <para>คุณสามารถลบการเฝ้าดูทั้งหมดออกได้ โดยเลือก <guimenuitem>ลบทั้งหมด</guimenuitem> ในเมนูบริบทของ <interface>หน้าต่างเฝ้าดู</interface></para>
  </sect2>

  <sect2 id="expr-eval">
   <title>การประมวลผลนิพจน์</title>
   <para>เมื่อการควบคุมกลับคืนมาจากโปรแกรม — อาจจะที่จุดพัก — ก็จะสามารถประมวลผลนิพจน์หรือตรวจสอบค่าของตัวแปรในโปรแกรมได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guimenuitem>ตรวจสอบ/ประมวลผล …</guimenuitem></menuchoice> หรือเลือกรายการ <menuchoice><guimenuitem>ตรวจสอบ/ประมวลผล …</guimenuitem></menuchoice> ในเมนูบริบทของเครื่องมือแก้ไข หรือคลิกที่ปุ่ม <guibutton>ตรวจสอบ</guibutton> ใน <interface>แถบเครื่องมือดีบั๊ก</interface></para>
   <para>จะปรากฏหน้าต่างแสดงการประมวลผลนิพจน์ที่ถูกเน้นในเครื่องมือแก้ไข คุณสามารถประมวลผลนิพจน์รายการใหม่ได้ โดยคลิกที่คอลัมน์ <guilabel>ตัวแปร</guilabel> แล้วป้อนนิพจน์ใหม่</para>
   <para>คุณสามารถเพิ่มนิพจน์ในหน้าต่างเข้าในรายชื่อนิพจน์ที่เฝ้าดูได้โดยตรง โดยคลิกที่ปุ่ม <guibutton>เพิ่ม</guibutton></para>
  </sect2>

  <sect2 id="expr-hiver">
   <title>การตรวจสอบนิพจน์ในหน้าต่างเครื่องมือแก้ไข</title>
   <para>เมื่อโปรแกรมดีบั๊กทำงานโดยที่โปรแกรมถูกหยุดอยู่ คุณสามารถดูค่านิพจน์ได้โดยเพียงวางตัวชี้เมาส์แช่บนตัวนิพจน์ ภายในครู่สั้น ๆ ถ้านิพจน์แสดงอยู่แล้วในหน้าต่าง <interface>ตัวแปรเฉพาะที่</interface> หรือ <interface>เฝ้าดู</interface> ค่าของนิพจน์ก็จะปรากฏในคำแนะนำเครื่องมือ</para>
   <para>ขณะนี้ ความสามารถนี้ใช้ได้เฉพาะกับตัวแปรง่าย ๆ เท่านั้น ยังไม่สามารถใช้กับโครงสร้างหรือแอร์เรย์ได้</para>
  </sect2>

 </sect1>

<!-- ============= Debugging: Program Stack ====================== -->
 <sect1 id="debugging-stack">
  <title>การแกะรอยสแต็ก</title>

  <sect2 id="stack-win">
   <title>หน้าต่างสแต็ก</title>
   <para><interface>หน้าต่างแกะรอยสแต็ก<interface/> แสดงเนื้อหาของสแต็กของโปรแกรม โดยจะแสดงฟังก์ชันทั้งหมดตามลำดับการเรียกพร้อมอาร์กิวเมนต์ และจะมีหมายเลขแทนการเรียกแต่ละครั้ง หมายเลขนี้เรียกว่า <emphasis>เฟรม</emphasis> การเรียกแต่ละครั้งในร่องรอยจะอยู่ในเฟรมที่ต่างกัน โดยเริ่มจากเฟรม 0 (ฟังก์ชันสุดท้ายที่ถูกเรียก) และจะเพิ่มขึ้นตามลำดับความลึกของการเรียกฟังก์ชันซ้อน</interface></para>
   <para>เลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>สแต็ก</guimenuitem></menuchoice> ถ้าต้องการเปิดดูร่องรอยสแต็กของโปรแกรมที่กำลังดีบั๊ก</para>
   <para>
    <figure>
      <title>หน้าต่างแกะรอยสแต็ก</title>
      <screenshot>
	   <screeninfo>หน้าต่างแกะรอยสแต็ก</screeninfo>
       <graphic fileref="figures/stack.png" format="PNG" srccredit="andyp"/>
      </screenshot>
    </figure>
   </para>
   <para>ลูกศรขนาดเล็กจะชี้ไปยังเฟรมปัจจุบันที่เลือกอยู่ในร่องรอยสแต็ก ซึ่งโดยค่าปริยายจะเป็นเฟรม 0 คือฟังก์ชันสุดท้ายที่เรียก การประมวลผลและตรวจสอบค่านิพจน์หรือตัวแปรจะอ้างอิงจากเฟรมที่เลือกนี้ ขอบเขตของตัวแปรหรือนิพจน์ที่นำมาประมวลผลก็จะถูกจำกัดอยู่เฉพาะในเฟรมที่เลือกเท่านั้น รวมทั้งกับนิพจน์ใหม่ในช่องเฝ้าดูด้วย</para>
  </sect2>
  
  <sect2 id="stack-frame">
   <title>การกำหนดเฟรมปัจจุบัน</title>
   <para>การดับเบิลคลิกที่เฟรมใด ๆ ในร่องรอยสแต็ก จะเป็นการกำหนดให้เฟรมนั้นเป็นเฟรมปัจจุบันที่เลือก ลูกศรจะชี้ไปที่เฟรมนั้น เพื่อระบุว่าเป็นเฟรมปัจจุบันที่ถูกเลือก อีกวิธีหนึ่งคือ เปิดเมนูบริบทโดยคลิกขวาบน <interface>หน้าต่างแกะรอยสแต็ก</interface> และเลือกรายการเมนู <guimenuitem>กำหนดเฟรมปัจจุบัน</guimenuitem> เพื่อกำหนดเฟรม</para>
   <para>การเปลี่ยนเฟรมในสแต็กจะเปลี่ยนเนื้อหา <interface>หน้าต่างตัวแปรเฉพาะที่</interface> แต่จะไม่เปลี่ยน <interface>หน้าต่างเฝ้าดู</interface> เพราะนิพจน์แต่ละนิพจน์จะถูกประมวลผลในเฟรมที่ใช้ในขณะที่ตัวนิพจน์ถูกกำหนด</para>
  </sect2>
 </sect1>

<!-- ============= Debugging: Program Thread ====================== -->
 <sect1 id="debugging-thread">
  <title>เธรด</title>

  <sect2 id="thread-win">
   <title>หน้าต่างเธรด</title>
   <para><interface>หน้าต่างเธรด</interface> จะแสดงเธรดทั้งหมดที่โปรแกรมใช้ โดยบ่งบอกเธรดปัจจุบันไว้ด้วย เลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>เธรด</guimenuitem></menuchoice> ถ้าต้องการเปิดหน้าต่างนี้</para>
   <para>จะมีลูกศรขนาดเล็กชี้ที่เธรดปัจจุบัน เมื่อโปรแกรมหยุด เธรดปัจจุบันจะเป็นเธรดที่ถูกขัดจังหวะ แต่ละเธรดจะมีเฟรมของสแต็กเป็นของตัวเอง ดังนั้น การเปลี่ยนเธรดปัจจุบันจึงเป็นการเปลี่ยนเฟรมปัจจุบันของสแต็กด้วย</para>
  </sect2>

  <sect2 id="set-thread">
   <title>การกำหนดเธรดปัจจุบัน</title>
   <para>การดับเบิลคลิกที่เธรดใดในรายชื่อเธรด จะเป็นการกำหนดเธรดนั้นให้เป็นเธรดปัจจุบันที่เลือก ลูกศรจะชี้ที่เธรดเพื่อระบุว่าถูกเลือกเป็นเธรดปัจจุบันอยู่ หรืออีกวิธีหนึ่ง เปิดเมนูบริบทโดยคลิกขวาใน <interface>หน้าต่างรายชื่อเธรด</interface> แล้วเลือกรายการเมนู <guimenuitem>กำหนดเธรดปัจจุบัน</guimenuitem> เพื่อกำหนดเธรด</para>
   <para>การเปลี่ยนเธรดจะเป็นการเปลี่ยนค่าเรจิสเตอร์ของ CPU และเฟรมปัจจุบันของสแต็ก ดังนั้น <interface>หน้าต่างตัวแปรเฉพาะที่</interface> ก็จะเปลี่ยนตามด้วย</para>
  </sect2>
 </sect1>

<!-- ============= Debugging: CPU ====================== -->
 <sect1 id="debugging-cpu">
  <title>CPU</title>

  <sect2 id="cpu-regs">
   <title>หน้าต่างเรจิสเตอร์</title>
   <para>คุณสามารถตรวจสอบค่าของเรจิสเตอร์ภายในของ CPU (ไมโครโพรเซสเซอร์) ได้ โดยเลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>เรจิสเตอร์</guimenuitem></menuchoice> จะปรากฏหน้าต่างรายชื่อเรจิสเตอร์ทั้งหมดในไมโครโพรเซสเซอร์ พร้อมค่าที่เก็บอยู่</para>
   <para>ถ้ามีค่าเรจิสเตอร์ใดถูกเปลี่ยนในขั้นตอนการดีบั๊กล่าสุด ก็จะเน้นค่าเป็นสีแดง คุณสามารถเปลี่ยนค่าเรจิสเตอร์ได้ โดยเลือกและคลิกที่คอลัมน์ <guilabel>ค่า</guilabel></para>
  </sect2>

  <sect2 id="cpu-memory">
   <title>หน้าต่างหน่วยความจำ</title>
   <para>เลือกเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>หน่วยความจำ</guimenuitem></menuchoice> เพื่อเปิด <interface>หน้าต่างหน่วยความจำ</interface> สำหรับโปรแกรมที่กำลังดีบั๊ก หน้าต่างนี้จะแสดงเนื้อหาของหน่วยความจำทั้งหมด</para>
   <para>คอลัมน์แรกจะแสดงแอดเดรสของหน่วยความจำเป็นฐานสิบหก คอลัมน์ที่สองแสดงข้อมูลของหน่วยความจำเป็นฐานสิบหก และคอลัมน์สุดท้ายแสดงข้อมูลของหน่วยความจำเป็นอักขระแอสกี</para>
   <para>พื้นที่แอดเดรสแม้แต่ของไมโครโพรเซสเซอร์ 32 บิตก็มีขนาดค่อนข้างใหญ่ (4 กิกะไบต์) จึงเป็นเรื่องยากที่จะไปที่แอดเดรสที่ต้องการด้วยแถบเลื่อนหน้าต่าง แต่คุณสามารถคลิกที่ปุ่มเมาส์ขวาเพื่อแสดงเมนูบริบท แล้วเลือก <menuchoice><guimenuitem>ไปยังแอดเดรส</guimenuitem></menuchoice> เพื่อเปิดช่องแก้ไขเล็ก ๆ ที่คุณสามารถป้อนแอดเดรสฐานสิบหกได้</para>
  </sect2>

  <sect2 id="cpu-disassembly">
   <title>หน้าต่างถอดแยกภาษาแอสเซมบลี</title>
   <para>เลือกรายการเมนู <menuchoice><guisubmenu>มุมมอง</guisubmenu><guimenuitem>ถอดแยกภาษาแอสเซมบลี</guimenuitem></menuchoice> เพื่อเปิด <interface>หน้าต่างถอดแยกภาษาแอสเซมบลี</interface> สำหรับโปรแกรมที่กำลังดีบั๊ก</para>
   <para>คอลัมน์แรกแสดงแอดเดรสเป็นฐานสิบหก ในคอลัมน์ที่สอง อาจเป็นป้ายชื่อเริ่มต้นที่ต้นบรรทัดและปิดด้วยเครื่องหมายทวิภาค (:) หรือเป็นคำสั่งภาษาแอสเซมบลีที่ร่นเข้าไปเป็นระยะช่องว่าง 4 ตัวอักษร</para>
   <para>และอีกเช่นกัน เนื่องจากพื้นที่แอดเดรสมีขนาดใหญ่มาก แถบเลื่อนหน้าต่างจึงแทบไม่มีประโยชน์เลย คุณสามารถคลิกที่ปุ่มเมาส์ขวาเพื่อแสดงเมนูบริบท แล้วเลือก <menuchoice><guimenuitem>ไปยังแอดเดรส</guimenuitem></menuchoice> เพื่อเปิดช่องแก้ไขเล็ก ๆ ที่คุณสามารถป้อนแอดเดรสฐานสิบหกได้ตำแหน่งในหน้าต่างถอดแยกแอสเซมบลีจะเปลี่ยนไปเป็นค่าของตัวชี้คำสั่งของโปรแกรมเมื่อโปรแกรมหยุด</para>
  </sect2>
 </sect1>

<!-- Debugger: Others-->
 <sect1 id="debugger-others">
  <title>อื่น ๆ</title>

  <para>ยังมีความสามารถอื่น ๆ จำนวนหนึ่งของโปรแกรมดีบั๊กที่ใช้ไม่บ่อย และยังไม่เชื่อมรวมกับฟรอนต์เอนด์ใหม่ดีนัก แต่ก็ยังใช้การได้</para>

  <sect2 id="dbg-dyna-libs">
   <title>ไลบรารีที่โหลดแบบไดนามิก</title>
   <para>การเรียกดูรายชื่อของไลบรารีแบบไดนามิกที่โปรแกรมใช้ ทำได้โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ไลบรารีใช้ร่วม</guimenuitem></menuchoice> จะเปิดหน้าต่างซึ่งจะแสดงรายชื่อไลบรารีใช้ร่วมทั้งหมดที่โปรแกรมโหลดขึ้นมา พร้อมกับตำแหน่งในหน่วยความจำ และยังแสดงให้ดูด้วยว่าตารางสัญลักษณ์ของแต่ละไลบรารีถูกโหลดด้วยหรือไม่</para>
   <para>
    <figure>
      <title>หน้าต่างไลบรารีใช้ร่วม</title>
      <screenshot>
	   <screeninfo>หน้าต่างไลบรารีใช้ร่วม</screeninfo>
       <graphic fileref="figures/sharedlibs.png" format="PNG" srccredit="andyp"/>
      </screenshot>
    </figure>
   </para>
  </sect2>

  <sect2 id="dbg-signal">
   <title>สัญญาณเคอร์เนล</title>
   <para>สัญญาณเคอร์เนลเป็นวิธีหนึ่งในการส่งสัญญาณระหว่างโพรเซสในลินุกซ์ คุณสามารถแสดงรายชื่อของสัญญาณที่ใช้ได้กับโปรแกรมหนึ่ง ๆ ได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>สัญญาณเคอร์เนล</guimenuitem></menuchoice> จะเปิดหน้าต่างแสดงรายชื่อสัญญาณทั้งหมดที่มีอยู่ในระบบ พร้อมด้วยคำอธิบายสั้น ๆ ของแต่ละสัญญาณ</para>
   <para>
    <figure>
      <title>หน้าต่างสัญญาณเคอร์เนล</title>
      <screenshot>
	   <screeninfo>หน้าต่างสัญญาณเคอร์เนล</screeninfo>
       <graphic fileref="figures/signals.png" format="PNG" srccredit="andyp"/>
      </screenshot>
    </figure>
   </para>
   <para>มีสามคอลัมน์ที่ระบุว่าจะทำอย่างไรเมื่อได้รับสัญญาณ:</para>
   
   <orderedlist>
    <listitem>
     <para><emphasis>หยุด</emphasis> — คอลัมน์นี้บอกโปรแกรมดีบั๊กว่าจะหยุดการทำงานของโปรแกรม (และคืนการควบคุม) หรือไม่ เมื่อโปรแกรมได้รับสัญญาณนี้</para>
    </listitem>
    <listitem>
     <para><emphasis>พิมพ์</emphasis> — คอลัมน์นี้บอกโปรแกรมดีบั๊กว่าจะแสดงสัญญาณที่ได้รับหรือไม่</para>
    </listitem>
    <listitem>
     <para><emphasis>ผ่าน</emphasis> — คอลัมน์นี้บอกโปรแกรมดีบั๊กว่าจะผ่านสัญญาณไปยังโปรแกรมหรือไม่</para>
    </listitem>
   </orderedlist>
   <note>
    <para>เมนูบริบทที่จะแสดงเมื่อคุณคลิกที่ปุ่มเมาส์ขวาจะปิดใช้รายการทั้งหมดไว้ เพราะยังไม่ได้ทำฟังก์ชันที่เกี่ยวข้อง</para>
   </note>
  </sect2>

  <sect2 id="dbg-files">
   <title>ข้อมูลเกี่ยวกับแฟ้มที่ใช้</title>
   <para>คุณสามารถขอดูข้อมูลเกี่ยวกับแฟ้มที่โปรแกรมที่ดีบั๊กอยู่เปิดใช้งานได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูลแฟ้มปลายทาง</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างแสดงข้อมูลดังกล่าว</para>
  </sect2>

  <sect2 id="dbg-program">
   <title>ข้อมูลเกี่ยวกับโปรแกรมที่ดีบั๊ก</title>
   <para>คุณสามารถขอดูข้อมูลเกี่ยวกับโปรแกรมที่กำลังดีบั๊กอยู่ได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูลโปรแกรม</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างแสดงข้อมูลดังกล่าว</para>
  </sect2>
 
  <sect2 id="dbg-kernel">
   <title>ข้อมูลเกี่ยวกับข้อมูลโครงสร้างของเคอร์เนล</title>
   <para>คุณสามารถขอดูข้อมูลเกี่ยวกับข้อมูลเคอร์เนลสำหรับโพรเซสปัจจุบันได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูล User Struct ของเคอร์เนล</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างแสดงข้อมูลดังกล่าว</para>
  </sect2>

  <sect2 id="var-global">
   <title>ข้อมูลเกี่ยวกับตัวแปรโกลบอล</title>
   <para>คุณสามารถแสดงรายชื่อตัวแปรโกลบอลทั้งหมดได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูลตัวแปรโกลบอล</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างแสดงรายชื่อตัวแปรโกลบอลทั้งหมด</para>
  </sect2>

  <sect2 id="stack-frame-info">
   <title>ข้อมูลเกี่ยวกับเฟรมปัจจุบัน</title>
   <para>คุณสามารถขอดูข้อมูลเกี่ยวกับเฟรมที่เลือกอยู่ในปัจจุบันได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูลเฟรมปัจจุบัน</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างบรรยายข้อมูลเฟรมปัจจุบัน</para>
  </sect2>

  <sect2 id="stack-arg-info">
   <title>ข้อมูลเกี่ยวกับอาร์กิวเมนต์ของฟังก์ชันปัจจุบัน</title>
   <para>คุณสามารถขอดูข้อมูลเกี่ยวกับอาร์กิวเมนต์ของฟังก์ชันปัจจุบันได้ โดยเลือกเมนู <menuchoice><guisubmenu>ดีบั๊ก</guisubmenu><guisubmenu>ข้อมูล</guisubmenu><guimenuitem>ข้อมูลอาร์กิวเมนต์ฟังก์ชัน</guimenuitem></menuchoice> จะเป็นการเปิดหน้าต่างบรรยายข้อมูลอาร์กิวเมนต์</para>
  </sect2>
  
  <sect2 id="dbg-command">
   <title>คำสั่งผู้ใช้</title>
   <para>การส่งคำสั่งไปยังแบ็กเอนด์ของการดีบั๊กโดยตรง ทำได้โดยเลือกเมนู <menuchoice><guimenu>ดีบั๊ก</guimenu><guimenuitem>คำสั่งโปรแกรมดีบั๊ก</guimenuitem></menuchoice> จะเป็นการเปิดกล่องโต้ตอบเล็ก ๆ ที่คุณสามารถป้อนคำสั่งที่จะส่งไปยังโปรแกรมดีบั๊กเมื่อคุณกด <keycap>Enter</keycap></para>
   <note>
    <para>ฟรอนต์เอนด์จะส่งคำสั่งนี้ไปยังแบ็กเอนด์โดยตรงโดยไม่มีการตรวจสอบใด ๆ ตัวอย่างหนึ่งคือ ถ้าคุณกำหนดจุดพักด้วยวิธีนี้ จุดพักก็จะไม่ปรากฏใน <interface>หน้าต่างจุดพัก</interface> คุณจึงควรหลีกเลี่ยงการใช้คำสั่งนี้ นอกจากคุณจะรู้จริง ๆ ว่าสิ่งที่คุณทำคืออะไร</para>
   </note>
  </sect2>
 </sect1> 

 </chapter>

 <!-- Glade Interface Designer -->
 <chapter id="glade">
	<title>เครื่องมือออกแบบส่วนติดต่อ Glade</title>

	<sect1>
		<title>เริ่มต้นอย่างเร็ว</title>
		<para>ถ้าคุณไม่ต้องการอ่านคู่มือที่น่าเบื่อทั้งหมดนี้ นี่คือขั้นตอนที่จะทำให้ทุกอย่างพร้อมสำหรับการใช้: <orderedlist>
				<listitem><para>คุณควรจะมีโครงการที่มีแฟ้ม Glade เปิดไว้</para></listitem>
				<listitem><para>ไม่เหมือนกับเครื่องมือออกแบบ Glade ต้นฉบับ ปลั๊กอินแอนจูตาจะใช้ดับเบิลคลิกสำหรับสร้าง handlers สำหรับสัญญาณปริยาย คุณสามารถกระทำการคลิกที่วิดเจ็ต (เช่น สลับแท็บปัจจุบันใน GtkNotebook) ได้ โดยกดปุ่ม "Windows" หรือ "Super" ค้างไว้</para></listitem>
				<listitem><para>เปิด <menuchoice><guimenuitem>ปรับแต่ง</guimenuitem><guimenuitem>เครื่องมือออกแบบ GUI Glade</guimenuitem></menuchoice> และกาเลือกสามแฟล็กบนสุด <guilabel>แทรก handler เมื่อแก้ไข</guilabel>, <guilabel>จัดวางเครื่องมือออกแบบแบบแยก</guilabel> และ <guilabel>เพิ่มทรัพยากรโดยอัตโนมัติ</guilabel></para></listitem>
				<listitem><para>กาเลือกแฟล็ก <menuchoice><guimenuitem>มุมมอง</guimenuitem><guimenuitem>เครื่องมือออกแบบ</guimenuitem></menuchoice> และย้ายหน้าต่างนี้ไปที่ตำแหน่งที่เหมาะสม</para></listitem>
				<listitem><para>สลับไปที่แฟ้ม Glade ในพื้นที่ออกแบบและแฟ้มซอร์สที่จะเก็บ callback สำหรับแฟ้ม Glade นั้น แล้วเลือก <menuchoice> <guimenuitem>Glade</guimenuitem><guimenuitem>เชื่อมโยงแฟ้มล่าสุดในเครื่องมือออกและเครื่องมือแก้ไขเข้าด้วยกัน</guimenuitem></menuchoice></para></listitem>
				<listitem><para>คุณอาจจะเลือกเป้าหมายสำหรับรูปภาพและทรัพยากรอื่น ๆ ในเครื่องมือจัดการโครงการและเลือก <guilabel>กำหนดเป็นเป้าหมายทรัพยากรปริยาย</guilabel> ในเมนูบริบท</para></listitem>
			</orderedlist></para>
	</sect1>
	
	<sect1>
		<title>คำถามทั่วไปเกี่ยวกับการใช้ Glade</title>
		<para>ปลั๊กอิน Glade แทบจะคัดลอกหน้าที่ต่าง ๆ ของเครื่องมือออกแบบ Glade แบบแยกทำงานเดี่ยวมา แต่ก็มีความสามารถพิเศษเพิ่มเติมบางประการ หน้าต่างทั้งสี่ของเครื่องมือออกแบบ Glade คือ พื้นที่ออกแบบ กล่องเครื่องมือ เครื่องมือตรวจสอบวิดเจ็ต และเครื่องมือแก้ไขคุณสมบัติ ต่างมีวัตถุประสงค์การใช้งานเดียวกันกับในเครื่องมือออกแบบแบบแยกทำงานเดี่ยว ดังนั้น กรุณาอ่านคำอธิบายได้จาก <ulink type="help" url="ghelp:glade">คู่มือเครื่องมือออกแบบส่วนติดต่อ Glade</ulink> มีความสามารถพิเศษเพิ่มเติมอย่างหนึ่ง ที่ช่วยให้คุณสามารถใช้โครงสร้างพื้นฐานของแอนจูตาได้อย่างมีประสิทธิภาพมากขึ้น ซึ่งจะอธิบายไว้ในที่นี้</para>
	</sect1>

	<sect1>
		<title>การเชื่อมโยงเครื่องมือแก้ไขกับเครื่องมือออกแบบ</title>
		<para>คุณสามารถเชื่อมโยงแฟ้มในเครื่องมือแก้ไขข้อความกับแฟ้มในเครื่องมือออกแบบ Glade เข้าด้วยกันได้ เพื่อที่คุณจะสามารถสลับไปมาระหว่างเครื่องมือทั้งสอง และแทรกเค้าโครงเนื้อหาสำหรับ handler ที่สร้างใหม่ได้โดยอัตโนมัติ คุณสามารถเชื่อมโยงแฟ้มเครื่องมือแก้ไขมากกว่าหนึ่งรายการต่อแฟ้มเครื่องมือออกแบบหนึ่งรายการได้ โดยจะใช้แฟ้มในเครื่องมือแก้ไขล่าสุดหรือที่เชื่อมโยงกับวิดเจ็ตระดับบนสุดปัจจุบัน มีสองวิธีที่จะเชื่อมโยงแฟ้มในเครื่องมือแก้ไขกับแฟ้มในเครื่องมือออกแบบ วิธีแรกคือใช้กล่องโต้ตอบเชื่อมโยง วิธีที่สองคือเลือกแฟ้มในเครื่องมือออกแบบและในเครื่องมือแก้ไขในลำดับใดก่อนหลังก็ได้ แล้วเลือกเมนู <menuchoice><guimenuitem>Glade</guimenuitem><guimenuitem>เชื่อมโยงแฟ้มล่าสุดในเครื่องมือออกและเครื่องมือแก้ไขเข้าด้วยกัน</guimenuitem></menuchoice></para>
	</sect1>

	<sect1>
		<title>กล่องโต้ตอบการเชื่อมโยง</title>
		<para>ช่วยให้คุณสามารถสร้างและจัดการการเชื่อมโยงได้ การสร้างการเชื่อมโยง ทำได้โดยเลือกแฟ้มเครื่องมือแก้ไขและแฟ้มเครื่องมือออกแบบในกล่องคอมโบ แล้วกดปุ่ม <guibutton>เชื่อมโยง</guibutton> คุณยังสามารถเลือกเอกสารได้โดยเปลี่ยนไปที่เอกสารที่ต้องการในเครื่องมือจัดการเอกสาร หรือในรายชื่อหน้าต่างในเมนูหลัก รายชื่อตรงกลางของกล่องโต้ตอบจะแสดงการเชื่อมโยงที่มีอยู่ ส่วนเครื่องมือควบคุมด้านล่างสองสามอย่างนั้น ใช้สำหรับแก้ไขคุณสมบัติของการเชื่อมโยง โดยมีคำอธิบายดังนี้: <variablelist>
				<varlistentry>
					<term><guilabel>regexp พิเศษ</guilabel></term>
					<listitem><para>ย่อมาจาก "นิพจน์เรกิวลาร์พิเศษ" ใช้สำหรับกำหนดตำแหน่งที่กำหนดเองสำหรับแทรกเค้าโครง</para></listitem>
				</varlistentry>
				<varlistentry>
					<term><guilabel>ชื่อวิดเจ็ต</guilabel></term>
					<listitem><para>ชื่อของวิดเจ็ตระดับบนสุดที่เป็นเจ้าของการเชื่อมโยงนี้</para></listitem>
				</varlistentry>
				<varlistentry id="glade-position-type">
					<term><guilabel>ชนิดของตำแหน่ง</guilabel></term>
					<listitem><para>บรรยายตำแหน่งที่จะแทรกเค้าโครงของ handler <guilabel>หลังจุดเริ่มต้น</guilabel> หมายถึงแทรกหลังเครื่องหมายพิเศษ (ซึ่งอาจจะป้อนในช่อง <guilabel>regexp พิเศษ</guilabel>) และ <guilabel>ก่อนท้ายสุด</guilabel> หมายถึงก่อนเครื่องหมายสิ้นสุดพิเศษ ค่าโดยปริยายของเครื่องหมายเริ่มต้นจะเป็น /* window_name callbacks */ และของเครื่องหมายสิ้นสุดจะเป็น /* end of window_name callbacks */ โดยอาจละ window_name ได้</para></listitem>
				</varlistentry>
			</variablelist></para>
	</sect1>
	
	<sect1 id="glade-default-signal">
		<title>สัญญาณปริยาย</title>
		<para>การดับเบิลคลิกที่วิดเจ็ตในพื้นที่ออกแบบจะเป็นการสร้าง handler ใหม่สำหรับสัญญาณปริยาย โดยตั้งชื่อด้วยแม่แบบที่กำหนดไว้ล่วงหน้า ตัวอย่างเช่น สัญญาณปริยายของปุ่มคือ "clicked", ของกล่องกาคือ "toggled " ฯลฯ ถ้าเปิดใช้ตัวเลือก <guilabel>แทรก handler เมื่อแก้ไข</guilabel> แล้ว เค้าโครงของ handler ใหม่ก็จะถูกแทรกที่ตำแหน่งตามที่กำหนดโดยค่า <guilabel>ชนิดของตำแหน่ง</guilabel></para>
	</sect1>
	
	<sect1>
		<title>การแทรกเค้าโครง</title>
		<para>หนึ่งในเป้าหมายที่มีค่าที่สุดของการเชื่อมรวม <application>แอนจูตา</application> กับ <application>Glade</application> ก็คือการสร้างเค้าโครงของ handler โดยอัตโนมัติ เพื่อที่คุณจะไม่ต้องทำงานซ้ำซากมากมาย มันจะทำโดยอัตโนมัติ</para>
		<para>มีหลายวิธีที่จะสร้างเค้าโครง: <itemizedlist>
				<listitem><para>โดยอัตโนมัติถ้าตัวเลือก <guilabel>แทรก handler เมื่อแก้ไข</guilabel> เปิดใช้งาน</para></listitem>
				<listitem><para>โดยใช้เมนู <menuchoice><guisubmenu>Glade</guisubmenu><guimenuitem>แทรกเค้าโครง handler, จัดตำแหน่งอัตโนมัติ</guimenuitem></menuchoice> ในเมนูหลัก</para></listitem>
				<listitem><para>โดยใช้รายการ <guilabel>แทรกเค้าโครง handler</guilabel> ในเมนูบริบทของเอกสารข้อความ</para></listitem>
			</itemizedlist></para>
	</sect1>

	<sect1>
		<title>การปรับแต่ง</title>
		<variablelist>
			<varlistentry>
				<term><guilabel>แทรก handler เมื่อแก้ไข</guilabel></term>
				<listitem><para>เปิดใช้งานการแทรกเค้าโครง handler ในเครื่องมือแก้ไขที่เชื่อมโยงอยู่ หลังจากใส่ handler ใหม่ในเครื่องมือแก้ไขสัญญาณ หรือหลังจากสร้าง <link linkend="glade-default-signal">handler ปริยายของสัญญาณ</link></para></listitem>
			</varlistentry>
			<varlistentry>
				<term><guilabel>จัดวางเครื่องมือออกแบบแบบแยก</guilabel></term>
				<listitem><para>แยกพื้นที่ออกแบบออกจากเครื่องมือจัดการเอกสาร เพื่อให้คุณสามารถ dock แยกจากเครื่องมือแก้ไขข้อความได้</para></listitem>
			</varlistentry>
			<varlistentry>
				<term><guilabel>เพิ่มทรัพยากรโดยอัตโนมัติ</guilabel></term>
				<listitem><para>เมื่อกาเลือกตัวเลือกนี้ ทรัพยากรทั้งหมด (เช่นรูปภาพ) จะถูกเพิ่มเข้าในเป้าหมายในโครงการปัจจุบัน คุณสามารถเลือกเป้าหมายดังกล่าวได้ โดยใช้เมนูบริบทของเครื่องมือจัดการโครงการ หรือโดยการป้อน id ของเป้าหมายลงในช่องป้อนใต้กล่องกา</para></listitem>
			</varlistentry>
			<varlistentry>
				<term><guilabel>แม่แบบ handler</guilabel></term>
				<listitem><para>คุณสามารถเลือกรูปแบบการตั้งชื่อ handler ของสัญญาณโดยอัตโนมัติได้สองรูปแบบ</para></listitem>
			</varlistentry>
		</variablelist>
	</sect1>

</chapter>

 <!-- Preferences -->
 <!-- Preferences -->
 <chapter id="preferences">
  <title>การปรับแต่ง</title>
  <para>การปรับแต่ง เป็นการปรับ <application>แอนจูตา</application> ให้เหมาะกับรสนิยมของคุณ เปิดใช้งานโดยเลือกเมนู <menuchoice><guimenu>แก้ไข</guimenu><guimenuitem>ปรับแต่ง</guimenuitem></menuchoice> เพื่อเปิดกล่องโต้ตอบปรับแต่ง ค่าปรับแต่งบางส่วนจะอธิบายต่อไปข้างล่างนี้</para>
  <sect1 id="prefs-general"><title>ทั่วไป</title>
    <orderedlist>
     <listitem><para><emphasis>ไดเรกทอรีปริยายของโครงการ</emphasis> เป็นพาธซึ่งคุณวางแผนว่าจะใช้เก็บโครงการทั้งหมดของคุณ เครื่องมือวิเศษสร้างโปรแกรมจะสร้างโครงการใหม่ในไดเรกทอรีนี้เท่านั้น ค่าปริยายของไดเรกทอรีโครงการคือ ~/Projects ซึ่งโดยทั่วไปก็เหมาะสมสำหรับคนส่วนใหญ่</para>
     </listitem>
      <listitem><para><emphasis>ข้อมูลผู้ใช้:</emphasis> ป้อนชื่อและที่อยู่อีเมลของคุณที่นี่ ข้อมูลนี้ไม่ได้ใช้ในการลงทะเบียนซอฟต์แวร์ แต่จะใช้ในการสร้างรายการใน ChangeLog และในการแทรกข้อความอื่น ๆ</para>
      </listitem>
     </orderedlist>
    </sect1>
    <sect1 id="prefs-files"><title>เครื่องมือจัดการแฟ้ม</title>
    <orderedlist>
     <listitem><para><emphasis>ไดเรกทอรีรากถ้าไม่มีโครงการเปิดอยู่</emphasis> เป็นพาธที่รากของเครื่องมือจัดการแฟ้มจะชี้ไป ถ้าไม่มีโครงการใดเปิดอยู่</para>
     </listitem>
      <listitem><para><emphasis>ตัวกรองแฟ้ม:</emphasis> คุณสามารถกรองเอาแฟ้มบางแฟ้มออกจากแผนภาพต้นไม้ของแฟ้มได้ ตัวอย่างเช่น แฟ้มที่ซ่อน หรือแฟ้มที่ถูกละเลยโดยระบบควบคุมรุ่น ซึ่งโดยปกติจะเป็นแฟ้มที่ถูกสร้างขึ้นในขณะประกอบสร้าง และไม่ควรจะแก้ไข</para>
      </listitem>
     </orderedlist>
    </sect1>
 </chapter>

 <!-- Tools -->
 <!-- new chapter -->
 <chapter id="tools">
  <title>เครื่องมือที่ผู้ใช้กำหนดเอง</title>

  <sect1 id="tools-intro">
  <title>เกริ่นนำ</title>
  <para>ในบางครั้ง คุณอาจพบว่าเครื่องมือต่าง ๆ ที่มากับแอนจูตานั้นไม่เพียงพอ ในกรณีนี้ คุณอาจจะอยากเพิ่มความสามารถที่คุณต้องการเข้าในโค้ดของ Anjuta ด้วยตนเอง หรือส่งคำขอเพิ่มความสามารถมาที่เรา อย่างไรก็ตาม ทั้งสองวิธีนี้อาจจะช้าและขลุกขลัก โดยเฉพาะถ้าเครื่องมือของคุณเป็นเครื่องมือเฉพาะกิจ ในกรณีเช่นนี้ ขอแนะนำให้ใช้กรอบงานเครื่องมือของแอนจูตาแทน</para>

  <para>แอนจูตาได้เตรียมกรอบงานที่มากความสามารถสำหรับเพิ่มเครื่องมือที่ผู้ใช้กำหนดเองเพื่อขยายการทำงาน เครื่องมือจะสามารถเข้าถึงความสามารถเกือบทั้งหมดของ IDE ผ่านการใช้ตัวแปร คุณสามารถเพิ่มเครื่องมือภายใต้รายการเมนูใด ๆ ก็ได้ สามารถระบุการเปลี่ยนทิศทางของข้อมูลเข้า ข้อมูลออก และข้อความข้อผิดพลาดในกรอบงาน GUI และกำหนดพารามิเตอร์บรรทัดคำสั่งให้กับเครื่องมือได้</para>
	<note>
	<para>คุณต้องเปิดใช้ปลั๊กอินเครื่องมือเพื่อจะใช้ความสามารถนี้!</para>
	</note>
  </sect1>

  <sect1 id="tools-example">
  <title>ตัวอย่างเครื่องมือ</title>
  <para>นี่คือตัวอย่างง่าย ๆ ของการใช้ปลั๊กอินเครื่องมือเพื่อเชื่อมรวมกับสคริปต์สร้าง ChangeLog ของ GNOME</para>

  <figure id="tool-list">
    <title>เครื่องมือแก้ไขเครื่องมือ</title>
    <screenshot>
	<screeninfo>เครื่องมือแก้ไขเครื่องมือ</screeninfo>
     <graphic fileref="figures/tool-editor.png" format="PNG" srccredit="jhs"/>
    </screenshot>
   </figure>

  </sect1>

</chapter>

 <!-- Authors -->
  <chapter id="authors">
  <title>ผู้เขียน</title>
   <para>โครงการ <application>แอนจูตา</application> ก่อตั้งโดย Naba Kumar <ulink type="http" url="http://anjuta.org/credits">หน้านี้</ulink> จะแสดงรายชื่อผู้ร่วมสมทบงานให้กับแอนจูตาทุกคน</para>

   <para>สำหรับข้อมูลเพิ่มเติมของ <application>แอนจูตา</application> กรุณาเข้าชมที่เว็บไซต์ของโครงการที่ <ulink type="http" url="http://anjuta.org/">http://anjuta.org</ulink> การรายงานบั๊กควรจะใช้เครื่องมือติดตามบั๊กที่ไซต์พัฒนาโครงการ <ulink type="http" url="http://www.sourceforge.net/projects/anjuta">http://www.sourceforge.net/projects/anjuta</ulink></para>
   
   <para>คู่มือนี้เขียนโดย Naba Kumar, Andy Piper, Biswapesh Chattopadhyay และ Johannes Schmid กรุณาส่งความคิดเห็นและข้อเสนอแนะทั้งหมดเกี่ยวกับคู่มือนี้ไปที่ลิสต์ Anjuta Devel <email>anjuta-devel-list@gnome.org</email> หรืออาจส่งข้อคิดเห็นต่าง ๆ มาทางเครื่องมือติดตามโครงการของ SourceForge ได้เช่นกัน</para> 
</chapter>


 <!-- License -->
 <chapter id="license">
  <title>สัญญาอนุญาต</title>
   <para>โปรแกรมนี้เป็นซอฟต์แวร์เสรี คุณสามารถแจกจ่ายต่อ และ/หรือ แก้ไขโปรแกรมได้ ภายใต้เงื่อนไขของ <ulink type="ghelp" url="gnome-help:gpl">GNU General Public License</ulink> ที่เผยแพร่โดยมูลนิธิซอฟต์แวร์เสรี ไม่ว่าจะเป็นสัญญาอนุญาตรุ่นที่ 2 หรือรุ่นถัดมา(ตามแต่คุณจะเลือก)</para>
   <para>โปรแกรมนี้เผยแพร่ด้วยความหวังว่าโปรแกรมจะมีประโยชน์ แต่ <emphasis>ไม่มีการรับประกันใดๆ</emphasis> ไม่มีแม้การรับประกัน <emphasis>อรรถประโยชน์เชิงพาณิชย์</emphasis> หรือ <emphasis>ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะกิจใด ๆ</emphasis> กรุณาอ่าน <citetitle>GNU General Public License</citetitle> เพื่อดูรายละเอียดเพิ่มเติม</para>
   <para>ชุดสำเนาของ <citetitle>GNU General Public License</citetitle> ได้แนบมาเป็นภาคผนวกใน <citetitle>คู่มือผู้ใช้ GNOME</citetitle> แล้ว คุณอาจรับชุดสำเนาของ <citetitle>GNU General Public License</citetitle> จากมูลนิธิซอฟต์แวร์เสรีได้ โดยเข้าไปที่ <ulink type="http" url="http://www.fsf.org">เว็บไซต์ของมูลนิธิ</ulink> หรือโดยติดต่อไปที่ <address>Free Software Foundation, Inc. <street>51 Franklin Street</street> Fifth Floor <city>Boston</city>, <state>MA</state><postcode>02110-1301</postcode><country>USA</country></address></para>
</chapter>

</book>
