From b6ec24bf15bc13b9800f364576e09e07572484d7 Mon Sep 17 00:00:00 2001 From: Bjorn Winckler Date: Wed, 1 Aug 2007 07:55:21 +0000 Subject: [PATCH] More to read and to do. git-svn-id: http://macvim.googlecode.com/svn/trunk@51 96c4425d-ca35-0410-94e5-3396d5c13a8f --- README | 49 +++++++++++++++++++++++++++++++++++-------------- TODO | 39 +++++++++++++++++++++------------------ 2 files changed, 56 insertions(+), 32 deletions(-) diff --git a/README b/README index 3cc2a23ba5..27b18e40ba 100644 --- a/README +++ b/README @@ -1,12 +1,9 @@ Compiling: - To build the project: - + open terminal, directory vimXX/src: type 'make' - this builds the Vim executable - + open MacVim.xcodeproj, choose 'Release' on pull-down menu 'Active Build - Configuration', click Build - this builds the PSMTabBarFramework, then MacVim.app (which can be found in - MacVim/build/Release) + + patch vim7 src with MacVim patch + + make vim7 src with --enable-gui=macvim + + build MacVim.xcodeproj - To install: + copy MacVim.app to /Applications (or anywhere you want it) + in ~/.profile add this line: @@ -18,7 +15,8 @@ Compiling: + in terminal mode of Vim, type :gui and MacVim will start - Technical notes: + to build a universal binary, the compiler AND linker needs the flags - '-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386' + '-isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc -arch i386'; also, + make needs argument --with-mac-arch=both + vim runtime files are copied to 'MacVim.app/Contents/Resources/vim/runtime/' @@ -58,26 +56,49 @@ Weirdness: - The MMVimController is added to the NSEventTrackingRunLoopMode, otherwise updates from Vim would not reach the MMVimController while the user resizes the window using the mouse. +- It seems that (oneway void) DO messages can arrive when another such message + is being processed. For this reason, no input is sent to Vim whilst in + processCommandQueue:. Instead, messages are queued and sent when + processCommandQueue: has finished. Otherwise the invariant that all Vim + messages must appear in the same order they were issued will be violated. +- Text storage dimensions are not ever directly modified, instead a message is + sent to Vim asking it to change the "shell size". Otherwise, a message + asking Vim to change the shell size might get lost and Vim and MacVim will + have inconsistent states. +- gui_mch_browse() is a blocking call, but you can't put up dialogs in Cocoa + which block until the user dismisses them (it uses callbacks). This + complicates the browsing somewhat. Design decisions: - Output is queued and sent to the MMVimController only when [MMBackend flushQueue] is called in order to minimize the amount of - messages sent back and forth between the task and gui. (This does not apply - to all messages sent to the gui though.) + messages sent back and forth between the task and gui. Also, this makes sure + that commands reach MacVim in the same order they were issued by Vim. - Drawing commands are stored in a buffer (drawData) and put on the output queue whenever [MMBackend flush] is called. This buffer might no longer be needed now that there is a general output queue. However, the existing code works, so why change it? -- The gui listens for tasks on a named port whose name is derived from - CFBundleIdentifier (which is defined inside Info.plist of the app bundle). - In order to run two different copies of MacVim at the same time, they need to - have differing bundle identifiers; otherwise one copy will not be able to - create the named listening port and all tasks will connect to the first copy. +- [obsolete] The gui listens for tasks on a named port whose name is derived + from CFBundleIdentifier (which is defined inside Info.plist of the app + bundle). In order to run two different copies of MacVim at the same time, + they need to have differing bundle identifiers; otherwise one copy will not + be able to create the named listening port and all tasks will connect to the + first copy. +- The gui creates a named NSConnection which vends the MMAppController object. - All tabs share one text view and its associated text storage. There used to be one text view per tab, but this only complicated the code since Vim has no concept of different views (as in NSView). +- Vim holds the actual state. MacVim should never change Vim related states + directly, instead it must ask Vim to change the state and wait for Vim to + reply with an actual state change command. +- If MacVim wants to change the state of Vim it must go through + processInput:data:, this is an asynchronous call. +- MacVim can query state information synchronously by adding a suitable message + to MMBackendProtocol, however this must not change the state of Vim! +- If MacVim or Vim dies, the NSConnection is invalidated and connectionDidDie: + is invoked. Keyboard stuff: diff --git a/TODO b/TODO index 0ef94d7bb8..d36b8a0776 100644 --- a/TODO +++ b/TODO @@ -1,23 +1,7 @@ Active: -- application:openFiles: should open in tabs in current window instead of in a - new window -- don't clear the text storage on setMaxRows:: so that display does not go - blank when dragging to resize -- zoom&resize broken -- toolbar drawing bug +- drag and drop inside view (FEAT_GUI_DND, gui_handle_drop()) - offset text away from left edge -- need E??? numbers for vim errors -- tab-completion for :action command -- should ignore action message if is called too often (e.g. in addNewTab:) -- proper font handling -- font selection dialog (:set gfn=*) -- check for memory leaks -- startup is a bit flakey (up until openWindowWithRows:columns:) -- i8n -- services menu -- gui dialogs (FEAT_GUI_DIALOG) -- find/replace toolbar item (FIND_REPLACE_DIALOG) - main menu - menu key equivalents - add menu options with key equiv: @@ -25,6 +9,19 @@ Active: Cmd+z/Z undo/redo, Cmd+o open, Cmd+w/W close tab/window, Cmd+Option+T special characters, etc. +- application:openFiles: should open in tabs in current window instead of in a + new window, only if user default is set +- toolbar drawing bug +- need E??? numbers for vim errors +- tab-completion for :action command? +- should ignore action message if is called too often (e.g. in addNewTab:) +- proper font handling +- font selection dialog (:set gfn=*) +- check for memory leaks +- i8n +- services menu +- gui dialogs (FEAT_GUI_DIALOG) +- find/replace toolbar item (FIND_REPLACE_DIALOG) - popup menus - encoding -- convert strings from vim to utf-8 - change building procedure so that the Makefile compiles and links VimTask and @@ -39,7 +36,6 @@ Active: (this will lead to a crash) - wide characters are badly supported: they render as too wide - update speed whilst resizing with mouse is excruciatingly slow -- drag and drop inside view (FEAT_GUI_DND, gui_handle_drop()) - window count should be typeset nicely in tab - put marked text in status line (?) - track pad scrolling is jerky @@ -62,6 +58,13 @@ Active: Pending: +- startup is a bit flakey (up until openWindowWithRows:columns:) +- background color of text view doesn't get set if :colorscheme is in .gvimrc, + since textView=nil when setDefaultColorsBackground:foreground: is called +- resize window on font change +- don't clear the text storage on setMaxRows:: so that display does not go + blank when dragging to resize +- zoom&resize broken - add user default for min/max tab size - :colorscheme elflord, :set lines+=3 --> colors are not updated properly - use DO to communicate between GUI and Vim (only for two-way communication,