@@ -157,13 +157,7 @@ def create_menu(self):
157157 edit_menu .add_command (label = "查找" , command = self .show_search , accelerator = "Ctrl+F" )
158158 edit_menu .add_command (label = "替换" , command = self .show_replace , accelerator = "Ctrl+H" )
159159
160- view_menu = tk .Menu (menubar , tearoff = 0 )
161- menubar .add_cascade (label = "视图" , menu = view_menu )
162- view_menu .add_command (label = "预览模式" , command = self .toggle_preview )
163- view_menu .add_command (label = "编辑/分栏/预览切换" , command = self .cycle_view_mode )
164- view_menu .add_command (label = "笔记任务清单" , command = self .show_note_tasks )
165- view_menu .add_command (label = "历史版本" , command = self .show_history )
166- view_menu .add_command (label = "全屏" , accelerator = "F11" )
160+ self ._build_view_menu (menubar )
167161
168162 tools_menu = tk .Menu (menubar , tearoff = 0 )
169163 menubar .add_cascade (label = "工具" , menu = tools_menu )
@@ -189,6 +183,16 @@ def create_menu(self):
189183
190184 self ._bind_shortcuts ()
191185
186+ def _build_view_menu (self , menubar ):
187+ view_menu = tk .Menu (menubar , tearoff = 0 )
188+ menubar .add_cascade (label = "视图" , menu = view_menu )
189+ view_menu .add_command (label = "预览模式" , command = self .toggle_preview )
190+ view_menu .add_command (label = "编辑/分栏/预览切换" , command = self .cycle_view_mode )
191+ view_menu .add_command (label = "笔记任务清单" , command = self .show_note_tasks )
192+ view_menu .add_command (label = "反向链接" , command = self .show_backlinks )
193+ view_menu .add_command (label = "历史版本" , command = self .show_history )
194+ view_menu .add_command (label = "全屏" , accelerator = "F11" )
195+
192196 def _bind_shortcuts (self ):
193197 self .root .bind ('<Control-n>' , lambda e : self .create_note ())
194198 self .root .bind ('<Control-s>' , lambda e : self .save_current_note ())
@@ -568,6 +572,8 @@ def _persist_current_note(self):
568572
569573 # Incremental, deferred-flush update instead of a full remove+add+rewrite.
570574 self .search_engine .update_document (self .current_note .id , self .current_note )
575+ # Resolve [[wikilinks]] to real note links on save.
576+ self .note_manager .sync_wikilinks (self .current_note .id )
571577
572578 self .is_modified = False
573579 self .load_notes_list ()
@@ -878,6 +884,29 @@ def save():
878884 tk .Button (d , text = "保存" , command = save ).grid (row = 4 , column = 0 , columnspan = 2 , pady = 10 )
879885 title_e .focus ()
880886
887+ def show_backlinks (self ):
888+ if not self .current_note :
889+ messagebox .showwarning ("反向链接" , "请先选择一篇笔记" )
890+ return
891+ backlinks = self .note_manager .get_backlinks (self .current_note .id )
892+ win = tk .Toplevel (self .root )
893+ win .title (f"反向链接 - { self .current_note .title } " )
894+ win .geometry ("360x320" )
895+ if not backlinks :
896+ tk .Label (win , text = "没有其它笔记链接到本笔记" ).pack (padx = 12 , pady = 12 )
897+ return
898+ listbox = tk .Listbox (win )
899+ for n in backlinks :
900+ listbox .insert (tk .END , n .title )
901+ listbox .pack (fill = 'both' , expand = True , padx = 8 , pady = 8 )
902+ ids = [n .id for n in backlinks ]
903+
904+ def open_sel (_e = None ):
905+ sel = listbox .curselection ()
906+ if sel :
907+ self .load_note (ids [sel [0 ]])
908+ listbox .bind ('<Double-Button-1>' , open_sel )
909+
881910 def show_note_tasks (self ):
882911 if not self .current_note :
883912 messagebox .showwarning ("任务清单" , "请先选择一篇笔记" )
0 commit comments