-
-
Notifications
You must be signed in to change notification settings - Fork 95
New file menu item - Reopen Closed Tab #543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
016fc53
862310d
81c3bc8
b180a90
6d47e7b
cfad8a7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3075,7 +3075,7 @@ | |
;; create-new-tab : -> void | ||
;; creates a new tab and updates the GUI for that new tab | ||
(define/public create-new-tab | ||
(lambda ([filename #f]) | ||
(lambda ([filename #f] [start-pos 0] [end-pos 'same]) | ||
(let* ([defs (new (drracket:get/extend:get-definitions-text))] | ||
[tab-count (length tabs)] | ||
[new-tab (new (drracket:get/extend:get-tab) | ||
|
@@ -3086,6 +3086,7 @@ | |
(ints-shown? (not filename)))] | ||
[ints (make-object (drracket:get/extend:get-interactions-text) new-tab)]) | ||
(send new-tab set-ints ints) | ||
(send (send new-tab get-defs) set-position start-pos end-pos) | ||
(set! tabs (append tabs (list new-tab))) | ||
(send tabs-panel append | ||
(gui-utils:trim-string | ||
|
@@ -3248,6 +3249,7 @@ | |
(send tab set-i (- (send tab get-i) 1))) | ||
(set! tabs (remq tab-to-close tabs)) | ||
(send tabs-panel delete (send tab-to-close get-i)) | ||
(update-closed-tabs tab) | ||
(update-menu-bindings) | ||
(cond | ||
[(eq? tab-to-close current-tab) | ||
|
@@ -3265,9 +3267,29 @@ | |
#t] | ||
[else #f])) | ||
|
||
(define/public (open-in-new-tab filename) | ||
(create-new-tab filename)) | ||
|
||
(define/public (open-in-new-tab filename [start-pos 0] [end-pos 0]) | ||
(create-new-tab filename start-pos end-pos)) | ||
|
||
|
||
;; reopen-closed-tab : -> void | ||
;; Opens previously closed tabs. If no tabs were closed in current session, files from | ||
;; previous sessions are opened. | ||
(define/public reopen-closed-tab | ||
(lambda () | ||
(define closed-tabs (preferences:get 'drracket:recently-closed-tabs)) | ||
(define file-to-open | ||
(for/or ([file (in-list closed-tabs)]) | ||
(define filename (first file)) | ||
(and (file-exists? filename) | ||
(set! closed-tabs (cdr closed-tabs)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does this work properly? Maybe better to remove |
||
filename))) | ||
(when file-to-open | ||
(let ((tab (find-matching-tab file-to-open))) | ||
(if tab | ||
(change-to-tab tab) | ||
(open-in-new-tab file-to-open)))) | ||
(preferences:set 'drracket:recently-closed-tabs closed-tabs) | ||
#f)) | ||
|
||
(define/public (get-tab-count) (length tabs)) | ||
(define/public (change-to-nth-tab n) | ||
(unless (< n (length tabs)) | ||
|
@@ -3397,6 +3419,32 @@ | |
(update-close-tab-menu-item-shortcut close-tab-menu-item)) | ||
(update-close-menu-item-shortcut (file-menu:get-close-item))) | ||
|
||
;; truncate-list : (listof X) -> (listof X)[< new-len] | ||
;; takes a list and returns the | ||
;; front of the list, up to 'new-len' number of items | ||
(define/private (truncate-list l new-len) | ||
(define len (length l)) | ||
(cond | ||
[(<= len new-len) l] | ||
[else (drop-right l (- len new-len))])) | ||
|
||
(define/private (update-closed-tabs tab) | ||
(define tab-filename (send (send tab get-defs) get-filename)) | ||
(when tab-filename | ||
(let* ([old-closed-tabs (preferences:get 'drracket:recently-closed-tabs)] | ||
[max-list-len (preferences:get 'drracket:recently-closed-tabs-max-count)] | ||
[defs (send tab get-defs)] | ||
[start-pos (send defs get-start-position)] | ||
[end-pos (send defs get-end-position)] | ||
[new-ent (list tab-filename start-pos end-pos)]) | ||
(define new-closed-tabs (cons new-ent | ||
(remove* (list new-ent) | ||
old-closed-tabs | ||
(λ (l1 l2) | ||
(pathname-equal? (car l1) (car l2)))))) | ||
(set! new-closed-tabs (truncate-list new-closed-tabs max-list-len)) | ||
(preferences:set 'drracket:recently-closed-tabs new-closed-tabs)))) | ||
|
||
(define/private (update-close-tab-menu-item-shortcut item) | ||
(define just-one? (and (pair? tabs) (null? (cdr tabs)))) | ||
(send item set-label (if just-one? | ||
|
@@ -3932,6 +3980,14 @@ | |
(let-values ([(base name dir?) (split-path editing-path)]) | ||
base)))) | ||
(when pth (handler:edit-file pth)))]) | ||
(new menu:can-restore-menu-item% | ||
(label (string-constant reopen-closed-tab)) | ||
(shortcut #\t) | ||
(shortcut-prefix (cons 'shift (get-default-shortcut-prefix))) | ||
(parent file-menu) | ||
(callback | ||
(λ (x y) | ||
(reopen-closed-tab)))) | ||
(super file-menu:between-open-and-revert file-menu) | ||
(make-object separator-menu-item% file-menu))] | ||
(define close-tab-menu-item #f) | ||
|
@@ -4055,7 +4111,7 @@ | |
(mk-menu-item (λ (ed) (send ed get-spell-check-text)) | ||
(λ (ed new-val) (send ed set-spell-check-text new-val)) | ||
'framework:spell-check-text? | ||
#\t | ||
#f | ||
(string-constant spell-check-scribble-text)) | ||
|
||
(new menu:can-restore-menu-item% | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think keyword arguments here is better, eg: