More to read and to do.

git-svn-id: http://macvim.googlecode.com/svn/trunk@51 96c4425d-ca35-0410-94e5-3396d5c13a8f
This commit is contained in:
Bjorn Winckler
2007-08-01 07:55:21 +00:00
parent 5a32d86fba
commit b6ec24bf15
2 changed files with 56 additions and 32 deletions
+35 -14
View File
@@ -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:
+21 -18
View File
@@ -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,