Recent Changes - Search:

textadept

PmWiki

Context Menu Buffer List Patch

A small patch that replaces the context menu with a list of buffers.

Save the following patch as context_menu_buffer_list.patch and run the patch against core/ext/menu.lua.

--- menu.lua	2010-04-01 07:27:22.000000000 +0200
+++ menu.lua	2010-04-08 21:54:47.761540262 +0200
@@ -11,6 +11,7 @@
 local t = textadept
 local l = locale
 local gtkmenu = textadept.gtkmenu
+local context_mbl = {} -- Context menu buffer list

 local SEPARATOR = 'separator'
 local ID = {
@@ -131,6 +132,8 @@
   MANUAL = 901,
   LUADOC = 902,
   ABOUT = 903,
+  -- Buffers (context menu) (will be generated dynamically)
+  BUFFER_START = 1000,
 }


@@ -504,6 +507,10 @@
       active_table =
         { set_lexer, lexer_menu[menu_id - ID.LEXER_START + 1][1] }
     end
+    if menu_id >= ID.BUFFER_START and menu_id < ID.BUFFER_START + 99 then
+      active_table =
+        { 'goto_buffer', v, context_mbl[menu_id], true }
+    end
     local f, args
     if active_table and #active_table > 0 then
       local func = active_table[1]
@@ -527,14 +534,34 @@
   end)

 -- Right-click context menu.
-t.context_menu = gtkmenu {
-  { l.MENU_EDIT_UNDO, ID.UNDO },
-  { l.MENU_EDIT_REDO, ID.REDO },
-  { SEPARATOR, ID.SEPARATOR },
-  { l.MENU_EDIT_CUT, ID.CUT },
-  { l.MENU_EDIT_COPY, ID.COPY },
-  { l.MENU_EDIT_PASTE, ID.PASTE },
-  { l.MENU_EDIT_DELETE, ID.DELETE },
-  { SEPARATOR, ID.SEPARATOR },
-  { l.MENU_EDIT_SELECT_ALL, ID.SELECT_ALL }
-}
+
+-- t.context_menu = gtkmenu {
+--   { l.MENU_EDIT_UNDO, ID.UNDO },
+--   { l.MENU_EDIT_REDO, ID.REDO },
+--   { SEPARATOR, ID.SEPARATOR },
+--   { l.MENU_EDIT_CUT, ID.CUT },
+--   { l.MENU_EDIT_COPY, ID.COPY },
+--   { l.MENU_EDIT_PASTE, ID.PASTE },
+--   { l.MENU_EDIT_DELETE, ID.DELETE },
+--   { SEPARATOR, ID.SEPARATOR },
+--   { l.MENU_EDIT_SELECT_ALL, ID.SELECT_ALL }
+-- }
+
+t.context_menu = gtkmenu {}
+
+function update_context_menu()
+  t.context_menu = {}
+  for _, buffer in ipairs(textadept.buffers) do
+    local filename = buffer.filename or buffer._type or locale.UNTITLED
+    local table_index = #t.context_menu + 1
+    -- A list of buffer/table index
+    context_mbl[ID.BUFFER_START + table_index] = table_index
+    -- The actual menu item
+    t.context_menu[table_index] = { filename:match('[^/\\]+$'), ID.BUFFER_START + table_index  }
+  end
+  t.context_menu = gtkmenu(t.context_menu)
+end
+
+textadept.events.add_handler('buffer_new', update_context_menu)
+textadept.events.add_handler('file_opened', update_context_menu)
+textadept.events.add_handler('buffer_deleted', update_context_menu)
Edit - History - Print - Recent Changes - Search
Page last modified on April 11, 2010, at 10:24 PM