:bulb: **Tip:**
-A person can have any number of tags (including 0)
+* Bookmarks the contact at `INDEX1` and places it in the bookmarked contacts section (at index 2) in the contacts list.
+* You may bookmark **more than one contact at a time** by specifying multiple indexes `cmark 1 2`.
+* `INDEX` refers to the index number shown in the displayed contact list.
+
+
:information_source: **Note:**
+
+`INDEX` **must be a positive integer**, e.g. 1, 2, 3,…
+**Examples:**
+* `cmark 2` bookmarks the second contact in the list (Bernice Yu).
+* `cmark 2 4` bookmarks the second (Bernice Yu) and fourth (David Li) contacts in the list.
-Examples:
-* `cadd n/Alex Doe e/e0123456@u.nus.edu a/COM1 #99-99 th/johnDoe99 t/Professor`
-* `cadd n/ Jon Cheng t/TA e/e7654321@u.nus.edu a/COM1-0201 p/87654321 t/Senior th/jonnyjohnny z/https://nus-sg.zoom.us/j/0123456789?pwd=ABCDEFGHIJKLMNOPDJFHISDFSDH`
+_See also: [Removing bookmark of a contact](#removing-bookmark-of-a-contact-cumark)_
+
+
+
+### Clearing all contacts: `cclear`
+
+Clears all entries of contacts from SoConnect.
+
+**Format:** `cclear`
+
+
:information_source: **Note:**
+This will not change the events saved in SoConnect.
+
-### Listing all persons : `clist`
+### Deleting a contact: `cdelete`
-Shows a list of all persons in the contact list, with all of their details by default.
+Deletes the specified contact(s) from SoConnect.
-Format: `clist [e/] [p/] [a/] [th/] [z/] [t/]`
+**Format:** `cdelete INDEX1[-INDEX2]`
-* Returned list will always include names of all persons in the contact list.
-* When no optional fields are provided, e.g `clist`, the list will show all available details of all persons in the contact list.
-* When optional fields are provided, the list will only show the names of all persons in the contact list and the corresponding fields specified by the user.
-* More than one optional field can be provided.
-* The order of the optional fields does not matter. e.g both `clist e/ p/` and `clist p/ e/` will return a list of only the names, email addresses and phone numbers of all persons in the contact list.
-* If the specified field has no value for certain persons in the contact list, it will not show anything for that corresponding field for that particular person.
+* Deletes the contact at:
+ * the specified `INDEX1` or
+ * between the specified range from `INDEX1` to `INDEX2` inclusively (if you provide `INDEX2`).
+* `INDEX` refers to the index number shown in the displayed contact list.
-Examples:
-* `clist` returns a list of all persons in the contact list with all the available details for each person.
-* `clist e/ p/` returns a list of all persons in the contact list, showing only their names, email addresses and phone numbers (if available).
+
:information_source: **Note:**
+`INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+
-### Editing a person : `cedit`
+**Examples:**
+* `clist` followed by `cdelete 2` deletes the second contact from SoConnect.
+* `cfind Betsy` followed by `cdelete 1` deletes the first contact from the results of the `cfind` command.
+* `cdelete 3-5` deletes contacts from index 3 to 5 from the currently displayed contacts.
-Edits an existing person in the contact list.
-Format: `cedit INDEX [n/NAME] [e/EMAIL] [p/PHONE] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]… `
+### Editing a contact: `cedit`
-* Edits the person at the specified `INDEX`. The index refers to the index number shown in the displayed person list. The index **must be a positive integer** 1, 2, 3, …
-* At least one of the optional fields must be provided.
+Edits an existing contact in SoConnect.
+
+**Format:** `cedit INDEX [n/NAME] [e/EMAIL] [p/PHONE] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]… `
+
+* Edits the contact at the specified `INDEX`.
+* `INDEX` refers to the index number shown in the displayed contact list.
+* You must provide **at least one** of the optional fields.
* Existing values will be updated to the input values.
* You can use `t/` to add a tag.
-* You can remove a specific tag by typing `dt/` with the tag.
-* You can remove all the person’s tags by typing `dt/*` without specifying any tags after it.
+* You can remove a specific tag by typing `dt/` followed by the tag name that you wish to remove.
+* You can remove all existing tags of a contact by typing `dt/*`.
* When editing tags, the tags to be deleted will be removed first, before new tags are added.
+
:information_source: **Note:**
+
+`INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+
+
+**Examples:**
+* `clist` followed by `cedit 2 p/91234567 e/agentX@thehightable.com` edits the phone number and email address of the second contact of SoConnect to be `91234567` and `agentX@thehightable.com` respectively.
+* `cfind Betsy` followed by `cedit 2 n/Betsy Crower dt/*` edits the name of the second contact from the results of the `cfind` command to be `Betsy Crower` and clears all existing tags.
+* `cedit 3 dt/TA` deletes the `TA` tag from the third contact.
+* `cedit 4 dt/*` deletes all tags from the fourth contact.
+* `cedit 5 dt/classmate t/friend` first deletes the `classmate` tag, then adds `friend` tag to the fifth contact.
+
-Examples:
-* `clist` followed by `cedit 2 p/91234567 e/agentX@thehightable.com` edits the phone number and email address of the 2nd person of the contact list to be `91234567` and `agentX@thehightable.com` respectively.
-* `cfind Betsy` followed by `cedit 2 n/Betsy Crower dt/*` edits the name of the 2nd person from the results of the `cfind` command to be `Betsy Crower` and clears all existing tags.
-* `cedit 3 dt/TA` deletes the `TA` tag from the 3rd person.
-* `cedit 4 dt/*` deletes all tags from the 4th person.
-* `cedit 5 dt/classmate t/friend` first deletes the `classmate` tag, then adds `friend` tag from the 5th person.
+### Finding contacts: `cfind`
+Finds all contacts that contain any of the given keywords based on your search type.
-### Locating persons by name: `cfind`
+**Format:** `cfind [KEYWORD]… [e/KEYWORD…] [p/KEYWORD…] [a/KEYWORD…] [th/KEYWORD…] [z/KEYWORD…] [t/KEYWORD…]`
-Finds persons whose names contain any of the given keywords.
+
:bulb: **Tip:**
-Format: `cfind KEYWORD [MORE_KEYWORDS]`
+There are two types of contact searches you can do in SoConnect:
+1. If you **do not specify any optional fields before your keywords**, e.g. `cfind KEYWORD1 KEYWORD2`,
+
+ You will only search the names of the contacts based on the keywords you provide.
+
+2. If you specified optional fields before your keyword, e.g. `cfind e/KEYWORD1 p/KEYWORD2`,
+
+ You will search the emails and phone numbers of the contacts based on `KEYWORD1` and `KEYWORD2` respectively.
+
-* The search is case-insensitive. e.g `hans` will match `Hans`.
+* You need to provide **at least one keyword**.
+* You can provide multiple keywords without specifying any optional fields.
+* You can only **specify each optional field once**.
* The order of the keywords does not matter. e.g. `Hans Bo` will match `Bo Hans`.
-* Only the name is searched.
* Partial words can be matched e.g. `Han` will match `Hans`.
-* Persons matching at least one keyword will be returned (i.e. `OR` search).
+* Contact matching at least one keyword will be returned (i.e. _`OR` search_).
e.g. `Hans Bo` will return `Hans Gruber` and `Bo Yang`.
-Examples:
+
:information_source: **Note:**
+
+The search by `cfind` is case-insensitive. e.g. `hans` will match `Hans`.
+
+**Examples:**
* `cfind John` returns `john` and `Johnathon Doe`.
* `cfind alex david` returns `Alex Yeoh` and `David Li`.
-
-### Deleting a person : `cdelete`
+* `cfind p/123 e/gmail` returns
+ contacts with phone numbers that contain `123` and with emails that contain `gmail.com`.
+* `cfind alex david p/123 456` returns `Alex Yeoh`, `David Li` and
+ contacts with phone numbers that contain `123` and `456`.
-Deletes the specified person from the contact list.
-Format: `cdelete INDEX1[-INDEX2]`
+### Listing all contacts: `clist`
-- Deletes the person at the specified `INDEX1` or between the specified
- range from `INDEX1` to `INDEX2` inclusively.
-- The index refers to the index number shown in the displayed person list.
-- The index **must be a positive integer** 1, 2, 3, …
+Shows all contacts in the SoConnect, with all details by default.
-Examples:
-- `clist` followed by `cdelete 2` deletes the 2nd person from the contact list.
-- `cfind Betsy` followed by `cdelete 1` deletes the 1st person from the results of the `cfind` command.
-- `cdelete 3-5` deletes people with index between 3 and 5 inclusively from the contact list.
+**Format:** `clist [e/] [p/] [a/] [th/] [z/] [t/]`
-### Clearing all persons : `cclear`
+* Names of contacts are always shown.
+* When no optional fields are provided, e.g `clist`, all available details of each contact will be shown.
+* When optional fields are provided, it will only show the names and the corresponding specified fields for each contact.
+* You can provide more than one optional field.
+* The order of the optional fields does not matter. e.g. both `clist e/ p/` and `clist p/ e/` will show only the names, email addresses and phone numbers of each contact.
+* Fields of a contact that have no value will not appear.
-Clears all entries of contacts from the contact list.
+
:information_source: **Note:**
-Format: `cclear`
+Do not add extraneous values after each optional field you specify.
+
+**Examples:**
+* `clist` shows all contacts in SoConnect with all available details for each contact.
+* `clist e/ p/` shows all contacts in SoConnect with only their names, email addresses and phone numbers (if available).
-## Managing Events
+### Removing bookmark of a contact: `cumark`
-### Adding an event: `eadd`
+Remove bookmark(s) of the specified contact(s).
+
+**Format:** `cumark INDEX1 [INDEX]...`
-Adds an event to the event list.
+![image](images/demo-screenshots/UnmarkContacts.png)
+
+* Removes the bookmark of the contact at `INDEX1` and places it **after** the bookmarked contacts section (at index 4) in the contacts list.
+* You may remove bookmarks of **more than one contact at a time** by specifying multiple indexes, eg `cumark 1 2`
+* `INDEX` refers to the index number shown in the displayed contact list.
+
+
:information_source: **Note:**
+
+* `INDEX` **must be a positive integer**, e.g. 1, 2, 3,…
+* You must ensure that the contact indexed at `INDEX` is **initially bookmarked**.
+
+
+**Examples:**
+* `cumark 1` removes the bookmark of the first contact in the list (Alex Yeoh).
+* `cumark 2 3` removes the bookmarks of the second (Charlotte Oliveiro) and third (Irfan Ibrahim) contact in the list.
+
+_See also: [Bookmarking a contact](#bookmarking-a-contact-cmark)_
+
+### Viewing a contact: `cview`
+
+Views a contact with all details fully shown.
+
+**Format:** `cview INDEX`
+
+* Views the contact at the specified `INDEX`.
+* `INDEX` refers to the index number shown in the displayed contact list.
+* All truncated details of the contact you want to view will be expanded fully.
+
+
:information_source: **Note:**
+
+`INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+
-Format: `eadd n/NAME at/START_TIME [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [t/TAG]…`
+**Examples:**
+* `cview 2` shows all details of the second contact in SoConnect fully.
+* `cfind alex david` followed by `cview 1` shows all details of the first contact from the result of the `cfind`.
-💡 **Tip:** An event can have any number of tags (including 0)
-Take note of the following time format:
+## Event Management
-- Start time should be of format “dd-MM-yyyy HH:mm” (date-month-year Hour:minutes in 24 hr format).
+This section details all the features and commands available in SoConnect that can help you with managing your events:
+* [Adding an event](#adding-an-event-eadd)
+* [Bookmarking an event](#bookmarking-an-event-emark)
+* [Clearing all event](#clearing-all-events-eclear)
+* [Deleting an event](#deleting-an-event-edelete)
+* [Editing an event](#editing-an-event-eedit)
+* [Finding events](#finding-events-efind)
+* [Linking an event to contacts](#linking-an-event-to-contacts-elink)
+* [Listing all events](#listing-all-events-elist)
+* [Removing bookmark of an event](#removing-bookmark-of-an-event-eumark)
+* [Sorting events](#sorting-events-esort)
+* [Unlinking an event from contacts](#unlinking-an-event-from-contacts-eunlink)
+* [Viewing an event](#viewing-an-event-eview)
-Examples:
-- `eadd n/Summer Party at/12-12-2021 15:12 a/123, Clementi Rd, 1234665 t/fun`
-- `eadd n/CS2103T Lecture at/10-09-2021 16:00 end/18:00
+
+### Adding an event: `eadd`
+
+Adds an event to SoConnect.
+
+**Format:** `eadd n/NAME at/START_TIME [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [t/TAG]…`
+
+
:information_source: **Note:**
+
+* Start time and End Time should be of format “dd-MM-yyyy HH:mm” (date-MONTH-year HOUR:minutes in 24-hour format).
+* Ensure the End Time you enter is **chronologically after** the Start Time.
+
+
+**Examples:**
+* `eadd n/Summer Party at/12-12-2021 15:12 a/123, Clementi Rd, 1234665 t/fun`
+* `eadd n/CS2103T Lecture at/10-09-2021 16:00 end/18:00
z/https://nus-sg.zoom.us/j/0123456789?pwd=ABCDEFGHIJKLMNOPDJFHISDFSDHk t/lecture`
-### Listing all events: `elist`
-Shows a list of all events in the event list, with all of their details by default.
+### Bookmarking an event: `emark`
+
+Bookmarks the specified event(s).
+
+**Format:** `emark INDEX1 [INDEX]…`
-Format: `elist [at/] [end/] [d/] [a/] [z/] [t/]`
+![image](images/demo-screenshots/BookmarkEvents.png)
-- Returned list will always include names of all events in the event list.
-- When no optional fields are provided, e.g `elist` , the list will show all available details of all events
- in the event list.
-- When optional fields are provided, the list will only show the names of all events in the event list and
- the corresponding fields specified by the user.
-- More than one optional field can be provided.
-- The order of the optional fields does not matter. e.g both `elist d/ at/` and `elist at/ d/` will return a list
- of only the names, descriptions and starting times in the event list.
-- If the specified field has no value for certain events in the event list, it will not show anything for
- that corresponding field for that particular event.
+* Bookmarks the event at `INDEX1` and adds it to the back of the bookmarked events section (at index 2) in the events list.
+* You may bookmark **more than one event at a time** by specifying multiple indexes, eg `emark 1 2`
+* `INDEX` refers to the index number shown in the displayed event list.
-Examples:
+
:information_source: **Note:**
-- `elist` returns a list of all events in the event list with all the available details for each event.
-- `elist d/ at/` returns a list of all events in the event list, showing only their names, starting times and descriptions (if available).
+`INDEX` **must be a positive integer**, e.g. 1, 2, 3,…
+
-### Editing an event : `eedit`
+**Examples:**
+* `emark 2` bookmarks the second event in the list (Dance Class).
+* `emark 2 4` bookmarks the second (Dance Class) and fourth (Google Interview) event in the list.
-Edits an existing event in the event list.
+_See Also: [Removing bookmark of a contact](#removing-bookmark-of-a-contact-cumark)_
-Format: `eedit INDEX [n/NAME] [at/START_TIME] [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
+### Clearing all events: `eclear`
-
-
-:information_source: **Note:** Start time should be of format “dd-MM-yyyy HH:mm” (date-month-year Hour:minutes in 24 hr format).
-
+Clears all entries of events from SoConnect.
+
+**Format:** `eclear`
+
+
:information_source: **Note:**
+This will not change the contacts saved in SoConnect.
-* `elist` followed by `eedit` 2 edits the 2nd event from the event list.
-* Edits the event at the specified `INDEX`. `INDEX` refers to the index number shown in the displayed event list. `INDEX` **must be a positive integer** eg 1, 2, 3, …
-* **At least one** of the optional fields must be provided.
-* Existing values will be updated to the input values.
-* use `t/` to add a tag.
-* use `dt/` to remove a tag.
-* use `dt/*` to remove **all** tags
-* When editing tags, the tags to be deleted will be removed first, before new tags are added
-Examples:
-* `elist` followed by `eedit 2 n/CS2103T Exam dt/Easy_exams t/Hard_exams` changes the name and tag of the 2nd event on the event list to `CS2103T Exam` and `Hard_exams` respectively.
-* `efind Betsy` followed by `eedit 2 n/Betsy’s Wedding` edits the name of the 2nd event from the results of the `efind` command to be `Betsy’s Wedding`
-* `eedit 4 dt/*` deletes all tags from the 4th event.
+### Deleting an event: `edelete`
-### Locating persons by name : `efind`
+Deletes the specified event from SoConnect.
-Finds events which contain any of the given keywords.
+**Format:** `edelete INDEX1[-INDEX2]`
-Format: `efind KEYWORD [MORE_KEYWORDS]`
+* Deletes the contact at:
+ * the specified `INDEX1` or
+ * between the specified range from `INDEX1` to `INDEX2` inclusively (if you provide `INDEX2`).
+* `INDEX` refers to the index number shown in the displayed event list.
-* **Case-insensitive**. e.g `exams` will match `Exams`
-* Order of the keywords does not matter. e.g. `Exam Hard` will match `Hard Exam`
-* Only the **name** is searched.
-* Partial words can be matched e.g. `Exa` will match `CS2103T Exam`
-* Persons matching at least one keyword will be returned (i.e. `OR` search). e.g. `Exam Hard` will return `Hard Exam`, `CS1101S Exams`
+
:information_source: **Note:**
-Examples:
-* `efind ex` returns `exams` and `Examinations`
-* `efind CS Exam` returns `CS2100 Exam`, `CS2101`
+`INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+
-### Deleting a person : `edelete`
+**Examples:**
+* `elist` followed by `edelete 2` deletes the second event from SoConnect.
+* `efind Exam` followed by `edelete 1` deletes the first event from the results of the `efind` command.
+* `edelete 3-5` deletes events from index 3 to 5 from SoConnect.
-Deletes the specified event from the event list.
-Format: `edelete INDEX1[-INDEX2]`
+### Editing an event: `eedit`
-* Deletes the event at the specified `INDEX1` or between the specified range from `INDEX1` to `INDEX2` inclusive.
+Edits an existing event in SoConnect.
+
+**Format:** `eedit INDEX [n/NAME] [at/START_TIME] [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
+
+* Edits the event at the specified `INDEX`.
* `INDEX` refers to the index number shown in the displayed event list.
-* `INDEX` **must be a positive integer**, eg 1, 2, 3, …
+* You must provide **at least one** of the optional fields.
+* Existing values will be updated to the input values.
+* You can use `t/` to add a tag.
+* You can remove a specific tag by typing `dt/` followed by the tag name that you wish to remove.
+* You can remove all existing tags of a contact by typing `dt/*`.
+* When editing tags, the tags to be deleted will be removed first, before new tags are added.
-Examples:
-* `elist` followed by `edelete 2` deletes the 2nd event from the event list.
-* `efind Exam` followed by `edelete 1` deletes the 1st event from the results of the `efind` command.
-* `edelete 3-5` deletes events with index between 3 and 5 inclusively from the event list.
+
:information_source: **Note:**
+* `INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+* Start time and End Time should be of format “dd-MM-yyyy HH:mm” (date-MONTH-year HOUR:minutes in 24-hour format).
+
-### Sorting events: `esort`
+**Examples:**
+* `elist` followed by `eedit 2 n/CS2103T Exam dt/Easy_exams t/Hard_exams`
+ first changes the name of the second event to `CS2103T Exam`, deletes the tag `Easy_exams` and
+ adds the tag `Hard_exams`.
+* `efind Betsy` followed by `eedit 2 n/Betsy’s Wedding` edits the name of the second event from the results of the `efind` command to be `Betsy’s Wedding`.
+* `eedit 4 dt/*` deletes all existing tags from the fourth event.
-Sorts all events by start time and displays all upcoming or ongoing events.
+### Finding Events: `efind`
-### Linking event to multiple contacts: `elink`
+Finds all events that contain any of the given keywords based on your search type.
-Links the specified event to multiple contacts.
+**Format:** `efind [KEYWORDS]… [at/KEYWORD…] [end/KEYWORD…] [d/KEYWORD…] [a/KEYWORD…] [z/KEYWORD…] [t/KEYWORD…]`
+
:bulb: **Tip:**
-Format: `elink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
+There are two types of event searches you can do in SoConnect:
+1. If you **do not specify any optional fields before your keywords**, e.g. `efind KEYWORD1 KEYWORD2`,
-* Links the event at the specified `EVENT_INDEX` to the contacts at `CONTACT_INDEX`.
-* `EVENT_INDEX` refers to the index number shown in the displayed event list.
-* `CONTACT_INDEX` refers to the index number shown in the displayed contact list.
+ You will only search the names of the events based on the keywords you provide.
+
+2. If you specified optional fields before your keyword, e.g. `efind a/KEYWORD1 d/KEYWORD2`,
+
+ You will search the addresses and descriptions of the events based on `KEYWORD1` and `KEYWORD2` respectively.
+
+
+* You need to provide **at least one keyword**.
+* You can provide multiple keywords without specifying any optional fields.
+* You can only **specify each optional field once**.
+* Partial words can be matched e.g. `Exa` will match `CS2103T Exam` .
+* Events matching at least one keyword will be returned (i.e. _`OR` search_).
+ e.g. `Exam Hard` will return `Hard Exam`, `CS1101S Exams`.
:information_source: **Note:**
-`EVENT_INDEX` and `CONTACT_INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+The search by `efind` is case-insensitive. e.g. `exams` will match `Exams`.
-Examples:
-* `elink 1 c/1` links the first event from the displayed event list to the first contact from the displayed contact list.
-* `elink 2 c/1 c/2 c/3` links the second event from the displayed event list to the first, second and third contacts from the displayed contact list.
+**Examples:**
+* `efind ex` returns `exams` and `Examinations`
+* `efind CS Exam` returns `CS2100 Exam`, `CS2101`
+* `efind CS EXAM t/hard easy` returns `CS2100 Exam`, `CS2101` and events with tags that contain `hard` and `easy`
-### Unlinking event from multiple contacts: `eunlink`
-Removes the links between the specified event and the multiple contacts.
+### Linking an event to contacts: `elink`
-Format: `eunlink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
+Links the specified event to one or more contacts.
-* Unlinks the event at the specified `EVENT_INDEX` from the contacts at `CONTACT_INDEX`.
+**Format:** `elink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]…`
+
+* Links the event at `EVENT_INDEX` to the contact(s) at `CONTACT_INDEX`.
* `EVENT_INDEX` refers to the index number shown in the displayed event list.
* `CONTACT_INDEX` refers to the index number shown in the displayed contact list.
-* Alternatively, replace the `CONTACT_INDEX` with `*` to clear all links from the event.
:information_source: **Note:**
-`EVENT_INDEX` and `CONTACT_INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+`EVENT_INDEX` and `CONTACT_INDEX` **must be a positive integer**, e.g. 1, 2, 3,…
+
+
+**Examples:**
+* `elink 1 c/1` links the first event in the displayed event list to the first contact in the displayed contact list.
+* `elink 2 c/1 c/2 c/3` links the second event in the displayed event list to the first, second and third contact in the displayed contact list.
+
+_See Also: [Unlinking an event from contacts](#unlinking-an-event-from-contacts-eunlink)_
+
+
+### Listing all events: `elist`
+
+Shows all events in SoConnect, with all details by default.
+
+**Format:** `elist [at/] [end/] [d/] [a/] [z/] [t/]`
+
+* Names of events are always shown.
+* When no optional fields are provided, e.g. `elist` , all available details of each event will be shown.
+* When optional fields are provided, it will only show the names and the corresponding specified fields for each event.
+* You can provide more than one optional field.
+* The order of the optional fields does not matter. e.g. both `elist d/ at/` and `elist at/ d/` will only show the names, descriptions and starting times of each event.
+* Fields of an event that have no value will no appear.
+
+
:information_source: **Note:**
+
+Do not add extraneous values after each optional field you specify.
-Examples:
+**Examples:**
+* `elist` shows all events in SoConnect with all available details for each event.
+* `elist d/ at/` events in SoConnect with only their names, starting times and descriptions (if available).
+
+
+### Removing bookmark of an event: `eumark`
+
+Removes bookmark of the specified event(s).
+
+**Format:** `eumark INDEX1 [INDEX]...`
+
+![image](images/demo-screenshots/UnmarkEvents.png)
+
+* Removes bookmark of the event at `INDEX1` and places it **after** the bookmarked events section (at index 5) in the events list.
+* You may **remove bookmarks of more than one event** by specifying multiple indexes, eg `eumark 1 2`
+* `INDEX` refers to the index number shown in the displayed event list.
+
+
:information_source: **Note:**
+
+* `INDEX` **must be a positive integer**, e.g. 1, 2, 3,…
+* You must ensure that the event indexed at `INDEX` is **initially bookmarked**.
+
+
+**Examples:**
+* `eumark 1` removes the bookmark of the first event in the list (CS2103T project meeting).
+* `eumark 2 4` removes the bookmark of the second (Dance Class) and fourth (Google Interview) event in the list.
+
+_See Also: [Bookmarking an event](#bookmarking-an-event-emark)_
+
+
+### Sorting events: `esort`
+
+Sorts all events by start time and displays all upcoming or ongoing events.
+
+**Format:** `esort`
+
+
:information_source: **Note:**
+
+Events that have ended will not be shown after you execute `esort`
+
+
+
+### Unlinking an event from contacts: `eunlink`
+
+**Format:** `eunlink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]…`
+
+Unlinks the specified event and the specified contact(s).
+
+**Examples:**
* `eunlink 1 c/1` unlinks the first event in the displayed event list from the first contact in the displayed contact list.
* `eunlink 2 c/1 c/2 c/3` unlinks the second event in the displayed event list from the first, second and third contacts in the displayed contact list.
* `eunlink 3 c/*` unlinks the third event in the displayed event list from all contacts that are linked to it.
-### Clearing all events: `eclear`
+_See Also: [Linking an event to contacts](#linking-an-event-to-contacts-elink)_
-Clears all entries of all events from the event list.
-________________________________________________________________________________________________________________
+### Viewing an event: `eview`
+
+Views an event with all details fully shown.
+
+**Format:** `eview INDEX`
+
+* Views the event at the specified `INDEX`.
+* `INDEX` refers to the index number shown in the displayed event list.
+* All truncated details of the event you want to view will be expanded fully.
+
+
:information_source: **Note:**
+
+`INDEX` **must be a positive integer**. e.g. 1, 2, 3, …
+
+
+**Examples:**
+* `eview 1` shows all details of the first event in SoConnect fully.
+* `efind exam` followed by `eview 4` shows all details of the fourth event from the result of the `cfind`.
## General
-### Viewing calendar : `calendar`
+This section details all other the features and commands available in SoConnect that can enhance your SoConnect experience:
+* [Calendar Window](#calendar-window-calendar)
+* [Exiting SoConnect](#exiting-soconnect-exit)
+* [Help Window](#help-window-help)
+* [Redo a command](#redo-a-command-redo)
+* [Undo a command](#undo-a-command-undo)
-Shows a calendar of all the events. Alternatively, access using the top menu via `File -> Calendar` or press `F2`.
+### Calendar Window: `calendar`
+
+Shows a calendar of all the events.
+
+**Format:** `calendar`
+
+
:bulb: **Tip:**
+
+Alternatively, you can view the calendar using the top menu via `File -> Calendar` or press `F2`.
+
:exclamation: **Caution:**
-Any changes made in the calendar window will not be saved. Do not attempt to add new events using the calendar window. Doing so might result in a crash and your data may be lost.
+Any changes made in the calendar window will not be saved.
+Do not attempt to add new events using the calendar window.
+Doing so might result in a crash and your data may be lost.
![calendar](images/demo-screenshots/Calendar.png)
-### Undo a command : `undo`
-Restore SoConnect to its previous state from its history.
+### Exiting SoConnect: `exit`
-Format: `undo`
+Exits and Closes SoConnect.
+
+**Format:** `exit`
+
+
+### Help Window: `help`
+
+Shows a link which refers you to SoConnect User Guide.
+
+**Format:** `help`
+
+![help message](images/demo-screenshots/helpMessage.png)
-Examples:
-* `edelete 1` followed by `undo` restores the deleted event in the event list.
-* `add n/John Doe e/john@gmail.com` followed by `undo` removes the added contact from contact list.
### Redo a command: `redo`
Restores SoConnect to a previously undone state from its history.
-Format: `redo`
+**Format:** `redo`
-Examples:
+**Examples:**
* `edelete 1` followed by `undo` restores the deleted event in the event list. This followed by `redo` command will delete the event at index 1 again.
-### Viewing help : `help`
+_See Also: [Undo a command](#undo-a-command-undo)_
-Shows a message explaning how to access the help page.
-![help message](images/demo-screenshots/helpMessage.png)
+### Undo a command: `undo`
-Format: `help`
+Restore SoConnect to its previous state from its history.
-### Exiting the program : `exit`
+**Format:** `undo`
+
+**Examples:**
+* `edelete 1` followed by `undo` restores the deleted event in the event list.
+* `add n/John Doe e/john@gmail.com` followed by `undo` removes the added contact from contact list.
+* `eview 1` followed by `undo` will display the full event list.
-Closes the program.
+_See Also: [Redo a command](#redo-a-command-redo)_
-Format: `exit`
+
+--------------------------------------------------------------------------------------------------------------------
+
+## SoConnect Saved Data
### Saving the data
-SoConnect data is saved in the hard disk automatically after any command that changes the data. There is no need to save manually.
+SoConnect data is saved in the _hard disk_ automatically after any command that changes the data.
+There is no need to save manually.
### Editing the data file
-SoConnect data are saved as a JSON file `[JAR file location]/data/soconnect.json`. Advanced users are welcome to update data directly by editing that data file.
+SoConnect data are saved as a _JSON file_ `[JAR file location]/data/soconnect.json`.
+Advanced users are welcome to update data directly by editing that data file.
:exclamation: **Caution:**
-If your changes to the data file makes its format invalid, SoConnect will discard all data and start with an empty data file at the next run.
+If your changes to the data file makes its format invalid,
+SoConnect will discard all data and start with an empty data file at the next run.
--------------------------------------------------------------------------------------------------------------------
-## FAQ
+## Others
+
+### FAQ
**Q**: How do I transfer my data to another Computer?
-**A**: Install the app in the other computer and overwrite the empty data file it creates with the file that contains the data of your previous SoConnect home folder.
+**A**: Install SoConnect in the other computer and copy over the contents from your previous SoConnect JSON file to the
+empty data file SoConnect creates on the other Computer.
+
+
+#### Copying Details and Opening Links
+
+![clickable links](images/clickableLinkExample.png)
+
+**Q**: How do I copy the email address of a contact?
+**A**: You can copy any specific details of a contact or an event just by clicking on that detail!
+As shown on the image above, clicking on the `telegram handle` of `Bernice Yu` will copy her Telegram handle.
+
+**Q**: Can SoConnect automatically open a link on my browser?
+**A**: YES! You can open any links that you have included in a contact or in an event.
+
+
:bulb: **Tip:**
+
+Clickable links are underlined in blue
+
+
+Referring back to the same image, if you click on the `zoom` link saved under `Bernice Yu`,
+SoConnect will help you open the link on your browser automatically.
+
+
+#### Linked Contacts and Events
**Q**: How do I view the contacts linked to a particular event?
-**A**: Click on the particular event card in the panel containing events. Then click on the yellow boxes which are links to the contacts. The linked contacts will be displayed on the contact panel on the left.
+**A**: Click on the particular event card in the panel containing events.
+Then click on the yellow boxes which are links to the contacts.
+The linked contacts will be displayed on the contact panel on the left.
![View links of event](images/demo-screenshots/ClickLinksEvent.png)
**Q**: How do I view the events linked to a particular contact?
-**A**: Click on the particular contact card in the panel containing contacts. Then click on the yellow boxes which are links to the events. The linked events will be displayed on the event panel on the left.
+**A**: Click on the particular contact card in the panel containing contacts.
+Then click on the yellow boxes which are links to the events.
+The linked events will be displayed on the event panel on the left.
![View links of contact](images/demo-screenshots/ClickLinksContact.png)
**Q**: What is the purpose of using links?
-**A**: Links are a form of relationship between the contacts and the events saved in SoConnect. Typically, we link an event to a contact if the contact is involved as a participant of the event. For instance, you can link your professor to the lecture.
+**A**: Links are a form of relationship between the contacts and the events saved in SoConnect.
+Typically, we link an event to a contact if the contact is involved as a participant of the event.
+For instance, you can link your professor to the lecture.
+
+
+### How to start SoConnect using Command Prompt
+
+{to be added soon}
+
-**Q**: How do I copy the email address of a contact?
-**A**: Click on the contact card in the panel containing contacts. Then click on the email address you want to copy. The email address will be copied to your clipboard.
--------------------------------------------------------------------------------------------------------------------
-## Command summary
+## Command Summary
-### Managing Contacts
+**Contact Management**
Action | Format, Examples
--------|------------------
-**Add** | `cadd n/NAME e/EMAIL [p/PHONE_NUMBER] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [t/TAG]…`
e.g., `cadd n/James Ho p/22224444 e/hohohojames@u.nus.edu a/123, Clementi Rd, 1234665 t/Professor`
-**Clear** | `cclear`
-**Delete** | `cdelete INDEX1[-INDEX2]`
e.g., `cdelete 3`
e.g., `cdelete 1-5`
-**Edit** | `cedit INDEX [n/NAME] [e/EMAIL] [p/PHONE] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
e.g.,`cedit 2 n/James Lee e/jameslee@u.nus.edu p/91234567 dt/OP1_projectmate t/CS2103T_projectmate t/roommate`
e.g., `cedit 3 dt/*`
-**Find** | `cfind KEYWORD [MORE_KEYWORDS]`
e.g., `cfind James Jake`
-**List** | `clist [e/] [p/] [a/] [th/] [z/] [t/]`
e.g., `clist`
e.g., `clist e/ p/`
-
-### Managing Events
+**[Add](#adding-a-contact-cadd)** | `cadd n/NAME e/EMAIL [p/PHONE_NUMBER] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [t/TAG]…`
e.g., `cadd n/James Ho p/22224444 e/hohohojames@u.nus.edu a/123, Clementi Rd, 1234665 t/Professor`
+**[Bookmark](#bookmarking-a-contact-cmark)** | `cmark INDEX [INDEX]…`
e.g. `cmark 1 4`
+**[Clear](#clearing-all-contacts-cclear)** | `cclear`
+**[Delete](#deleting-a-contact-cdelete)** | `cdelete INDEX1[-INDEX2]`
e.g. `cdelete 3`
e.g. `cdelete 1-5`
+**[Edit](#editing-a-contact-cedit)** | `cedit INDEX [n/NAME] [e/EMAIL] [p/PHONE] [a/ADDRESS] [th/TELEGRAM_HANDLE] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
e.g.`cedit 2 n/James Lee e/jameslee@u.nus.edu p/91234567 dt/OP1_projectmate t/CS2103T_projectmate t/roommate`
e.g. `cedit 3 dt/*`
+**[Find](#finding-contacts-cfind)** | `cfind [KEYWORD]… [e/KEYWORD…] [p/KEYWORD…] [a/KEYWORD…] [th/KEYWORD…] [z/KEYWORD…] [t/KEYWORD…]`
e.g. `cfind James Jake p/12345678`
+**[List](#listing-all-contacts-clist)** | `clist [e/] [p/] [a/] [th/] [z/] [t/]`
e.g. `clist`
e.g. `clist e/ p/`
+**[Remove Bookmark](#removing-bookmark-of-a-contact-cumark)** | `cumark INDEX [INDEX]…`
e.g. `cumark 1 3 4`
+**[View](#viewing-a-contact-cview)** | `cview INDEX`
e.g. `cview 3`
+
+**Event Management**
Action | Format, Examples
--------|------------------
-**Add** | `eadd n/NAME at/START_TIME [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [t/TAG]… `
e.g., `eadd n/Summer Party at/12-12-2021 15:12 a/123, Clementi Rd, 1234665 t/fun`
-**Clear** | `eclear`
-**Delete** | `edelete INDEX`
e.g., `edelete 3`
e.g., `edelete 1-5`
-**Edit** | `eedit INDEX [n/NAME] [at/START_TIME] [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
e.g.,`eedit 2 n/CS2103T Exam dt/Easy_exams t/Hard_exams`
e.g., `eedit 3 dt/*`
-**Find** | `efind KEYWORD [MORE_KEYWORDS]`
e.g., `efind CS2103T Exams`
-**Link** | `elink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
e.g., `elink 1 c/3 c/1`
-**List** | `elist [at/] [end/] [d/] [a/] [z/] [t/]`
e.g., `elist`
e.g., `elist at/ d/`
-**Sort** | `esort`
-**Unlink** | `eunlink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
e.g., `eunlink 2 c/1 c/2`
e.g., `eunlink 3 c/*`
-
-________________________________________________________________________________________________________________
-
-### General
+**[Add](#adding-an-event-eadd)** | `eadd n/NAME at/START_TIME [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [t/TAG]… `
e.g., `eadd n/Summer Party at/12-12-2021 15:12 a/123, Clementi Rd, 1234665 t/fun`
+**[Bookmark](#bookmarking-an-event-emark)** | `emark INDEX [INDEX]…`
e.g. `emark 1 4`
+**[Clear](#clearing-all-events-eclear)** | `eclear`
+**[Delete](#deleting-an-event-edelete)** | `edelete INDEX`
e.g., `edelete 3`
e.g., `edelete 1-5`
+**[Edit](#editing-an-event-eedit)** | `eedit INDEX [n/NAME] [at/START_TIME] [end/END_TIME] [d/DESCRIPTION] [a/ADDRESS] [z/ZOOM] [dt/TAG_DELETED]… [t/TAG_ADDED]…`
e.g.,`eedit 2 n/CS2103T Exam dt/Easy_exams t/Hard_exams`
e.g., `eedit 3 dt/*`
+**[Find](#finding-events-efind)** | `efind [KEYWORDS]… [at/KEYWORD…] [end/KEYWORD…] [d/KEYWORD…] [a/KEYWORD…] [z/KEYWORD…] [t/KEYWORD…]`
e.g., `efind CS2103T t/hard`
+**[Link](#linking-an-event-to-contacts-elink)** | `elink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
`elink 2 c/1 c/2 c/3`
+**[List](#listing-all-events-elist)** | `elist [at/] [end/] [d/] [a/] [z/] [t/]`
e.g., `elist`
e.g., `elist at/ d/`
+**[Remove Bookmark](#removing-bookmark-of-an-event-eumark)** | `eumark INDEX [INDEX]…`
e.g. `eumark 1 3 4`
+**[Sort](#sorting-events-esort)** | `esort`
+**[Unlink](#unlinking-an-event-from-contacts-eunlink)** | `eunlink EVENT_INDEX c/CONTACT_INDEX [c/CONTACT_INDEX]...`
e.g., `eunlink 2 c/1 c/2`
e.g., `eunlink 3 c/*`
+**[View](#viewing-an-event-eview)** | `eview INDEX`
e.g. `eview 1`
+
+**General**
Action | Format, Examples
--------|------------------
-**Undo** | `undo`
-**Redo** | `redo`
-**Calendar** | `calendar`
-**Help** | `help`
-**Exit** | `exit`
-
+**[Calendar](#calendar-window-calendar)** | `calendar`
+**[Exit](#exiting-soconnect-exit)** | `exit`
+**[Help](#help-window-help)** | `help`
+**[Redo](#redo-a-command-redo)** | `redo`
+**[Undo](#undo-a-command-undo)** | `undo`
+________________________________________________________________________________________________________________
+## Glossary
+{to be added}
diff --git a/docs/images/Ui.png b/docs/images/Ui.png
index 5272ce0061c..ba5ba69bae8 100644
Binary files a/docs/images/Ui.png and b/docs/images/Ui.png differ
diff --git a/docs/images/clickableLinkExample.png b/docs/images/clickableLinkExample.png
new file mode 100644
index 00000000000..b10e1925c5e
Binary files /dev/null and b/docs/images/clickableLinkExample.png differ
diff --git a/docs/images/demo-screenshots/BookmarkContact.png b/docs/images/demo-screenshots/BookmarkContact.png
new file mode 100644
index 00000000000..03f8f8a2a47
Binary files /dev/null and b/docs/images/demo-screenshots/BookmarkContact.png differ
diff --git a/docs/images/demo-screenshots/BookmarkEvents.png b/docs/images/demo-screenshots/BookmarkEvents.png
new file mode 100644
index 00000000000..8f39a6db31e
Binary files /dev/null and b/docs/images/demo-screenshots/BookmarkEvents.png differ
diff --git a/docs/images/demo-screenshots/UnmarkContacts.png b/docs/images/demo-screenshots/UnmarkContacts.png
new file mode 100644
index 00000000000..e4d8ca26fe0
Binary files /dev/null and b/docs/images/demo-screenshots/UnmarkContacts.png differ
diff --git a/docs/images/demo-screenshots/UnmarkEvents.png b/docs/images/demo-screenshots/UnmarkEvents.png
new file mode 100644
index 00000000000..9bbbcb9dd08
Binary files /dev/null and b/docs/images/demo-screenshots/UnmarkEvents.png differ
diff --git a/docs/images/demo-screenshots/helpMessage.png b/docs/images/demo-screenshots/helpMessage.png
index b1f70470137..b8f67acd174 100644
Binary files a/docs/images/demo-screenshots/helpMessage.png and b/docs/images/demo-screenshots/helpMessage.png differ
diff --git a/src/main/java/seedu/address/logic/commands/contact/CFindCommand.java b/src/main/java/seedu/address/logic/commands/contact/CFindCommand.java
index 394ed0e83f1..74161d03002 100644
--- a/src/main/java/seedu/address/logic/commands/contact/CFindCommand.java
+++ b/src/main/java/seedu/address/logic/commands/contact/CFindCommand.java
@@ -21,18 +21,21 @@
public class CFindCommand extends Command {
public static final String COMMAND_WORD = "cfind";
+ public static final String PARAMETERS = "[KEYWORD]… "
+ + "[" + PREFIX_PHONE + "KEYWORD…] "
+ + "[" + PREFIX_EMAIL + "KEYWORD…] "
+ + "[" + PREFIX_ADDRESS + "KEYWORD…] "
+ + "[" + PREFIX_TELEGRAM + "KEYWORD…] "
+ + "[" + PREFIX_ZOOM + "KEYWORD…] "
+ + "[" + PREFIX_TAG + "KEYWORD…]\n";
+ public static final String SYNTAX = COMMAND_WORD + " " + PARAMETERS;
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all contacts whose fields contains any of the "
+ "given keywords.\n"
- + "At least one field must be present, name keywords must follow directly after the command word\n"
- + "Parameters: [NAME_KEYWORD] "
- + "[" + PREFIX_PHONE + "PHONE_KEYWORDS] "
- + "[" + PREFIX_EMAIL + "EMAIL_KEYWORDS] "
- + "[" + PREFIX_ADDRESS + "ADDRESS_KEYWORDS] "
- + "[" + PREFIX_TELEGRAM + "TELEGRAM_KEYWORDS] "
- + "[" + PREFIX_ZOOM + "ZOOM_KEYWORDS] "
- + "[" + PREFIX_TAG + "TAG_KEYWORDS]\n"
+ + "At least one keyword must be present. "
+ + "For name search, keywords must follow directly after the command word\n"
+ + "Parameters: " + PARAMETERS
+ "Example: " + COMMAND_WORD + " alice bob charlie "
+ PREFIX_PHONE + "91234567 "
+ PREFIX_EMAIL + "johndoe@example.com";
diff --git a/src/main/java/seedu/address/logic/commands/event/EFindCommand.java b/src/main/java/seedu/address/logic/commands/event/EFindCommand.java
index aa2f8567833..e141b7d43ef 100644
--- a/src/main/java/seedu/address/logic/commands/event/EFindCommand.java
+++ b/src/main/java/seedu/address/logic/commands/event/EFindCommand.java
@@ -22,17 +22,20 @@
public class EFindCommand extends Command {
public static final String COMMAND_WORD = "efind";
+ public static final String PARAMETERS = "[KEYWORD]… "
+ + "[" + PREFIX_START_TIME + "KEYWORD…] "
+ + "[" + PREFIX_END_TIME + "KEYWORD…] "
+ + "[" + PREFIX_ADDRESS + "KEYWORD…] "
+ + "[" + PREFIX_DESCRIPTION + "KEYWORD…] "
+ + "[" + PREFIX_ZOOM + "KEYWORD…] "
+ + "[" + PREFIX_TAG + "KEYWORD…]\n";
+ public static final String SYNTAX = COMMAND_WORD + " " + PARAMETERS;
public static final String MESSAGE_USAGE = COMMAND_WORD + ": Finds all events whose fields contains any of the "
+ "given keywords.\n"
- + "At least one field must be present, name keywords must follow directly after the command word\n"
- + "Parameters: [NAME_KEYWORD] "
- + "[" + PREFIX_START_TIME + "START_TIME_KEYWORDS] "
- + "[" + PREFIX_END_TIME + "END_TIME_KEYWORDS] "
- + "[" + PREFIX_ADDRESS + "ADDRESS_KEYWORDS] "
- + "[" + PREFIX_DESCRIPTION + "DESCRIPTION_KEYWORDS] "
- + "[" + PREFIX_ZOOM + "ZOOM_KEYWORDS] "
- + "[" + PREFIX_TAG + "TAG_KEYWORDS]\n"
+ + "At least one keyword must be present. "
+ + "For name search, keywords must follow directly after the command word\n"
+ + "Parameters: " + PARAMETERS
+ "Example: " + COMMAND_WORD + " cs 2103t "
+ PREFIX_START_TIME + "2020-12-01 "
+ PREFIX_EMAIL + "johndoe@example.com";