Scite Buffer Switch

lua-users home
wiki

When navigating between many open buffers, it's often desirable to move back to the most recently accessed buffers. This is the default mode of editors such as Visual Studio, for instance. (There was apparently a buffers.zorder.switching=1 mode but it was unstable). This script presents a drop-down list of opened buffers in recently-used order. The method is to watch the OnOpen and OnSwitchFile events.

This will bind Ctrl+K to the function do_buffer_list.


command.name.4.*=Switch Buffers

command.4.*=do_buffer_list

command.subsystem.4.*=3

command.mode.4.*=savebefore:no

command.shortcut.4.*=Ctrl+K

Put this in your startup script, or set ext.lua.startup.script.

--switch_buffers.lua

--drops down a list of buffers, in recently-used order



local buffers = {}

local append = table.insert



local function buffer_switch(f)

--- swop the new current buffer with the last one!

  local idx  

  for i,file in ipairs(buffers) do

     if file == f then  idx = i; break end

  end

  if idx then 

     table.remove(buffers,idx)

     table.insert(buffers,1,f)

  else append(buffers,f)

  end

end



function OnOpen(f)

  buffer_switch(f)

end



function OnSwitchFile(f)

  buffer_switch(f)

end



function do_buffer_list()

  local s = ''

  local sep = ';'

  local n = table.getn(buffers)

  for i = 2,n-1 do

      s = s..buffers[i]..sep

  end

  s = s..buffers[n]

  _UserListSelection = fn

  editor.AutoCSeparator = string.byte(sep)

  editor:UserListShow(12,s)

  editor.AutoCSeparator = string.byte(' ')

end



function OnUserListSelection(t,str)

  if t == 12 then 

     scite.Open(str)

     return true

  else

     return false

  end

end




RecentChanges · preferences
edit · history
Last edited November 15, 2012 6:27 am GMT (diff)