Back to site

Кароткія ўводзіны ў Cedet

Libs | WebHostingRating.com: Кароткія ўводзіны ў Cedet

Кароткія ўводзіны ў Cedet

Кароткія ўводзіны ў Cedet

Дадзены артыкул не прэтэндуе на ўяўленне падрабязнага апісання налад Emacs у якасці асяроддзя распрацоўкі (гэта тэма для асобнага артыкула). Я проста спрабаваў даць невялікае апісанне "Як наладзіць Cedet для працы з C & C++", хоць большасць з гэтых апісанняў будзе даступна і на іншых мовах, падтрымоўваных Cedet.

Што такое Cedet?

Пакет Cedet - гэты збор некалькіх бібліятэк, уключаючы розныя каманды, але выкарыстоўваныя для аднаго задання — забяспечваюць функцыянальнасць пры працы з зыходным кодам, напісаным на розных мовах праграмавання:

  • Semantic - база для стварэння сінтаксічных аналізатараў для розных моў праграмавання. Гэта дазваляе прадставіць агульную інфармацыю пра зыходны код, напісаным на розных мовах. Выкарыстоўваю гэту інфармацыю, Cedet & іншыя пакеты (JDEE і ECB), могуць пісаць каманды, патрабаваныя для розных асяроддзяў развіцця (нешта падобнае на Eclipse, NetBeans і т. п.);
  • SemanticDB уключаны ў Semantic, падладжвае інтэрфейсы пад розныя модулі памяці, якую захоўваюць інфармацыю, патрабаваную для завяршэння імёнаў, навігацыі зыходнага кода і т. д. Сінтаксічная інфармацыя можа быць захавана ў розных сесіях Emacs, таму ён скарачае неабходнасць выкарыстання незарегистрированых зыходных кодаў.;
  • Senator рэалізуе навігацыі ў зыходным кодзе файла, выкарыстоўваючы інфармацыю, узятую з Semantic;
  • Srecode — пакет для стварэння зыходнага кода, выкарыстоўваючы сінтаксічную інфармацыю, уключаючы інфармацыю, якая змяшчаецца ў Semantic;
  • EDE рэалізуе набор пашырэнняў для працы з праектамі — карыстач можа кантраляваць спіс мэт, ствараць праект і т. д. Акрамя таго, выкарыстоўваю паняцце праекта, вы можаце больш сапраўды кантраляваць працэс аперацый, протекаемых у Semantic — імя дапрацовак і т. д.;
  • Speedbar выкарыстоўваецца для высновы інфармацыі пра апошняе сховішча, выкарыстоўваючы розныя рэсурсы інфармацыі — Semantic, некаторая спецыялізаваная інфармацыя пра правайдараў (для texinfo & html, да прыкладу) і т. д.
  • Eieio - бібліятэка, якая выкарыстоўвае інфраструктуру CLOS (Common Lisp Object System) для Emacs Lisp;
  • Cogre - бібліятэка для стварэння диаграм UMLв буферы Emacs, з базавай інтэграцыяй у Semantic.

Усталёўка Cedet

Цяпер лепш выкарыстоўваць палепшаную версію Cedet, якая даступная на сайце Sourceforge.net. Пасля спампоўкі кода, вам трэба змяніць функцыі cedet і кампіляваць пакет з наступнай камандай:

emacs -Q -l cedet-build.el -f cedet-build

or, to compile in terminal window, and exit after compilation, you can use following command:

emacs -Q -nw -l cedet-build.el -f cedet-build -f save-buffers-kill-terminal

Налада

Загрузка пакета адбываецца ў скрыпце cedet.el, так што ўсё, што вам трэба зрабіць — проста вынікаць ініцыялізацыі Emacs 2:

(загрузны файл "~/emacs/cedet/common/cedet.el")

Калі вы жадаеце выкарыстоўваць праекты, вам трэба ўключыць функцыю абмену — яна даступная з пакетам EDE:

(global-ede-mode t)

Налада семантыкі

У залежнасці ад вашых патрабаванняў вы можаце выкарыстоўваць адну з каманд, апісаных ніжэй, каб запампаваць патрабаваны набор характарыстак (гэтыя каманды прыведзены ў парадку павелічэння, і кожная наступная каманда складаецца з функцыі папярэдняй каманды):

  • запампаваць-semantic-з-мінімальнымі-магчымасцямі — дазваляе мінімальны лік з неабходных патрабаванняў — захоўвае сінтаксічную інфармацыю ў часавым буферы абмену для наступнага выкарыстання (Semanticdb), і спампоўвае інфармацыю з Semanticdb і Ebrowse;
  • запампаваць-semantic-з-памагатымі-кода — дазваляе другарадны-рэжым для навігацыі ў буферы, рэжым-semantic-закладкі для захоўвання адрасоў наведаных тэгаў, і рэжым-semantic-абагульненні, які паказвае інфармацыю пра тэг пад пунктамі;
  • запампаваць-semantic-з-памагатымі-кода-падтрымных-gaudy — дазваляе імя-semantic-stickyfunc, якое адлюстроўвае імя дзейснай функцыі ў першым радку спісу буфера, рэжым-дэкарацыі-semantic для ўпрыгожвання тэгаў, выкарыстоўваючы розныя твары, і рэжым-semantic-дадатковы для аўтаматычнага стварэння магчымых імёнаў, калі карыстач спыняе працу на некаторы час;
  • запампаваць-semantic-з-пашыранымі-памагатымі-кода — дазваляе рэжым-which-функцый, які паказвае імя дзейснай функцыі ў радку стану;
  • запампаваць-semantic-з-якія выпраўляюць-памагатымі — дазваляе некалькі рэжымаў, якія карысныя пры выпраўленні Semantic — адлюстроўвае памылкі, іх стан і г.д.

Вам усяго толькі трэба дадаць назву адной з гэтых каманд пасля каманды спампоўкі Cedet. Да прыкладу:

(semantic-load-enable-excessive-code-helpers)

Усё астатняе ў гэтай секцыі пацвярджае, што мінімальныя функцыі Semantic былі паскочваны.

Для выкарыстання дадатковых функцый па завяршэнні імя і адлюстраванню інфармацыі пра тэгі & класах, вам таксама трэба будзе запампаваць пакет semantic-ia. Гэта можна зрабіць з дапамогай наступнай каманды:

(require 'semantic-ia)

Пасля спампоўкі гэтага пакета, вам трэба будзе атрымаць доступ да каманд, апісаным ніжэй.

Асноўныя сістэмныя файлы

Для звычайнай працы сістэмных бібліятэк, Semantic патрэбен доступ да сістэмы, уключаючы файлы, якія ўтрымоўваюць інфармацыю пра функцыі & тыпах дадзеных, выкарыстоўваных у гэтых бібліятэках.

Калі вы выкарыстоўваеце GCC для праграмавання ў C & C++, то Semantic зможа аўтаматычна знайсці шлях, у которм сістэма будзе ўключаць размешчаныя ў ёй файлы. Каб зрабіць гэта, вам трэба загрузіць пакет semantic-gcc з наступнай камандай:

(require 'semantic-gcc)

Вы таксама можаце спецыялізаваць іншыя шляхі для пошуку зняволеных у іх файлаў (і гэтыя шляхі таксама могуць вар'іравацца ў розных рэжымах). Каб дадаць шлях у спіс сістэмы, вы можаце выкарыстоўваць каманду semantic-add-system-include, якая прымае два параметру — радок са шляхам для ўключэння файлаў, і знак, які ўяўляе імя асноўнага рэжыму, для якога будзе выкарыстоўвацца гэты шлях. Да прыкладу:

(semantic-add-system-include "~/exp/include/boost_1_37" 'c++-mode)

Аптымізацыя працы Semantic's

Для аптымізацыі працы з тэгамі вы можаце выкарыстоўваць некалькі тэхнік:

  • абмежаваць пошук праекта EDE, як апісана ніжэй;
  • вызначыць спіс асноўных кірункаў для вашых праектаў, каб Semantic выкарыстоўваў абмежаваны лік баз дадзеных з сінтаксічнымі канструкцыямі;
  • стварыць базы дадзеных тэгаў для часта выкарыстоўваных кірункаў (/usr/include, /usr/local/include, etc.) з камандай semanticdb-create-ebrowse-database ці semanticdb-create-cscope-database;
  • абмежаваць пошук варыятыўнасці пэўных рэжымаў semanticdb-find-default-throttle — Да прыкладу, несипользовать інфармацыю з сістэмы, уключаючы файлы, выдаляючы знак system са спісу аб'ектаў для пошуку c-mode:
(setq-mode-local c-mode semanticdb-find-default-throttle
                                                                 '(project unloaded system recursive))

Semantic вытрымкі з сінтаксічнай інфармацыі калі Emacs знаходзіцца ў рэжыме чакання. Вы можаце аптымізаваць semantic-idle-scheduler-idle-time час чакання (у секундах), калі вы не жадаеце выкарыстоўваць стандартныя значэнні.

Інтэграцыя з imenu

Пакет Semantic можа працаваць з пакетам imenu. Гэта дазваляе адлюстроўваць меню са спісам функцый, варыятыўнасцю, і іншымі тэгамі. Для актывацыі гэтай особнности вы можаце выкарыстоўваць semantic-load-enable-code-helpers, ці, вам трэба дадаць наступны код у файл ініцыялізацыі:

(defun my-semantic-hook ()
  (imenu-add-to-menubar "TAGS"))
(add-hook 'semantic-init-hooks 'my-semantic-hook)

Праца з Semanticdb

Калі вы выкарыстоўваеце стандартную працэдуру загрузкі Cedet, то Semanticdb будзе загружаны аўтаматычна. Ці вы можаце запампаваць і выкарыстоўваць яго з дапамогай наступны каманд:

(require 'semanticdb)
(global-semanticdb-minor-mode 1)

Для працы з Semanticdb, вам трэба вызначыць колькасць разнавіднасцяў, якія выкарыстоўваюцца для спецыялізацыі шляху, дзе захоўваецца база дадзеных і некаторыя іншыя параметры. Гэтыя варыянты могуць быць усталяваны праз semanticdb працоўную групу.

Акрамя таго, Semanticdb можа выкарыстоўваць базы дадзеных, створаныя вонкавымі ўтылітамі — gtags з GNU Global, ctags, ebrowse & cscope. Для актывацыі трэба выкарыстоўваць наступны код:

;; калі вы жадаеце дазволіць падтрымку для gnu global
(require 'semanticdb-global)
(semanticdb-enable-gnu-global-databases 'c-mode)
(semanticdb-enable-gnu-global-databases 'c++-mode)

;; дазволіць ctags для некаторых моў:
;;  Unix Shell, Perl, Pascal, Tcl, Fortran, Asm
(semantic-load-enable-primary-exuberent-ctags-support)

Як сінхранізаваць Semantic для працы з праектамі C & C++

Для паляпшэння працы Semantic з кодамі З & C++ рэкамендуецца выкарыстоўваць пакет EDE (працуе з праектамі і т. д.). Для гэтых моў пакет EDE вызначае адмысловы тып праекта — ede-cpp-root-project, які забяспечвае дадатковую інфармацыю о Semantic, якая будзе скарыстана для аналізу зыходнага кода вашага праекта.

Для вызначэння вашага праекта вам трэба использоватьь наступны код:

(ede-cpp-root-project "Test"
                :name "Test Project"
                :file "~/work/project/CMakeLists.txt"
                :include-path '("/"
                                "/Common"
                                "/Interfaces"
                                "/Libs"
                               )
                :system-include-path '("~/exp/include")
                :spp-table '(("isUnix" . "")
                             ("BOOST_TEST_DYN_LINK" . "")))

Вы можаце выкарыстоўваць любы файл у аснове вашага праекта, як параметр :file. Гэты файл не разабраны, але выкарыстоўваецца толькі як якар для пошуку файлаў у праектах.

Для пошуку ўключаных файлаў Semantic выкарыстоўвае кірунку з двух спісаў, якія вызначаны для праекта. Параметр :system-include-path выкарыстоўваецца для вызначэння спісу ўсяго шляху, які будзе шукаць уключаныя ў"сістэму" файлы. Іншы параметр — :include-path вызначае спіс кірункаў, якія адносяцца да асновы праекта, які будзе знойдзены для вашых уключаных файлаў (калі імёны будуць пачынацца з /, гэта значыць, што шлях вызначаны адносна асновы праекта). Замест вызначэння шляху як спісаў, вы можаце падаць функцыю, якая будзе вырабляць пошук уключаных файлаў у ваш праект. Вы можаце прачытаць пра гэта ў иснструкции да EDE.

Іншы параметр, які можа быць вызначаны ў тлумачэнні да пректу, - гэта спіс вызначэнняў, якія будуць выкарыстоўвацца падчас кадаванні. Параметр :spp-table дазваляе определеить спіс пар, які складаецца з імя знака & значэнні, вызначаных для дадзенага імя. У прыкладзе вышэй мы вызначаем два знака — isUnix і BOOST_TEST_DYN_LINK, якія прызначаны для працэсара, і гэта дазваляе правесці правільнае фарматаванне кода.

Карыстач, калі запатрабуецца, можа памяняць варыятыўнасць файлаў усярэдзіне праекта. Гэта можа быць зроблена шляхам спецыфікацыі параметру :local-variables, і мінанні спісу пар знакаў па імі/значэнню, і гэтыя значэнні будуць падстаўлены да файлаў праекта.

Працэдура зыходнага кода

Больш падрабязную інфармацыю пра вызначэнне працэсара вы можаце знайсці semantic-lex-c-preprocessor-symbol-map. Спіс знакаў, вызначаных для некаторых файлаў з зыходным кодам, вы можаце атрымаць пры дапамозе каманды semantic-lex-spp-describe, і выкарыстоўваць яе вынік для параметру :spp-table ці semantic-lex-c-preprocessor-symbol-map.

Шматлікія спісы ў бібліятэках адзначаны макрасамі ў адным з уключаных файлаў, і вы можаце выкарыстоўваць гэтыя значэнні. Каб зрабіць гэта, вы павінны пасартаваць гэтыя файлы ў парадку semantic-lex-c-preprocessor-symbol-file, і калі Cedet правядзе аналіз, гэтыя значэнні будуць прыняты да ўвагі. Наогул гэта варыятыўнасць мае толькі адну каштоўнасць — файл са значэннямі для стандартнай бібліятэкі C++. У якасці прыкладу, я жадаў бы паказаць канфігурацыю Cedet's у працы з Qt4:

(setq qt4-base-dir "/usr/include/qt4")
(semantic-add-system-include qt4-base-dir 'c++-mode)
(add-to-list 'auto-mode-alist (cons qt4-base-dir 'c++-mode))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qconfig.h"))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qconfig-dist.h"))
(add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qglobal.h"))

Пасля дадання гэтых радкоў у ваш файл инициализациивы смоежете выкарыстоўваць імя для класаў, вызначаных у бібліятэцы Qt4. Прыклад гэтага вы видете на малюначку ўнізе.

Праца з Semantic

З пункту гледжання карыстача, Semantic выконвае некалькі асноўных каманд — стварэнне імя, які змяшчае інфармацыю пра тэгі (адрозненні, fфункции і т. д.), і навігацыя ў зыходным кодзе. Некорые каманды створаны ў пакеце semantic-ia, тады як іншыя - у Senator, а астатнія ў Semantic's.

У некаторых каманд няма стандартнага вызначэння ключа, і будзе лепш для вас стварыць такое, зручнае вам, і набор каманд, патрабаваных для яго, да прыкладу, як гэтыя:

(defun my-cedet-hook ()
  (local-set-key [(control return)] 'semantic-ia-complete-symbol)
  (local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu)
  (local-set-key "\C-c>" 'semantic-complete-analyze-inline)
  (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle))
(add-hook 'c-mode-common-hook 'my-cedet-hook)

Жадалася б адзначыць, што распрацоўка Semantic's ідзе досыць актыўна, а калі што-небудзь не працуе, ці працуе няправільна, то адпраўляйце прыклады кода на cedet-devel mailing list — аўтар Cedet's адказвае звычайна хутка.

Стварэнне імя

Стварэнне імя для функцый, зменных & класаў - часта выкарыстоўваная функцыя, калі вы працуеце з зыходным кодам3. Усярэдзіне Semantic ёсць два пакета, якія забяспечваюць гэта дзеянне — semantic-ia і Senator. Каманды створаныя ў semantic-ia выкарыстоўваюць функцыю semantic-analyze-possible-completions для стварэння спісу магчымых імёнаў, і гэта функцыя прымае да ўвагі шматлікія параметры, і яна таксама можа быць пашырана карыстачом для выдачы больш дакладных імёнаў. У той жа час, каманды з пакета Senator выкарыстоўваюць прасцейшыя метады для стварэння спісу ўсіх варыянтаў імёнаў (звычайна выкарыстоўваецца инйормация пра вызначэнні толькі ў бягучым файле), і гэта часам прыводзіць да няправільнага стварэння імёнаў.

Калі вы выкарыстоўваеце каманду semantic-ia-complete-symbol, калі набіраеце код, то яе праца прывядзе да завяршэння перадачы імя — імя функцыі, зменнай, ці чальца класа, у залежнасці ад кантэксту. Калі ёсць некалькі варыянтаў імя, тое гэта імя будзе дадзена агульнай часткі, а калі вы выклічце гэту каманду ў другі раз, то будзе паказаны буфер з усімі магчымымі камбінацыямі. Карыстач можа таксама выкарыстоўваць каманду semantic-ia-complete-symbol-menu, якая таксама аналізуе выкарыстоўваны кантэкст, і адлюстроўвае спіс магчымых варыянтаў у графічным меню, з якога карыстачом будзе абрана патрэбнае імя4. Акрамя таго, там ёсць каманда semantic-ia-complete-tip, якая адлюстроўвае спіс магчымых імёнаў прылад.

Як было сказана вышэй, пакет Senator таксама мае каманды для стварэння імёнаў, якая працуе хутка, але з меншай дакладнасцю, бо каманды выкарыстоўваюць некалькі параметраў у стварэнні імя. Каманда senator-complete-symbol (C-c , TAB) стварае імя для дзейснага тэга і выдае першы знойдзены варыянт у якасці выніку. Калі імя няправільна, вы можаце запытаць другое імя для спісу, паўтараючы гэту каманду і т. д. Калі там шмат варыянтаў магчымых імёнаў, ці вы жадаеце ўбачыць поўны спіс функцый і зменных для некалькіх класаў, то лепш выкарыстоўваць каманду senator-completion-menu-popup (C-c , SPC), якая адлюстроўвае спіс усіх магчымых камбінацый у графічным меню.

Акрамя гэтых каманд, для некаторых моў карыстач можа выкарыстоўваць адмысловы рэжым — semantic-idle-completions-mode (ён будзе загружаны, калі вы выкарыстоўваеце emantic-load-enable-gaudy-code-helpers, ці вы можаце ўсталяваць яго самога) — у гэтым рэжыме назвы імёнаў паказаны аўтаматычна, калі карыстач спыняе працу на некаторы час (рэжым сну). Стандартна паказваецца толькі першая магчымая назва, і карыстач можа выкарыстоўваць ключ TAB для навігацыі па спісе магчымых імёнаў.

Для моў, падобных З, карыстач можа выкарыстоўваць каманду semantic-complete-self-insert, праз . і/ці > ключы, як паказана ніжэй:

(defun my-c-mode-cedet-hook ()
 (local-set-key "." 'semantic-complete-self-insert)
 (local-set-key ">" 'semantic-complete-self-insert))
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)

Выкарыстанне гэтых налад прывядзе да актывацыі каманды semantic-complete-self-insert, калі карыстач націсне . ці > пасля зменных, якія размешчаны ў класах ці структурах, і адлюстраваных у спісе магчымых імёнаў для дадзенага класа ці структуры.

Атрыманне інфармацыі пра тэгі

Пакет semantic-ia апрацоўвае некалькі каманд, якія дазваляюць атрымаць інфармацыю пра класы, функцыях & зменных. У якасці дакументацыі выкарыстоўваюцца коментарии, знойдзеныя ў зыходным кодзе, уключаючы каментары, напісаныя для Doxygen. Вось наступныя каманды:

semantic-ia-show-doc
паказвае інфармацыю для функцыі ці зменнай, чые імёны паказаны ніжэй. Інфармацыя паказана ў асобным буферы. Для зменных гэта каманда показыват іх становішча, уключаючы тып зменнай, і радок інфармацыі, калі такая магчымая. Для функцый паказаны прататып функцыі, уключаючы інфармацыю пра аргументы і зваротным значэнні (калі магчымыя каментары);
semantic-ia-show-summary
паказвае інфармацыю для імя пад знакам, але падрабязнасці паказаны ў міні-буферы, таму карыстач убачыць толькі становішча зменнай ці прататып фенкции;
semantic-ia-describe-class
запытвае ў карыстача імя класа і зваротны спіс функцый & зменных, вызначаных у дадзеным класе, і ўсе яе бацькоўскія класы.

Навігацыя ў зыходным кодзе

Адна з найболей карысных каманд для навігацыі ў зыходным кодзе - semantic-ia-fast-jump, якая дазваляе пераскочыць з вызначэння функцыі ці зменнай, чыё імя знаходзіцца пад паказальнікам. Вы можаце вярнуцца пры дапамозе каманды semantic-mrub-switch-tag (C-x B), якая даступная пры выкарыстанні рэжыму semantic-mru-bookmark-mode.

Semantic таксама падае дзве дадатковыя каманды дле пераходу да функцыі ці зменнай: вызначаных у дзейсным файле — semantic-complete-jump-local (C-c , j), ці вызначаных у дзейсным праекце — semantic-complete-jump (C-c , J). Абедзве каманды дазваляюць уводзіць імя функцыі ці зменнай (уключаючы мясцовыя зменныя для функцый) і пераходзіць да знойдзеных пазначэнняў (вы можаце выкарыстоўваць імя па змаўчанні для ўводу імя).

Галоўнае адрозненне паміж камандамі semantic-ia-fast-jump & semantic-complete-jump - гэта тое, што першая працуе са складанымі імёнамі, такімі, як this::that->foo(), тады як другая можа знаходзіць толькі простыя імёны як foo.

Каманда semantic-analyze-proto-impl-toggle дазваляе пераключэнне паміж функцыямі і мовамі, і якая працуе з рознымі варыяцыямі функцый. Іншая карысная каманда - semantic-decoration-include-visit, якая дазваляе працаваць з уключаным файлам, чыё імя размешчана пад пунктам.

Senator таксама прапануе некалькі каманд для навігацыі ў зыходным кодзе. Гэта команы senator-next-tag (C-c , n) і senator-previous-tag (C-c , p), якія перасоўваюць курсор да наступнага ці преыдущему тэгу, а таксама каманда senator-go-to-up-reference (C-c , u), якая перасоўвае курсор да "бацькоўскаму" тэгу (да прыкладу, для функцыі чальцоў класа, "родителського" тэга дэкларацыя класа).

Пошук месцаў, дзе названа функцыя

Не так даўно Semantic была створана вельмі карысная функцыя — semantic-symref, якая дазваляе знаходзіць месцы, дзе знакі, чые імёны размешчаны пад пунктамі, выкарыстоўваюцца ў вашым праекце. Калі вы жадаеце знайсці ўжыванне знаку з любым імем, вы можаце выкарыстоўваць semantic-symref-symbol, які дазваляе вам вызначыць імя знака.

Калі перавагі дадзенаму імю не былі знойдзены ў базе дадзеных (GNU Global, etc.), то гэта каманда паспрабуе знайсці іх з дапамогай find-grep. У выніку адбору гэтых каманд будзе створаны новы буфер з вынікамі, і карыстач зможа выкарыстоўваць іх для пераходу ў паказаныя месцы:

Тэчкі зыходнага кода

Бо ў Semantic ёсць амаль поўная сінтаксічная інфармацыя пра зыходны код, гэта дазваляе яму наладзіць функцыянальнасць, падобную на функцыянальнасць, створаную ў пакеце hideshow. Для працы з гэтай функцыяй вам трэба стварыць узаемадзеянне паміж global-semantic-tag-folding-mode зменнымі. Калі вы зробіце гэта, у поле адлюструюцца маленькія трыкутнікі, і вы зможаце адкрываць і зачыняць часткі кода, проста націскаючы на іх (не толькі часці исходого кода, але і каментары, і іншыя oобъекты).

У Senator ёсць падобная функцыя, але яна звычайна выкарыстоўваецца для вышэйшых аб'ектаў — функцый, класаў і т. д. Вы можаце адкрываць частку кода з камандай senator-fold-tag (C-c , -), і зачыняць з senator-unfold-tag (C-c , +).

Іншыя каманды, прапанаваныя Senator

Пакет Senator определеяет набор каманд для працы стегами, што дазваляе карыстачу выразаць ці скапіяваць тэг, і перамясціць яго ў іншае месца і т. д. Каб абразаць бягучы тэг (звычайна гэта апісанне якой-небудзь функцыі ці яе месцазнаходжанне), патрабуецца каманда senator-kill-tag (C-c , C-w). Вы можаце функцыянаваць тэг стандартным спалучэннем клавіш C-y, калі каманда senator-yank-tag (C-c , C-y) працуе толькі з месцазнаходжаннем тэга без цела. Іншая карысная каманда senator-copy-tag (C-c , M-w), якая капіюе бягучы тэг — гэта вельмі зручна, калі вы жадаеце змясціць месцазнаходжанне функцыі ў бягучы файл, напрыклад.

Senator дазваляюць змяняць паводзіны стандартных пошукавых каманд (re-search-forward, isearch-forward і іншыя), калі вы працуеце з зыходным кодам, такім чынам, яны прадставяць пошук толькі ў абраных тэгах. Для актывацыі гэтага рэжыму выкарыстоўвайце: senator-isearch-toggle-semantic-mode каманду(C-c , i), а з камандай senator-search-set-tag-class-filter (C-c , f) вы можаце абмежаваць пошук да абраных тыпаў тэга — function для функцый, variable для зменных і т. д.

Вытакже можаце вырабляць пошук па тэгах без актывацыі гэтага рэжыму — вы проста павінны выклікаць наступную каманду: senator-search-forward ці senator-search-backward.

Праца з Srecode

Пакет Srecode позваляет карыстачу размяркоўваць розныя раскладкі кодаў, але ён адрозніваецца ад іншых пакетаў, якія рэалізуюць размеркаванне раскладак, наколькі спіс даступных раскладак можа вар'іравацца ў залежнасці ад выкарыстоўванага тэксту. Да прыкладу, усталёўка функцыі get/set здарыцца, толькі есль вы знаходзіцеся ўсярэдзіне класа. Ці ўсталёўка функцыі можа адбыцца па-за іншай функцыяй.

Асноўная каманда, выкарыстоўваная для размеркавання раскладак, - srecode-insert, якая працуе ад ключоў C-c / /. Гэта каманда спытае ў карыстача імя раскладкі (вы можаце ўвесці яе, выкарыстоўваючы стваральнік імёнаў). Спіс магчымых раскладак будзе вар'іравацца, у залежнасці ад сапраўднага кантэксту. Калі вы жадаеце пераразмеркаваць тую ж раскладку яшчэ раз, вы можаце выкарыстоўваць каманду srecode-insert-again.

(C-c / .).

Раскладкі, вызначаныя карыстачом, Могуць таксама выкарыстоўваць уласныя спалучэнні ключоў. Яны могуць выкарыстоўваць знакі са спісу C-c / [a..z], і карыстач можа ўдакладніць становішча раскладкі, ключ да кторой будзе пацверджаны. Да прыкладу, для C++ вы можаце выкарыстоўваць спалучэнне C-c / c для змены становішча класа.

Спалучэнні ключоў, якія выкарыстоўваюць вышэйшыя знакі, прызначаны для раскладак & каманд, створаных у Srecode. Да прыкладу, C-c / G (srecode-insert-getset) вызначае пару функцый get/set для некаторых зменных чальцоў класа, тады як C-c / E (srecode-edit) выкарыстоўваецца для рэдагавання раскладак. Час ад часу спіс гэтай каманды змяняецца, таму вам трэба шукаць у иснструкции для атрымання рэальнага спісу каманд.

Акрамя раскладак, sсозданных у Cedet, карыстач можа ствараць свае ўласныя закладкі і захоўваць іх у ~/.srecode, дзе Cedet знойдзе іх аўтаматычна. Вы можаце прачытаць пра стварэнне закладак у інструкцыі да Srecode, якая даступная нароўні з іншымі дакументамі Cedet.

Дадатковыя пакеты

Разам з Cedet падаецца некалькі дадатковых пакетаў. Некаторыя з іх размешчаны ў падпраграме contrib, якая таксама будзе дададзена ў спіс пошуку пакета, калі вы загрузіце Cedet, і вам не трэба будзе рабіць нічога іншага, каб загрузіць іх.

Самы просты пакет

Самы просты пакет складаецца з некалькі дадатковых каманд, якія выкарыстоўваюць для сваёй працы інфармацыю, якая змяшчаецца ў Semantic. Стандартна ў гэтых каманд няма ўсталявальных лючей, таму вам трэба будзе ўсталяваць іх самастойна.

Каманда eassist-list-methods, створаная ў файле з зыходным кодам, пакажа вам спіс функцый, змешчаных у дзейсным буферы і дазволіць вам хутка перайсці на абраную функцыю.

Калі вы распрацуеце код для працы на C і/ці C++ мовах, тады вам будзе карысная каманда eassist-switch-h-cpp — яна пераходзіць паміж уключанымі файламі, якія ўтрымоўваюць дадаткі (калі ў іх адны і тыя ж імёны, але розныя напаўненні).


1. Першы радок патрэбна, толькі калі вы ствараеце пакет з CVS

2. Вы можаце выкарыстоўваць my configuration file for Cedet як аснову, хоць яна ўтрымоўвае шмат непатрэбных рэчаў

3. TТакже ёсць каманда semantic-complete-analyze-inline, якая паказвае спіс усіх магчымых назваў у асобным акне, што звычайна бывае карысным у графічным меню

4. Калі стварэнне імя працуе няправільна, паспрабуйце прааналізаваць, чаму гэта адбываецца, і адпраўце паведамленне пра памылку толькі пасля гэтага. Інфармацыю пра адпраўку паведамленняў пра памылку вы можаце знайсці ў кіраўніцтве карыстача Semantic у секцыі Smart Completion Debugging

Last change: 14.03.2011 08:13

blog comments powered by Disqus
Popular Links
Popular Links
Published (Last edited): Jun 2 , source: http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html