files.texi 136 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117
  1. @c This is part of the Emacs manual.
  2. @c Copyright (C) 1985,86,87,93,94,95,97,99, 2000, 2001
  3. @c Free Software Foundation, Inc.
  4. @c See file emacs.texi for copying conditions.
  5. @node Files, Buffers, Fixit, Top
  6. @chapter File Handling
  7. @cindex files
  8. The operating system stores data permanently in named @dfn{files}, so
  9. most of the text you edit with Emacs comes from a file and is ultimately
  10. stored in a file.
  11. To edit a file, you must tell Emacs to read the file and prepare a
  12. buffer containing a copy of the file's text. This is called
  13. @dfn{visiting} the file. Editing commands apply directly to text in the
  14. buffer; that is, to the copy inside Emacs. Your changes appear in the
  15. file itself only when you @dfn{save} the buffer back into the file.
  16. In addition to visiting and saving files, Emacs can delete, copy,
  17. rename, and append to files, keep multiple versions of them, and operate
  18. on file directories.
  19. @menu
  20. * File Names:: How to type and edit file-name arguments.
  21. * Visiting:: Visiting a file prepares Emacs to edit the file.
  22. * Saving:: Saving makes your changes permanent.
  23. * Reverting:: Reverting cancels all the changes not saved.
  24. * Auto Save:: Auto Save periodically protects against loss of data.
  25. * File Aliases:: Handling multiple names for one file.
  26. * Version Control:: Version control systems (RCS, CVS and SCCS).
  27. * Directories:: Creating, deleting, and listing file directories.
  28. * Comparing Files:: Finding where two files differ.
  29. * Misc File Ops:: Other things you can do on files.
  30. * Compressed Files:: Accessing compressed files.
  31. * File Archives:: Operating on tar, zip, jar etc. archive files.
  32. * Remote Files:: Accessing files on other sites.
  33. * Quoted File Names:: Quoting special characters in file names.
  34. * File Name Cache:: Completion against a list of files you often use.
  35. * File Conveniences:: Convenience Features for Finding Files.
  36. @end menu
  37. @node File Names
  38. @section File Names
  39. @cindex file names
  40. Most Emacs commands that operate on a file require you to specify the
  41. file name. (Saving and reverting are exceptions; the buffer knows which
  42. file name to use for them.) You enter the file name using the
  43. minibuffer (@pxref{Minibuffer}). @dfn{Completion} is available
  44. (@pxref{Completion}) to make it easier to specify long file names. When
  45. completing file names, Emacs ignores those whose file-name extensions
  46. appear in the variable @code{completion-ignored-extensions}; see
  47. @ref{Completion Options}.
  48. For most operations, there is a @dfn{default file name} which is used
  49. if you type just @key{RET} to enter an empty argument. Normally the
  50. default file name is the name of the file visited in the current buffer;
  51. this makes it easy to operate on that file with any of the Emacs file
  52. commands.
  53. @vindex default-directory
  54. Each buffer has a default directory which is normally the same as the
  55. directory of the file visited in that buffer. When you enter a file
  56. name without a directory, the default directory is used. If you specify
  57. a directory in a relative fashion, with a name that does not start with
  58. a slash, it is interpreted with respect to the default directory. The
  59. default directory is kept in the variable @code{default-directory},
  60. which has a separate value in every buffer.
  61. For example, if the default file name is @file{/u/rms/gnu/gnu.tasks} then
  62. the default directory is @file{/u/rms/gnu/}. If you type just @samp{foo},
  63. which does not specify a directory, it is short for @file{/u/rms/gnu/foo}.
  64. @samp{../.login} would stand for @file{/u/rms/.login}. @samp{new/foo}
  65. would stand for the file name @file{/u/rms/gnu/new/foo}.
  66. @findex cd
  67. @findex pwd
  68. The command @kbd{M-x pwd} displays the current buffer's default
  69. directory, and the command @kbd{M-x cd} sets it (to a value read using
  70. the minibuffer). A buffer's default directory changes only when the
  71. @code{cd} command is used. A file-visiting buffer's default directory
  72. is initialized to the directory of the file that is visited in that buffer. If
  73. you create a buffer with @kbd{C-x b}, its default directory is copied
  74. from that of the buffer that was current at the time.
  75. @vindex insert-default-directory
  76. The default directory actually appears in the minibuffer when the
  77. minibuffer becomes active to read a file name. This serves two
  78. purposes: it @emph{shows} you what the default is, so that you can type
  79. a relative file name and know with certainty what it will mean, and it
  80. allows you to @emph{edit} the default to specify a different directory.
  81. This insertion of the default directory is inhibited if the variable
  82. @code{insert-default-directory} is set to @code{nil}.
  83. Note that it is legitimate to type an absolute file name after you
  84. enter the minibuffer, ignoring the presence of the default directory
  85. name as part of the text. The final minibuffer contents may look
  86. invalid, but that is not so. For example, if the minibuffer starts out
  87. with @samp{/usr/tmp/} and you add @samp{/x1/rms/foo}, you get
  88. @samp{/usr/tmp//x1/rms/foo}; but Emacs ignores everything through the
  89. first slash in the double slash; the result is @samp{/x1/rms/foo}.
  90. @xref{Minibuffer File}.
  91. @cindex environment variables in file names
  92. @cindex expansion of environment variables
  93. @samp{$} in a file name is used to substitute environment variables.
  94. For example, if you have used the shell command @command{export
  95. FOO=rms/hacks} to set up an environment variable named @env{FOO}, then
  96. you can use @file{/u/$FOO/test.c} or @file{/u/$@{FOO@}/test.c} as an
  97. abbreviation for @file{/u/rms/hacks/test.c}. The environment variable
  98. name consists of all the alphanumeric characters after the @samp{$};
  99. alternatively, it may be enclosed in braces after the @samp{$}. Note
  100. that shell commands to set environment variables affect Emacs only if
  101. done before Emacs is started.
  102. @cindex home directory shorthand
  103. You can use the @file{~/} in a file name to mean your home directory,
  104. or @file{~@var{user-id}/} to mean the home directory of a user whose
  105. login name is @code{user-id}. (On DOS and Windows systems, where a user
  106. doesn't have a home directory, Emacs substitutes @file{~/} with the
  107. value of the environment variable @code{HOME}; see @ref{General
  108. Variables}.)
  109. To access a file with @samp{$} in its name, type @samp{$$}. This pair
  110. is converted to a single @samp{$} at the same time as variable
  111. substitution is performed for a single @samp{$}. Alternatively, quote the
  112. whole file name with @samp{/:} (@pxref{Quoted File Names}). File names
  113. which begin with a literal @samp{~} should also be quoted with @samp{/:}.
  114. @findex substitute-in-file-name
  115. The Lisp function that performs the substitution is called
  116. @code{substitute-in-file-name}. The substitution is performed only on
  117. file names read as such using the minibuffer.
  118. You can include non-ASCII characters in file names if you set the
  119. variable @code{file-name-coding-system} to a non-@code{nil} value.
  120. @xref{Specify Coding}.
  121. @node Visiting
  122. @section Visiting Files
  123. @cindex visiting files
  124. @table @kbd
  125. @item C-x C-f
  126. Visit a file (@code{find-file}).
  127. @item C-x C-r
  128. Visit a file for viewing, without allowing changes to it
  129. (@code{find-file-read-only}).
  130. @item C-x C-v
  131. Visit a different file instead of the one visited last
  132. (@code{find-alternate-file}).
  133. @item C-x 4 f
  134. Visit a file, in another window (@code{find-file-other-window}). Don't
  135. alter what is displayed in the selected window.
  136. @item C-x 5 f
  137. Visit a file, in a new frame (@code{find-file-other-frame}). Don't
  138. alter what is displayed in the selected frame.
  139. @item M-x find-file-literally
  140. Visit a file with no conversion of the contents.
  141. @end table
  142. @cindex files, visiting and saving
  143. @cindex saving files
  144. @dfn{Visiting} a file means copying its contents into an Emacs
  145. buffer so you can edit them. Emacs makes a new buffer for each file
  146. that you visit. We often say that this buffer ``is visiting'' that
  147. file, or that the buffer's ``visited file'' is that file. Emacs
  148. constructs the buffer name from the file name by throwing away the
  149. directory, keeping just the name proper. For example, a file named
  150. @file{/usr/rms/emacs.tex} would get a buffer named @samp{emacs.tex}.
  151. If there is already a buffer with that name, Emacs constructs a unique
  152. name---the normal method is to append @samp{<2>}, @samp{<3>}, and so
  153. on, but you can select other methods (@pxref{Uniquify}).
  154. Each window's mode line shows the name of the buffer that is being displayed
  155. in that window, so you can always tell what buffer you are editing.
  156. The changes you make with editing commands are made in the Emacs
  157. buffer. They do not take effect in the file that you visited, or any
  158. place permanent, until you @dfn{save} the buffer. Saving the buffer
  159. means that Emacs writes the current contents of the buffer into its
  160. visited file. @xref{Saving}.
  161. @cindex modified (buffer)
  162. If a buffer contains changes that have not been saved, we say the
  163. buffer is @dfn{modified}. This is important because it implies that
  164. some changes will be lost if the buffer is not saved. The mode line
  165. displays two stars near the left margin to indicate that the buffer is
  166. modified.
  167. @kindex C-x C-f
  168. @findex find-file
  169. To visit a file, use the command @kbd{C-x C-f} (@code{find-file}). Follow
  170. the command with the name of the file you wish to visit, terminated by a
  171. @key{RET}.
  172. The file name is read using the minibuffer (@pxref{Minibuffer}), with
  173. defaulting and completion in the standard manner (@pxref{File Names}).
  174. While in the minibuffer, you can abort @kbd{C-x C-f} by typing
  175. @kbd{C-g}. File-name completion ignores certain filenames; for more
  176. about this, see @ref{Completion Options}.
  177. @cindex file selection dialog
  178. When Emacs is built with a suitable GUI toolkit, it pops up the
  179. standard File Selection dialog of that toolkit instead of prompting for
  180. the file name in the minibuffer. On Unix and GNU/Linux platforms, Emacs
  181. does that when built with LessTif and Motif toolkits; on MS-Windows, the
  182. GUI version does that by default.
  183. Your confirmation that @kbd{C-x C-f} has completed successfully is the
  184. appearance of new text on the screen and a new buffer name in the mode
  185. line. If the specified file does not exist and could not be created, or
  186. cannot be read, then you get an error, with an error message displayed
  187. in the echo area.
  188. If you visit a file that is already in Emacs, @kbd{C-x C-f} does not make
  189. another copy. It selects the existing buffer containing that file.
  190. However, before doing so, it checks that the file itself has not changed
  191. since you visited or saved it last. If the file has changed, a warning
  192. message is shown. @xref{Interlocking,,Simultaneous Editing}.
  193. @cindex maximum buffer size exceeded, error message
  194. Since Emacs reads the visited file in its entirety, files whose size
  195. is larger than the maximum Emacs buffer size (@pxref{Buffers}) cannot be
  196. visited; if you try, Emacs will display an error message saying that the
  197. maximum buffer size has been exceeded.
  198. @cindex creating files
  199. What if you want to create a new file? Just visit it. Emacs displays
  200. @samp{(New file)} in the echo area, but in other respects behaves as if
  201. you had visited an existing empty file. If you make any changes and
  202. save them, the file is created.
  203. Emacs recognizes from the contents of a file which convention it uses
  204. to separate lines---newline (used on GNU/Linux and on Unix),
  205. carriage-return linefeed (used on Microsoft systems), or just
  206. carriage-return (used on the Macintosh)---and automatically converts the
  207. contents to the normal Emacs convention, which is that the newline
  208. character separates lines. This is a part of the general feature of
  209. coding system conversion (@pxref{Coding Systems}), and makes it possible
  210. to edit files imported from different operating systems with
  211. equal convenience. If you change the text and save the file, Emacs
  212. performs the inverse conversion, changing newlines back into
  213. carriage-return linefeed or just carriage-return if appropriate.
  214. @vindex find-file-run-dired
  215. If the file you specify is actually a directory, @kbd{C-x C-f} invokes
  216. Dired, the Emacs directory browser, so that you can ``edit'' the contents
  217. of the directory (@pxref{Dired}). Dired is a convenient way to delete,
  218. look at, or operate on the files in the directory. However, if the
  219. variable @code{find-file-run-dired} is @code{nil}, then it is an error
  220. to try to visit a directory.
  221. Files which are actually collections of other files, or @dfn{file
  222. archives}, are visited in special modes which invoke a Dired-like
  223. environment to allow operations on archive members. @xref{File
  224. Archives}, for more about these features.
  225. @cindex wildcard characters in file names
  226. @vindex find-file-wildcards
  227. If the file name you specify contains shell-style wildcard characters,
  228. Emacs visits all the files that match it. Wildcards include @samp{?},
  229. @samp{*}, and @samp{[@dots{}]} sequences. @xref{Quoted File Names}, for
  230. information on how to visit a file whose name actually contains wildcard
  231. characters. You can disable the wildcard feature by customizing
  232. @code{find-file-wildcards}.
  233. If you visit a file that the operating system won't let you modify,
  234. Emacs makes the buffer read-only, so that you won't go ahead and make
  235. changes that you'll have trouble saving afterward. You can make the
  236. buffer writable with @kbd{C-x C-q} (@code{vc-toggle-read-only}).
  237. @xref{Misc Buffer}.
  238. @kindex C-x C-r
  239. @findex find-file-read-only
  240. Occasionally you might want to visit a file as read-only in order to
  241. protect yourself from entering changes accidentally; do so by visiting
  242. the file with the command @kbd{C-x C-r} (@code{find-file-read-only}).
  243. @kindex C-x C-v
  244. @findex find-alternate-file
  245. If you visit a nonexistent file unintentionally (because you typed the
  246. wrong file name), use the @kbd{C-x C-v} command
  247. (@code{find-alternate-file}) to visit the file you really wanted.
  248. @kbd{C-x C-v} is similar to @kbd{C-x C-f}, but it kills the current
  249. buffer (after first offering to save it if it is modified). When
  250. @kbd{C-x C-v} reads the file name to visit, it inserts the entire
  251. default file name in the buffer, with point just after the directory
  252. part; this is convenient if you made a slight error in typing the name.
  253. If you find a file which exists but cannot be read, @kbd{C-x C-f}
  254. signals an error.
  255. @kindex C-x 4 f
  256. @findex find-file-other-window
  257. @kbd{C-x 4 f} (@code{find-file-other-window}) is like @kbd{C-x C-f}
  258. except that the buffer containing the specified file is selected in another
  259. window. The window that was selected before @kbd{C-x 4 f} continues to
  260. show the same buffer it was already showing. If this command is used when
  261. only one window is being displayed, that window is split in two, with one
  262. window showing the same buffer as before, and the other one showing the
  263. newly requested file. @xref{Windows}.
  264. @kindex C-x 5 f
  265. @findex find-file-other-frame
  266. @kbd{C-x 5 f} (@code{find-file-other-frame}) is similar, but opens a
  267. new frame, or makes visible any existing frame showing the file you
  268. seek. This feature is available only when you are using a window
  269. system. @xref{Frames}.
  270. @findex find-file-literally
  271. If you wish to edit a file as a sequence of ASCII characters with no special
  272. encoding or conversion, use the @kbd{M-x find-file-literally} command.
  273. It visits a file, like @kbd{C-x C-f}, but does not do format conversion
  274. (@pxref{Formatted Text}), character code conversion (@pxref{Coding
  275. Systems}), or automatic uncompression (@pxref{Compressed Files}), and
  276. does not add a final newline because of @code{require-final-newline}.
  277. If you already have visited the same file in the usual (non-literal)
  278. manner, this command asks you whether to visit it literally instead.
  279. @vindex find-file-hooks
  280. @vindex find-file-not-found-hooks
  281. Two special hook variables allow extensions to modify the operation of
  282. visiting files. Visiting a file that does not exist runs the functions
  283. in the list @code{find-file-not-found-hooks}; this variable holds a list
  284. of functions, and the functions are called one by one (with no
  285. arguments) until one of them returns non-@code{nil}. This is not a
  286. normal hook, and the name ends in @samp{-hooks} rather than @samp{-hook}
  287. to indicate that fact.
  288. Successful visiting of any file, whether existing or not, calls the
  289. functions in the list @code{find-file-hooks}, with no arguments.
  290. This variable is really a normal hook, but it has an abnormal name for
  291. historical compatibility. In the case of a nonexistent file, the
  292. @code{find-file-not-found-hooks} are run first. @xref{Hooks}.
  293. There are several ways to specify automatically the major mode for
  294. editing the file (@pxref{Choosing Modes}), and to specify local
  295. variables defined for that file (@pxref{File Variables}).
  296. @node Saving
  297. @section Saving Files
  298. @dfn{Saving} a buffer in Emacs means writing its contents back into the file
  299. that was visited in the buffer.
  300. @table @kbd
  301. @item C-x C-s
  302. Save the current buffer in its visited file on disk (@code{save-buffer}).
  303. @item C-x s
  304. Save any or all buffers in their visited files (@code{save-some-buffers}).
  305. @item M-~
  306. Forget that the current buffer has been changed (@code{not-modified}).
  307. With prefix argument (@kbd{C-u}), mark the current buffer as changed.
  308. @item C-x C-w
  309. Save the current buffer as a specified file name (@code{write-file}).
  310. @item M-x set-visited-file-name
  311. Change the file name under which the current buffer will be saved.
  312. @end table
  313. @kindex C-x C-s
  314. @findex save-buffer
  315. When you wish to save the file and make your changes permanent, type
  316. @kbd{C-x C-s} (@code{save-buffer}). After saving is finished, @kbd{C-x C-s}
  317. displays a message like this:
  318. @example
  319. Wrote /u/rms/gnu/gnu.tasks
  320. @end example
  321. @noindent
  322. If the selected buffer is not modified (no changes have been made in it
  323. since the buffer was created or last saved), saving is not really done,
  324. because it would have no effect. Instead, @kbd{C-x C-s} displays a message
  325. like this in the echo area:
  326. @example
  327. (No changes need to be saved)
  328. @end example
  329. @kindex C-x s
  330. @findex save-some-buffers
  331. The command @kbd{C-x s} (@code{save-some-buffers}) offers to save any
  332. or all modified buffers. It asks you what to do with each buffer. The
  333. possible responses are analogous to those of @code{query-replace}:
  334. @table @kbd
  335. @item y
  336. Save this buffer and ask about the rest of the buffers.
  337. @item n
  338. Don't save this buffer, but ask about the rest of the buffers.
  339. @item !
  340. Save this buffer and all the rest with no more questions.
  341. @c following generates acceptable underfull hbox
  342. @item @key{RET}
  343. Terminate @code{save-some-buffers} without any more saving.
  344. @item .
  345. Save this buffer, then exit @code{save-some-buffers} without even asking
  346. about other buffers.
  347. @item C-r
  348. View the buffer that you are currently being asked about. When you exit
  349. View mode, you get back to @code{save-some-buffers}, which asks the
  350. question again.
  351. @item C-h
  352. Display a help message about these options.
  353. @end table
  354. @kbd{C-x C-c}, the key sequence to exit Emacs, invokes
  355. @code{save-some-buffers} and therefore asks the same questions.
  356. @kindex M-~
  357. @findex not-modified
  358. If you have changed a buffer but you do not want to save the changes,
  359. you should take some action to prevent it. Otherwise, each time you use
  360. @kbd{C-x s} or @kbd{C-x C-c}, you are liable to save this buffer by
  361. mistake. One thing you can do is type @kbd{M-~} (@code{not-modified}),
  362. which clears out the indication that the buffer is modified. If you do
  363. this, none of the save commands will believe that the buffer needs to be
  364. saved. (@samp{~} is often used as a mathematical symbol for `not'; thus
  365. @kbd{M-~} is `not', metafied.) You could also use
  366. @code{set-visited-file-name} (see below) to mark the buffer as visiting
  367. a different file name, one which is not in use for anything important.
  368. Alternatively, you can cancel all the changes made since the file was
  369. visited or saved, by reading the text from the file again. This is
  370. called @dfn{reverting}. @xref{Reverting}. You could also undo all the
  371. changes by repeating the undo command @kbd{C-x u} until you have undone
  372. all the changes; but reverting is easier.
  373. @findex set-visited-file-name
  374. @kbd{M-x set-visited-file-name} alters the name of the file that the
  375. current buffer is visiting. It reads the new file name using the
  376. minibuffer. Then it marks the buffer as visiting that file name, and
  377. changes the buffer name correspondingly. @code{set-visited-file-name}
  378. does not save the buffer in the newly visited file; it just alters the
  379. records inside Emacs in case you do save later. It also marks the
  380. buffer as ``modified'' so that @kbd{C-x C-s} in that buffer
  381. @emph{will} save.
  382. @kindex C-x C-w
  383. @findex write-file
  384. If you wish to mark the buffer as visiting a different file and save it
  385. right away, use @kbd{C-x C-w} (@code{write-file}). It is precisely
  386. equivalent to @code{set-visited-file-name} followed by @kbd{C-x C-s}.
  387. @kbd{C-x C-s} used on a buffer that is not visiting a file has the
  388. same effect as @kbd{C-x C-w}; that is, it reads a file name, marks the
  389. buffer as visiting that file, and saves it there. The default file name in
  390. a buffer that is not visiting a file is made by combining the buffer name
  391. with the buffer's default directory (@pxref{File Names}).
  392. If the new file name implies a major mode, then @kbd{C-x C-w} switches
  393. to that major mode, in most cases. The command
  394. @code{set-visited-file-name} also does this. @xref{Choosing Modes}.
  395. If Emacs is about to save a file and sees that the date of the latest
  396. version on disk does not match what Emacs last read or wrote, Emacs
  397. notifies you of this fact, because it probably indicates a problem caused
  398. by simultaneous editing and requires your immediate attention.
  399. @xref{Interlocking,, Simultaneous Editing}.
  400. @vindex require-final-newline
  401. If the value of the variable @code{require-final-newline} is @code{t},
  402. Emacs silently puts a newline at the end of any file that doesn't
  403. already end in one, every time a file is saved or written. If the value
  404. is @code{nil}, Emacs leaves the end of the file unchanged; if it's
  405. neither @code{nil} nor @code{t}, Emacs asks you whether to add a
  406. newline. The default is @code{nil}.
  407. @menu
  408. * Backup:: How Emacs saves the old version of your file.
  409. * Interlocking:: How Emacs protects against simultaneous editing
  410. of one file by two users.
  411. * Shadowing: File Shadowing.
  412. Copying files to "shadows" automatically.
  413. * Time Stamps:: Emacs can update time stamps on saved files.
  414. @end menu
  415. @node Backup
  416. @subsection Backup Files
  417. @cindex backup file
  418. @vindex make-backup-files
  419. @vindex vc-make-backup-files
  420. On most operating systems, rewriting a file automatically destroys all
  421. record of what the file used to contain. Thus, saving a file from Emacs
  422. throws away the old contents of the file---or it would, except that
  423. Emacs carefully copies the old contents to another file, called the
  424. @dfn{backup} file, before actually saving.
  425. For most files, the variable @code{make-backup-files} determines
  426. whether to make backup files. On most operating systems, its default
  427. value is @code{t}, so that Emacs does write backup files.
  428. For files managed by a version control system (@pxref{Version
  429. Control}), the variable @code{vc-make-backup-files} determines whether
  430. to make backup files. By default it is @code{nil}, since backup files
  431. are redundant when you store all the previous versions in a version
  432. control system. @xref{General VC Options}.
  433. @vindex backup-enable-predicate
  434. @vindex temporary-file-directory
  435. @vindex small-temporary-file-directory
  436. The default value of the @code{backup-enable-predicate} variable
  437. prevents backup files being written for files in the directories used
  438. for temporary files, specified by @code{temporary-file-directory} or
  439. @code{small-temporary-file-directory}.
  440. At your option, Emacs can keep either a single backup file or a series of
  441. numbered backup files for each file that you edit.
  442. Emacs makes a backup for a file only the first time the file is saved
  443. from one buffer. No matter how many times you save a file, its backup file
  444. continues to contain the contents from before the file was visited.
  445. Normally this means that the backup file contains the contents from before
  446. the current editing session; however, if you kill the buffer and then visit
  447. the file again, a new backup file will be made by the next save.
  448. You can also explicitly request making another backup file from a
  449. buffer even though it has already been saved at least once. If you save
  450. the buffer with @kbd{C-u C-x C-s}, the version thus saved will be made
  451. into a backup file if you save the buffer again. @kbd{C-u C-u C-x C-s}
  452. saves the buffer, but first makes the previous file contents into a new
  453. backup file. @kbd{C-u C-u C-u C-x C-s} does both things: it makes a
  454. backup from the previous contents, and arranges to make another from the
  455. newly saved contents if you save again.
  456. @menu
  457. * Names: Backup Names. How backup files are named;
  458. choosing single or numbered backup files.
  459. * Deletion: Backup Deletion. Emacs deletes excess numbered backups.
  460. * Copying: Backup Copying. Backups can be made by copying or renaming.
  461. @end menu
  462. @node Backup Names
  463. @subsubsection Single or Numbered Backups
  464. If you choose to have a single backup file (this is the default),
  465. the backup file's name is normally constructed by appending @samp{~} to the
  466. file name being edited; thus, the backup file for @file{eval.c} would
  467. be @file{eval.c~}.
  468. @vindex make-backup-file-name-function
  469. @vindex backup-directory-alist
  470. You can change this behavior by defining the variable
  471. @code{make-backup-file-name-function} to a suitable function.
  472. Alternatively you can customize the variable
  473. @code{backup-directory-alist} to specify that files matching certain
  474. patterns should be backed up in specific directories.
  475. A typical use is to add an element @code{("." . @var{dir})} to make
  476. all backups in the directory with absolute name @var{dir}; Emacs
  477. modifies the backup file names to avoid clashes between files with the
  478. same names originating in different directories. Alternatively,
  479. adding, say, @code{("." . ".~")} would make backups in the invisible
  480. subdirectory @file{.~} of the original file's directory. Emacs
  481. creates the directory, if necessary, to make the backup.
  482. If access control stops Emacs from writing backup files under the usual
  483. names, it writes the backup file as @file{%backup%~} in your home
  484. directory. Only one such file can exist, so only the most recently
  485. made such backup is available.
  486. If you choose to have a series of numbered backup files, backup file
  487. names contain @samp{.~}, the number, and another @samp{~} after the
  488. original file name. Thus, the backup files of @file{eval.c} would be
  489. called @file{eval.c.~1~}, @file{eval.c.~2~}, and so on, all the way
  490. through names like @file{eval.c.~259~} and beyond. The variable
  491. @code{backup-directory-alist} applies to numbered backups just as
  492. usual.
  493. @vindex version-control
  494. The choice of single backup or numbered backups is controlled by the
  495. variable @code{version-control}. Its possible values are
  496. @table @code
  497. @item t
  498. Make numbered backups.
  499. @item nil
  500. Make numbered backups for files that have numbered backups already.
  501. Otherwise, make single backups.
  502. @item never
  503. Never make numbered backups; always make single backups.
  504. @end table
  505. @noindent
  506. You can set @code{version-control} locally in an individual buffer to
  507. control the making of backups for that buffer's file. For example,
  508. Rmail mode locally sets @code{version-control} to @code{never} to make sure
  509. that there is only one backup for an Rmail file. @xref{Locals}.
  510. @cindex @env{VERSION_CONTROL} environment variable
  511. If you set the environment variable @env{VERSION_CONTROL}, to tell
  512. various GNU utilities what to do with backup files, Emacs also obeys the
  513. environment variable by setting the Lisp variable @code{version-control}
  514. accordingly at startup. If the environment variable's value is @samp{t}
  515. or @samp{numbered}, then @code{version-control} becomes @code{t}; if the
  516. value is @samp{nil} or @samp{existing}, then @code{version-control}
  517. becomes @code{nil}; if it is @samp{never} or @samp{simple}, then
  518. @code{version-control} becomes @code{never}.
  519. @node Backup Deletion
  520. @subsubsection Automatic Deletion of Backups
  521. To prevent excessive consumption of disk space, Emacs can delete numbered
  522. backup versions automatically. Generally Emacs keeps the first few backups
  523. and the latest few backups, deleting any in between. This happens every
  524. time a new backup is made.
  525. @vindex kept-old-versions
  526. @vindex kept-new-versions
  527. The two variables @code{kept-old-versions} and
  528. @code{kept-new-versions} control this deletion. Their values are,
  529. respectively, the number of oldest (lowest-numbered) backups to keep
  530. and the number of newest (highest-numbered) ones to keep, each time a
  531. new backup is made. The backups in the middle (excluding those oldest
  532. and newest) are the excess middle versions---those backups are
  533. deleted. These variables' values are used when it is time to delete
  534. excess versions, just after a new backup version is made; the newly
  535. made backup is included in the count in @code{kept-new-versions}. By
  536. default, both variables are 2.
  537. @vindex delete-old-versions
  538. If @code{delete-old-versions} is non-@code{nil}, Emacs deletes the
  539. excess backup files silently. If it is @code{nil}, the default, Emacs
  540. asks you whether it should delete the excess backup versions.
  541. Dired's @kbd{.} (Period) command can also be used to delete old versions.
  542. @xref{Dired Deletion}.
  543. @node Backup Copying
  544. @subsubsection Copying vs.@: Renaming
  545. Backup files can be made by copying the old file or by renaming it.
  546. This makes a difference when the old file has multiple names (hard
  547. links). If the old file is renamed into the backup file, then the
  548. alternate names become names for the backup file. If the old file is
  549. copied instead, then the alternate names remain names for the file
  550. that you are editing, and the contents accessed by those names will be
  551. the new contents.
  552. The method of making a backup file may also affect the file's owner
  553. and group. If copying is used, these do not change. If renaming is used,
  554. you become the file's owner, and the file's group becomes the default
  555. (different operating systems have different defaults for the group).
  556. Having the owner change is usually a good idea, because then the owner
  557. always shows who last edited the file. Also, the owners of the backups
  558. show who produced those versions. Occasionally there is a file whose
  559. owner should not change; it is a good idea for such files to contain
  560. local variable lists to set @code{backup-by-copying-when-mismatch}
  561. locally (@pxref{File Variables}).
  562. @vindex backup-by-copying
  563. @vindex backup-by-copying-when-linked
  564. @vindex backup-by-copying-when-mismatch
  565. @vindex backup-by-copying-when-privileged-mismatch
  566. @cindex file ownership, and backup
  567. @cindex backup, and user-id
  568. The choice of renaming or copying is controlled by four variables.
  569. Renaming is the default choice. If the variable
  570. @code{backup-by-copying} is non-@code{nil}, copying is used. Otherwise,
  571. if the variable @code{backup-by-copying-when-linked} is non-@code{nil},
  572. then copying is used for files that have multiple names, but renaming
  573. may still be used when the file being edited has only one name. If the
  574. variable @code{backup-by-copying-when-mismatch} is non-@code{nil}, then
  575. copying is used if renaming would cause the file's owner or group to
  576. change. @code{backup-by-copying-when-mismatch} is @code{t} by default
  577. if you start Emacs as the superuser. The fourth variable,
  578. @code{backup-by-copying-when-privileged-mismatch}, gives the highest
  579. numeric user-id for which @code{backup-by-copying-when-mismatch} will be
  580. forced on. This is useful when low-numbered user-ids are assigned to
  581. special system users, such as @code{root}, @code{bin}, @code{daemon},
  582. etc., which must maintain ownership of files.
  583. When a file is managed with a version control system (@pxref{Version
  584. Control}), Emacs does not normally make backups in the usual way for
  585. that file. But check-in and check-out are similar in some ways to
  586. making backups. One unfortunate similarity is that these operations
  587. typically break hard links, disconnecting the file name you visited from
  588. any alternate names for the same file. This has nothing to do with
  589. Emacs---the version control system does it.
  590. @node Interlocking
  591. @subsection Protection against Simultaneous Editing
  592. @cindex file dates
  593. @cindex simultaneous editing
  594. Simultaneous editing occurs when two users visit the same file, both
  595. make changes, and then both save them. If nobody were informed that
  596. this was happening, whichever user saved first would later find that his
  597. changes were lost.
  598. On some systems, Emacs notices immediately when the second user starts
  599. to change the file, and issues an immediate warning. On all systems,
  600. Emacs checks when you save the file, and warns if you are about to
  601. overwrite another user's changes. You can prevent loss of the other
  602. user's work by taking the proper corrective action instead of saving the
  603. file.
  604. @findex ask-user-about-lock
  605. @cindex locking files
  606. When you make the first modification in an Emacs buffer that is
  607. visiting a file, Emacs records that the file is @dfn{locked} by you.
  608. (It does this by creating a symbolic link in the same directory with a
  609. different name.) Emacs removes the lock when you save the changes. The
  610. idea is that the file is locked whenever an Emacs buffer visiting it has
  611. unsaved changes.
  612. @cindex collision
  613. If you begin to modify the buffer while the visited file is locked by
  614. someone else, this constitutes a @dfn{collision}. When Emacs detects a
  615. collision, it asks you what to do, by calling the Lisp function
  616. @code{ask-user-about-lock}. You can redefine this function for the sake
  617. of customization. The standard definition of this function asks you a
  618. question and accepts three possible answers:
  619. @table @kbd
  620. @item s
  621. Steal the lock. Whoever was already changing the file loses the lock,
  622. and you gain the lock.
  623. @item p
  624. Proceed. Go ahead and edit the file despite its being locked by someone else.
  625. @item q
  626. Quit. This causes an error (@code{file-locked}), and the buffer
  627. contents remain unchanged---the modification you were trying to make
  628. does not actually take place.
  629. @end table
  630. Note that locking works on the basis of a file name; if a file has
  631. multiple names, Emacs does not realize that the two names are the same file
  632. and cannot prevent two users from editing it simultaneously under different
  633. names. However, basing locking on names means that Emacs can interlock the
  634. editing of new files that will not really exist until they are saved.
  635. Some systems are not configured to allow Emacs to make locks, and
  636. there are cases where lock files cannot be written. In these cases,
  637. Emacs cannot detect trouble in advance, but it still can detect the
  638. collision when you try to save a file and overwrite someone else's
  639. changes.
  640. If Emacs or the operating system crashes, this may leave behind lock
  641. files which are stale, so you may occasionally get warnings about
  642. spurious collisions. When you determine that the collision is spurious,
  643. just use @kbd{p} to tell Emacs to go ahead anyway.
  644. Every time Emacs saves a buffer, it first checks the last-modification
  645. date of the existing file on disk to verify that it has not changed since the
  646. file was last visited or saved. If the date does not match, it implies
  647. that changes were made in the file in some other way, and these changes are
  648. about to be lost if Emacs actually does save. To prevent this, Emacs
  649. displays a warning message and asks for confirmation before saving.
  650. Occasionally you will know why the file was changed and know that it does
  651. not matter; then you can answer @kbd{yes} and proceed. Otherwise, you should
  652. cancel the save with @kbd{C-g} and investigate the situation.
  653. The first thing you should do when notified that simultaneous editing
  654. has already taken place is to list the directory with @kbd{C-u C-x C-d}
  655. (@pxref{Directories}). This shows the file's current author. You
  656. should attempt to contact him to warn him not to continue editing.
  657. Often the next step is to save the contents of your Emacs buffer under a
  658. different name, and use @code{diff} to compare the two files.@refill
  659. @node File Shadowing
  660. @subsection Shadowing Files
  661. @cindex shadow files
  662. @cindex file shadows
  663. @table @kbd
  664. @item M-x shadow-initialize
  665. Set up file shadowing.
  666. @item M-x shadow-define-literal-group
  667. Declare a single file to be shared between sites.
  668. @item M-x shadow-define-regexp-group
  669. Make all files that match each of a group of files be shared between hosts.
  670. @item M-x shadow-define-cluster @key{RET} @var{name} @key{RET}
  671. Define a shadow file cluster @var{name}.
  672. @item M-x shadow-copy-files
  673. Copy all pending shadow files.
  674. @item M-x shadow-cancel
  675. Cancel the instruction to shadow some files.
  676. @end table
  677. You can arrange to keep identical @dfn{shadow} copies of certain files
  678. in more than one place---possibly on different machines. To do this,
  679. first you must set up a @dfn{shadow file group}, which is a set of
  680. identically-named files shared between a list of sites. The file
  681. group is permanent and applies to further Emacs sessions as well as
  682. the current one. Once the group is set up, every time you exit Emacs,
  683. it will copy the file you edited to the other files in its group. You
  684. can also do the copying without exiting Emacs, by typing @kbd{M-x
  685. shadow-copy-files}.
  686. To set up a shadow file group, use @kbd{M-x
  687. shadow-define-literal-group} or @kbd{M-x shadow-define-regexp-group}.
  688. See their documentation strings for further information.
  689. Before copying a file to its shadows, Emacs asks for confirmation.
  690. You can answer ``no'' to bypass copying of this file, this time. If
  691. you want to cancel the shadowing permanently for a certain file, use
  692. @kbd{M-x shadow-cancel} to eliminate or change the shadow file group.
  693. A @dfn{shadow cluster} is a group of hosts that share directories, so
  694. that copying to or from one of them is sufficient to update the file
  695. on all of them. Each shadow cluster has a name, and specifies the
  696. network address of a primary host (the one we copy files to), and a
  697. regular expression that matches the host names of all the other hosts
  698. in the cluster. You can define a shadow cluster with @kbd{M-x
  699. shadow-define-cluster}.
  700. @node Time Stamps
  701. @subsection Updating Time Stamps Automatically
  702. @findex time-stamp
  703. @cindex time stamps
  704. @cindex modification dates
  705. @cindex locale, date format
  706. You can arrange to put a time stamp in a file, so that it will be updated
  707. automatically each time you edit and save the file. The time stamp
  708. has to be in the first eight lines of the file, and you should
  709. insert it like this:
  710. @example
  711. Time-stamp: <>
  712. @end example
  713. @noindent
  714. or like this:
  715. @example
  716. Time-stamp: ""
  717. @end example
  718. Then add the hook function @code{time-stamp} to the hook
  719. @code{write-file-hooks}; that hook function will automatically update
  720. the time stamp, inserting the current date and time when you save the
  721. file. You can also use the command @kbd{M-x time-stamp} to update the
  722. time stamp manually. For other customizations, see the Custom group
  723. @code{time-stamp}. Note that non-numeric fields in the time stamp are
  724. formatted according to your locale setting (@pxref{Environment}).
  725. @node Reverting
  726. @section Reverting a Buffer
  727. @findex revert-buffer
  728. @cindex drastic changes
  729. @cindex reread a file
  730. If you have made extensive changes to a file and then change your mind
  731. about them, you can get rid of them by reading in the previous version
  732. of the file. To do this, use @kbd{M-x revert-buffer}, which operates on
  733. the current buffer. Since reverting a buffer unintentionally could lose
  734. a lot of work, you must confirm this command with @kbd{yes}.
  735. @code{revert-buffer} keeps point at the same distance (measured in
  736. characters) from the beginning of the file. If the file was edited only
  737. slightly, you will be at approximately the same piece of text after
  738. reverting as before. If you have made drastic changes, the same value of
  739. point in the old file may address a totally different piece of text.
  740. Reverting marks the buffer as ``not modified'' until another change is
  741. made.
  742. Some kinds of buffers whose contents reflect data bases other than files,
  743. such as Dired buffers, can also be reverted. For them, reverting means
  744. recalculating their contents from the appropriate data base. Buffers
  745. created explicitly with @kbd{C-x b} cannot be reverted; @code{revert-buffer}
  746. reports an error when asked to do so.
  747. @vindex revert-without-query
  748. When you edit a file that changes automatically and frequently---for
  749. example, a log of output from a process that continues to run---it may be
  750. useful for Emacs to revert the file without querying you, whenever you
  751. visit the file again with @kbd{C-x C-f}.
  752. To request this behavior, set the variable @code{revert-without-query}
  753. to a list of regular expressions. When a file name matches one of these
  754. regular expressions, @code{find-file} and @code{revert-buffer} will
  755. revert it automatically if it has changed---provided the buffer itself
  756. is not modified. (If you have edited the text, it would be wrong to
  757. discard your changes.)
  758. @cindex Global Auto-Revert mode
  759. @cindex mode, Global Auto-Revert
  760. @cindex Auto-Revert mode
  761. @cindex mode, Auto-Revert
  762. @findex global-auto-revert-mode
  763. @findex auto-revert-mode
  764. @vindex auto-revert-interval
  765. You may find it useful to have Emacs revert files automatically when
  766. they change. Two minor modes are available to do this. In Global
  767. Auto-Revert mode, Emacs periodically checks all file buffers and
  768. reverts any when the corresponding file has changed. The local
  769. variant, Auto-Revert mode, applies only to buffers in which it was
  770. activated. Checking the files is done at intervals determined by the
  771. variable @code{auto-revert-interval}.
  772. @node Auto Save
  773. @section Auto-Saving: Protection Against Disasters
  774. @cindex Auto Save mode
  775. @cindex mode, Auto Save
  776. @cindex crashes
  777. Emacs saves all the visited files from time to time (based on counting
  778. your keystrokes) without being asked. This is called @dfn{auto-saving}.
  779. It prevents you from losing more than a limited amount of work if the
  780. system crashes.
  781. When Emacs determines that it is time for auto-saving, each buffer is
  782. considered, and is auto-saved if auto-saving is turned on for it and it
  783. has been changed since the last time it was auto-saved. The message
  784. @samp{Auto-saving...} is displayed in the echo area during auto-saving,
  785. if any files are actually auto-saved. Errors occurring during
  786. auto-saving are caught so that they do not interfere with the execution
  787. of commands you have been typing.
  788. @menu
  789. * Files: Auto Save Files. The file where auto-saved changes are
  790. actually made until you save the file.
  791. * Control: Auto Save Control. Controlling when and how often to auto-save.
  792. * Recover:: Recovering text from auto-save files.
  793. @end menu
  794. @node Auto Save Files
  795. @subsection Auto-Save Files
  796. Auto-saving does not normally save in the files that you visited, because
  797. it can be very undesirable to save a program that is in an inconsistent
  798. state when you have made half of a planned change. Instead, auto-saving
  799. is done in a different file called the @dfn{auto-save file}, and the
  800. visited file is changed only when you request saving explicitly (such as
  801. with @kbd{C-x C-s}).
  802. Normally, the auto-save file name is made by appending @samp{#} to the
  803. front and rear of the visited file name. Thus, a buffer visiting file
  804. @file{foo.c} is auto-saved in a file @file{#foo.c#}. Most buffers that
  805. are not visiting files are auto-saved only if you request it explicitly;
  806. when they are auto-saved, the auto-save file name is made by appending
  807. @samp{#%} to the front and @samp{#} to the rear of buffer name. For
  808. example, the @samp{*mail*} buffer in which you compose messages to be
  809. sent is auto-saved in a file named @file{#%*mail*#}. Auto-save file
  810. names are made this way unless you reprogram parts of Emacs to do
  811. something different (the functions @code{make-auto-save-file-name} and
  812. @code{auto-save-file-name-p}). The file name to be used for auto-saving
  813. in a buffer is calculated when auto-saving is turned on in that buffer.
  814. When you delete a substantial part of the text in a large buffer, auto
  815. save turns off temporarily in that buffer. This is because if you
  816. deleted the text unintentionally, you might find the auto-save file more
  817. useful if it contains the deleted text. To reenable auto-saving after
  818. this happens, save the buffer with @kbd{C-x C-s}, or use @kbd{C-u 1 M-x
  819. auto-save}.
  820. @vindex auto-save-visited-file-name
  821. If you want auto-saving to be done in the visited file rather than
  822. in a separate auto-save file, set the variable
  823. @code{auto-save-visited-file-name} to a non-@code{nil} value. In this
  824. mode, there is no real difference between auto-saving and explicit
  825. saving.
  826. @vindex delete-auto-save-files
  827. A buffer's auto-save file is deleted when you save the buffer in its
  828. visited file. To inhibit this, set the variable @code{delete-auto-save-files}
  829. to @code{nil}. Changing the visited file name with @kbd{C-x C-w} or
  830. @code{set-visited-file-name} renames any auto-save file to go with
  831. the new visited name.
  832. @node Auto Save Control
  833. @subsection Controlling Auto-Saving
  834. @vindex auto-save-default
  835. @findex auto-save-mode
  836. Each time you visit a file, auto-saving is turned on for that file's
  837. buffer if the variable @code{auto-save-default} is non-@code{nil} (but not
  838. in batch mode; @pxref{Entering Emacs}). The default for this variable is
  839. @code{t}, so auto-saving is the usual practice for file-visiting buffers.
  840. Auto-saving can be turned on or off for any existing buffer with the
  841. command @kbd{M-x auto-save-mode}. Like other minor mode commands, @kbd{M-x
  842. auto-save-mode} turns auto-saving on with a positive argument, off with a
  843. zero or negative argument; with no argument, it toggles.
  844. @vindex auto-save-interval
  845. Emacs does auto-saving periodically based on counting how many characters
  846. you have typed since the last time auto-saving was done. The variable
  847. @code{auto-save-interval} specifies how many characters there are between
  848. auto-saves. By default, it is 300. Emacs doesn't accept values that are
  849. too small: if you customize @code{auto-save-interval} to a value less
  850. than 20, Emacs will behave as if the value is 20.
  851. @vindex auto-save-timeout
  852. Auto-saving also takes place when you stop typing for a while. The
  853. variable @code{auto-save-timeout} says how many seconds Emacs should
  854. wait before it does an auto save (and perhaps also a garbage
  855. collection). (The actual time period is longer if the current buffer is
  856. long; this is a heuristic which aims to keep out of your way when you
  857. are editing long buffers, in which auto-save takes an appreciable amount
  858. of time.) Auto-saving during idle periods accomplishes two things:
  859. first, it makes sure all your work is saved if you go away from the
  860. terminal for a while; second, it may avoid some auto-saving while you
  861. are actually typing.
  862. Emacs also does auto-saving whenever it gets a fatal error. This
  863. includes killing the Emacs job with a shell command such as @samp{kill
  864. %emacs}, or disconnecting a phone line or network connection.
  865. @findex do-auto-save
  866. You can request an auto-save explicitly with the command @kbd{M-x
  867. do-auto-save}.
  868. @node Recover
  869. @subsection Recovering Data from Auto-Saves
  870. @findex recover-file
  871. You can use the contents of an auto-save file to recover from a loss
  872. of data with the command @kbd{M-x recover-file @key{RET} @var{file}
  873. @key{RET}}. This visits @var{file} and then (after your confirmation)
  874. restores the contents from its auto-save file @file{#@var{file}#}.
  875. You can then save with @kbd{C-x C-s} to put the recovered text into
  876. @var{file} itself. For example, to recover file @file{foo.c} from its
  877. auto-save file @file{#foo.c#}, do:@refill
  878. @example
  879. M-x recover-file @key{RET} foo.c @key{RET}
  880. yes @key{RET}
  881. C-x C-s
  882. @end example
  883. Before asking for confirmation, @kbd{M-x recover-file} displays a
  884. directory listing describing the specified file and the auto-save file,
  885. so you can compare their sizes and dates. If the auto-save file
  886. is older, @kbd{M-x recover-file} does not offer to read it.
  887. @findex recover-session
  888. If Emacs or the computer crashes, you can recover all the files you
  889. were editing from their auto save files with the command @kbd{M-x
  890. recover-session}. This first shows you a list of recorded interrupted
  891. sessions. Move point to the one you choose, and type @kbd{C-c C-c}.
  892. Then @code{recover-session} asks about each of the files that were
  893. being edited during that session, asking whether to recover that file.
  894. If you answer @kbd{y}, it calls @code{recover-file}, which works in its
  895. normal fashion. It shows the dates of the original file and its
  896. auto-save file, and asks once again whether to recover that file.
  897. When @code{recover-session} is done, the files you've chosen to
  898. recover are present in Emacs buffers. You should then save them. Only
  899. this---saving them---updates the files themselves.
  900. @vindex auto-save-list-file-prefix
  901. Emacs records interrupted sessions for later recovery in files named
  902. @file{~/.emacs.d/auto-save-list/.saves-@var{pid}-@var{hostname}}. The
  903. @samp{~/.emacs.d/auto-save-list/.saves-} portion of these names comes
  904. from the value of @code{auto-save-list-file-prefix}. You can record
  905. sessions in a different place by customizing that variable. If you
  906. set @code{auto-save-list-file-prefix} to @code{nil} in your
  907. @file{.emacs} file, sessions are not recorded for recovery.
  908. @node File Aliases
  909. @section File Name Aliases
  910. Symbolic links and hard links both make it possible for several file
  911. names to refer to the same file. Hard links are alternate names that
  912. refer directly to the file; all the names are equally valid, and no one
  913. of them is preferred. By contrast, a symbolic link is a kind of defined
  914. alias: when @file{foo} is a symbolic link to @file{bar}, you can use
  915. either name to refer to the file, but @file{bar} is the real name, while
  916. @file{foo} is just an alias. More complex cases occur when symbolic
  917. links point to directories.
  918. If you visit two names for the same file, normally Emacs makes
  919. two different buffers, but it warns you about the situation.
  920. @vindex find-file-existing-other-name
  921. @vindex find-file-suppress-same-file-warnings
  922. Normally, if you visit a file which Emacs is already visiting under
  923. a different name, Emacs displays a message in the echo area and uses
  924. the existing buffer visiting that file. This can happen on systems
  925. that support symbolic links, or if you use a long file name on a
  926. system that truncates long file names. You can suppress the message by
  927. setting the variable @code{find-file-suppress-same-file-warnings} to a
  928. non-@code{nil} value. You can disable this feature entirely by setting
  929. the variable @code{find-file-existing-other-name} to @code{nil}: then
  930. if you visit the same file under two different names, you get a separate
  931. buffer for each file name.
  932. @vindex find-file-visit-truename
  933. @cindex truenames of files
  934. @cindex file truenames
  935. If the variable @code{find-file-visit-truename} is non-@code{nil},
  936. then the file name recorded for a buffer is the file's @dfn{truename}
  937. (made by replacing all symbolic links with their target names), rather
  938. than the name you specify. Setting @code{find-file-visit-truename} also
  939. implies the effect of @code{find-file-existing-other-name}.
  940. @node Version Control
  941. @section Version Control
  942. @cindex version control
  943. @dfn{Version control systems} are packages that can record multiple
  944. versions of a source file, usually storing the unchanged parts of the
  945. file just once. Version control systems also record history information
  946. such as the creation time of each version, who created it, and a
  947. description of what was changed in that version.
  948. The Emacs version control interface is called VC. Its commands work
  949. with three version control systems---RCS, CVS, and SCCS. The GNU
  950. project recommends RCS and CVS, which are free software and available
  951. from the Free Software Foundation. We also have free software to
  952. replace SCCS, known as CSSC; if you are using SCCS and don't want to
  953. make the incompatible change to RCS or CVS, you can switch to CSSC.
  954. @menu
  955. * Introduction to VC:: How version control works in general.
  956. * VC Mode Line:: How the mode line shows version control status.
  957. * Basic VC Editing:: How to edit a file under version control.
  958. * Old Versions:: Examining and comparing old versions.
  959. * Secondary VC Commands:: The commands used a little less frequently.
  960. * Branches:: Multiple lines of development.
  961. * Remote Repositories:: Efficient access to remote CVS servers.
  962. * Snapshots:: Sets of file versions treated as a unit.
  963. * Miscellaneous VC:: Various other commands and features of VC.
  964. * Customizing VC:: Variables that change VC's behavior.
  965. @end menu
  966. @node Introduction to VC
  967. @subsection Introduction to Version Control
  968. VC allows you to use a version control system from within Emacs,
  969. integrating the version control operations smoothly with editing. VC
  970. provides a uniform interface to version control, so that regardless of
  971. which version control system is in use, you can use it the same way.
  972. This section provides a general overview of version control, and
  973. describes the version control systems that VC supports. You can skip
  974. this section if you are already familiar with the version control system
  975. you want to use.
  976. @menu
  977. * Version Systems:: Supported version control back-end systems.
  978. * VC Concepts:: Words and concepts related to version control.
  979. * Types of Log File:: The per-file VC log in contrast to the ChangeLog.
  980. @end menu
  981. @node Version Systems
  982. @subsubsection Supported Version Control Systems
  983. @cindex RCS
  984. @cindex back end (version control)
  985. VC currently works with three different version control systems or
  986. ``back ends'': RCS, CVS, and SCCS.
  987. RCS is a free version control system that is available from the Free
  988. Software Foundation. It is perhaps the most mature of the supported
  989. back ends, and the VC commands are conceptually closest to RCS. Almost
  990. everything you can do with RCS can be done through VC.
  991. @cindex CVS
  992. CVS is built on top of RCS, and extends the features of RCS, allowing
  993. for more sophisticated release management, and concurrent multi-user
  994. development. VC supports basic editing operations under CVS, but for
  995. some less common tasks you still need to call CVS from the command line.
  996. Note also that before using CVS you must set up a repository, which is a
  997. subject too complex to treat here.
  998. @cindex SCCS
  999. SCCS is a proprietary but widely used version control system. In
  1000. terms of capabilities, it is the weakest of the three that VC
  1001. supports. VC compensates for certain features missing in SCCS
  1002. (snapshots, for example) by implementing them itself, but some other VC
  1003. features, such as multiple branches, are not available with SCCS. You
  1004. should use SCCS only if for some reason you cannot use RCS.
  1005. @node VC Concepts
  1006. @subsubsection Concepts of Version Control
  1007. @cindex master file
  1008. @cindex registered file
  1009. When a file is under version control, we also say that it is
  1010. @dfn{registered} in the version control system. Each registered file
  1011. has a corresponding @dfn{master file} which represents the file's
  1012. present state plus its change history---enough to reconstruct the
  1013. current version or any earlier version. Usually the master file also
  1014. records a @dfn{log entry} for each version, describing in words what was
  1015. changed in that version.
  1016. @cindex work file
  1017. @cindex checking out files
  1018. The file that is maintained under version control is sometimes called
  1019. the @dfn{work file} corresponding to its master file. You edit the work
  1020. file and make changes in it, as you would with an ordinary file. (With
  1021. SCCS and RCS, you must @dfn{lock} the file before you start to edit it.)
  1022. After you are done with a set of changes, you @dfn{check the file in},
  1023. which records the changes in the master file, along with a log entry for
  1024. them.
  1025. With CVS, there are usually multiple work files corresponding to a
  1026. single master file---often each user has his own copy. It is also
  1027. possible to use RCS in this way, but this is not the usual way to use
  1028. RCS.
  1029. @cindex locking and version control
  1030. A version control system typically has some mechanism to coordinate
  1031. between users who want to change the same file. One method is
  1032. @dfn{locking} (analogous to the locking that Emacs uses to detect
  1033. simultaneous editing of a file, but distinct from it). The other method
  1034. is to merge your changes with other people's changes when you check them
  1035. in.
  1036. With version control locking, work files are normally read-only so
  1037. that you cannot change them. You ask the version control system to make
  1038. a work file writable for you by locking it; only one user can do
  1039. this at any given time. When you check in your changes, that unlocks
  1040. the file, making the work file read-only again. This allows other users
  1041. to lock the file to make further changes. SCCS always uses locking, and
  1042. RCS normally does.
  1043. The other alternative for RCS is to let each user modify the work file
  1044. at any time. In this mode, locking is not required, but it is
  1045. permitted; check-in is still the way to record a new version.
  1046. CVS normally allows each user to modify his own copy of the work file
  1047. at any time, but requires merging with changes from other users at
  1048. check-in time. However, CVS can also be set up to require locking.
  1049. (@pxref{CVS Options}).
  1050. @node Types of Log File
  1051. @subsubsection Types of Log File
  1052. @cindex types of log file
  1053. @cindex log File, types of
  1054. @cindex version control log
  1055. GNU projects under a revision control system generally possess
  1056. @emph{two} types of log for changes. One is the per-file log
  1057. maintained by the revision control system: each time you check in a
  1058. change, you must fill out a @dfn{log entry} for the change (@pxref{Log
  1059. Buffer}). This kind of log is called the @dfn{version control log},
  1060. also the @dfn{revision control log}, @dfn{RCS log}, or @dfn{CVS log}.
  1061. The other kind of log is the change log file, typically a file called
  1062. @file{ChangeLog}. It provides a chronological record of all changes
  1063. to a large portion of a program---one directory and its
  1064. subdirectories. A small program would use one @file{ChangeLog} file;
  1065. a large program may well merit a @file{ChangeLog} file in each major
  1066. directory. @xref{Change Log}.
  1067. When you use version control, you can use just the per-file log if you
  1068. wish, or you can use both kinds of logs. When you use both, you
  1069. typically want to write just one entry for each change. You can write
  1070. the entry in @file{ChangeLog}, then copy it to the log buffer when you
  1071. check in the change. Or you can write the entry in the log buffer
  1072. while checking in the change, and later use the @kbd{C-x v a} command
  1073. to copy it to @file{ChangeLog} (@pxref{Change Logs and VC}).
  1074. @node VC Mode Line
  1075. @subsection Version Control and the Mode Line
  1076. When you visit a file that is under version control, Emacs indicates
  1077. this on the mode line. For example, @samp{RCS-1.3} says that RCS is
  1078. used for that file, and the current version is 1.3.
  1079. The character between the back-end name and the version number
  1080. indicates the version control status of the file. @samp{-} means that
  1081. the work file is not locked (if locking is in use), or not modified (if
  1082. locking is not in use). @samp{:} indicates that the file is locked, or
  1083. that it is modified. If the file is locked by some other user (for
  1084. instance, @samp{jim}), that is displayed as @samp{RCS:jim:1.3}.
  1085. @node Basic VC Editing
  1086. @subsection Basic Editing under Version Control
  1087. The principal VC command is an all-purpose command that performs
  1088. either locking or check-in, depending on the situation.
  1089. @table @kbd
  1090. @item C-x C-q
  1091. @itemx C-x v v
  1092. Perform the next logical version control operation on this file.
  1093. @end table
  1094. @findex vc-next-action
  1095. @findex vc-toggle-read-only
  1096. @kindex C-x v v
  1097. @kindex C-x C-q @r{(Version Control)}
  1098. Strictly speaking, the command for this job is @code{vc-next-action},
  1099. bound to @kbd{C-x v v}. However, the normal meaning of @kbd{C-x C-q} is
  1100. to make a read-only buffer writable, or vice versa; we have extended it
  1101. to do the same job properly for files managed by version control, by
  1102. performing the appropriate version control operations. When you type
  1103. @kbd{C-x C-q} on a registered file, it acts like @kbd{C-x v v}.
  1104. The precise action of this command depends on the state of the file,
  1105. and whether the version control system uses locking or not. SCCS and
  1106. RCS normally use locking; CVS normally does not use locking.
  1107. @menu
  1108. * VC with Locking:: RCS in its default mode, SCCS, and optionally CVS.
  1109. * Without Locking:: Without locking: default mode for CVS.
  1110. * Advanced C-x C-q:: Advanced features available with a prefix argument.
  1111. * Log Buffer:: Features available in log entry buffers.
  1112. @end menu
  1113. @node VC with Locking
  1114. @subsubsection Basic Version Control with Locking
  1115. If locking is used for the file (as with SCCS, and RCS in its default
  1116. mode), @kbd{C-x C-q} can either lock a file or check it in:
  1117. @itemize @bullet
  1118. @item
  1119. If the file is not locked, @kbd{C-x C-q} locks it, and
  1120. makes it writable so that you can change it.
  1121. @item
  1122. If the file is locked by you, and contains changes, @kbd{C-x C-q} checks
  1123. in the changes. In order to do this, it first reads the log entry
  1124. for the new version. @xref{Log Buffer}.
  1125. @item
  1126. If the file is locked by you, but you have not changed it since you
  1127. locked it, @kbd{C-x C-q} releases the lock and makes the file read-only
  1128. again.
  1129. @item
  1130. If the file is locked by some other user, @kbd{C-x C-q} asks you whether
  1131. you want to ``steal the lock'' from that user. If you say yes, the file
  1132. becomes locked by you, but a message is sent to the person who had
  1133. formerly locked the file, to inform him of what has happened.
  1134. @end itemize
  1135. These rules also apply when you use CVS in locking mode, except
  1136. that there is no such thing as stealing a lock.
  1137. @node Without Locking
  1138. @subsubsection Basic Version Control without Locking
  1139. When there is no locking---the default for CVS---work files are always
  1140. writable; you do not need to do anything before you begin to edit a
  1141. file. The status indicator on the mode line is @samp{-} if the file is
  1142. unmodified; it flips to @samp{:} as soon as you save any changes in the
  1143. work file.
  1144. Here is what @kbd{C-x C-q} does when using CVS:
  1145. @itemize @bullet
  1146. @item
  1147. If some other user has checked in changes into the master file, Emacs
  1148. asks you whether you want to merge those changes into your own work
  1149. file. You must do this before you can check in your own changes. (To
  1150. pick up any recent changes from the master file @emph{without} trying
  1151. to commit your own changes, type @kbd{C-x v m @key{RET}}.)
  1152. @xref{Merging}.
  1153. @item
  1154. If there are no new changes in the master file, but you have made
  1155. modifications in your work file, @kbd{C-x C-q} checks in your changes.
  1156. In order to do this, it first reads the log entry for the new version.
  1157. @xref{Log Buffer}.
  1158. @item
  1159. If the file is not modified, the @kbd{C-x C-q} does nothing.
  1160. @end itemize
  1161. These rules also apply when you use RCS in the mode that does not
  1162. require locking, except that automatic merging of changes from the
  1163. master file is not implemented. Unfortunately, this means that nothing
  1164. informs you if another user has checked in changes in the same file
  1165. since you began editing it, and when this happens, his changes will be
  1166. effectively removed when you check in your version (though they will
  1167. remain in the master file, so they will not be entirely lost). You must
  1168. therefore verify the current version is unchanged, before you check in your
  1169. changes. We hope to eliminate this risk and provide automatic merging
  1170. with RCS in a future Emacs version.
  1171. In addition, locking is possible with RCS even in this mode, although
  1172. it is not required; @kbd{C-x C-q} with an unmodified file locks the
  1173. file, just as it does with RCS in its normal (locking) mode.
  1174. @node Advanced C-x C-q
  1175. @subsubsection Advanced Control in @kbd{C-x C-q}
  1176. When you give a prefix argument to @code{vc-next-action} (@kbd{C-u
  1177. C-x C-q}), it still performs the next logical version control
  1178. operation, but accepts additional arguments to specify precisely how
  1179. to do the operation.
  1180. @itemize @bullet
  1181. @item
  1182. If the file is modified (or locked), you can specify the version
  1183. number to use for the new version that you check in. This is one way
  1184. to create a new branch (@pxref{Branches}).
  1185. @item
  1186. If the file is not modified (and unlocked), you can specify the
  1187. version to select; this lets you start working from an older version,
  1188. or on another branch. If you do not enter any version, that takes you
  1189. to the highest version on the current branch; therefore @kbd{C-u C-x
  1190. C-q @key{RET}} is a convenient way to get the latest version of a file from
  1191. the repository.
  1192. @item
  1193. Instead of the version number, you can also specify the name of a
  1194. version control system. This is useful when one file is being managed
  1195. with two version control systems at the same time (@pxref{Local
  1196. Version Control}).
  1197. @end itemize
  1198. @node Log Buffer
  1199. @subsubsection Features of the Log Entry Buffer
  1200. When you check in changes, @kbd{C-x C-q} first reads a log entry. It
  1201. pops up a buffer called @samp{*VC-Log*} for you to enter the log entry.
  1202. When you are finished, type @kbd{C-c C-c} in the @samp{*VC-Log*} buffer.
  1203. That is when check-in really happens.
  1204. To abort check-in, just @strong{don't} type @kbd{C-c C-c} in that
  1205. buffer. You can switch buffers and do other editing. As long as you
  1206. don't try to check in another file, the entry you were editing remains
  1207. in the @samp{*VC-Log*} buffer, and you can go back to that buffer at any
  1208. time to complete the check-in.
  1209. If you change several source files for the same reason, it is often
  1210. convenient to specify the same log entry for many of the files. To do
  1211. this, use the history of previous log entries. The commands @kbd{M-n},
  1212. @kbd{M-p}, @kbd{M-s} and @kbd{M-r} for doing this work just like the
  1213. minibuffer history commands (except that these versions are used outside
  1214. the minibuffer).
  1215. @vindex vc-log-mode-hook
  1216. Each time you check in a file, the log entry buffer is put into VC Log
  1217. mode, which involves running two hooks: @code{text-mode-hook} and
  1218. @code{vc-log-mode-hook}. @xref{Hooks}.
  1219. @node Old Versions
  1220. @subsection Examining And Comparing Old Versions
  1221. One of the convenient features of version control is the ability
  1222. to examine any version of a file, or compare two versions.
  1223. @table @kbd
  1224. @item C-x v ~ @var{version} @key{RET}
  1225. Examine version @var{version} of the visited file, in a buffer of its
  1226. own.
  1227. @item C-x v =
  1228. Compare the current buffer contents with the latest checked-in version
  1229. of the file.
  1230. @item C-u C-x v = @var{file} @key{RET} @var{oldvers} @key{RET} @var{newvers} @key{RET}
  1231. Compare the specified two versions of @var{file}.
  1232. @item C-x v g
  1233. Display the result of the CVS annotate command using colors.
  1234. @end table
  1235. @findex vc-version-other-window
  1236. @kindex C-x v ~
  1237. To examine an old version in its entirety, visit the file and then type
  1238. @kbd{C-x v ~ @var{version} @key{RET}} (@code{vc-version-other-window}).
  1239. This puts the text of version @var{version} in a file named
  1240. @file{@var{filename}.~@var{version}~}, and visits it in its own buffer
  1241. in a separate window. (In RCS, you can also select an old version
  1242. and create a branch from it. @xref{Branches}.)
  1243. @findex vc-diff
  1244. @kindex C-x v =
  1245. It is usually more convenient to compare two versions of the file,
  1246. with the command @kbd{C-x v =} (@code{vc-diff}). Plain @kbd{C-x v =}
  1247. compares the current buffer contents (saving them in the file if
  1248. necessary) with the last checked-in version of the file. @kbd{C-u C-x
  1249. v =}, with a numeric argument, reads a file name and two version
  1250. numbers, then compares those versions of the specified file. Both
  1251. forms display the output in a special buffer in another window.
  1252. You can specify a checked-in version by its number; an empty input
  1253. specifies the current contents of the work file (which may be different
  1254. from all the checked-in versions). You can also specify a snapshot name
  1255. (@pxref{Snapshots}) instead of one or both version numbers.
  1256. If you supply a directory name instead of the name of a registered
  1257. file, this command compares the two specified versions of all registered
  1258. files in that directory and its subdirectories.
  1259. @vindex vc-diff-switches
  1260. @vindex vc-rcs-diff-switches
  1261. @kbd{C-x v =} works by running a variant of the @code{diff} utility
  1262. designed to work with the version control system in use. When you
  1263. invoke @code{diff} this way, in addition to the options specified by
  1264. @code{diff-switches} (@pxref{Comparing Files}), it receives those
  1265. specified by @code{vc-diff-switches}, plus those specified for the
  1266. specific back end by @code{vc-@var{backend}-diff-switches}. For
  1267. instance, when the version control back end is RCS, @code{diff} uses
  1268. the options in @code{vc-rcs-diff-switches}. The
  1269. @samp{vc@dots{}diff-switches} variables are @code{nil} by default.
  1270. Unlike the @kbd{M-x diff} command, @kbd{C-x v =} does not try to
  1271. locate the changes in the old and new versions. This is because
  1272. normally one or both versions do not exist as files when you compare
  1273. them; they exist only in the records of the master file.
  1274. @xref{Comparing Files}, for more information about @kbd{M-x diff}.
  1275. @findex vc-annotate
  1276. @kindex C-x v g
  1277. For CVS-controlled files, you can display the result of the CVS
  1278. annotate command, using colors to enhance the visual appearance. Use
  1279. the command @kbd{M-x vc-annotate} to do this. It creates a new buffer
  1280. to display file's text, colored to show how old each part is. Text
  1281. colored red is new, blue means old, and intermediate colors indicate
  1282. intermediate ages. By default, the time scale is 360 days, so that
  1283. everything more than one year old is shown in blue.
  1284. When you give a prefix argument to this command, it uses the
  1285. minibuffer to read two arguments: which version number to display and
  1286. annotate (instead of the current file contents), and a stretch factor
  1287. for the time scale. A stretch factor of 0.1 means that the color
  1288. range from red to blue spans the past 36 days instead of 360 days. A
  1289. stretch factor greater than 1 means the color range spans more than a
  1290. year.
  1291. @node Secondary VC Commands
  1292. @subsection The Secondary Commands of VC
  1293. This section explains the secondary commands of VC; those that you might
  1294. use once a day.
  1295. @menu
  1296. * Registering:: Putting a file under version control.
  1297. * VC Status:: Viewing the VC status of files.
  1298. * VC Undo:: Cancelling changes before or after check-in.
  1299. * VC Dired Mode:: Listing files managed by version control.
  1300. * VC Dired Commands:: Commands to use in a VC Dired buffer.
  1301. @end menu
  1302. @node Registering
  1303. @subsubsection Registering a File for Version Control
  1304. @kindex C-x v i
  1305. @findex vc-register
  1306. You can put any file under version control by simply visiting it, and
  1307. then typing @w{@kbd{C-x v i}} (@code{vc-register}).
  1308. @table @kbd
  1309. @item C-x v i
  1310. Register the visited file for version control.
  1311. @end table
  1312. To register the file, Emacs must choose which version control system
  1313. to use for it. If the file's directory already contains files
  1314. registered in a version control system, Emacs uses that system. If
  1315. there is more than one system in use for a directory, Emacs uses the one
  1316. that appears first in @code{vc-handled-backends} (@pxref{Customizing VC}).
  1317. On the other hand, if there are no files already registered,
  1318. Emacs uses the first system from @code{vc-handled-backends} that could
  1319. register the file---for example, you cannot register a file under CVS if
  1320. its directory is not already part of a CVS tree.
  1321. With the default value of @code{vc-handled-backends}, this means
  1322. that Emacs uses RCS if there are any files under RCS control, CVS if
  1323. there are any files under CVS, SCCS if any files are under SCCS, or
  1324. RCS as the ultimate default.
  1325. If locking is in use, @kbd{C-x v i} leaves the file unlocked and
  1326. read-only. Type @kbd{C-x C-q} if you wish to start editing it. After
  1327. registering a file with CVS, you must subsequently commit the initial
  1328. version by typing @kbd{C-x C-q}.
  1329. @vindex vc-default-init-version
  1330. The initial version number for a newly registered file is 1.1, by
  1331. default. You can specify a different default by setting the variable
  1332. @code{vc-default-init-version}, or you can give @kbd{C-x v i} a numeric
  1333. argument; then it reads the initial version number for this particular
  1334. file using the minibuffer.
  1335. @vindex vc-initial-comment
  1336. If @code{vc-initial-comment} is non-@code{nil}, @kbd{C-x v i} reads an
  1337. initial comment to describe the purpose of this source file. Reading
  1338. the initial comment works like reading a log entry (@pxref{Log Buffer}).
  1339. @node VC Status
  1340. @subsubsection VC Status Commands
  1341. @table @kbd
  1342. @item C-x v l
  1343. Display version control state and change history.
  1344. @end table
  1345. @kindex C-x v l
  1346. @findex vc-print-log
  1347. To view the detailed version control status and history of a file,
  1348. type @kbd{C-x v l} (@code{vc-print-log}). It displays the history of
  1349. changes to the current file, including the text of the log entries. The
  1350. output appears in a separate window.
  1351. @node VC Undo
  1352. @subsubsection Undoing Version Control Actions
  1353. @table @kbd
  1354. @item C-x v u
  1355. Revert the buffer and the file to the last checked-in version.
  1356. @item C-x v c
  1357. Remove the last-entered change from the master for the visited file.
  1358. This undoes your last check-in.
  1359. @end table
  1360. @kindex C-x v u
  1361. @findex vc-revert-buffer
  1362. If you want to discard your current set of changes and revert to the
  1363. last version checked in, use @kbd{C-x v u} (@code{vc-revert-buffer}).
  1364. This leaves the file unlocked; if locking is in use, you must first lock
  1365. the file again before you change it again. @kbd{C-x v u} requires
  1366. confirmation, unless it sees that you haven't made any changes since the
  1367. last checked-in version.
  1368. @kbd{C-x v u} is also the command to unlock a file if you lock it and
  1369. then decide not to change it.
  1370. @kindex C-x v c
  1371. @findex vc-cancel-version
  1372. To cancel a change that you already checked in, use @kbd{C-x v c}
  1373. (@code{vc-cancel-version}). This command discards all record of the
  1374. most recent checked-in version. @kbd{C-x v c} also offers to revert
  1375. your work file and buffer to the previous version (the one that precedes
  1376. the version that is deleted).
  1377. If you answer @kbd{no}, VC keeps your changes in the buffer, and locks
  1378. the file. The no-revert option is useful when you have checked in a
  1379. change and then discover a trivial error in it; you can cancel the
  1380. erroneous check-in, fix the error, and check the file in again.
  1381. When @kbd{C-x v c} does not revert the buffer, it unexpands all
  1382. version control headers in the buffer instead (@pxref{Version Headers}).
  1383. This is because the buffer no longer corresponds to any existing
  1384. version. If you check it in again, the check-in process will expand the
  1385. headers properly for the new version number.
  1386. However, it is impossible to unexpand the RCS @samp{@w{$}Log$} header
  1387. automatically. If you use that header feature, you have to unexpand it
  1388. by hand---by deleting the entry for the version that you just canceled.
  1389. Be careful when invoking @kbd{C-x v c}, as it is easy to lose a lot of
  1390. work with it. To help you be careful, this command always requires
  1391. confirmation with @kbd{yes}. Note also that this command is disabled
  1392. under CVS, because canceling versions is very dangerous and discouraged
  1393. with CVS.
  1394. @node VC Dired Mode
  1395. @subsubsection Dired under VC
  1396. @cindex PCL-CVS
  1397. @pindex cvs
  1398. @cindex CVS Dired Mode
  1399. The VC Dired Mode described here works with all the version control
  1400. systems that VC supports. Another more powerful facility, designed
  1401. specifically for CVS, is called PCL-CVS. @xref{Top, , About PCL-CVS,
  1402. pcl-cvs, PCL-CVS --- The Emacs Front-End to CVS}.
  1403. @kindex C-x v d
  1404. @findex vc-directory
  1405. When you are working on a large program, it is often useful to find
  1406. out which files have changed within an entire directory tree, or to view
  1407. the status of all files under version control at once, and to perform
  1408. version control operations on collections of files. You can use the
  1409. command @kbd{C-x v d} (@code{vc-directory}) to make a directory listing
  1410. that includes only files relevant for version control.
  1411. @vindex vc-dired-terse-display
  1412. @kbd{C-x v d} creates a buffer which uses VC Dired Mode. This looks
  1413. much like an ordinary Dired buffer (@pxref{Dired}); however, normally it
  1414. shows only the noteworthy files (those locked or not up-to-date). This
  1415. is called @dfn{terse display}. If you set the variable
  1416. @code{vc-dired-terse-display} to @code{nil}, then VC Dired shows all
  1417. relevant files---those managed under version control, plus all
  1418. subdirectories (@dfn{full display}). The command @kbd{v t} in a VC
  1419. Dired buffer toggles between terse display and full display (@pxref{VC
  1420. Dired Commands}).
  1421. @vindex vc-dired-recurse
  1422. By default, VC Dired produces a recursive listing of noteworthy or
  1423. relevant files at or below the given directory. You can change this by
  1424. setting the variable @code{vc-dired-recurse} to @code{nil}; then VC
  1425. Dired shows only the files in the given directory.
  1426. The line for an individual file shows the version control state in the
  1427. place of the hard link count, owner, group, and size of the file. If
  1428. the file is unmodified, in sync with the master file, the version
  1429. control state shown is blank. Otherwise it consists of text in
  1430. parentheses. Under RCS and SCCS, the name of the user locking the file
  1431. is shown; under CVS, an abbreviated version of the @samp{cvs status}
  1432. output is used. Here is an example using RCS:
  1433. @smallexample
  1434. @group
  1435. /home/jim/project:
  1436. -rw-r--r-- (jim) Apr 2 23:39 file1
  1437. -r--r--r-- Apr 5 20:21 file2
  1438. @end group
  1439. @end smallexample
  1440. @noindent
  1441. The files @samp{file1} and @samp{file2} are under version control,
  1442. @samp{file1} is locked by user jim, and @samp{file2} is unlocked.
  1443. Here is an example using CVS:
  1444. @smallexample
  1445. @group
  1446. /home/joe/develop:
  1447. -rw-r--r-- (modified) Aug 2 1997 file1.c
  1448. -rw-r--r-- Apr 4 20:09 file2.c
  1449. -rw-r--r-- (merge) Sep 13 1996 file3.c
  1450. @end group
  1451. @end smallexample
  1452. Here @samp{file1.c} is modified with respect to the repository, and
  1453. @samp{file2.c} is not. @samp{file3.c} is modified, but other changes
  1454. have also been checked in to the repository---you need to merge them
  1455. with the work file before you can check it in.
  1456. @vindex vc-directory-exclusion-list
  1457. When VC Dired displays subdirectories (in the ``full'' display mode),
  1458. it omits some that should never contain any files under version control.
  1459. By default, this includes Version Control subdirectories such as
  1460. @samp{RCS} and @samp{CVS}; you can customize this by setting the
  1461. variable @code{vc-directory-exclusion-list}.
  1462. You can fine-tune VC Dired's format by typing @kbd{C-u C-x v d}---as in
  1463. ordinary Dired, that allows you to specify additional switches for the
  1464. @samp{ls} command.
  1465. @node VC Dired Commands
  1466. @subsubsection VC Dired Commands
  1467. All the usual Dired commands work normally in VC Dired mode, except
  1468. for @kbd{v}, which is redefined as the version control prefix. You can
  1469. invoke VC commands such as @code{vc-diff} and @code{vc-print-log} by
  1470. typing @kbd{v =}, or @kbd{v l}, and so on. Most of these commands apply
  1471. to the file name on the current line.
  1472. The command @kbd{v v} (@code{vc-next-action}) operates on all the
  1473. marked files, so that you can lock or check in several files at once.
  1474. If it operates on more than one file, it handles each file according to
  1475. its current state; thus, it might lock one file, but check in another
  1476. file. This could be confusing; it is up to you to avoid confusing
  1477. behavior by marking a set of files that are in a similar state.
  1478. If any files call for check-in, @kbd{v v} reads a single log entry,
  1479. then uses it for all the files being checked in. This is convenient for
  1480. registering or checking in several files at once, as part of the same
  1481. change.
  1482. @findex vc-dired-toggle-terse-mode
  1483. @findex vc-dired-mark-locked
  1484. You can toggle between terse display (only locked files, or files not
  1485. up-to-date) and full display at any time by typing @kbd{v t}
  1486. (@code{vc-dired-toggle-terse-mode}). There is also a special command
  1487. @kbd{* l} (@code{vc-dired-mark-locked}), which marks all files currently
  1488. locked (or, with CVS, all files not up-to-date). Thus, typing @kbd{* l
  1489. t k} is another way to delete from the buffer all files except those
  1490. currently locked.
  1491. @node Branches
  1492. @subsection Multiple Branches of a File
  1493. @cindex branch (version control)
  1494. @cindex trunk (version control)
  1495. One use of version control is to maintain multiple ``current''
  1496. versions of a file. For example, you might have different versions of a
  1497. program in which you are gradually adding various unfinished new
  1498. features. Each such independent line of development is called a
  1499. @dfn{branch}. VC allows you to create branches, switch between
  1500. different branches, and merge changes from one branch to another.
  1501. Please note, however, that branches are only supported for RCS at the
  1502. moment.
  1503. A file's main line of development is usually called the @dfn{trunk}.
  1504. The versions on the trunk are normally numbered 1.1, 1.2, 1.3, etc. At
  1505. any such version, you can start an independent branch. A branch
  1506. starting at version 1.2 would have version number 1.2.1.1, and consecutive
  1507. versions on this branch would have numbers 1.2.1.2, 1.2.1.3, 1.2.1.4,
  1508. and so on. If there is a second branch also starting at version 1.2, it
  1509. would consist of versions 1.2.2.1, 1.2.2.2, 1.2.2.3, etc.
  1510. @cindex head version
  1511. If you omit the final component of a version number, that is called a
  1512. @dfn{branch number}. It refers to the highest existing version on that
  1513. branch---the @dfn{head version} of that branch. The branches in the
  1514. example above have branch numbers 1.2.1 and 1.2.2.
  1515. @menu
  1516. * Switching Branches:: How to get to another existing branch.
  1517. * Creating Branches:: How to start a new branch.
  1518. * Merging:: Transferring changes between branches.
  1519. * Multi-User Branching:: Multiple users working at multiple branches
  1520. in parallel.
  1521. @end menu
  1522. @node Switching Branches
  1523. @subsubsection Switching between Branches
  1524. To switch between branches, type @kbd{C-u C-x C-q} and specify the
  1525. version number you want to select. This version is then visited
  1526. @emph{unlocked} (write-protected), so you can examine it before locking
  1527. it. Switching branches in this way is allowed only when the file is not
  1528. locked.
  1529. You can omit the minor version number, thus giving only the branch
  1530. number; this takes you to the head version on the chosen branch. If you
  1531. only type @key{RET}, Emacs goes to the highest version on the trunk.
  1532. After you have switched to any branch (including the main branch), you
  1533. stay on it for subsequent VC commands, until you explicitly select some
  1534. other branch.
  1535. @node Creating Branches
  1536. @subsubsection Creating New Branches
  1537. To create a new branch from a head version (one that is the latest in
  1538. the branch that contains it), first select that version if necessary,
  1539. lock it with @kbd{C-x C-q}, and make whatever changes you want. Then,
  1540. when you check in the changes, use @kbd{C-u C-x C-q}. This lets you
  1541. specify the version number for the new version. You should specify a
  1542. suitable branch number for a branch starting at the current version.
  1543. For example, if the current version is 2.5, the branch number should be
  1544. 2.5.1, 2.5.2, and so on, depending on the number of existing branches at
  1545. that point.
  1546. To create a new branch at an older version (one that is no longer the
  1547. head of a branch), first select that version (@pxref{Switching
  1548. Branches}), then lock it with @kbd{C-x C-q}. You'll be asked to
  1549. confirm, when you lock the old version, that you really mean to create a
  1550. new branch---if you say no, you'll be offered a chance to lock the
  1551. latest version instead.
  1552. Then make your changes and type @kbd{C-x C-q} again to check in a new
  1553. version. This automatically creates a new branch starting from the
  1554. selected version. You need not specially request a new branch, because
  1555. that's the only way to add a new version at a point that is not the head
  1556. of a branch.
  1557. After the branch is created, you ``stay'' on it. That means that
  1558. subsequent check-ins create new versions on that branch. To leave the
  1559. branch, you must explicitly select a different version with @kbd{C-u C-x
  1560. C-q}. To transfer changes from one branch to another, use the merge
  1561. command, described in the next section.
  1562. @node Merging
  1563. @subsubsection Merging Branches
  1564. @cindex merging changes
  1565. When you have finished the changes on a certain branch, you will
  1566. often want to incorporate them into the file's main line of development
  1567. (the trunk). This is not a trivial operation, because development might
  1568. also have proceeded on the trunk, so that you must @dfn{merge} the
  1569. changes into a file that has already been changed otherwise. VC allows
  1570. you to do this (and other things) with the @code{vc-merge} command.
  1571. @table @kbd
  1572. @item C-x v m (vc-merge)
  1573. Merge changes into the work file.
  1574. @end table
  1575. @kindex C-x v m
  1576. @findex vc-merge
  1577. @kbd{C-x v m} (@code{vc-merge}) takes a set of changes and merges it
  1578. into the current version of the work file. It firsts asks you in the
  1579. minibuffer where the changes should come from. If you just type
  1580. @key{RET}, Emacs merges any changes that were made on the same branch
  1581. since you checked the file out (we call this @dfn{merging the news}).
  1582. This is the common way to pick up recent changes from the repository,
  1583. regardless of whether you have already changed the file yourself.
  1584. You can also enter a branch number or a pair of version numbers in
  1585. the minibuffer. Then @kbd{C-x v m} finds the changes from that
  1586. branch, or the differences between the two versions you specified, and
  1587. merges them into the current version of the current file.
  1588. As an example, suppose that you have finished a certain feature on
  1589. branch 1.3.1. In the meantime, development on the trunk has proceeded
  1590. to version 1.5. To merge the changes from the branch to the trunk,
  1591. first go to the head version of the trunk, by typing @kbd{C-u C-x C-q
  1592. @key{RET}}. Version 1.5 is now current. If locking is used for the file,
  1593. type @kbd{C-x C-q} to lock version 1.5 so that you can change it. Next,
  1594. type @kbd{C-x v m 1.3.1 @key{RET}}. This takes the entire set of changes on
  1595. branch 1.3.1 (relative to version 1.3, where the branch started, up to
  1596. the last version on the branch) and merges it into the current version
  1597. of the work file. You can now check in the changed file, thus creating
  1598. version 1.6 containing the changes from the branch.
  1599. It is possible to do further editing after merging the branch, before
  1600. the next check-in. But it is usually wiser to check in the merged
  1601. version, then lock it and make the further changes. This will keep
  1602. a better record of the history of changes.
  1603. @cindex conflicts
  1604. @cindex resolving conflicts
  1605. When you merge changes into a file that has itself been modified, the
  1606. changes might overlap. We call this situation a @dfn{conflict}, and
  1607. reconciling the conflicting changes is called @dfn{resolving a
  1608. conflict}.
  1609. Whenever conflicts occur during merging, VC detects them, tells you
  1610. about them in the echo area, and asks whether you want help in merging.
  1611. If you say yes, it starts an Ediff session (@pxref{Top,
  1612. Ediff, Ediff, ediff, The Ediff Manual}).
  1613. If you say no, the conflicting changes are both inserted into the
  1614. file, surrounded by @dfn{conflict markers}. The example below shows how
  1615. a conflict region looks; the file is called @samp{name} and the current
  1616. master file version with user B's changes in it is 1.11.
  1617. @c @w here is so CVS won't think this is a conflict.
  1618. @smallexample
  1619. @group
  1620. @w{<}<<<<<< name
  1621. @var{User A's version}
  1622. =======
  1623. @var{User B's version}
  1624. @w{>}>>>>>> 1.11
  1625. @end group
  1626. @end smallexample
  1627. @cindex vc-resolve-conflicts
  1628. Then you can resolve the conflicts by editing the file manually. Or
  1629. you can type @code{M-x vc-resolve-conflicts} after visiting the file.
  1630. This starts an Ediff session, as described above. Don't forget to
  1631. check in the merged version afterwards.
  1632. @node Multi-User Branching
  1633. @subsubsection Multi-User Branching
  1634. It is often useful for multiple developers to work simultaneously on
  1635. different branches of a file. CVS allows this by default; for RCS, it
  1636. is possible if you create multiple source directories. Each source
  1637. directory should have a link named @file{RCS} which points to a common
  1638. directory of RCS master files. Then each source directory can have its
  1639. own choice of selected versions, but all share the same common RCS
  1640. records.
  1641. This technique works reliably and automatically, provided that the
  1642. source files contain RCS version headers (@pxref{Version Headers}). The
  1643. headers enable Emacs to be sure, at all times, which version number is
  1644. present in the work file.
  1645. If the files do not have version headers, you must instead tell Emacs
  1646. explicitly in each session which branch you are working on. To do this,
  1647. first find the file, then type @kbd{C-u C-x C-q} and specify the correct
  1648. branch number. This ensures that Emacs knows which branch it is using
  1649. during this particular editing session.
  1650. @node Remote Repositories
  1651. @subsection Remote Repositories
  1652. @cindex remote repositories (CVS)
  1653. A common way of using CVS is to set up a central CVS repository on
  1654. some Internet host, then have each developer check out a personal
  1655. working copy of the files on his local machine. Committing changes to
  1656. the repository, and picking up changes from other users into one's own
  1657. working area, then works by direct interactions with the CVS server.
  1658. One difficulty is that access to the CVS server is often slow, and
  1659. that developers might need to work off-line as well. VC is designed
  1660. to reduce the amount of network interaction necessary.
  1661. @menu
  1662. * Version Backups:: Keeping local copies of repository versions.
  1663. * Local Version Control:: Using another version system for local editing.
  1664. @end menu
  1665. @node Version Backups
  1666. @subsubsection Version Backups
  1667. @cindex version backups
  1668. @cindex automatic version backups
  1669. When VC sees that the CVS repository for a file is on a remote
  1670. machine, it automatically makes local backups of unmodified versions
  1671. of the file---@dfn{automatic version backups}. This means that you
  1672. can compare the file to the repository version (@kbd{C-x v =}), or
  1673. revert to that version (@kbd{C-x v u}), without any network
  1674. interactions.
  1675. The local copy of the unmodified file is called a @dfn{version
  1676. backup} to indicate that it corresponds exactly to a version that is
  1677. stored in the repository. Note that version backups are not the same
  1678. as ordinary Emacs backup files (@pxref{Backup}). But they follow a
  1679. similar naming convention.
  1680. For a file that comes from a remote CVS repository, VC makes a
  1681. version backup whenever you save the first changes to the file, and
  1682. removes it after you have committed your modified version to the
  1683. repository. You can disable the making of automatic version backups by
  1684. setting @code{vc-cvs-stay-local} to @code{nil} (@pxref{CVS Options}).
  1685. @cindex manual version backups
  1686. The name of the automatic version backup for version @var{version}
  1687. of file @var{file} is @code{@var{file}.~@var{version}.~}. This is
  1688. almost the same as the name used by @kbd{C-x v ~} (@pxref{Old
  1689. Versions}), the only difference being the additional dot (@samp{.})
  1690. after the version number. This similarity is intentional, because
  1691. both kinds of files store the same kind of information. The file made
  1692. by @kbd{C-x v ~} acts as a @dfn{manual version backup}.
  1693. All the VC commands that operate on old versions of a file can use
  1694. both kinds of version backups. For instance, @kbd{C-x v ~} uses
  1695. either an automatic or a manual version backup, if possible, to get
  1696. the contents of the version you request. Likewise, @kbd{C-x v =} and
  1697. @kbd{C-x v u} use either an automatic or a manual version backup, if
  1698. one of them exists, to get the contents of a version to compare or
  1699. revert to. If you changed a file outside of Emacs, so that no
  1700. automatic version backup was created for the previous text, you can
  1701. create a manual backup of that version using @kbd{C-x v ~}, and thus
  1702. obtain the benefit of the local copy for Emacs commands.
  1703. The only difference in Emacs's handling of manual and automatic
  1704. version backups, once they exist, is that Emacs deletes automatic
  1705. version backups when you commit to the repository. By contrast,
  1706. manual version backups remain until you delete them.
  1707. @node Local Version Control
  1708. @subsubsection Local Version Control
  1709. @cindex local version control
  1710. @cindex local back end (version control)
  1711. When you make many changes to a file that comes from a remote
  1712. repository, it can be convenient to have version control on your local
  1713. machine as well. You can then record intermediate versions, revert to
  1714. a previous state, etc., before you actually commit your changes to the
  1715. remote server.
  1716. VC lets you do this by putting a file under a second, local version
  1717. control system, so that the file is effectively registered in two
  1718. systems at the same time. For the description here, we will assume
  1719. that the remote system is CVS, and you use RCS locally, although the
  1720. mechanism works with any combination of version control systems
  1721. (@dfn{back ends}).
  1722. To make it work with other back ends, you must make sure that the
  1723. ``more local'' back end comes before the ``more remote'' back end in
  1724. the setting of @code{vc-handled-backends} (@pxref{Customizing VC}). By
  1725. default, this variable is set up so that you can use remote CVS and
  1726. local RCS as described here.
  1727. To start using local RCS for a file that comes from a remote CVS
  1728. server, you must @emph{register the file in RCS}, by typing @kbd{C-u
  1729. C-x v v rcs @key{RET}}. (In other words, use @code{vc-next-action} with a
  1730. prefix argument, and specify RCS as the back end.)
  1731. You can do this at any time; it does not matter whether you have
  1732. already modified the file with respect to the version in the CVS
  1733. repository. If possible, VC tries to make the RCS master start with
  1734. the unmodified repository version, then checks in any local changes
  1735. as a new version. This works if you have not made any changes yet, or
  1736. if the unmodified repository version exists locally as a version
  1737. backup (@pxref{Version Backups}). If the unmodified version is not
  1738. available locally, the RCS master starts with the modified version;
  1739. the only drawback to this is that you cannot compare your changes
  1740. locally to what is stored in the repository.
  1741. The version number of the RCS master is derived from the current CVS
  1742. version, starting a branch from it. For example, if the current CVS
  1743. version is 1.23, the local RCS branch will be 1.23.1. Version 1.23 in
  1744. the RCS master will be identical to version 1.23 under CVS; your first
  1745. changes are checked in as 1.23.1.1. (If the unmodified file is not
  1746. available locally, VC will check in the modified file twice, both as
  1747. 1.23 and 1.23.1.1, to make the revision numbers consistent.)
  1748. If you do not use locking under CVS (the default), locking is also
  1749. disabled for RCS, so that editing under RCS works exactly as under
  1750. CVS.
  1751. When you are done with local editing, you can commit the final version
  1752. back to the CVS repository by typing @kbd{C-u C-x v v cvs @key{RET}}.
  1753. This initializes the log entry buffer (@pxref{Log Buffer}) to contain
  1754. all the log entries you have recorded in the RCS master; you can edit
  1755. them as you wish, and then commit in CVS by typing @kbd{C-c C-c}. If
  1756. the commit is successful, VC removes the RCS master, so that the file
  1757. is once again registered under CVS only. (The RCS master is not
  1758. actually deleted, just renamed by appending @samp{~} to the name, so
  1759. that you can refer to it later if you wish.)
  1760. While using local RCS, you can pick up recent changes from the CVS
  1761. repository into your local file, or commit some of your changes back
  1762. to CVS, without terminating local RCS version control. To do this,
  1763. switch to the CVS back end temporarily, with the @kbd{C-x v b} command:
  1764. @table @kbd
  1765. @item C-x v b
  1766. Switch to another back end that the current file is registered
  1767. under (@code{vc-switch-backend}).
  1768. @item C-u C-x v b @var{backend} @key{RET}
  1769. Switch to @var{backend} for the current file.
  1770. @end table
  1771. @kindex C-x v b
  1772. @findex vc-switch-backend
  1773. @kbd{C-x v b} does not change the buffer contents, or any files; it
  1774. only changes VC's perspective on how to handle the file. Any
  1775. subsequent VC commands for that file will operate on the back end that
  1776. is currently selected.
  1777. If the current file is registered in more than one back end, typing
  1778. @kbd{C-x v b} ``cycles'' through all of these back ends. With a
  1779. prefix argument, it asks for the back end to use in the minibuffer.
  1780. Thus, if you are using local RCS, and you want to pick up some recent
  1781. changes in the file from remote CVS, first visit the file, then type
  1782. @kbd{C-x v b} to switch to CVS, and finally use @kbd{C-x v m
  1783. @key{RET}} to merge the news (@pxref{Merging}). You can then switch
  1784. back to RCS by typing @kbd{C-x v b} again, and continue to edit
  1785. locally.
  1786. But if you do this, the revision numbers in the RCS master no longer
  1787. correspond to those of CVS. Technically, this is not a problem, but
  1788. it can become difficult to keep track of what is in the CVS repository
  1789. and what is not. So we suggest that you return from time to time to
  1790. CVS-only operation, using @kbd{C-u C-x v v cvs @key{RET}}.
  1791. @node Snapshots
  1792. @subsection Snapshots
  1793. @cindex snapshots and version control
  1794. A @dfn{snapshot} is a named set of file versions (one for each
  1795. registered file) that you can treat as a unit. One important kind of
  1796. snapshot is a @dfn{release}, a (theoretically) stable version of the
  1797. system that is ready for distribution to users.
  1798. @menu
  1799. * Making Snapshots:: The snapshot facilities.
  1800. * Snapshot Caveats:: Things to be careful of when using snapshots.
  1801. @end menu
  1802. @node Making Snapshots
  1803. @subsubsection Making and Using Snapshots
  1804. There are two basic commands for snapshots; one makes a
  1805. snapshot with a given name, the other retrieves a named snapshot.
  1806. @table @code
  1807. @kindex C-x v s
  1808. @findex vc-create-snapshot
  1809. @item C-x v s @var{name} @key{RET}
  1810. Define the last saved versions of every registered file in or under the
  1811. current directory as a snapshot named @var{name}
  1812. (@code{vc-create-snapshot}).
  1813. @kindex C-x v r
  1814. @findex vc-retrieve-snapshot
  1815. @item C-x v r @var{name} @key{RET}
  1816. For all registered files at or below the current directory level, select
  1817. whatever versions correspond to the snapshot @var{name}
  1818. (@code{vc-retrieve-snapshot}).
  1819. This command reports an error if any files are locked at or below the
  1820. current directory, without changing anything; this is to avoid
  1821. overwriting work in progress.
  1822. @end table
  1823. A snapshot uses a very small amount of resources---just enough to record
  1824. the list of file names and which version belongs to the snapshot. Thus,
  1825. you need not hesitate to create snapshots whenever they are useful.
  1826. You can give a snapshot name as an argument to @kbd{C-x v =} or
  1827. @kbd{C-x v ~} (@pxref{Old Versions}). Thus, you can use it to compare a
  1828. snapshot against the current files, or two snapshots against each other,
  1829. or a snapshot against a named version.
  1830. @node Snapshot Caveats
  1831. @subsubsection Snapshot Caveats
  1832. @cindex named configurations (RCS)
  1833. VC's snapshot facilities are modeled on RCS's named-configuration
  1834. support. They use RCS's native facilities for this, so under VC
  1835. snapshots made using RCS are visible even when you bypass VC.
  1836. @c worded verbosely to avoid overfull hbox.
  1837. For SCCS, VC implements snapshots itself. The files it uses contain
  1838. name/file/version-number triples. These snapshots are visible only
  1839. through VC.
  1840. A snapshot is a set of checked-in versions. So make sure that all the
  1841. files are checked in and not locked when you make a snapshot.
  1842. File renaming and deletion can create some difficulties with snapshots.
  1843. This is not a VC-specific problem, but a general design issue in version
  1844. control systems that no one has solved very well yet.
  1845. If you rename a registered file, you need to rename its master along
  1846. with it (the command @code{vc-rename-file} does this automatically). If
  1847. you are using SCCS, you must also update the records of the snapshot, to
  1848. mention the file by its new name (@code{vc-rename-file} does this,
  1849. too). An old snapshot that refers to a master file that no longer
  1850. exists under the recorded name is invalid; VC can no longer retrieve
  1851. it. It would be beyond the scope of this manual to explain enough about
  1852. RCS and SCCS to explain how to update the snapshots by hand.
  1853. Using @code{vc-rename-file} makes the snapshot remain valid for
  1854. retrieval, but it does not solve all problems. For example, some of the
  1855. files in your program probably refer to others by name. At the very
  1856. least, the makefile probably mentions the file that you renamed. If you
  1857. retrieve an old snapshot, the renamed file is retrieved under its new
  1858. name, which is not the name that the makefile expects. So the program
  1859. won't really work as retrieved.
  1860. @node Miscellaneous VC
  1861. @subsection Miscellaneous Commands and Features of VC
  1862. This section explains the less-frequently-used features of VC.
  1863. @menu
  1864. * Change Logs and VC:: Generating a change log file from log entries.
  1865. * Renaming and VC:: A command to rename both the source and master
  1866. file correctly.
  1867. * Version Headers:: Inserting version control headers into working files.
  1868. @end menu
  1869. @node Change Logs and VC
  1870. @subsubsection Change Logs and VC
  1871. If you use RCS or CVS for a program and also maintain a change log
  1872. file for it (@pxref{Change Log}), you can generate change log entries
  1873. automatically from the version control log entries:
  1874. @table @kbd
  1875. @item C-x v a
  1876. @kindex C-x v a
  1877. @findex vc-update-change-log
  1878. Visit the current directory's change log file and, for registered files
  1879. in that directory, create new entries for versions checked in since the
  1880. most recent entry in the change log file.
  1881. (@code{vc-update-change-log}).
  1882. This command works with RCS or CVS only, not with SCCS.
  1883. @item C-u C-x v a
  1884. As above, but only find entries for the current buffer's file.
  1885. @item M-1 C-x v a
  1886. As above, but find entries for all the currently visited files that are
  1887. maintained with version control. This works only with RCS, and it puts
  1888. all entries in the log for the default directory, which may not be
  1889. appropriate.
  1890. @end table
  1891. For example, suppose the first line of @file{ChangeLog} is dated
  1892. 1999-04-10, and that the only check-in since then was by Nathaniel
  1893. Bowditch to @file{rcs2log} on 1999-05-22 with log text @samp{Ignore log
  1894. messages that start with `#'.}. Then @kbd{C-x v a} visits
  1895. @file{ChangeLog} and inserts text like this:
  1896. @iftex
  1897. @medbreak
  1898. @end iftex
  1899. @smallexample
  1900. @group
  1901. 1999-05-22 Nathaniel Bowditch <nat@@apn.org>
  1902. * rcs2log: Ignore log messages that start with `#'.
  1903. @end group
  1904. @end smallexample
  1905. @iftex
  1906. @medbreak
  1907. @end iftex
  1908. @noindent
  1909. You can then edit the new change log entry further as you wish.
  1910. Some of the new change log entries may duplicate what's already in
  1911. ChangeLog. You will have to remove these duplicates by hand.
  1912. Normally, the log entry for file @file{foo} is displayed as @samp{*
  1913. foo: @var{text of log entry}}. The @samp{:} after @file{foo} is omitted
  1914. if the text of the log entry starts with @w{@samp{(@var{functionname}):
  1915. }}. For example, if the log entry for @file{vc.el} is
  1916. @samp{(vc-do-command): Check call-process status.}, then the text in
  1917. @file{ChangeLog} looks like this:
  1918. @iftex
  1919. @medbreak
  1920. @end iftex
  1921. @smallexample
  1922. @group
  1923. 1999-05-06 Nathaniel Bowditch <nat@@apn.org>
  1924. * vc.el (vc-do-command): Check call-process status.
  1925. @end group
  1926. @end smallexample
  1927. @iftex
  1928. @medbreak
  1929. @end iftex
  1930. When @kbd{C-x v a} adds several change log entries at once, it groups
  1931. related log entries together if they all are checked in by the same
  1932. author at nearly the same time. If the log entries for several such
  1933. files all have the same text, it coalesces them into a single entry.
  1934. For example, suppose the most recent check-ins have the following log
  1935. entries:
  1936. @flushleft
  1937. @bullet{} For @file{vc.texinfo}: @samp{Fix expansion typos.}
  1938. @bullet{} For @file{vc.el}: @samp{Don't call expand-file-name.}
  1939. @bullet{} For @file{vc-hooks.el}: @samp{Don't call expand-file-name.}
  1940. @end flushleft
  1941. @noindent
  1942. They appear like this in @file{ChangeLog}:
  1943. @iftex
  1944. @medbreak
  1945. @end iftex
  1946. @smallexample
  1947. @group
  1948. 1999-04-01 Nathaniel Bowditch <nat@@apn.org>
  1949. * vc.texinfo: Fix expansion typos.
  1950. * vc.el, vc-hooks.el: Don't call expand-file-name.
  1951. @end group
  1952. @end smallexample
  1953. @iftex
  1954. @medbreak
  1955. @end iftex
  1956. Normally, @kbd{C-x v a} separates log entries by a blank line, but you
  1957. can mark several related log entries to be clumped together (without an
  1958. intervening blank line) by starting the text of each related log entry
  1959. with a label of the form @w{@samp{@{@var{clumpname}@} }}. The label
  1960. itself is not copied to @file{ChangeLog}. For example, suppose the log
  1961. entries are:
  1962. @flushleft
  1963. @bullet{} For @file{vc.texinfo}: @samp{@{expand@} Fix expansion typos.}
  1964. @bullet{} For @file{vc.el}: @samp{@{expand@} Don't call expand-file-name.}
  1965. @bullet{} For @file{vc-hooks.el}: @samp{@{expand@} Don't call expand-file-name.}
  1966. @end flushleft
  1967. @noindent
  1968. Then the text in @file{ChangeLog} looks like this:
  1969. @iftex
  1970. @medbreak
  1971. @end iftex
  1972. @smallexample
  1973. @group
  1974. 1999-04-01 Nathaniel Bowditch <nat@@apn.org>
  1975. * vc.texinfo: Fix expansion typos.
  1976. * vc.el, vc-hooks.el: Don't call expand-file-name.
  1977. @end group
  1978. @end smallexample
  1979. @iftex
  1980. @medbreak
  1981. @end iftex
  1982. A log entry whose text begins with @samp{#} is not copied to
  1983. @file{ChangeLog}. For example, if you merely fix some misspellings in
  1984. comments, you can log the change with an entry beginning with @samp{#}
  1985. to avoid putting such trivia into @file{ChangeLog}.
  1986. @node Renaming and VC
  1987. @subsubsection Renaming VC Work Files and Master Files
  1988. @findex vc-rename-file
  1989. When you rename a registered file, you must also rename its master
  1990. file correspondingly to get proper results. Use @code{vc-rename-file}
  1991. to rename the source file as you specify, and rename its master file
  1992. accordingly. It also updates any snapshots (@pxref{Snapshots}) that
  1993. mention the file, so that they use the new name; despite this, the
  1994. snapshot thus modified may not completely work (@pxref{Snapshot
  1995. Caveats}).
  1996. You cannot use @code{vc-rename-file} on a file that is locked by
  1997. someone else.
  1998. @node Version Headers
  1999. @subsubsection Inserting Version Control Headers
  2000. Sometimes it is convenient to put version identification strings
  2001. directly into working files. Certain special strings called
  2002. @dfn{version headers} are replaced in each successive version by the
  2003. number of that version.
  2004. If you are using RCS, and version headers are present in your working
  2005. files, Emacs can use them to determine the current version and the
  2006. locking state of the files. This is more reliable than referring to the
  2007. master files, which is done when there are no version headers. Note
  2008. that in a multi-branch environment, version headers are necessary to
  2009. make VC behave correctly (@pxref{Multi-User Branching}).
  2010. Searching for version headers is controlled by the variable
  2011. @code{vc-consult-headers}. If it is non-@code{nil} (the default),
  2012. Emacs searches for headers to determine the version number you are
  2013. editing. Setting it to @code{nil} disables this feature.
  2014. @kindex C-x v h
  2015. @findex vc-insert-headers
  2016. You can use the @kbd{C-x v h} command (@code{vc-insert-headers}) to
  2017. insert a suitable header string.
  2018. @table @kbd
  2019. @item C-x v h
  2020. Insert headers in a file for use with your version-control system.
  2021. @end table
  2022. @vindex vc-header-alist
  2023. The default header string is @samp{@w{$}Id$} for RCS and
  2024. @samp{@w{%}W%} for SCCS. You can specify other headers to insert by
  2025. setting the variable @code{vc-header-alist}. Its value is a list of
  2026. elements of the form @code{(@var{program} . @var{string})} where
  2027. @var{program} is @code{RCS} or @code{SCCS} and @var{string} is the
  2028. string to use.
  2029. Instead of a single string, you can specify a list of strings; then
  2030. each string in the list is inserted as a separate header on a line of
  2031. its own.
  2032. It is often necessary to use ``superfluous'' backslashes when
  2033. writing the strings that you put in this variable. For instance, you
  2034. might write @code{"$Id\$"} rather than @code{"$Id@w{$}"}. The extra
  2035. backslash prevents the string constant from being interpreted as a
  2036. header, if the Emacs Lisp file containing it is maintained with
  2037. version control.
  2038. @vindex vc-comment-alist
  2039. Each header is inserted surrounded by tabs, inside comment delimiters,
  2040. on a new line at point. Normally the ordinary comment
  2041. start and comment end strings of the current mode are used, but for
  2042. certain modes, there are special comment delimiters for this purpose;
  2043. the variable @code{vc-comment-alist} specifies them. Each element of
  2044. this list has the form @code{(@var{mode} @var{starter} @var{ender})}.
  2045. @vindex vc-static-header-alist
  2046. The variable @code{vc-static-header-alist} specifies further strings
  2047. to add based on the name of the buffer. Its value should be a list of
  2048. elements of the form @code{(@var{regexp} . @var{format})}. Whenever
  2049. @var{regexp} matches the buffer name, @var{format} is inserted as part
  2050. of the header. A header line is inserted for each element that matches
  2051. the buffer name, and for each string specified by
  2052. @code{vc-header-alist}. The header line is made by processing the
  2053. string from @code{vc-header-alist} with the format taken from the
  2054. element. The default value for @code{vc-static-header-alist} is as follows:
  2055. @example
  2056. @group
  2057. (("\\.c$" .
  2058. "\n#ifndef lint\nstatic char vcid[] = \"\%s\";\n\
  2059. #endif /* lint */\n"))
  2060. @end group
  2061. @end example
  2062. @noindent
  2063. It specifies insertion of text of this form:
  2064. @example
  2065. @group
  2066. #ifndef lint
  2067. static char vcid[] = "@var{string}";
  2068. #endif /* lint */
  2069. @end group
  2070. @end example
  2071. @noindent
  2072. Note that the text above starts with a blank line.
  2073. If you use more than one version header in a file, put them close
  2074. together in the file. The mechanism in @code{revert-buffer} that
  2075. preserves markers may not handle markers positioned between two version
  2076. headers.
  2077. @node Customizing VC
  2078. @subsection Customizing VC
  2079. @vindex vc-handled-backends
  2080. The variable @code{vc-handled-backends} determines which version
  2081. control systems VC should handle. The default value is @code{(RCS CVS
  2082. SCCS)}, so it contains all three version systems that are currently
  2083. supported. If you want VC to ignore one or more of these systems,
  2084. exclude its name from the list.
  2085. The order of systems in the list is significant: when you visit a file
  2086. registered in more than one system (@pxref{Local Version Control}),
  2087. VC uses the system that comes first in @code{vc-handled-backends} by
  2088. default. The order is also significant when you register a file for
  2089. the first time, @pxref{Registering} for details.
  2090. @menu
  2091. * General VC Options:: Options that apply to multiple back ends.
  2092. * RCS and SCCS:: Options for RCS and SCCS.
  2093. * CVS Options:: Options for CVS.
  2094. @end menu
  2095. @node General VC Options
  2096. @subsubsection General Options
  2097. @vindex vc-make-backup-files
  2098. Emacs normally does not save backup files for source files that are
  2099. maintained with version control. If you want to make backup files even
  2100. for files that use version control, set the variable
  2101. @code{vc-make-backup-files} to a non-@code{nil} value.
  2102. @vindex vc-keep-workfiles
  2103. Normally the work file exists all the time, whether it is locked or
  2104. not. If you set @code{vc-keep-workfiles} to @code{nil}, then checking
  2105. in a new version with @kbd{C-x C-q} deletes the work file; but any
  2106. attempt to visit the file with Emacs creates it again. (With CVS, work
  2107. files are always kept.)
  2108. @vindex vc-follow-symlinks
  2109. Editing a version-controlled file through a symbolic link can be
  2110. dangerous. It bypasses the version control system---you can edit the
  2111. file without locking it, and fail to check your changes in. Also,
  2112. your changes might overwrite those of another user. To protect against
  2113. this, VC checks each symbolic link that you visit, to see if it points
  2114. to a file under version control.
  2115. The variable @code{vc-follow-symlinks} controls what to do when a
  2116. symbolic link points to a version-controlled file. If it is @code{nil},
  2117. VC only displays a warning message. If it is @code{t}, VC automatically
  2118. follows the link, and visits the real file instead, telling you about
  2119. this in the echo area. If the value is @code{ask} (the default), VC
  2120. asks you each time whether to follow the link.
  2121. @vindex vc-suppress-confirm
  2122. If @code{vc-suppress-confirm} is non-@code{nil}, then @kbd{C-x C-q}
  2123. and @kbd{C-x v i} can save the current buffer without asking, and
  2124. @kbd{C-x v u} also operates without asking for confirmation. (This
  2125. variable does not affect @kbd{C-x v c}; that operation is so drastic
  2126. that it should always ask for confirmation.)
  2127. @vindex vc-command-messages
  2128. VC mode does much of its work by running the shell commands for RCS,
  2129. CVS and SCCS. If @code{vc-command-messages} is non-@code{nil}, VC
  2130. displays messages to indicate which shell commands it runs, and
  2131. additional messages when the commands finish.
  2132. @vindex vc-path
  2133. You can specify additional directories to search for version control
  2134. programs by setting the variable @code{vc-path}. These directories
  2135. are searched before the usual search path. It is rarely necessary to
  2136. set this variable, because VC normally finds the proper files
  2137. automatically.
  2138. @node RCS and SCCS
  2139. @subsubsection Options for RCS and SCCS
  2140. @cindex non-strict locking (RCS)
  2141. @cindex locking, non-strict (RCS)
  2142. By default, RCS uses locking to coordinate the activities of several
  2143. users, but there is a mode called @dfn{non-strict locking} in which
  2144. you can check-in changes without locking the file first. Use
  2145. @samp{rcs -U} to switch to non-strict locking for a particular file,
  2146. see the @code{rcs} manual page for details.
  2147. When deducing the version control state of an RCS file, VC first
  2148. looks for an RCS version header string in the file (@pxref{Version
  2149. Headers}). If there is no header string, VC normally looks at the
  2150. file permissions of the work file; this is fast. But there might be
  2151. situations when the file permissions cannot be trusted. In this case
  2152. the master file has to be consulted, which is rather expensive. Also
  2153. the master file can only tell you @emph{if} there's any lock on the
  2154. file, but not whether your work file really contains that locked
  2155. version.
  2156. @vindex vc-consult-headers
  2157. You can tell VC not to use version headers to determine the file
  2158. status by setting @code{vc-consult-headers} to @code{nil}. VC then
  2159. always uses the file permissions (if it is supposed to trust them), or
  2160. else checks the master file.
  2161. @vindex vc-mistrust-permissions
  2162. You can specify the criterion for whether to trust the file
  2163. permissions by setting the variable @code{vc-mistrust-permissions}.
  2164. Its value can be @code{t} (always mistrust the file permissions and
  2165. check the master file), @code{nil} (always trust the file
  2166. permissions), or a function of one argument which makes the decision.
  2167. The argument is the directory name of the @file{RCS} subdirectory. A
  2168. non-@code{nil} value from the function says to mistrust the file
  2169. permissions. If you find that the file permissions of work files are
  2170. changed erroneously, set @code{vc-mistrust-permissions} to @code{t}.
  2171. Then VC always checks the master file to determine the file's status.
  2172. VC determines the version control state of files under SCCS much as
  2173. with RCS. It does not consider SCCS version headers, though. Thus,
  2174. the variable @code{vc-mistrust-permissions} affects SCCS use, but
  2175. @code{vc-consult-headers} does not.
  2176. @node CVS Options
  2177. @subsubsection Options specific for CVS
  2178. @cindex locking (CVS)
  2179. By default, CVS does not use locking to coordinate the activities of
  2180. several users; anyone can change a work file at any time. However,
  2181. there are ways to restrict this, resulting in behavior that resembles
  2182. locking.
  2183. @cindex CVSREAD environment variable (CVS)
  2184. For one thing, you can set the @env{CVSREAD} environment variable
  2185. (the value you use makes no difference). If this variable is defined,
  2186. CVS makes your work files read-only by default. In Emacs, you must
  2187. type @kbd{C-x C-q} to make the file writable, so that editing works
  2188. in fact similar as if locking was used. Note however, that no actual
  2189. locking is performed, so several users can make their files writable
  2190. at the same time. When setting @env{CVSREAD} for the first time, make
  2191. sure to check out all your modules anew, so that the file protections
  2192. are set correctly.
  2193. @cindex cvs watch feature
  2194. @cindex watching files (CVS)
  2195. Another way to achieve something similar to locking is to use the
  2196. @dfn{watch} feature of CVS. If a file is being watched, CVS makes it
  2197. read-only by default, and you must also use @kbd{C-x C-q} in Emacs to
  2198. make it writable. VC calls @code{cvs edit} to make the file writable,
  2199. and CVS takes care to notify other developers of the fact that you
  2200. intend to change the file. See the CVS documentation for details on
  2201. using the watch feature.
  2202. @vindex vc-cvs-stay-local
  2203. @cindex remote repositories (CVS)
  2204. When a file's repository is on a remote machine, VC tries to keep
  2205. network interactions to a minimum. This is controlled by the variable
  2206. @code{vc-cvs-stay-local}. If it is @code{t} (the default), then VC uses
  2207. only the entry in the local CVS subdirectory to determine the file's
  2208. state (and possibly information returned by previous CVS commands). One
  2209. consequence of this is that when you have modified a file, and somebody
  2210. else has already checked in other changes to the file, you are not
  2211. notified of it until you actually try to commit. (But you can try to
  2212. pick up any recent changes from the repository first, using @kbd{C-x v m
  2213. @key{RET}}, @pxref{Merging}).
  2214. When @code{vc-cvs-stay-local} is @code{t}, VC also makes local
  2215. version backups, so that simple diff and revert operations are
  2216. completely local (@pxref{Version Backups}).
  2217. On the other hand, if you set @code{vc-cvs-stay-local} to @code{nil},
  2218. then VC queries the remote repository @emph{before} it decides what to
  2219. do in @code{vc-next-action} (@kbd{C-x v v}), just as it does for local
  2220. repositories. It also does not make any version backups.
  2221. You can also set @code{vc-cvs-stay-local} to a regular expression
  2222. that is matched against the repository host name; VC then stays local
  2223. only for repositories from hosts that match the pattern.
  2224. @node Directories
  2225. @section File Directories
  2226. @cindex file directory
  2227. @cindex directory listing
  2228. The file system groups files into @dfn{directories}. A @dfn{directory
  2229. listing} is a list of all the files in a directory. Emacs provides
  2230. commands to create and delete directories, and to make directory
  2231. listings in brief format (file names only) and verbose format (sizes,
  2232. dates, and authors included). There is also a directory browser called
  2233. Dired; see @ref{Dired}.
  2234. @table @kbd
  2235. @item C-x C-d @var{dir-or-pattern} @key{RET}
  2236. Display a brief directory listing (@code{list-directory}).
  2237. @item C-u C-x C-d @var{dir-or-pattern} @key{RET}
  2238. Display a verbose directory listing.
  2239. @item M-x make-directory @key{RET} @var{dirname} @key{RET}
  2240. Create a new directory named @var{dirname}.
  2241. @item M-x delete-directory @key{RET} @var{dirname} @key{RET}
  2242. Delete the directory named @var{dirname}. It must be empty,
  2243. or you get an error.
  2244. @end table
  2245. @findex list-directory
  2246. @kindex C-x C-d
  2247. The command to display a directory listing is @kbd{C-x C-d}
  2248. (@code{list-directory}). It reads using the minibuffer a file name
  2249. which is either a directory to be listed or a wildcard-containing
  2250. pattern for the files to be listed. For example,
  2251. @example
  2252. C-x C-d /u2/emacs/etc @key{RET}
  2253. @end example
  2254. @noindent
  2255. lists all the files in directory @file{/u2/emacs/etc}. Here is an
  2256. example of specifying a file name pattern:
  2257. @example
  2258. C-x C-d /u2/emacs/src/*.c @key{RET}
  2259. @end example
  2260. Normally, @kbd{C-x C-d} displays a brief directory listing containing
  2261. just file names. A numeric argument (regardless of value) tells it to
  2262. make a verbose listing including sizes, dates, and owners (like
  2263. @samp{ls -l}).
  2264. @vindex list-directory-brief-switches
  2265. @vindex list-directory-verbose-switches
  2266. The text of a directory listing is obtained by running @code{ls} in an
  2267. inferior process. Two Emacs variables control the switches passed to
  2268. @code{ls}: @code{list-directory-brief-switches} is a string giving the
  2269. switches to use in brief listings (@code{"-CF"} by default), and
  2270. @code{list-directory-verbose-switches} is a string giving the switches to
  2271. use in a verbose listing (@code{"-l"} by default).
  2272. @node Comparing Files
  2273. @section Comparing Files
  2274. @cindex comparing files
  2275. @findex diff
  2276. @vindex diff-switches
  2277. The command @kbd{M-x diff} compares two files, displaying the
  2278. differences in an Emacs buffer named @samp{*diff*}. It works by
  2279. running the @code{diff} program, using options taken from the variable
  2280. @code{diff-switches}. The value of @code{diff-switches} should be a
  2281. string; the default is @code{"-c"} to specify a context diff.
  2282. The buffer @samp{*diff*} has Compilation mode as its major mode, so
  2283. you can use @kbd{C-x `} to visit successive changed locations in the two
  2284. source files. You can also move to a particular hunk of changes and
  2285. type @key{RET} or @kbd{C-c C-c}, or click @kbd{Mouse-2} on it, to move
  2286. to the corresponding source location. You can also use the other
  2287. special commands of Compilation mode: @key{SPC} and @key{DEL} for
  2288. scrolling, and @kbd{M-p} and @kbd{M-n} for cursor motion.
  2289. @xref{Compilation}.
  2290. @findex diff-backup
  2291. The command @kbd{M-x diff-backup} compares a specified file with its most
  2292. recent backup. If you specify the name of a backup file,
  2293. @code{diff-backup} compares it with the source file that it is a backup
  2294. of.
  2295. @findex compare-windows
  2296. The command @kbd{M-x compare-windows} compares the text in the current
  2297. window with that in the next window. Comparison starts at point in each
  2298. window, and each starting position is pushed on the mark ring in its
  2299. respective buffer. Then point moves forward in each window, a character
  2300. at a time, until a mismatch between the two windows is reached. Then
  2301. the command is finished. For more information about windows in Emacs,
  2302. @ref{Windows}.
  2303. @vindex compare-ignore-case
  2304. With a numeric argument, @code{compare-windows} ignores changes in
  2305. whitespace. If the variable @code{compare-ignore-case} is
  2306. non-@code{nil}, it ignores differences in case as well.
  2307. @findex diff-mode
  2308. @cindex diffs
  2309. @cindex patches
  2310. @cindex Diff mode
  2311. Differences between versions of files are often distributed as
  2312. @dfn{patches}, which are the output from @command{diff} or a version
  2313. control system that uses @command{diff}. @kbd{M-x diff-mode} turns on
  2314. Diff mode, a major mode for viewing and editing patches, either as
  2315. ``unified diffs'' or ``context diffs.''
  2316. @cindex Smerge mode
  2317. @findex smerge-mode
  2318. @cindex failed merges
  2319. @cindex merges, failed
  2320. @cindex comparing 3 files (@code{diff3})
  2321. You can use @kbd{M-x smerge-mode} to turn on Smerge mode, a minor
  2322. mode for editing output from the @command{diff3} program. This is
  2323. typically the result of a failed merge from a version control system
  2324. ``update'' outside VC, due to conflicting changes to a file. Smerge
  2325. mode provides commands to resolve conflicts by selecting specific
  2326. changes.
  2327. See also @ref{Emerge}, and @ref{Top,,, ediff, The Ediff Manual}, for
  2328. convenient facilities for merging two similar files.
  2329. @node Misc File Ops
  2330. @section Miscellaneous File Operations
  2331. Emacs has commands for performing many other operations on files.
  2332. All operate on one file; they do not accept wildcard file names.
  2333. @findex view-file
  2334. @cindex viewing
  2335. @cindex View mode
  2336. @cindex mode, View
  2337. @kbd{M-x view-file} allows you to scan or read a file by sequential
  2338. screenfuls. It reads a file name argument using the minibuffer. After
  2339. reading the file into an Emacs buffer, @code{view-file} displays the
  2340. beginning. You can then type @key{SPC} to scroll forward one windowful,
  2341. or @key{DEL} to scroll backward. Various other commands are provided
  2342. for moving around in the file, but none for changing it; type @kbd{?}
  2343. while viewing for a list of them. They are mostly the same as normal
  2344. Emacs cursor motion commands. To exit from viewing, type @kbd{q}.
  2345. The commands for viewing are defined by a special major mode called View
  2346. mode.
  2347. A related command, @kbd{M-x view-buffer}, views a buffer already present
  2348. in Emacs. @xref{Misc Buffer}.
  2349. @kindex C-x i
  2350. @findex insert-file
  2351. @kbd{M-x insert-file} (also @kbd{C-x i}) inserts a copy of the
  2352. contents of the specified file into the current buffer at point,
  2353. leaving point unchanged before the contents and the mark after them.
  2354. @findex write-region
  2355. @kbd{M-x write-region} is the inverse of @kbd{M-x insert-file}; it
  2356. copies the contents of the region into the specified file. @kbd{M-x
  2357. append-to-file} adds the text of the region to the end of the specified
  2358. file. @xref{Accumulating Text}.
  2359. @findex delete-file
  2360. @cindex deletion (of files)
  2361. @kbd{M-x delete-file} deletes the specified file, like the @code{rm}
  2362. command in the shell. If you are deleting many files in one directory, it
  2363. may be more convenient to use Dired (@pxref{Dired}).
  2364. @findex rename-file
  2365. @kbd{M-x rename-file} reads two file names @var{old} and @var{new} using
  2366. the minibuffer, then renames file @var{old} as @var{new}. If the file name
  2367. @var{new} already exists, you must confirm with @kbd{yes} or renaming is not
  2368. done; this is because renaming causes the old meaning of the name @var{new}
  2369. to be lost. If @var{old} and @var{new} are on different file systems, the
  2370. file @var{old} is copied and deleted.
  2371. @findex add-name-to-file
  2372. @cindex hard links (creation)
  2373. The similar command @kbd{M-x add-name-to-file} is used to add an
  2374. additional name to an existing file without removing its old name.
  2375. The new name is created as a ``hard link'' to the existing file.
  2376. The new name must belong on the same file system that the file is on.
  2377. On Windows, this command works only if the file resides in an NTFS
  2378. file system. On MS-DOS, it works by copying the file.
  2379. @findex copy-file
  2380. @cindex copying files
  2381. @kbd{M-x copy-file} reads the file @var{old} and writes a new file named
  2382. @var{new} with the same contents. Confirmation is required if a file named
  2383. @var{new} already exists, because copying has the consequence of overwriting
  2384. the old contents of the file @var{new}.
  2385. @findex make-symbolic-link
  2386. @kbd{M-x make-symbolic-link} reads two file names @var{target} and
  2387. @var{linkname}, then creates a symbolic link named @var{linkname}, which
  2388. points at @var{target}. The effect is that future attempts to open file
  2389. @var{linkname} will refer to whatever file is named @var{target} at the
  2390. time the opening is done, or will get an error if the name @var{target} is
  2391. not in use at that time. This command does not expand the argument
  2392. @var{target}, so that it allows you to specify a relative name
  2393. as the target of the link.
  2394. Confirmation is required when creating the link if @var{linkname} is
  2395. in use. Note that not all systems support symbolic links; on systems
  2396. that don't support them, this command is not defined.
  2397. @node Compressed Files
  2398. @section Accessing Compressed Files
  2399. @cindex compression
  2400. @cindex uncompression
  2401. @cindex Auto Compression mode
  2402. @cindex mode, Auto Compression
  2403. @pindex gzip
  2404. @findex auto-compression-mode
  2405. @vindex auto-compression-mode
  2406. Emacs comes with a library that can automatically uncompress
  2407. compressed files when you visit them, and automatically recompress them
  2408. if you alter them and save them. To enable this feature, type the
  2409. command @kbd{M-x auto-compression-mode}. You can enable it permanently
  2410. by customizing the option @code{auto-compression-mode}.
  2411. When automatic compression (which implies automatic uncompression as
  2412. well) is enabled, Emacs recognizes compressed files by their file names.
  2413. File names ending in @samp{.gz} indicate a file compressed with
  2414. @code{gzip}. Other endings indicate other compression programs.
  2415. Automatic uncompression and compression apply to all the operations in
  2416. which Emacs uses the contents of a file. This includes visiting it,
  2417. saving it, inserting its contents into a buffer, loading it, and byte
  2418. compiling it.
  2419. @node File Archives
  2420. @section File Archives
  2421. @cindex mode, tar
  2422. @cindex Tar mode
  2423. @cindex file archives
  2424. A file whose name ends in @samp{.tar} is normally an @dfn{archive}
  2425. made by the @code{tar} program. Emacs views these files in a special
  2426. mode called Tar mode which provides a Dired-like list of the contents
  2427. (@pxref{Dired}). You can move around through the list just as you
  2428. would in Dired, and visit the subfiles contained in the archive.
  2429. However, not all Dired commands are available in Tar mode.
  2430. If you enable Auto Compression mode (@pxref{Compressed Files}), then
  2431. Tar mode is used also for compressed archives---files with extensions
  2432. @samp{.tgz}, @code{.tar.Z} and @code{.tar.gz}.
  2433. The keys @kbd{e}, @kbd{f} and @key{RET} all extract a component file
  2434. into its own buffer. You can edit it there and when you save the buffer
  2435. the edited version will replace the version in the Tar buffer. @kbd{v}
  2436. extracts a file into a buffer in View mode. @kbd{o} extracts the file
  2437. and displays it in another window, so you could edit the file and
  2438. operate on the archive simultaneously. @kbd{d} marks a file for
  2439. deletion when you later use @kbd{x}, and @kbd{u} unmarks a file, as in
  2440. Dired. @kbd{C} copies a file from the archive to disk and @kbd{R}
  2441. renames a file. @kbd{g} reverts the buffer from the archive on disk.
  2442. The keys @kbd{M}, @kbd{G}, and @kbd{O} change the file's permission
  2443. bits, group, and owner, respectively.
  2444. If your display supports colors and the mouse, moving the mouse
  2445. pointer across a file name highlights that file name, indicating that
  2446. you can click on it. Clicking @kbd{Mouse-2} on the highlighted file
  2447. name extracts the file into a buffer and displays that buffer.
  2448. Saving the Tar buffer writes a new version of the archive to disk with
  2449. the changes you made to the components.
  2450. You don't need the @code{tar} program to use Tar mode---Emacs reads
  2451. the archives directly. However, accessing compressed archives
  2452. requires the appropriate uncompression program.
  2453. @cindex Archive mode
  2454. @cindex mode, archive
  2455. @cindex @code{arc}
  2456. @cindex @code{jar}
  2457. @cindex @code{zip}
  2458. @cindex @code{lzh}
  2459. @cindex @code{zoo}
  2460. @pindex arc
  2461. @pindex jar
  2462. @pindex zip
  2463. @pindex lzh
  2464. @pindex zoo
  2465. @cindex Java class archives
  2466. @cindex unzip archives
  2467. A separate but similar Archive mode is used for archives produced by
  2468. the programs @code{arc}, @code{jar}, @code{lzh}, @code{zip}, and
  2469. @code{zoo}, which have extensions corresponding to the program names.
  2470. The key bindings of Archive mode are similar to those in Tar mode,
  2471. with the addition of the @kbd{m} key which marks a file for subsequent
  2472. operations, and @kbd{M-@key{DEL}} which unmarks all the marked files.
  2473. Also, the @kbd{a} key toggles the display of detailed file
  2474. information, for those archive types where it won't fit in a single
  2475. line. Operations such as renaming a subfile, or changing its mode or
  2476. owner, are supported only for some of the archive formats.
  2477. Unlike Tar mode, Archive mode runs the archiving program to unpack
  2478. and repack archives. Details of the program names and their options
  2479. can be set in the @samp{Archive} Customize group. However, you don't
  2480. need these programs to look at the archive table of contents, only to
  2481. extract or manipulate the subfiles in the archive.
  2482. @node Remote Files
  2483. @section Remote Files
  2484. @cindex FTP
  2485. @cindex remote file access
  2486. You can refer to files on other machines using a special file name syntax:
  2487. @example
  2488. @group
  2489. /@var{host}:@var{filename}
  2490. /@var{user}@@@var{host}:@var{filename}
  2491. /@var{user}@@@var{host}#@var{port}:@var{filename}
  2492. @end group
  2493. @end example
  2494. @noindent
  2495. When you do this, Emacs uses the FTP program to read and write files on
  2496. the specified host. It logs in through FTP using your user name or the
  2497. name @var{user}. It may ask you for a password from time to time; this
  2498. is used for logging in on @var{host}. The form using @var{port} allows
  2499. you to access servers running on a non-default TCP port.
  2500. @cindex backups for remote files
  2501. @vindex ange-ftp-make-backup-files
  2502. If you want to disable backups for remote files, set the variable
  2503. @code{ange-ftp-make-backup-files} to @code{nil}.
  2504. @cindex ange-ftp
  2505. @vindex ange-ftp-default-user
  2506. @cindex user name for remote file access
  2507. Normally, if you do not specify a user name in a remote file name,
  2508. that means to use your own user name. But if you set the variable
  2509. @code{ange-ftp-default-user} to a string, that string is used instead.
  2510. (The Emacs package that implements FTP file access is called
  2511. @code{ange-ftp}.)
  2512. @cindex anonymous FTP
  2513. @vindex ange-ftp-generate-anonymous-password
  2514. To visit files accessible by anonymous FTP, you use special user
  2515. names @samp{anonymous} or @samp{ftp}. Passwords for these user names
  2516. are handled specially. The variable
  2517. @code{ange-ftp-generate-anonymous-password} controls what happens: if
  2518. the value of this variable is a string, then that string is used as
  2519. the password; if non-@code{nil} (the default), then the value of
  2520. @code{user-mail-address} is used; if @code{nil}, the user is prompted
  2521. for a password as normal.
  2522. @cindex firewall, and accessing remote files
  2523. @cindex gateway, and remote file access with @code{ange-ftp}
  2524. @vindex ange-ftp-smart-gateway
  2525. @vindex ange-ftp-gateway-host
  2526. Sometimes you may be unable to access files on a remote machine
  2527. because a @dfn{firewall} in between blocks the connection for security
  2528. reasons. If you can log in on a @dfn{gateway} machine from which the
  2529. target files @emph{are} accessible, and whose FTP server supports
  2530. gatewaying features, you can still use remote file names; all you have
  2531. to do is specify the name of the gateway machine by setting the
  2532. variable @code{ange-ftp-gateway-host}, and set
  2533. @code{ange-ftp-smart-gateway} to @code{t}. Otherwise you may be able
  2534. to make remote file names work, but the procedure is complex. You can
  2535. read the instructions by typing @kbd{M-x finder-commentary @key{RET}
  2536. ange-ftp @key{RET}}.
  2537. @vindex file-name-handler-alist
  2538. @cindex disabling remote files
  2539. You can entirely turn off the FTP file name feature by removing the
  2540. entries @code{ange-ftp-completion-hook-function} and
  2541. @code{ange-ftp-hook-function} from the variable
  2542. @code{file-name-handler-alist}. You can turn off the feature in
  2543. individual cases by quoting the file name with @samp{/:} (@pxref{Quoted
  2544. File Names}).
  2545. @node Quoted File Names
  2546. @section Quoted File Names
  2547. @cindex quoting file names
  2548. You can @dfn{quote} an absolute file name to prevent special
  2549. characters and syntax in it from having their special effects.
  2550. The way to do this is to add @samp{/:} at the beginning.
  2551. For example, you can quote a local file name which appears remote, to
  2552. prevent it from being treated as a remote file name. Thus, if you have
  2553. a directory named @file{/foo:} and a file named @file{bar} in it, you
  2554. can refer to that file in Emacs as @samp{/:/foo:/bar}.
  2555. @samp{/:} can also prevent @samp{~} from being treated as a special
  2556. character for a user's home directory. For example, @file{/:/tmp/~hack}
  2557. refers to a file whose name is @file{~hack} in directory @file{/tmp}.
  2558. Likewise, quoting with @samp{/:} is one way to enter in the minibuffer
  2559. a file name that contains @samp{$}. However, the @samp{/:} must be at
  2560. the beginning of the minibuffer in order to quote @samp{$}.
  2561. You can also quote wildcard characters with @samp{/:}, for visiting.
  2562. For example, @file{/:/tmp/foo*bar} visits the file @file{/tmp/foo*bar}.
  2563. However, in most cases you can simply type the wildcard characters for
  2564. themselves. For example, if the only file name in @file{/tmp} that
  2565. starts with @samp{foo} and ends with @samp{bar} is @file{foo*bar}, then
  2566. specifying @file{/tmp/foo*bar} will visit just @file{/tmp/foo*bar}.
  2567. Another way is to specify @file{/tmp/foo[*]bar}.
  2568. @node File Name Cache
  2569. @section File Name Cache
  2570. @cindex file name caching
  2571. @cindex cache of file names
  2572. @pindex find
  2573. @kindex C-@key{TAB}
  2574. @findex file-cache-minibuffer-complete
  2575. You can use the @dfn{file name cache} to make it easy to locate a
  2576. file by name, without having to remember exactly where it is located.
  2577. When typing a file name in the minibuffer, @kbd{C-@key{tab}}
  2578. (@code{file-cache-minibuffer-complete}) completes it using the file
  2579. name cache. If you repeat @kbd{C-@key{tab}}, that cycles through the
  2580. possible completions of what you had originally typed. Note that the
  2581. @kbd{C-@key{tab}} character cannot be typed on most text-only
  2582. terminals.
  2583. The file name cache does not fill up automatically. Instead, you
  2584. load file names into the cache using these commands:
  2585. @findex file-cache-add-directory
  2586. @table @kbd
  2587. @item M-x file-cache-add-directory @key{RET} @var{directory} @key{RET}
  2588. Add each file name in @var{directory} to the file name cache.
  2589. @item M-x file-cache-add-directory-using-find @key{RET} @var{directory} @key{RET}
  2590. Add each file name in @var{directory} and all of its nested
  2591. subdirectories to the file name cache.
  2592. @item M-x file-cache-add-directory-using-locate @key{RET} @var{directory} @key{RET}
  2593. Add each file name in @var{directory} and all of its nested
  2594. subdirectories to the file name cache, using @command{locate} to find
  2595. them all.
  2596. @item M-x file-cache-add-directory-list @key{RET} @var{variable} @key{RET}
  2597. Add each file name in each directory listed in @var{variable}
  2598. to the file name cache. @var{variable} should be a Lisp variable
  2599. such as @code{load-path} or @code{exec-path}, whose value is a list
  2600. of directory names.
  2601. @item M-x file-cache-clear-cache @key{RET}
  2602. Clear the cache; that is, remove all file names from it.
  2603. @end table
  2604. @node File Conveniences
  2605. @section Convenience Features for Finding Files
  2606. @findex recentf-mode
  2607. @vindex recentf-mode
  2608. @findex recentf-save-list
  2609. @findex recentf-edit-list
  2610. If you enable Recentf mode, with @kbd{M-x recentf-mode}, the
  2611. @samp{File} menu includes a submenu containing a list of recently
  2612. opened files. @kbd{M-x recentf-save-list} saves the current
  2613. @code{recent-file-list} to a file, and @kbd{M-x recentf-edit-list}
  2614. edits it.
  2615. @findex auto-image-file-mode
  2616. @findex mode, auto-image-file
  2617. @cindex images, visiting
  2618. @cindex visiting image files
  2619. @vindex image-file-name-regexps
  2620. @vindex image-file-name-extensions
  2621. When Auto-image-file minor mode is enabled, visiting an image file
  2622. displays it as an image, not as text. Likewise, inserting an image
  2623. file into a buffer inserts it as an image. This works only when Emacs
  2624. can display the relevant image type. The variables
  2625. @code{image-file-name-extensions} or @code{image-file-name-regexps}
  2626. control which file names are recognized as containing images.
  2627. The @kbd{M-x ffap} command generalizes @code{find-file} with more
  2628. powerful heuristic defaults (@pxref{FFAP}), often based on the text at
  2629. point. Partial Completion mode offers other features extending
  2630. @code{find-file}, which can be used with @code{ffap}.
  2631. @xref{Completion Options}.