From 6b25d3277ce15f232b65ee283623eab106bcae8b Mon Sep 17 00:00:00 2001 From: halw Date: Sun, 14 Mar 2010 16:51:55 +0000 Subject: [PATCH] Author:halw Date:2010-03-14T16:21:07.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@523 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- .../es_gt_auto_complete_argument_01.png | Bin 0 -> 7182 bytes .../es_gt_auto_complete_argument_01.png.data | 3 + .../es_gt_auto_complete_feature_01.png | Bin 0 -> 22347 bytes .../es_gt_auto_complete_feature_01.png.data | 3 + .../recompiling-and-editing.wiki | 107 ++++++++++-------- .../examples/example-sieve-eratosthenes.wiki | 10 +- 6 files changed, 69 insertions(+), 54 deletions(-) create mode 100644 documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png create mode 100644 documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png.data create mode 100644 documentation/current/eiffelstudio/_images/es_gt_auto_complete_feature_01.png create mode 100644 documentation/current/eiffelstudio/_images/es_gt_auto_complete_feature_01.png.data diff --git a/documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png b/documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6b97d771235c5fbc07c02610cffff1663c9d55 GIT binary patch literal 7182 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 literal 0 HcmV?d00001 diff --git a/documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png.data b/documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png.data new file mode 100644 index 00000000..59b94fff --- /dev/null +++ b/documentation/current/eiffelstudio/_images/es_gt_auto_complete_argument_01.png.data @@ -0,0 +1,3 @@ +title=es gt auto complete argument 01 +author=halw +path=content/es-gt-auto-complete-argument-01 diff --git a/documentation/current/eiffelstudio/_images/es_gt_auto_complete_feature_01.png b/documentation/current/eiffelstudio/_images/es_gt_auto_complete_feature_01.png new file mode 100644 index 0000000000000000000000000000000000000000..8a7670af890f112f3a36d7f4c2d381b93497eaa7 GIT binary patch literal 22347 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 menu, but the easiest for the moment is to use the compilation button in the Project toolbar, the lower toolbar in the Development Window. Click this button. You haven't changed anything in the project since it was compiled (you were not supposed to!), so EiffelStudio will very quickly detect this and finish compilation. On our test platform this takes less than a second. Now of course we should see what happens if you do change something. -
+When we started, we compiled the example system. Let's recompile it, just to see. We'll see compilation entries in the Project menu, but the easiest for the moment is to use the compilation button ([[Image:compile-button]]) in the Project toolbar. Click this button. You haven't changed anything in the project since it was compiled (at least you were not supposed to!), so EiffelStudio will very quickly detect this and finish compilation. On our test platform this takes less than a second. Now of course we should see what happens if you do change something. + + ==Editing== -We don't want to touch EiffelBase classes (and in fact can't, since it is used in precompiled form), so let's focus on classes of our small root cluster. In the Cluster tree on the left, expand cluster root_cluster and click class PARENT to retarget the Development Window to it. +We don't want to touch EiffelBase classes (and in fact can't, since it is used in precompiled form), so let's focus on classes of our small root cluster. In the Groups tool, expand cluster root_cluster and click class PARENT to retarget the Development Window to it. Make sure that the Editing Tool is big enough to display the text of the class: -[[Image:index-66]] +[[Image:es gt development window targeted to parent 01|Class PARENT in Editing tool]] The Editing Tool hosts a text editor which you can use to change the class text. Here the routine display starts by outputting a simple message; let's precede it by another line of display to check that we affected the outcome. We'll want to add the following two lines just after the do, before the first two instructions of the routine: - io.put_string ("THIS IS SOME ADDED TEXT") - io.new_line + io.put_string ("THIS IS SOME ADDED TEXT") + io.new_line -They are very similar to the current first two lines of the routine, so you can just use copy-paste: select the two lines with the mouse, copy them using CTRL-C (or Copy from the Edit menu), then paste them just after the do using CTRL-V (or Paste from the Edit menu). Add or remove tabs to align with the rest of the routine, so that the result will look like what's shown on the next figure. This is all there is to change; the second line remains untouched. Please check the result and be careful not to introduce any mistakes; in the next section we'll study how EiffelStudio will report syntax and other errors, but right now we want to see what happens when everything is right! +You can just use copy-paste from the example above: select the two lines with the mouse, copy them using CTRL-C (or Copy from the Edit menu), then paste them just after the do using CTRL-V (or Paste from the Edit menu). Add or remove tabs to align with the rest of the routine, so that the result will look like what's shown on the next figure. Please check the result and be careful not to introduce any mistakes; in the next section we'll study how EiffelStudio will report syntax and other errors, but right now we want to see what happens when everything is right! + +[[Image:es gt development window targeted to parent 02|Class PARENT with changes]] + +Now save your changes; you may indifferently use CTRL-S, the Save entry from the Edit menu, or the Save button ([[Image:save-button]]), at the cursor location on the figure. (If you forget to save, the next compilation will tell you so, and ask you if from now on you want all non-saved class edits to be saved automatically.) -[[Image:index-67]] -Now save your changes; you may indifferently use CTRL-S, the Save entry from the Edit menu, or the Save button highlighted on the figure. (If you forget to save, the next compilation will tell you so, and ask you if from now on you want all non-saved class edits to be saved automatically.) -
==Recompiling and executing after a change== Next compile again, using the Compilation button. Some "degree" messages appear quickly; EiffelStudio has found out what class has changed and deduced what exactly to recompile -- only a subset of the whole system. So this again will proceed very quickly. Execute the system again now, using one of the execution buttons, with or without breakpoints, on the right in the bottom Project toolbar. You will see that the message output by the execution has changed to include the added string. -
+ + ==Views in the Editing Tool== -In studying the Context Tool we discovered a number of views of a class text. For convenience, you can also display a number of these views in the Editing Tool, although only the basic Text view is editable. A row of buttons next to the Class and Feature fields lets you choose between them. +In studying the Class tool we discovered a number of views of a class text. For convenience, you can also display a number of these views in the Editing Tool, although only the basic Text view is editable. A row of buttons next to the Class and Feature fields lets you choose between them. + +[[Image:view-buttons]] You can try some of these view now, although there is nothing exciting to show about class PARENT. Make sure to come back to the Text view -- through the leftmost of these buttons -- so that we can continue exploring the editing facilities. -
+ + ==Basic editing facilities== The editing facilities in the Editing Tool are provided by the EiffelStudio Editor, a specialized tool supporting the development and update of Eiffel texts. As we'll see next, if you have a preferred editor you can use it instead, but the EiffelStudio Editor is worth knowing. -The online documentation provides many more details about editing functions. Here are the essentials. +The [[EiffelStudio Editor|EiffelStudio Reference section]] on the Editor provides many more details about editing functions. Here are the essentials. First, the key property of any interactive system: '''Undo'''. You can cancel the latest editing command, or any earlier one performed during the current session, by choosing Undo from the Edit menu, or typing CTRL-Z. To cancel more than one command, apply Undo repetitively; there is no limit to the number of undoable commands within a session. (When you exit EiffelStudio, however, the editing history is lost.) To redo an undone command, use Redo from the Edit menu or CTRL-Y. @@ -68,32 +75,36 @@ or CTRL-K. Conversely, CTRL-Shift-K will uncomment. Al Other useful facilities of the Edit --> Advanced menu are: * Embed in "if", or CTRL-I, which will create a conditional instruction and include the selected instructions in it. * Embed in "debug", CTRL-D, which will include the selected instructions in a debug ... end instruction, so that their execution becomes conditional on a Debug compilation option. -
+ + ==Search and replace== The editor lets you search for text and replace occurrences, individually or globally. We assume you have seen a text search facility before, so we'll just emphasize some of the less obvious features. -To start a search, make sure the Search Tool is active by clicking the Search button in the top toolbar (this one we'll let you find) or using the Edit --> Find menu entry. +To start a search, make sure the [[Search Tool]] is active by clicking the Search button in the top toolbar (this one we'll let you find) or using the + +Edit --> Find + +menu entry. -{{note|that although we are studying Search as part of the Editor, this function also applies to any textual form displayed in the Context Tool; make sure to start a Search from the tool that you want to search.'' }} +{{note|If you press CTRL-F in a tool you will get a quick search bar that quickly allows you to search for something in the current text.}} -{{note|If you press CTRL-F in a tool you will get a quick search bar that quickly allows to search for something in the current text.}} - -The Search Tool presents a number of self-explanatory options: +The [[Search Tool]] presents a number of self-explanatory options: -[[Image:index-69]] +[[Image:search-tool]] You can enter a term to replace your search term in the Replace with box. Having filled the two fields, you can elect to replace the last found occurrence, or all occurrences at once. The Search for field has an associated drop-down list, so that you can reuse a recently entered search string without retyping it. -
+ + ==Let the editor do the typing== -Particularly interesting are the editor's '''automatic completion''' facilities. Well, particularly interesting for most people: maybe you like your editor to do the grunt work for you, or maybe you don't. In the latter case -- if you prefer to be in control of all the details -- don't worry: through +Particularly interesting are the editor's '''automatic completion''' facilities (often, we shorten the name to '''auto-completion'''). Well, particularly interesting for ''most'' people: maybe you like your editor to do the grunt work for you, or maybe you don't. In the latter case -- if you prefer to be in control of all the details -- don't worry: through Tools --> Preferences --> Editor you can easily disable any facility that you don't like. The behavior described here is the default. @@ -102,37 +113,34 @@ The EiffelStudio Editor knows about Eiffel syntax and will recognize syntactic e If you start typing a control structure through its opening keyword, such as if, or from for a loop, the editor will automatically display the structure of the whole construct. Here for example is the result if you type the from followed by Return/Enter at the beginning of our example routine: -[[Image:index-71]] +[[Image:es gt auto complete from 01]] This has produced the structure of an Eiffel loop: from ... until ... loop ... end. You can then fill in the blanks with the appropriate expression and instructions. The generated lines start with the appropriate number of Tab characters to support the standard Eiffel indenting conventions. If you want a more compact style, follow the from with a space rather than Return. Typing if followed by Return or a space will similarly produce the outline of a conditional instruction. -To start a routine, type the routine name followed by the keyword is and a Return. The editor generates the basic structure of a routine text: - -[[Image:index-72]] - -This prompts you to enter the header comment (no self-respecting Eiffel developer even thinks of writing a feature without a header comment). At the end of the header comment, type Return if the header comment continues, otherwise type a down arrow to continue with the indentation for the beginning of the routine, with one of the keywords require, local, do, external, once. Once you type do, followed by a Return or space, the completion mechanism will insert the appropriate end, but other than that it doesn't try to produce an entire routine structure because there are too many syntactical choices (precondition or not, postcondition or not, locals or not etc.). - -Also interesting is '''feature completion''', using the CTRL-SPACE key. It works at two levels: +Also interesting is '''feature completion'''. Feature completion is activated by default, and it works at two levels: * You can type the beginning of the name of a feature of the current class, then CTRL-SPACE to get possible completions. -* Once you have typed the name of a query (attribute or function), either all by yourself or aided by the previous completion technique, you can type a period followed by CTRL-SPACE to get the list of possible features to be applied, deduced from the list of features in the corresponding class (the type of the query). +* Once you have typed the name of a query (attribute or function), either all by yourself or aided by the previous completion technique, you can type a period to get the list of possible features to be applied, deduced from the list of features in the corresponding class (the type of the query). In both cases, if more than one completion is possible, you will get a menu of the possibilities. You can scroll through it with the up and down arrow keys, or the mouse, and select one through Enter or double-click. You can also or give up through the Escape key. -Here for example is the menu you will see in the body of our example routine if you type io. followed by CTRL-SPACE, where io is the feature, coming from class ANY, that provides access to standard input and output facilities: +Here for example is the menu you will see in the body of our example routine if you type io. , where io is the feature, coming from class ANY, that provides access to standard input and output facilities: -[[Image:index-73]] +[[Image:es gt auto complete feature 01|Feature auto-completion]] -The following properties enhance the convenience of the completion mechanisms: -* If only one completion is possible, no menu appears; the completion is selected. -* If the cursor is just after the name of a query (which you have fully typed, or obtained through completion), typing CTRL-SPACE once more will produce a period, as if you had typed it. -* When a menu of possible completions is displayed, typing CTRL-SPACE will select the first of them. +If only one completion is possible, no menu appears; the completion is selected. -The combination of these facilities means that you can often obtain what you want simply by typing CTRL-SPACE repeatedly. +When a menu of possible completions is displayed, you can use the arrow keys to traverse the list. + +If you select a routine with arguments, auto-complete will show the arguments and their types, allowing you to provide your value for each argument. The figure below shows auto-completion of a routine with only one argument. + +[[Image:es gt auto complete argument 01|Auto-completion of arguments]] + +You can see that the argument is pre-selected and is of type STRING_8. As soon as you begin to type your substitution for the argument, the pre-selected argument definition is replaced with what you type. When you complete an argument, the Tab key will either pre-select the next argument (in the case of routines with multiple arguments), or place the cursor to the right of the right parenthesis that terminates the routine call (in the case of the last argument). + +Auto-completion will only work for queries that were present at the time of the last successful compilation. So if you add an attribute, say attr, to the current class, and do not recompile, typing a then CTRL-SPACE will not display attr. To make sure that it's included in completion proposals, save and recompile. (Remember, incremental compilation is fast in EiffelStudio, so there is nothing wrong in compiling early and often.) The same rule holds for features of ''other'' classes, those that will appear in proposed completions after a period. + +The features proposed for auto-completion include all features of the class: those declared in the class itself, or ''immediate'' features, and those ''inherited'' from proper ancestors, direct or indirect, with one exception: by default the list will not include features from the universal class ANY, which serves as ancestor to all classes and provides many features for comparison, copying, input-output, reflection etc. Including ANY's features would clutter all menus with too many features. So for example typing i followed by CTRL-SPACE will not suggest io among the possible completions. You can change this policy through Preferences. The policy does not apply to remote feature completion for an entity x declared of type ANY. In the case that you type x., auto-completion will produce the list of ANY's features. -Also note the following properties of automatic feature completion: -* The mechanism will only work for queries that were present at the time of the last successful compilation. So if you add an attribute, say attr, to the current class, and do not recompile, typing a then CTRL-SPACE will not display attr. To make sure that it's included in completion proposals, save and recompile. (Remember, incremental compilation is fast in EiffelStudio, so there is nothing wrong in compiling early and often.) The same rule holds for features of other classes, those that will appear in proposed completions after a period. -* Automatic completion is applicable to features, not local entities or formal arguments. -* The features proposed for automatic completion include all features of the class: those declared in the class itself, or immediate features, and those inherited from proper ancestors, direct or indirect, with one exception: by default the list will not include features from the universal class ANY, which serves as ancestor to all classes and provides many features for comparison, copying, input-output, reflection etc. Including ANY's features would clutter all menus with too many features. So for example typing i followed by CTRL-SPACE will not suggest io among the possible completions. You can change this policy through Preferences. The policy does not apply to remote feature completion for an entity x declared of type ANY : typing CTRL-SPACE after x. will produce the list of ANY's features. ==Using your own editor== @@ -145,7 +153,9 @@ or the corresponding button in the top toolbar. This will call the editor of your choice. The default is Notepad on Windows and Vi on Unix and Linux. You can easily change this to any editor by entering the desired editor command in -Tools --> Preferences --> Global Preferences +Tools --> Preferences --> General --> External editor command + + In this command text you can use the two special notations $target and $line ; when EiffelStudio calls the selected command, it will replace any occurrence of $target by the name of the file where the current class resides, and $line by the line number at which the Editing Tool is currently scrolled. If you include one or both of these markers at the appropriate argument positions for the command, this will enable you -- assuming the editor supports the appropriate options -- to make sure it starts at exactly the right place. For example the default editor command under Unix is vi +$line $target @@ -155,8 +165,9 @@ meaning: start the Vi editor on the $target file, initially positio If you start an external editor on a class, then exit the editor after possibly making changes, EiffelStudio will immediately update the class text in the Editing Tool. More generally, note that EiffelStudio will detect changes made separately on the same class, and warn you of possible conflicts. Several important text editors from various providers have '''Eiffel modes''', which support the syntax-directed editing of Eiffel texts. They include: -* Vim, for Vi iMproved, an extension of Vi available on both Unix/Linux and Windows -- see www.vim.org -* Emacs -- see www.emacs.org. -* Editeur, a Windows syntax highlighting editor -- see www.studioware.com. -
+* '''Vim''', for Vi iMproved, an extension of Vi available on both Unix/Linux and Windows -- see www.vim.org +* '''Emacs''' -- see www.emacs.org. +* '''Editeur''', a Windows syntax highlighting editor -- see www.studioware.com. + + diff --git a/documentation/current/examples/example-sieve-eratosthenes.wiki b/documentation/current/examples/example-sieve-eratosthenes.wiki index 5904cdf2..886ff805 100644 --- a/documentation/current/examples/example-sieve-eratosthenes.wiki +++ b/documentation/current/examples/example-sieve-eratosthenes.wiki @@ -2,8 +2,6 @@ [[Property:link_title|Example: Sieve of Eratosthenes]] [[Property:weight|0]] [[Property:uuid|e825c874-4266-b5ee-501c-221e6940dacd]] -{{underconstruction}} - ==Description== @@ -19,14 +17,14 @@ Deliver prime numbers up to a specified integer limit. Compute prime numbers usi class - APPLICATION + APPLICATION create - make + make feature - make - -- Run application. + make + -- Run application. do across primes_through (100) as ic loop print (ic.item.out + " ") end end